diff --git a/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap b/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap
index 26c035cad9373137a6be4195e75a204b3625a22c..7d0a7db55c476ef578732cda54676cb10c5a6371 100644
--- a/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap	
+++ b/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap	
@@ -16,6 +16,7 @@
 600,1000,12071
 600,1200,14201
 600,1282,15304
+600,1400,15304
 800,-149,0
 800,0,1879
 800,200,4286
@@ -27,6 +28,7 @@
 800,1400,22426
 800,1600,25483
 800,1791,28905
+800,2000,28905
 1000,-160,0
 1000,0,2865
 1000,200,5963
@@ -41,6 +43,7 @@
 1000,2000,39360
 1000,2200,44120
 1000,2300,46836
+1000,2500,46836
 1200,-179,0
 1200,0,3307
 1200,200,6897
@@ -55,6 +58,7 @@
 1200,2000,46915
 1200,2200,51783
 1200,2300,54932
+1200,2500,54932
 1400,-203,0
 1400,0,4306
 1400,200,8143
@@ -69,6 +73,7 @@
 1400,2000,55830
 1400,2200,61072
 1400,2300,64377
+1400,2500,64377
 1600,-235,0
 1600,0,5209
 1600,200,9669
@@ -82,6 +87,7 @@
 1600,1800,57020
 1600,2000,63914
 1600,2079,66520
+1600,2200,66520
 1800,-264,0
 1800,0,6409
 1800,200,11777
@@ -94,6 +100,7 @@
 1800,1600,57436
 1800,1800,65157
 1800,1857,67574
+1800,2000,67574
 2000,-301,0
 2000,0,9127
 2000,200,14822
@@ -103,6 +110,7 @@
 2000,1000,42837
 2000,1200,51018
 2000,1352,56618
+2000,1500,56618
 2100,-320,0
 2100,0,10470
 2100,200,16332
@@ -111,3 +119,4 @@
 2100,800,35717
 2100,1000,45643
 2100,1100,50653
+2100,1300,50653
\ No newline at end of file
diff --git a/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb b/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb
index 3e825e0fefa890a96c1f10d0d6e3127eb0c2ad1c..ae3392a325355fcd0e6753ac645ba1a7eab57d32 100644
--- a/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb
+++ b/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb
@@ -611,7 +611,7 @@ Public Class frmAuxiliaryConfig
 		Dim s As Single
 
 
-		If e.ColumnIndex = - 1 Then
+		If e.ColumnIndex = -1 Then
 
 			e.Cancel = True
 			Exit Sub
@@ -840,7 +840,7 @@ Public Class frmAuxiliaryConfig
 
 	Private Sub btnAlternatorMapPath_Click(sender As Object, e As EventArgs) Handles btnAlternatorMapPath.Click
 
-		Dim fbAux As New cFileBrowser("AAUXALT", True, False)
+		Dim fbAux As New cFileBrowser("AAUXALT", False, False)
 		fbAux.Extensions = New String() {"AALT"}
 
 		Dim suppliedAALTPath As String = txtAlternatorMapPath.Text
@@ -907,7 +907,7 @@ Public Class frmAuxiliaryConfig
 					Return
 				End If
 			End Using
-
+			BindingContext(auxConfig.ElectricalUserInputsConfig).EndCurrentEdit()
 			Validate_Electrics()
 
 		End If
@@ -935,6 +935,10 @@ Public Class frmAuxiliaryConfig
 		txtCompressorMap.Focus()
 	End Sub
 
+	Private Sub btnActuationsMap_BindingContextChanged(sender As Object, e As EventArgs) _
+		Handles btnActuationsMap.BindingContextChanged
+	End Sub
+
 	Private Sub btnActuationsMap_Click(sender As Object, e As EventArgs) Handles btnActuationsMap.Click
 
 		Dim fbAux As New cFileBrowser("AAUXPneuAct", True, False)
@@ -987,9 +991,13 @@ Public Class frmAuxiliaryConfig
 		End If
 	End Sub
 
+	Private Sub btnSSMBSource_BindingContextChanged(sender As Object, e As EventArgs) _
+		Handles btnSSMBSource.BindingContextChanged
+	End Sub
+
 	Private Sub btnSSMBSource_Click(sender As Object, e As EventArgs) Handles btnSSMBSource.Click
 
-		Dim fbAux As New cFileBrowser("AAUXSSM", True, False)
+		Dim fbAux As New cFileBrowser("AAUXSSM", False, False)
 		fbAux.Extensions = New String() {"AHSM"}
 
 		Dim suppliedSSMPath As String = txtSSMFilePath.Text.Trim()
@@ -1058,7 +1066,7 @@ Public Class frmAuxiliaryConfig
 					Return
 				End If
 			End Using
-
+			BindingContext(auxConfig.HvacUserInputsConfig).EndCurrentEdit()
 			Validate_HVAC()
 
 		End If
@@ -1188,10 +1196,10 @@ Public Class frmAuxiliaryConfig
 			e.Graphics.FillRectangle(br, e.Bounds)
 			Dim sz As SizeF = e.Graphics.MeasureString(tabMain.TabPages(e.Index).Text, e.Font)
 			e.Graphics.DrawString(tabMain.TabPages(e.Index).Text, e.Font, Brushes.Black,
-								e.Bounds.Left + (e.Bounds.Width - sz.Width)/2, e.Bounds.Top + (e.Bounds.Height - sz.Height)/2 + 1)
+								e.Bounds.Left + (e.Bounds.Width - sz.Width) / 2, e.Bounds.Top + (e.Bounds.Height - sz.Height) / 2 + 1)
 
 			Dim rect As Rectangle = e.Bounds
-			rect.Offset(- 1, - 1)
+			rect.Offset(-1, -1)
 			rect.Inflate(1, 1)
 			' e.Graphics.DrawRectangle(Pens.DarkGray, rect)
 			'e.DrawFocusRectangle()
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 1a84dd10c4438513171acb7accb113ecd4a7aade..7420c8f028a4777f80b6befd69c25509ae5492db 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -291,7 +291,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 			// connect aux --> engine
 			if (data.AdvancedAux != null && data.AdvancedAux.AuxiliaryAssembly == AuxiliaryModel.Advanced) {
-				engine.Connect(CreateBusAuxiliaries(data, container).Port());
+				engine.Connect(CreateAdvancedAuxiliaries(data, container).Port());
 			} else {
 				if (data.Aux != null) {
 					engine.Connect(CreateAuxiliaries(data, container).Port());
@@ -303,10 +303,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			return container;
 		}
 
-		private IEngineAuxInProvider CreateBusAuxiliaries(VectoRunData data, VehicleContainer container)
+		private IEngineAuxInProvider CreateAdvancedAuxiliaries(VectoRunData data, VehicleContainer container)
 		{
+			var conventionalAux = CreateAuxiliaries(data, container);
 			var busAux = new BusAuxiliariesAdapter(container, data.AdvancedAux.AdvancedAuxiliaryFilePath, data.Cycle.Name,
-				data.VehicleData.TotalVehicleWeight(), data.EngineData.ConsumptionMap, data.EngineData.IdleSpeed);
+				data.VehicleData.TotalVehicleWeight(), data.EngineData.ConsumptionMap, data.EngineData.IdleSpeed, conventionalAux);
 			return busAux;
 		}
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
index e581628d9c8ad66c4c29a953d0eadbc6352d0cd7..c4aed9a98105c0b48518f2a7343005aa51cf94e5 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
@@ -52,18 +52,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		protected internal BusAuxState CurrentState;
 		protected internal BusAuxState PreviousState;
 
+		protected internal IEngineAuxPort AdditionalAux;
+
 		protected IAdvancedAuxiliaries Auxiliaries;
 		private readonly FuelConsumptionAdapter _fcMapAdapter;
 
-
 		public BusAuxiliariesAdapter(IDataBus container, string aauxFile, string cycleName, Kilogram vehicleWeight,
-			FuelConsumptionMap fcMap, PerSecond engineIdleSpeed)
+			FuelConsumptionMap fcMap, PerSecond engineIdleSpeed, IEngineAuxPort additionalAux = null)
 		{
 			//	mAAUX_Global.advancedAuxModel.Signals.DeclarationMode = Cfg.DeclMode
 			//	mAAUX_Global.advancedAuxModel.Signals.WHTC = Declaration.WHTCcorrFactor
 			CurrentState = new BusAuxState();
 			PreviousState = new BusAuxState();
 
+			AdditionalAux = additionalAux;
+
 			DataBus = container;
 			var tmpAux = new AdvancedAuxiliaries();
 
@@ -129,6 +132,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		{
 			PreviousState.TotalFuelConsumption = 0.SI<Kilogram>();
 			PreviousState.AngularSpeed = angularSpeed;
+			CurrentState.AngularSpeed = angularSpeed;
+			if (AdditionalAux != null) {
+				AdditionalAux.Initialize(torque, angularSpeed);
+			}
 			PreviousState.PowerDemand = GetBusAuxPowerDemand(0.SI<Second>(), 1.SI<Second>(), torque, torque, angularSpeed);
 			return PreviousState.PowerDemand / angularSpeed;
 		}
@@ -245,7 +252,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 			Auxiliaries.Signals.EngineMotoringPower = -DataBus.EngineDragPower(angularSpeed);
 			Auxiliaries.Signals.EngineSpeed = angularSpeed;
-			Auxiliaries.Signals.PreExistingAuxPower = 0.SI<Watt>(); //mAAUX_Global.PreExistingAuxPower;
+			var avgAngularSpeed = (PreviousState.AngularSpeed + CurrentState.AngularSpeed) / 2;
+			Auxiliaries.Signals.PreExistingAuxPower = AdditionalAux != null
+				? AdditionalAux.PowerDemand(absTime, dt, torquePowerTrain, torqueEngine, angularSpeed, dryRun) * avgAngularSpeed
+				: 0.SI<Watt>();
+			; //mAAUX_Global.PreExistingAuxPower;
 			Auxiliaries.Signals.Idle = DataBus.VehicleStopped;
 			Auxiliaries.Signals.InNeutral = DataBus.Gear == 0;
 			Auxiliaries.Signals.RunningCalc = true;
@@ -253,7 +264,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			//mAAUX_Global.Internal_Engine_Power;
 			//'Power coming out of Advanced Model is in Watts.
 
-			return Auxiliaries.AuxiliaryPowerAtCrankWatts;
+			return Auxiliaries.AuxiliaryPowerAtCrankWatts + Auxiliaries.Signals.PreExistingAuxPower;
 		}
 
 		protected class FuelConsumptionAdapter : IFuelConsumptionMap
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
index 1dbbacea8f4c7830489dadb5d62d078dad8c443c..dccb11799781a4bf6c6b73a3e524a18323b883c2 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
@@ -439,7 +439,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 
 			var newOperatingPoint = VectoMath.ComputeTimeInterval(DataBus.VehicleSpeed, response.Acceleration, DataBus.Distance,
-				ds);
+				newds);
 			if (newOperatingPoint.SimulationInterval.IsSmaller(Constants.SimulationSettings.LowerBoundTimeInterval)) {
 				// the next time interval will be too short, this may lead to issues with inertia etc. 
 				// instead of accelerating, drive at constant speed.
@@ -536,31 +536,31 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return response;
 			}
 			var v2 = Driver.DataBus.VehicleSpeed + response.Acceleration * response.SimulationInterval;
-			var brakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2,
+			var newBrakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2,
 				nextAction.NextTargetSpeed) + DefaultDriverStrategy.BrakingSafetyMargin;
 			switch (DriverStrategy.NextDrivingAction.Action) {
 				case DrivingBehavior.Coasting:
 					var coastingDistance = DriverStrategy.ComputeCoastingDistance(v2, nextAction.CycleEntry);
-					var nextActionDistance = coastingDistance;
+					var newActionDistance = coastingDistance;
 					var safetyFactor = 4.0;
-					if (brakingDistance > coastingDistance) {
-						nextActionDistance = brakingDistance;
+					if (newBrakingDistance > coastingDistance) {
+						newActionDistance = newBrakingDistance;
 						safetyFactor = 0.5;
 					}
 					// if the distance at the end of the simulation interval is smaller than the new ActionDistance
 					// we are safe - go ahead...
-					if ((Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - nextActionDistance,
+					if ((Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - newActionDistance,
 						Constants.SimulationSettings.DriverActionDistanceTolerance * safetyFactor) &&
-						(Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - brakingDistance)) {
+						(Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - newBrakingDistance)) {
 						return response;
 					}
 					newds = ds / 2; //EstimateAccelerationDistanceBeforeBrake(response, nextAction) ?? ds;
 					break;
 				case DrivingBehavior.Braking:
-					if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - brakingDistance)) {
+					if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - newBrakingDistance)) {
 						return response;
 					}
-					newds = (nextAction.TriggerDistance - brakingDistance) - Driver.DataBus.Distance -
+					newds = (nextAction.TriggerDistance - newBrakingDistance) - Driver.DataBus.Distance -
 							Constants.SimulationSettings.DriverActionDistanceTolerance / 2;
 					break;
 				default:
@@ -629,31 +629,31 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 			var currentDistance = DataBus.Distance;
 
+			var brakingDistance = Driver.ComputeDecelerationDistance(DriverStrategy.BrakeTrigger.NextTargetSpeed) +
+								DefaultDriverStrategy.BrakingSafetyMargin;
+			DriverStrategy.BrakeTrigger.BrakingStartDistance = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance;
 			if (Phase == BrakingPhase.Coast) {
-				var brakingDistance = Driver.ComputeDecelerationDistance(DriverStrategy.BrakeTrigger.NextTargetSpeed) +
-									DefaultDriverStrategy.BrakingSafetyMargin;
-				DriverStrategy.BrakeTrigger.BrakingStartDistance = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance;
-
 				var nextBrakeAction = DriverStrategy.GetNextDrivingAction(DataBus.Distance, ds);
 				if (nextBrakeAction != null && !DriverStrategy.BrakeTrigger.TriggerDistance.IsEqual(nextBrakeAction.TriggerDistance) &&
-					nextBrakeAction.BrakingStartDistance.IsSmaller( DriverStrategy.BrakeTrigger.BrakingStartDistance)) {
+					nextBrakeAction.BrakingStartDistance.IsSmaller(DriverStrategy.BrakeTrigger.BrakingStartDistance)) {
 					DriverStrategy.BrakeTrigger = nextBrakeAction;
-					Log.Debug("setting brake trigger to new trigger: trigger distance: {0}, start braking @ {1}", nextBrakeAction.TriggerDistance, nextBrakeAction.BrakingStartDistance);
+					Log.Debug("setting brake trigger to new trigger: trigger distance: {0}, start braking @ {1}",
+						nextBrakeAction.TriggerDistance, nextBrakeAction.BrakingStartDistance);
 				}
-				
-				Log.Debug("start braking @ {0}", DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance);
-				var remainingDistanceToBrake = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance - currentDistance;
+
+				Log.Debug("start braking @ {0}", DriverStrategy.BrakeTrigger.BrakingStartDistance);
+				var remainingDistanceToBrake = DriverStrategy.BrakeTrigger.BrakingStartDistance - currentDistance;
 				var estimatedTimeInterval = remainingDistanceToBrake / DataBus.VehicleSpeed;
 				if (estimatedTimeInterval.IsSmaller(Constants.SimulationSettings.LowerBoundTimeInterval) ||
 					currentDistance + Constants.SimulationSettings.DriverActionDistanceTolerance >
-					DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance) {
+					DriverStrategy.BrakeTrigger.BrakingStartDistance) {
 					Phase = BrakingPhase.Brake;
 					Log.Debug("Switching to BRAKE Phase. currentDistance: {0}", currentDistance);
 				} else {
-					if ((currentDistance + ds).IsGreater(DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance)) {
+					if ((currentDistance + ds).IsGreater(DriverStrategy.BrakeTrigger.BrakingStartDistance)) {
 						return new ResponseDrivingCycleDistanceExceeded() {
 							//Source = this,
-							MaxDistance = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance - currentDistance
+							MaxDistance = DriverStrategy.BrakeTrigger.BrakingStartDistance - currentDistance
 						};
 					}
 				}
@@ -704,13 +704,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 						});
 					break;
 				case BrakingPhase.Brake:
-					var brakingDistance = Driver.ComputeDecelerationDistance(DriverStrategy.BrakeTrigger.NextTargetSpeed) +
-										DefaultDriverStrategy.BrakingSafetyMargin;
+
 					Log.Debug("Phase: BRAKE. breaking distance: {0} start braking @ {1}", brakingDistance,
-						DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance);
-					if (DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance < currentDistance) {
+						DriverStrategy.BrakeTrigger.BrakingStartDistance);
+					if (DriverStrategy.BrakeTrigger.BrakingStartDistance < currentDistance) {
 						Log.Info("Expected Braking Deceleration could not be reached! {0}",
-							DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance - currentDistance);
+							DriverStrategy.BrakeTrigger.BrakingStartDistance - currentDistance);
 					}
 					var targetDistance = DataBus.VehicleSpeed < Constants.SimulationSettings.MinVelocityForCoast
 						? DriverStrategy.BrakeTrigger.TriggerDistance
@@ -751,7 +750,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		protected override IResponse CheckRequestDoesNotExceedNextAction(Second absTime, Meter ds,
 			MeterPerSecond targetVelocity, Radian gradient, IResponse response, out Meter newds)
 		{
-			var nextAction = DriverStrategy.NextDrivingAction;
+			var nextAction = DriverStrategy.BrakeTrigger;
 			newds = ds;
 			if (nextAction == null) {
 				return response;
@@ -760,12 +759,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			switch (nextAction.Action) {
 				case DrivingBehavior.Coasting:
 					var v2 = Driver.DataBus.VehicleSpeed + response.Acceleration * response.SimulationInterval;
-					var brakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2,
+					var newBrakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2,
 						nextAction.NextTargetSpeed);
-					if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - brakingDistance)) {
+					if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - newBrakingDistance)) {
 						return response;
 					}
-					newds = (nextAction.TriggerDistance - brakingDistance) - Driver.DataBus.Distance -
+					newds = nextAction.TriggerDistance - newBrakingDistance - Driver.DataBus.Distance -
 							Constants.SimulationSettings.DriverActionDistanceTolerance / 2;
 					break;
 				default:
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
index 52003ba556f8e36fd7abf67df733baa762d3a5be..dc7739b3f9a0d952ed71b77f9befe8cdbbb7ba9c 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
@@ -81,7 +81,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			foreach (var kv in _powerDemands.Where(kv => !string.IsNullOrWhiteSpace(kv.Key))) {
 				container[kv.Key] = kv.Value;
 			}
-			container[ModalResultField.P_aux] = _powerDemands.Values.Sum(p => p);
+			if (container[ModalResultField.P_aux] == null) {
+				// don't overwrite if someone else already wrote the total aux power
+				container[ModalResultField.P_aux] = _powerDemands.Values.Sum(p => p);
+			}
 		}
 
 		protected override void DoCommitSimulationStep()