diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs
index a2e5377041695b1144c6c21788a6199be532ac54..46eb8fae123599dd84a7851b1164d8a495c69db2 100644
--- a/VectoCommon/VectoCommon/Utils/SI.cs
+++ b/VectoCommon/VectoCommon/Utils/SI.cs
@@ -1911,13 +1911,23 @@ namespace TUGraz.VectoCommon.Utils
 		{
 			if (Denominator.Any()) {
 				if (Numerator.Any()) {
-					return string.Concat(Numerator) + "/" + string.Concat(Denominator);
+					return string.Concat(
+						Numerator.GroupBy(x => x)
+							.Select(x => x.Count() == 1 ? x.Key.ToString() : string.Format("{0}^{1}", x.Key, x.Count())))
+							+ "/"
+							+ string.Concat(
+								Denominator.GroupBy(x => x)
+									.Select(x => x.Count() == 1 ? x.Key.ToString() : string.Format("{0}^{1}", x.Key, x.Count())));
 				}
-				return "1/" + string.Concat(Denominator);
+				return "1/" + string.Concat(
+					Denominator.GroupBy(x => x)
+						.Select(x => x.Count() == 1 ? x.Key.ToString() : string.Format("{0}^{1}", x.Key, x.Count())));
 			}
 
 			if (Numerator.Any()) {
-				return string.Concat(Numerator);
+				return string.Concat(
+					Numerator.GroupBy(x => x)
+						.Select(x => x.Count() == 1 ? x.Key.ToString() : string.Format("{0}^{1}", x.Key, x.Count())));
 			}
 
 			return "-";
diff --git a/VectoCore/VectoCoreTest/Utils/SITest.cs b/VectoCore/VectoCoreTest/Utils/SITest.cs
index 0a44af7b0f25412a8f2103a9ea59377811351008..e54670fdb529e71b54ed30a2f6f26c12fcd6b6a8 100644
--- a/VectoCore/VectoCoreTest/Utils/SITest.cs
+++ b/VectoCore/VectoCoreTest/Utils/SITest.cs
@@ -129,7 +129,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 			var si4 = si2 * si3;
 			Assert.AreEqual("10.0000 [W/s]", si4.ToString());
 			Assert.IsTrue(si4.HasEqualUnit(new SI().Watt.Per.Second));
-			Assert.AreEqual("10.0000 [kgmm/ssss]", si4.ToBasicUnits().ToString());
+			Assert.AreEqual("10.0000 [kgm^2/s^4]", si4.ToBasicUnits().ToString());
 
 			var kg = 5.SI().Kilo.Gramm;
 			Assert.AreEqual(5.0, kg.Value());
@@ -437,6 +437,12 @@ namespace TUGraz.VectoCore.Tests.Utils
 			Assert.AreEqual("3.50 [N]", 3.5.SI<Newton>().ToOutputFormat(2, showUnit: true));
 			Assert.AreEqual("18.00 [m/s]", 5.SI<MeterPerSecond>().ToOutputFormat(2, 3.6, true));
 			Assert.AreEqual("18.0000", 5.SI<MeterPerSecond>().ToOutputFormat(outputFactor: 3.6));
+
+			Assert.AreEqual("10.0000 [m^2]", 10.SI<SquareMeter>().ToOutputFormat(showUnit: true));
+
+			Assert.AreEqual("10.0000 [m^3]", 10.SI<CubicMeter>().ToOutputFormat(showUnit: true));
+
+			Assert.AreEqual("0.5000 [m/s^2]", 0.5.SI<MeterPerSquareSecond>().ToOutputFormat(showUnit: true));
 		}
 	}
 }
\ No newline at end of file