diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
index 93f4898b11e5b827334065248a6651096638cf04..9517346f525460a8ada0c5e7c181a77c28011b2c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLElectricStorageSystemDeclarationInputData.cs
@@ -413,7 +413,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		#region Implementation of ISuperCapDeclarationInputData
 
 		public virtual Farad Capacity => GetDouble(XMLNames.Capacitor_Capacitance).SI<Farad>();
-		public virtual Ohm InternalResistance => GetDouble(XMLNames.Capacitor_InternalResistance).SI(Unit.SI.Milli.Ohm).Cast<Ohm>();
+		public virtual Ohm InternalResistance => GetDouble(XMLNames.Capacitor_InternalResistance).SI<Ohm>();
 		public virtual Volt MinVoltage => GetDouble(XMLNames.Capacitor_MinVoltage).SI<Volt>();
 		public virtual Volt MaxVoltage => GetDouble(XMLNames.Capacitor_MaxVoltage).SI<Volt>();
 		public virtual Ampere MaxCurrentCharge => GetDouble(XMLNames.Capacitor_MaxChargingCurrent).SI<Ampere>();
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 0feeb31f49f075d84c72d404c8f43720d87b1929..f357ff5f1401dd18593ad8a6e7ec886729f9b372 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -107,9 +107,12 @@ namespace TUGraz.VectoCore.Models.Declaration
 		public static readonly PTOTransmission PTOTransmission = new PTOTransmission();
 
 		public static readonly HEVStrategyParameters HEVStrategyParameters = new HEVStrategyParameters();
+
+		public const double HEV_EquivalenceFactor_Min = 0.1;
+		public const double HEV_EquivalenceFactor_Max = 4.0;
 		//public static readonly HEVStrategyParameters InitEquivalenceFactorsBus = new HEVStrategyParametersBus();
 
-		public static readonly VehicleOperationLookup VehicleOperation = new VehicleOperationLookup();
+        public static readonly VehicleOperationLookup VehicleOperation = new VehicleOperationLookup();
 
 		public static readonly double ElectricMachineDefaultMechanicalTransmissionEfficiency = 1;
 		//public static MeterPerSecond CycleSpeedLimit;
@@ -1483,7 +1486,12 @@ namespace TUGraz.VectoCore.Models.Declaration
 						TorqueRatio = 0.9,
 						Torque =  -4 * first.Torque
 					},
-				};
+					new TorqueConverterEntry() {
+						SpeedRatio = 15,
+						TorqueRatio = 0.85,
+						Torque =  -4.1 * first.Torque
+					},
+                };
 				foreach (var torqueConverterEntry in characteristicTorque) {
 					torqueConverterEntry.SpeedRatio = torqueConverterEntry.SpeedRatio * ratio;
 					torqueConverterEntry.TorqueRatio = torqueConverterEntry.TorqueRatio / ratio;
diff --git a/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/HevChargeSustainingIterativeRunStrategy.cs b/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/HevChargeSustainingIterativeRunStrategy.cs
index 7c30fe33f07c05d7d3c882f27c2153314ebf3f66..d13879ece793529412c39a2066493f12cdb7bfc1 100644
--- a/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/HevChargeSustainingIterativeRunStrategy.cs
+++ b/VectoCore/VectoCore/Models/Declaration/IterativeRunStrategies/HevChargeSustainingIterativeRunStrategy.cs
@@ -65,6 +65,8 @@ namespace TUGraz.VectoCore.Models.Declaration.IterativeRunStrategies
 					d_soc_1 = _results[iteration].d_soc;
 					f_equiv_2 = f_equiv_1 - (d_soc_1/100 / k);
 
+					f_equiv_2 = f_equiv_2.LimitTo(DeclarationData.HEV_EquivalenceFactor_Min,
+						DeclarationData.HEV_EquivalenceFactor_Max);
 					runData.HybridStrategyParameters.EquivalenceFactor = f_equiv_2;
 					runData.HybridStrategyParameters.EquivalenceFactorCharge = f_equiv_2 * factorCharge;
 					runData.HybridStrategyParameters.EquivalenceFactorDischarge = f_equiv_2 * factorDischarge;
@@ -76,8 +78,15 @@ namespace TUGraz.VectoCore.Models.Declaration.IterativeRunStrategies
 					f_equiv_1 = _results[0].f_equiv;
 					f_equiv_2 = _results[1].f_equiv;
 
-					f_equiv_3 = (((0 - d_soc_1) / (d_soc_2 - d_soc_1)) * (f_equiv_2 - f_equiv_1)) + f_equiv_1;
-					f_equiv_3 = f_equiv_3.LimitTo(0.1, 4);
+					if (d_soc_1.IsGreater(0) && d_soc_2.IsGreater(0) && d_soc_1.IsEqual(d_soc_2, 1e-5)) {
+						f_equiv_3 = DeclarationData.HEV_EquivalenceFactor_Min;
+					} else if (d_soc_1.IsSmaller(0) && d_soc_2.IsSmaller(0) && d_soc_1.IsEqual(d_soc_2, 1e-5)) {
+						f_equiv_3 = DeclarationData.HEV_EquivalenceFactor_Max;
+					} else {
+						f_equiv_3 = (((0 - d_soc_1) / (d_soc_2 - d_soc_1)) * (f_equiv_2 - f_equiv_1)) + f_equiv_1;
+					}
+
+					f_equiv_3 = f_equiv_3.LimitTo(DeclarationData.HEV_EquivalenceFactor_Min, DeclarationData.HEV_EquivalenceFactor_Max);
 					runData.HybridStrategyParameters.EquivalenceFactor = f_equiv_3;
 					runData.HybridStrategyParameters.EquivalenceFactorCharge = f_equiv_3 * factorCharge;
 					runData.HybridStrategyParameters.EquivalenceFactorDischarge = f_equiv_3 * factorDischarge;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
index a59e56d9d4dfdb2a1fbfe9694b0864684b70a052..d8448b22ebde7a01c6365cc8e9055f4688dc07a4 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
@@ -232,7 +232,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			if (CurrentDrivingMode == DrivingMode.DrivingModeBrake) {
 				var nextAction = GetNextDrivingAction(ds);
-				if (nextAction != null && !BrakeTrigger.HasEqualTrigger(nextAction) && nextAction.ActionDistance.IsSmallerOrEqual(BrakeTrigger.ActionDistance)) {
+				var currentDistance = DataBus.MileageCounter.Distance;
+
+                if (nextAction != null && !BrakeTrigger.HasEqualTrigger(nextAction) && 
+					(nextAction.ActionDistance.IsSmallerOrEqual(BrakeTrigger.ActionDistance) || nextAction.BrakingStartDistance.IsBetween(currentDistance, currentDistance + ds))) {
 					BrakeTrigger = nextAction;
 				}
 				if (DataBus.MileageCounter.Distance.IsGreaterOrEqual(BrakeTrigger.TriggerDistance, 1e-3.SI<Meter>())) {
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
index 791a20d6be1ccd7a94cbfd5075124e479cfd0021..9407295bb257f59d0a17a7187c3f2b727ce37a22 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
@@ -1482,8 +1482,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 						AllowICEOff(absTime), newEval,
 						best.Setting.MechanicalAssistPower.First().Key, dryRun);
 					if (newEval.Count > 0) {
+						var oldBest = best;
 						best = DoSelectBestOption(newEval, absTime, dt, outTorque, outAngularVelocity, dryRun,
 							currentGear);
+						if (best == null) {
+							best = oldBest;
+						}
 					}
 				}
 			}
@@ -2127,9 +2131,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 				}
 			}
 
-
+			var avgEngineSpeed = resp.Engine.DynamicFullLoadTorque.IsEqual(0)
+				? resp.Engine.EngineSpeed // dynamic full load may be 0 if engine speed is too high, use this as estimate for now
+				: resp.Engine.DynamicFullLoadPower / resp.Engine.DynamicFullLoadTorque;
 			if (!iceOff && /*!resp.Engine.TotalTorqueDemand.IsBetween(resp.Engine.DragTorque, resp.Engine.DynamicFullLoadTorque)*/
-				(resp.Engine.TotalTorqueDemand.IsSmaller(resp.Engine.DragTorque) || resp.Engine.TotalTorqueDemand.IsGreater(resp.Engine.DynamicFullLoadTorque))) {
+				((resp.Engine.TotalTorqueDemand * avgEngineSpeed).IsSmaller(resp.Engine.DragPower, Constants.SimulationSettings.LineSearchTolerance) || 
+				(resp.Engine.TotalTorqueDemand * avgEngineSpeed).IsGreater(resp.Engine.DynamicFullLoadPower, Constants.SimulationSettings.LineSearchTolerance))) {
 				tmp.FuelCosts = double.NaN;
 				tmp.IgnoreReason |= resp.Engine.TotalTorqueDemand.IsGreater(resp.Engine.DynamicFullLoadTorque)
 					? HybridConfigurationIgnoreReason.EngineTorqueDemandTooHigh