diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs
index 45aa7c33e2cc6126b250081e9cf1bbae7ddb3f72..fc2f44b2aaf9ba3f58508297c25834dde677d0f6 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs
@@ -182,21 +182,33 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				var prev = orderedBuckets[i - 1];
 				var next = orderedBuckets[i + 1];
 
+
 				//Drive
-				if (current.Value.MinBy(x => x.Torque).Torque / prev.Value.MinBy(x => x.Torque).Torque < ignoreThreshold
-					&& 
-					current.Value.MinBy(x => x.Torque).Torque / next.Value.MinBy(x => x.Torque).Torque < ignoreThreshold) {
+				if (prev.Value.MinBy(x => x.Torque).Torque.IsEqual(0) || next.Value.MinBy(x => x.Torque).Torque.IsEqual(0)) {
 					ignoredSpeedBucketsDrive.Add(current.Key);
+				} else {
+					if (current.Value.MinBy(x => x.Torque).Torque / prev.Value.MinBy(x => x.Torque).Torque <
+						ignoreThreshold
+						&&
+						current.Value.MinBy(x => x.Torque).Torque / next.Value.MinBy(x => x.Torque).Torque <
+						ignoreThreshold) {
+						ignoredSpeedBucketsDrive.Add(current.Key);
+					}
 				}
 
-                //Recuperation
-				if (current.Value.MaxBy(x => x.Torque).Torque / prev.Value.MaxBy(x => x.Torque).Torque < ignoreThreshold
-					&&
-					current.Value.MaxBy(x => x.Torque).Torque / next.Value.MaxBy(x => x.Torque).Torque < ignoreThreshold)
-				{
+				//Recuperation
+				if (prev.Value.MaxBy(x => x.Torque).Torque.IsEqual(0) || next.Value.MaxBy(x => x.Torque).Torque.IsEqual(0)) {
 					ignoredSpeedBucketsRecuperation.Add(current.Key);
+				} else {
+					if (current.Value.MaxBy(x => x.Torque).Torque / prev.Value.MaxBy(x => x.Torque).Torque <
+						ignoreThreshold
+						&&
+						current.Value.MaxBy(x => x.Torque).Torque / next.Value.MaxBy(x => x.Torque).Torque <
+						ignoreThreshold) {
+						ignoredSpeedBucketsRecuperation.Add(current.Key);
+					}
 				}
-            }
+			}
 
 
 
@@ -211,8 +223,8 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 
 				var maxRecuperationEntry = speedBucket.Value.MaxBy(x => x.Torque);
 				var maxDriveEntry = speedBucket.Value.MinBy(x => x.Torque); //drive torque < 0
-				var recuperationFactor = maxTargetTorque / maxRecuperationEntry.Torque;
-				var driveFactor = minTargetTorque / maxDriveEntry.Torque;
+				var recuperationFactor = maxRecuperationEntry.Torque.IsEqual(0) ? 1.0 : maxTargetTorque / maxRecuperationEntry.Torque;
+				var driveFactor = maxDriveEntry.Torque.IsEqual(0) ? 1.0 : minTargetTorque / maxDriveEntry.Torque;
 
 				//Recuperation
 				if (!recuperationFactor.IsSmallerOrEqual(1) && !ignoredSpeedBucketsRecuperation.Contains(speedBucket.Key)) {
@@ -251,7 +263,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 			return entries;
 		}
 
-		private static Scalar CalculateExtrapolationFactor(Scalar targetFactor, int currentStep,
+		private static double CalculateExtrapolationFactor(double targetFactor, int currentStep,
 			uint nrOfSteps)
 		{
 			if (currentStep < 1) {