diff --git a/VectoCommon/VectoCommon/Models/OperatingPoint.cs b/VectoCommon/VectoCommon/Models/OperatingPoint.cs
index 639ce72bbfeb3f9b971572b46e8aeec07692759f..ddcd47f3e6815de739fe63b21b34571727dfef37 100644
--- a/VectoCommon/VectoCommon/Models/OperatingPoint.cs
+++ b/VectoCommon/VectoCommon/Models/OperatingPoint.cs
@@ -40,6 +40,18 @@ namespace TUGraz.VectoCommon.Models
 		public MeterPerSquareSecond Acceleration;
 		public Meter SimulationDistance;
 		public Second SimulationInterval;
+		
+
+		public OperatingPoint(OperatingPoint operatingPoint)
+		{
+			Acceleration = operatingPoint.Acceleration;
+			SimulationDistance = operatingPoint.SimulationDistance;
+			SimulationInterval = operatingPoint.SimulationInterval;
+		}
+
+		public OperatingPoint()
+		{
+		}
 
 		public override string ToString()
 		{
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
index 1635e547bd43c2d9aa989eaa3b9e8a86a3ff5414..cffac5072dd4395a2dea699257f0d476497096fa 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
@@ -1001,6 +1001,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					first = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient);
 					debug.Add(new { action = "Coast:(Success & Acc<0) -> Accelerate", first });
 				}
+				if (!DataBus.EngineInfo.EngineOn && first is ResponseOverload) {
+					first = Driver.DrivingActionAccelerate(absTime, ds, targetVelocity, gradient);
+					debug.Add(new { action = "Coast:(Overload & ICE off) -> Accelerate", first });
+				}
 			} else {
 				if (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && DataBus.GearboxInfo.DisengageGearbox) {
 					first = Driver.DrivingActionCoast(absTime, ds, velocityWithOverspeed, gradient);
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
index eb07caafaa40c12da83d0a4620554b6277bdec5c..94ae6f8030c514d50bcaab9523be5adab473548b 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
@@ -922,30 +922,31 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			LimitationMode limits)
 		{
 			var limitApplied = false;
-			var originalAcceleration = operatingPoint.Acceleration;
+			var retVal = new OperatingPoint(operatingPoint);
+			var originalAcceleration = retVal.Acceleration;
 			//if (((limits & LimitationMode.LimitDecelerationLookahead) != 0) &&
-			//	operatingPoint.Acceleration < DriverData.LookAheadCoasting.Deceleration) {
-			//	operatingPoint.Acceleration = DriverData.LookAheadCoasting.Deceleration;
+			//	retVal.Acceleration < DriverData.LookAheadCoasting.Deceleration) {
+			//	retVal.Acceleration = DriverData.LookAheadCoasting.Deceleration;
 			//	limitApplied = true;
 			//}
 			var accelerationLimits = DriverData.AccelerationCurve.Lookup(DataBus.VehicleInfo.VehicleSpeed);
-			if (operatingPoint.Acceleration > accelerationLimits.Acceleration) {
-				operatingPoint.Acceleration = accelerationLimits.Acceleration;
+			if (retVal.Acceleration > accelerationLimits.Acceleration) {
+				retVal.Acceleration = accelerationLimits.Acceleration;
 				limitApplied = true;
 			}
 			if (((limits & LimitationMode.LimitDecelerationDriver) != 0) &&
-				operatingPoint.Acceleration < accelerationLimits.Deceleration) {
-				operatingPoint.Acceleration = accelerationLimits.Deceleration;
+				retVal.Acceleration < accelerationLimits.Deceleration) {
+				retVal.Acceleration = accelerationLimits.Deceleration;
 				limitApplied = true;
 			}
 			if (limitApplied) {
-				operatingPoint.SimulationInterval =
-					ComputeTimeInterval(operatingPoint.Acceleration, operatingPoint.SimulationDistance)
+				retVal.SimulationInterval =
+					ComputeTimeInterval(retVal.Acceleration, retVal.SimulationDistance)
 						.SimulationInterval;
 				Log.Debug("Limiting acceleration from {0} to {1}, dt: {2}", originalAcceleration,
-					operatingPoint.Acceleration, operatingPoint.SimulationInterval);
+						retVal.Acceleration, retVal.SimulationInterval);
 			}
-			return operatingPoint;
+			return retVal;
 		}
 
 		/// <summary>
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
index 5bd6a913598083d7ca1d0a41f9b0b910939ac7dd..a1fe968e5ae4bd996857564d757e1d2a0b5b2698 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
@@ -150,7 +150,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 				return response;
 			}
 
-			if (dryRun && DataBus.DriverInfo.DrivingAction == DrivingAction.Brake) {
+			if (dryRun && DataBus.DriverInfo.DrivingAction == DrivingAction.Brake && (DataBus.GearboxInfo.GearEngaged(absTime) || ElectricMotorCanPropellDuringTractionInterruption)) {
 				var tmp = MaxRecuperationSetting(absTime, dt, outTorque, outAngularVelocity);
 				var outTorqueWithoutBraking =
 					outTorque - 2 * DataBus.Brakes.BrakePower / (PreviousState.AngularVelocity + outAngularVelocity);
@@ -159,7 +159,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 					DryRunAction = DataBus.DriverInfo.DrivingAction;
 					DryRunResult = tmp;
 					var brakeRetVal = CreateResponse(tmp, currentGear);
-					DebugData.Add(new { Best = tmp, RetVal = brakeRetVal, DryRun = dryRun });
+					DebugData.Add(new { DrivingAction = DataBus.DriverInfo.DrivingAction, Best = tmp, RetVal = brakeRetVal, DryRun = dryRun });
 					return brakeRetVal;
 				}
 			}
@@ -227,7 +227,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 				CurrentState.GearshiftTriggerTstmp = absTime;
 			}
 
-			DebugData.Add(new { Evaluations = eval, Best = best, RetVal = retVal, DryRun = dryRun });
+			DebugData.Add(new { DrivingAction = DataBus.DriverInfo.DrivingAction, Evaluations = eval, Best = best, RetVal = retVal, DryRun = dryRun });
 			return retVal;
 		}
 
@@ -237,7 +237,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 		{
 			var best = eval.Where(x => !double.IsNaN(x.Score)).OrderBy(x => x.Score).FirstOrDefault();
 			if (best == null) {
-				best = eval.FirstOrDefault(x => !DataBus.EngineCtl.CombustionEngineOn || !x.IgnoreReason.InvalidEngineSpeed());
+				best = eval.OrderBy(x => Math.Abs((int)currentGear - x.Gear)).FirstOrDefault(x => !DataBus.EngineCtl.CombustionEngineOn || !x.IgnoreReason.InvalidEngineSpeed());
 				if (best == null /*&& dryRun*/) {
 					var emEngaged = (!ElectricMotorCanPropellDuringTractionInterruption ||
 									(DataBus.GearboxInfo.GearEngaged(absTime) && eval.First().Response.Gearbox.Gear != 0));
@@ -300,14 +300,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 				GearboxInNeutral = false,
 				MechanicalAssistPower = ElectricMotorsOff
 			};
-			var firstResponse = RequestDryRun(absTime, dt, outTorque, outAngularVelocity, DataBus.GearboxInfo.Gear, first);
+			var currentGear = PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear.Gear;
+			var firstResponse = RequestDryRun(absTime, dt, outTorque, outAngularVelocity, currentGear, first);
 
 			var allowICEOff = PreviousState.ICEStartTStmp == null ||
 							PreviousState.ICEStartTStmp.IsSmaller(absTime + MIN_ICE_ON_TIME);
 
 
 			var emPos = ModelData.ElectricMachinesData.First().Item1;
-			var currentGear = PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear.Gear;
+			
 			var emTorque = !ElectricMotorCanPropellDuringTractionInterruption && (firstResponse.Gearbox.Gear == 0 || !DataBus.GearboxInfo.GearEngaged(absTime)) ? null : firstResponse.ElectricMotor.MaxRecuperationTorque;
 			return TryConfiguration(absTime, dt, outTorque, outAngularVelocity, currentGear, emPos, emTorque, double.NaN, allowICEOff);
 		}
@@ -607,6 +608,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			TestPowertrain.CombustionEngine.PreviousState.EngineTorqueOut = (DataBus.EngineInfo as CombustionEngine).PreviousState.EngineTorqueOut;
 			TestPowertrain.CombustionEngine.PreviousState.DynamicFullLoadTorque = (DataBus.EngineInfo as CombustionEngine).PreviousState.DynamicFullLoadTorque;
 
+			TestPowertrain.Clutch.PreviousState.InAngularVelocity =
+				(DataBus.ClutchInfo as SwitchableClutch).PreviousState.InAngularVelocity;
+
 			if (/*nextGear != DataBus.GearboxInfo.Gear && */TestPowertrain.ElectricMotorP2 != null) {
 				TestPowertrain.ElectricMotorP2.PreviousState.OutAngularVelocity =
 					DataBus.ElectricMotorInfo(PowertrainPosition.HybridP2).ElectricMotorSpeed;