diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
index f29644d0fd6043e890607faf395034e1acf6f557..56ede55d48aa8ba07ae4d8d9f1f9cac2c1afa224 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
@@ -551,9 +551,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return retVal;
 			}
 
-			operatingPoint = SearchBrakingPower(absTime, operatingPoint.SimulationDistance, gradient,
-				operatingPoint.Acceleration, response);
-
+			var engaged = (DataBus as IGearboxInfo).DisengageGearbox;
+			try {
+				operatingPoint = SearchBrakingPower(
+					absTime, operatingPoint.SimulationDistance, gradient,
+					operatingPoint.Acceleration, response);
+			} catch (VectoSearchAbortedException vsa) {
+				Log.Warn("Search braking power aborted {0}", vsa);
+				if (DataBus.GearboxType.AutomaticTransmission()) {
+					(DataBus as IGearboxControl).DisengageGearbox = true;
+					operatingPoint = SearchBrakingPower(
+						absTime, operatingPoint.SimulationDistance, gradient,
+						operatingPoint.Acceleration, response);
+				}
+			}
 			if (!ds.IsEqual(operatingPoint.SimulationDistance, 1E-15.SI<Meter>())) {
 				Log.Info(
 					"SearchOperatingPoint Braking reduced the max. distance: {0} -> {1}. Issue new request from driving cycle!",
@@ -648,7 +659,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			retVal.SimulationInterval = operatingPoint.SimulationInterval;
 			retVal.SimulationDistance = ds;
 			retVal.OperatingPoint = operatingPoint;
-			
+
+			if (DataBus.GearboxType.AutomaticTransmission() && engaged != (DataBus as IGearboxInfo).DisengageGearbox) {
+				(DataBus as IGearboxControl).DisengageGearbox = engaged;
+			}
 			return retVal;
 		}
 
@@ -794,6 +808,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 							: response.GearboxPowerRequest;
 						return delta.Value();
 					},
+					abortCriterion: (result, i) => {
+						if (i < 7) {
+							return false;
+						}
+						var response = (ResponseDryRun)result;
+						if (response == null) {
+							return false;
+						}
+
+						return DataBus.GearboxType.AutomaticTransmission() && response.DeltaDragLoad.Value().IsSmallerOrEqual(-double.MaxValue / 20);
+					},
 					forceLineSearch: DataBus.GearboxType.AutomaticTransmission() && !DataBus.TCLocked);
 
 				return operatingPoint;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
index 4e74a81793928303ae1cfd61c21896cb5a0b5dda..0dc24b6d7c140171f33d7d7842cfc517f0fcafd7 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
@@ -310,7 +310,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var maxSpeed = VectoMath.Min(ModelData.TorqueConverterSpeedLimit, DataBus.EngineN95hSpeed);
 			for (var n = DataBus.EngineIdleSpeed;
 				n <= maxSpeed;
-				n += maxSpeed / 20) {
+				n += maxSpeed / 100) {
 				var tcOp = ModelData.FindOperatingPoint(n, outAngularVelocity);
 				var inTorque = CalculateAverageInTorque(tcOp);
 				var res = (ResponseDryRun)NextComponent.Request(absTime, dt, inTorque, tcOp.InAngularVelocity, true);