diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
index 7d90d40b715c91f979acee4907748daa89e40c12..c9c252655f0d3ce6bd29049798c88e97585458af 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
@@ -191,7 +191,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			if (!dryRun &&
 				((DataBus.VehicleStopped && outAngularVelocity > 0) ||
-				(CurrentState.Disengaged && outTorque.IsGreater(0)))) {
+				(CurrentState.Disengaged && outTorque.IsGreater(0, 1e-3)))) {
 				Gear = 1;
 				CurrentState.TorqueConverterLocked = false;
 				LastShift = absTime;
@@ -224,6 +224,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 								outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0
 						};
 						_requestAfterGearshift = true;
+						LastShift = absTime;
 					} else {
 						loop = true;
 						Gear = _strategy.Engage(absTime, dt, outTorque, outAngularVelocity);
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs
index d87ab3fd9bb42e6c4fb47b4c0bcd9efd5f557415..291ba5b6b212af9fc3366b0003034a21d576d01d 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs
@@ -135,7 +135,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			// 3) 1C -> 0: disengange when negative T_out and positive T_in
 			var gear1C = gear == 1 && !_gearbox.TorqueConverterLocked;
-			var disengageTOutNegativeAndTInPositive = gear1C && outTorque.IsSmaller(0) && inTorque.IsGreater(0);
+			var disengageTOutNegativeAndTInPositive = DataBus.DriverAcceleration <= 0 && gear1C && outTorque.IsSmaller(0) && inTorque.IsGreater(0);
 
 			var disengageTCEngineSpeedLowerIdle = braking && torqueNegative && gear1C &&
 												inAngularVelocity.IsSmallerOrEqual(DataBus.EngineIdleSpeed);
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
index 5d7e05c2f70ec48b09f23e6e97c49d712a666c41..1e56ddad7b93a0ba778d2a8807924eb6202391fc 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
@@ -111,7 +111,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				//if (false && DataBus.VehicleStopped && DataBus.DriverBehavior == DrivingBehavior.Driving && outTorque.IsGreater(0)) {
 				//	dryOperatingPoint = ModelData.FindOperatingPoint(DataBus.EngineIdleSpeed, outAngularVelocity);
 				//} else {
-				dryOperatingPoint = outTorque.IsGreater(0) && DataBus.BrakePower.IsEqual(0)
+				dryOperatingPoint = (DataBus.DriverBehavior != DrivingBehavior.Braking) || (outTorque.IsGreater(0) && DataBus.BrakePower.IsEqual(0))
 					? GetMaxPowerOperatingPoint(dt, outAngularVelocity, engineResponse,
 						PreviousState.InTorque * PreviousState.InAngularVelocity)
 					: GetDragPowerOperatingPoint(dt, outAngularVelocity, engineResponse,