diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs
index d792f07dab1428327c79892bc422e8271b19aed9..08b4c46f50485ecf238590942056841a8424572e 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs
@@ -86,6 +86,16 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				modData?.Reset();
 				SlopeData[speed] = slope;
 			}
+
+			if (!SlopeData.ContainsKey(MaxSpeed)) {
+				vehicle.Initialize(MaxSpeed, 0.SI<Radian>());
+				var slope = SearchSlope(vehicle, Container);
+				modData?.Reset();
+				SlopeData[MaxSpeed] = slope;
+			}
+
+
+
 		}
 
 		private void RunPreprocessingAMTGearbox(Gearbox gearbox, Vehicle vehicle)
@@ -133,20 +143,25 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			var acceleration = 0.SI<MeterPerSquareSecond>();
 			var absTime = 0.SI<Second>();
 			var gradient = 0.SI<Radian>();
+
+			foreach (var motor in container.ElectricMotors.Values) {
+				((motor as ElectricMotor).Control as DummyElectricMotorControl).EmTorque = null;
+			}
+
 			var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
-			var delta = initialResponse.Gearbox?.PowerRequest ?? (initialResponse.Engine?.PowerRequest ?? 0.SI<Watt>()) + (initialResponse.ElectricMotor?.PowerRequest ?? 0.SI<Watt>());
+			var delta = initialResponse.Gearbox?.PowerRequest ?? initialResponse.ElectricMotor?.TotalTorqueDemand * initialResponse.ElectricMotor?.AvgDrivetrainSpeed;
 
 			try {
 				gradient = SearchAlgorithm.Search(
 					gradient, delta, 0.1.SI<Radian>(),
 					getYValue: response => {
 						var r = (ResponseDryRun)response;
-						return r.Gearbox?.PowerRequest ?? (r.Engine?.PowerRequest ?? 0.SI<Watt>() + r.ElectricMotor?.PowerRequest ?? 0.SI<Watt>());
+						return r.Gearbox?.PowerRequest ?? r.ElectricMotor?.TotalTorqueDemand * r.ElectricMotor?.AvgDrivetrainSpeed;
 					},
 					evaluateFunction: grad => vehicle.Request(absTime, simulationInterval, acceleration, grad, true),
 					criterion: response => {
 						var r = (ResponseDryRun)response;
-						return (r.Gearbox?.PowerRequest ?? (r.Engine?.PowerRequest ?? 0.SI<Watt>()) + (r.ElectricMotor?.PowerRequest ?? 0.SI<Watt>())).Value();
+						return (r.Gearbox?.PowerRequest ?? r.ElectricMotor?.TotalTorqueDemand * r.ElectricMotor?.AvgDrivetrainSpeed).Value();
 					}
 				);
 			} catch (VectoSearchAbortedException) {
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs
index ccf73c17abea8d965dc8ad04b394cc8b97347178..ed71897e07d29fb60bc5cd281304333a786f33f5 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs
@@ -36,15 +36,13 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 			var runData = Container.RunData;
 
-			var electricEngineDrag = runData.ElectricMachinesData.Sum(e => 
-					e.Item2.EfficiencyData.VoltageLevels[0].DragCurve.Entries.Average(x => 
-						(x.MotorSpeed * x.DragTorque).Value())).SI<Watt>();
+			
 
 			var combustionEngineDrag = runData.EngineData?.FullLoadCurves[0].FullLoadEntries.Average(x => 
 											(x.EngineSpeed * x.TorqueDrag).Value()).SI<Watt>() 
 										?? 0.SI<Watt>();
 
-			var engineDrag = electricEngineDrag + combustionEngineDrag;
+			var engineDrag = combustionEngineDrag;
 			var slopeEngineDrag = 0.0;
 			if (runData.GearboxData != null && runData.GearboxData.Type.AutomaticTransmission()) {
 				if ((runData.VehicleData.ADAS.EcoRoll != EcoRollType.None && runData.GearboxData.ATEcoRollReleaseLockupClutch) ||
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 88b3996e4d92e09f6ed2676422cf18cebe2bd9dd..8fe1353bff1da902faeb23d8818a5f8bd8fb9300 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -804,7 +804,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			aux.AddConstant("P_aux_el", data.ElectricAuxDemand ?? 0.SI<Watt>());
 			es.Connect(aux);
 
-			var ctl = new SimpleElectricMotorControl();
+			var ctl = new DummyElectricMotorControl();
 			var powertrain = vehicle
 				.AddComponent(new Wheels(container, data.VehicleData.DynamicTyreRadius, data.VehicleData.WheelsInertia))
 				.AddComponent(new Brakes(container));
@@ -1139,6 +1139,19 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		}
 	}
 
+	public class DummyElectricMotorControl : IElectricMotorControl
+	{
+		#region Implementation of IElectricMotorControl
+
+		public NewtonMeter MechanicalAssistPower(Second absTime, Second dt, NewtonMeter outTorque, PerSecond prevOutAngularVelocity, PerSecond currOutAngularVelocity, NewtonMeter maxDriveTorque, NewtonMeter maxRecuperationTorque, PowertrainPosition position, bool dryRun) {
+			return EmTorque;
+		}
+
+		public NewtonMeter EmTorque;
+		
+		#endregion
+	}
+
 
 
 	internal class DummyDriverInfo : VectoSimulationComponent, IDriverInfo
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
index 804ed23585337455d1f5073b487740e654767cf5..ce2a7da88666c6ae658a157ebcdc022529a64c97 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
@@ -23,7 +23,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 	{
 
 		protected IElectricSystem ElectricPower;
-		protected IElectricMotorControl Control;
+		internal IElectricMotorControl Control { get; }
 		protected ElectricMotorData ModelData;
 		private PerSecond _maxSpeed;
 
@@ -304,7 +304,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 						Engine = { EngineSpeed = avgDtSpeed},
 						ElectricMotor = {
 							ElectricMotorPowerMech = (inTorqueDt - outTorque) * avgDtSpeed,
-							TotalTorqueDemand = inTorqueDt,
 						},
 						DeltaFullLoad =  remainingPower,
 						DeltaDragLoad = remainingPower,
@@ -322,7 +321,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 							retVal = new ResponseSuccess(this) {
 								ElectricMotor = {
 									ElectricMotorPowerMech = (inTorqueDt - outTorque) * avgDtSpeed,
-									TotalTorqueDemand = inTorqueDt
 								},
 								Engine = {
 									PowerRequest = 0.SI<Watt>(),
@@ -347,9 +345,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			} else {
 				retVal = NextComponent.Request(absTime, dt, inTorqueDt / ratio, outAngularVelocity * ratio, dryRun);
 				retVal.ElectricMotor.ElectricMotorPowerMech = (inTorqueDt - outTorque) * avgDtSpeed;
-				retVal.ElectricMotor.TotalTorqueDemand = inTorqueDt;
 			}
 
+			retVal.ElectricMotor.TotalTorqueDemand = inTorqueDt;
+
 			retVal.ElectricMotor.MaxDriveTorque = maxDriveTorqueDt;
 			retVal.ElectricMotor.MaxDriveTorqueEM = maxDriveTorqueEm;
 			retVal.ElectricMotor.MaxRecuperationTorque = maxRecuperationTorqueDt;