diff --git a/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs
index 1aadb5ad13018291a9b2400db2c3d144431c5107..b73e64854740a3a31821eb9426fb4af0341e0a54 100644
--- a/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs
+++ b/VectoCommon/VectoCommon/Utils/DoubleExtensionMethods.cs
@@ -268,6 +268,20 @@ namespace TUGraz.VectoCommon.Utils
 			decimals = decimals ?? 2;
 			return self.ToString("F" + decimals.Value);
 		}
+
+		//[DebuggerStepThrough]
+		[MethodImpl(MethodImplOptions.AggressiveInlining)]
+		public static string ToMinSignificantDigits(this double self, uint? significant = null, uint? decimals = null)
+		{
+			significant = significant ?? 3;
+			decimals = decimals ?? 1;
+			var scale = Math.Ceiling(Math.Log10(Math.Abs(self)));
+
+			if (double.IsInfinity(scale) || double.IsNaN(scale))
+				return self.ToString("F" + decimals.Value);
+
+			return self.ToString("F" + Math.Max(significant.Value - scale, decimals.Value));
+		}
 	}
 
 	public static class FloatExtensionMethods
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
index f13905e10b14f272e317d0e2c5bae3d2e34b1d66..2c3f417a6220e42bcc2f4c20277904e3cab5662a 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs
@@ -155,43 +155,44 @@ namespace TUGraz.VectoCore.OutputData.XML
 			var retVal = new List<XElement>();
 			//FC
 			retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "g/km"),
-				(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).ToXMLFormat(1)));
+				(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value()
+					.ToMinSignificantDigits(3, 1)));
 			retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "g/t-km"),
 				(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter /
-				result.Payload.ConvertTo().Ton).ToXMLFormat(1)));
+				result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)));
 			retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "g/m³-km"),
-				(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume)
-					.ToXMLFormat(1)));
+				(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume).Value()
+					.ToMinSignificantDigits(3, 1)));
 			if (fullOutput) {
 				retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "MJ/km"),
-					(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / 1e6)
-						.ToXMLFormat(1)));
+					(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / 1e6).Value().ToMinSignificantDigits(3, 1)));
 				retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "MJ/t-km"),
 					(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.Payload.ConvertTo().Ton / 1e6)
-						.ToXMLFormat(1)));
+						.Value().ToMinSignificantDigits(3, 1)));
 				retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "MJ/m³-km"),
-					(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume / 1e6).ToXMLFormat(1)));
+					(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume / 1e6).Value()
+						.ToMinSignificantDigits(3, 1)));
 			}
 			if (fuel.FuelDensity != null) {
 				retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "l/100km"),
 					(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter * 100)
-						.ToXMLFormat(1)));
+						.Value().ToMinSignificantDigits(3, 1)));
 				retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "l/t-km"),
 					(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter /
-					result.Payload.ConvertTo().Ton).ToXMLFormat(1)));
+					result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)));
 				retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "l/m³-km"),
 					(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter /
-					result.CargoVolume).ToXMLFormat(1)));
+					result.CargoVolume).Value().ToMinSignificantDigits(3, 1)));
 			}
 			//CO2
 			retVal.Add(new XElement(tns + "CO2", new XAttribute("unit", "g/km"),
-				(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).ToXMLFormat(1)));
+				(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value().ToMinSignificantDigits(3, 1)));
 			retVal.Add(new XElement(tns + "CO2", new XAttribute("unit", "g/t-km"),
 				(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter /
-				result.Payload.ConvertTo().Ton).ToXMLFormat(1)));
+				result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)));
 			retVal.Add(new XElement(tns + "CO2", new XAttribute("unit", "g/m³-km"),
-				(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume)
-					.ToXMLFormat(1)));
+				(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume).Value()
+					.ToMinSignificantDigits(3, 1)));
 
 			return retVal;
 		}
diff --git a/VectoCore/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs b/VectoCore/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs
index cd1502d53ee8f9a1749c7c9b9b067ba795d39486..2258319d5ea7aa5069f88c49a62fbd95ee7144f0 100644
--- a/VectoCore/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs
+++ b/VectoCore/VectoCoreTest/Utils/DoubleExtensionMethodTest.cs
@@ -103,5 +103,27 @@ namespace TUGraz.VectoCore.Tests.Utils
 			Assert.IsTrue(0.999.IsSmallerOrEqual(1.0));
 			Assert.IsTrue(0.998.IsSmallerOrEqual(1.0));
 		}
+
+		[TestMethod]
+		public void TestStringFormatting()
+		{
+			Assert.AreEqual("0.452", 0.452345.ToMinSignificantDigits(3, 1));
+			Assert.AreEqual("4.52", 4.52345.ToMinSignificantDigits(3, 1));
+			Assert.AreEqual("45.2", 45.2345.ToMinSignificantDigits(3, 1));
+
+			Assert.AreEqual("0.0452", 0.0452345.ToMinSignificantDigits(3, 1));
+			Assert.AreEqual("0.00452", 0.00452345.ToMinSignificantDigits(3, 1));
+
+
+			Assert.AreEqual("-0.452", (-0.452345).ToMinSignificantDigits(3, 1));
+			Assert.AreEqual("-4.52", (-4.52345).ToMinSignificantDigits(3, 1));
+			Assert.AreEqual("-45.2", (-45.2345).ToMinSignificantDigits(3, 1));
+
+			Assert.AreEqual("-0.0452", (-0.0452345).ToMinSignificantDigits(3, 1));
+			Assert.AreEqual("-0.00452", (-0.00452345).ToMinSignificantDigits(3, 1));
+
+			Assert.AreEqual("0.0", 0.0.ToMinSignificantDigits(3, 1));
+			//Assert.AreEqual("45.2", 45.2345.ToMinSignificantDigits(3, 1));
+		}
 	}
 }
\ No newline at end of file