diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
index e19e41a6753dc541cf65090902fb3d224790fdda..6898975b0028e49145776b554101b6486151a50d 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
@@ -29,38 +29,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 		protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque,
 		PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset)
 		{
-			if (TestPowertrain.Gearbox != null) {
-				if (!(DataBus.GearboxInfo is APTNGearbox)) {
-					throw new VectoException("AT Gearbox Required!");
-				}
-				TestPowertrain.Gearbox.Gear = DataBus.VehicleInfo.VehicleStopped ? DataBus.GearboxInfo.NextGear : DataBus.GearboxInfo.Gear;
-			}
-
-			TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
-			//TestPowertrain.Vehicle.UpdateFrom(DataBus.VehicleInfo);
-			//(TestPowertrain.Container.VehicleInfo as Vehicle).PreviousState.Velocity = (DataBus.VehicleInfo as Vehicle).PreviousState.Velocity;
-
-			TestPowertrain.ElectricMotor.UpdateFrom(DataBus.ElectricMotorInfo(EmPosition));
-			TestPowertrain.Battery?.UpdateFrom(DataBus.BatteryInfo);
-			TestPowertrain.BatterySystem?.UpdateFrom(DataBus.BatteryInfo);
+			TestPowertrain.UpdateComponents();
 			TestPowertrain.Charger.UpdateFrom(maxPowerGenset);
-			TestPowertrain.WHRCharger?.UpdateFrom(DataBus.WHRCharger);
 
+			TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
 			TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity);
 
-			TestPowertrain.Gearbox?.UpdateFrom(DataBus.GearboxInfo);
-
-			TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower;
-
+			TestPowertrain.Gearbox?.UpdateFrom((DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState);
+			
 			var testResponse = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false);
-			var hybridStrategyResponse = new HybridStrategyResponse {
+			TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse {
 				CombustionEngineOn = false,
 				MechanicalAssistPower = new Dictionary<PowertrainPosition, Tuple<PerSecond, NewtonMeter>> {
-					{ EmPosition, Tuple.Create(testResponse.ElectricMotor.AvgDrivetrainSpeed, -testResponse.ElectricMotor.TorqueRequest) }
-				}
-			};
-			TestPowertrain.HybridController.ApplyStrategySettings(hybridStrategyResponse);
-
+					{ EmPosition, Tuple.Create(testResponse.ElectricMotor.AvgDrivetrainSpeed, -testResponse.ElectricMotor.TorqueRequest) } }
+			});
 			var testResponse2 = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false);
 			return new DrivetrainDemand {
 				AvgEmDrivetrainSpeed = testResponse2.ElectricMotor.AvgDrivetrainSpeed,
@@ -69,7 +51,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 				Response = testResponse2
 			};
 		}
-		
+
 		#endregion
 	}
 
@@ -82,35 +64,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 		public SerialHybridStrategy(VectoRunData runData, IVehicleContainer container) : base(runData, container) { }
 
 		protected override DrivetrainDemand GetDrivetrainPowerDemand(Second absTime, Second dt, NewtonMeter outTorque,
-				PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset)
+				PerSecond outAngularVelocity, GenSetOperatingPoint maxPowerGenset) 
 		{
-			TestPowertrain.Gearbox?.UpdateFrom(DataBus.GearboxInfo);
-			
-			if (TestPowertrain.Gearbox != null) {
-				TestPowertrain.Gearbox.Gear = DataBus.VehicleInfo.VehicleStopped ? (DataBus.GearboxInfo as Gearbox).NextGear : DataBus.GearboxInfo.Gear;
-			}
-			
-			TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
-
-			TestPowertrain.ElectricMotor.UpdateFrom(DataBus.ElectricMotorInfo(EmPosition));
-			TestPowertrain.Battery?.UpdateFrom(DataBus.BatteryInfo);
-			TestPowertrain.BatterySystem?.UpdateFrom(DataBus.BatteryInfo);
+			TestPowertrain.UpdateComponents();
 			TestPowertrain.Charger.UpdateFrom(maxPowerGenset);
-			TestPowertrain.WHRCharger?.UpdateFrom(DataBus.WHRCharger);
 
+			TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
 			TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity);
-			TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower;
-			TestPowertrain.Gearbox?.UpdateFrom(DataBus.GearboxInfo);
 
+			TestPowertrain.Gearbox?.UpdateFrom((DataBus.GearboxInfo as AbstractGearbox<GearboxState>).PreviousState);
+			
 			var testResponse = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false);
-
 			TestPowertrain.HybridController.ApplyStrategySettings(new HybridStrategyResponse {
 				CombustionEngineOn = false,
 				MechanicalAssistPower = new Dictionary<PowertrainPosition, Tuple<PerSecond, NewtonMeter>> {
-					{ EmPosition, Tuple.Create(testResponse.ElectricMotor.AvgDrivetrainSpeed, -testResponse.ElectricMotor.TorqueRequest) }
-				}
+					{ EmPosition, Tuple.Create(testResponse.ElectricMotor.AvgDrivetrainSpeed, -testResponse.ElectricMotor.TorqueRequest) } }
 			});
-
 			var testResponse2 = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false);
 			return new DrivetrainDemand {
 				AvgEmDrivetrainSpeed = testResponse2.ElectricMotor.AvgDrivetrainSpeed,
@@ -119,11 +88,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 				Response = testResponse2
 			};
 		}
+
 	}
 
 	// =======================================================================
 
-	public abstract class AbstractSerialHybridStrategy<T>  : LoggingObject, IHybridControlStrategy where T : class, IHybridControlledGearbox, IGearbox
+	public abstract class AbstractSerialHybridStrategy<T> : LoggingObject, IHybridControlStrategy where T : class, IHybridControlledGearbox, IGearbox
 	{
 
 		public enum StateMachineState
@@ -161,13 +131,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 		protected TestPowertrain<T> TestPowertrain;
 		protected TestGenset TestGenSet;
 		protected GenSetCharacteristics GenSetCharacteristics;
-			
+
 		protected PowertrainPosition EmPosition;
 
 		protected DryRunSolutionState DryRunSolution { get; set; }
 
 
-		public AbstractSerialHybridStrategy (VectoRunData runData, IVehicleContainer container)
+		public AbstractSerialHybridStrategy(VectoRunData runData, IVehicleContainer container)
 		{
 			DataBus = container;
 			ModelData = runData;
@@ -203,8 +173,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			PowertrainBuilder.BuildSimpleGenSet(runData, gensetContainer);
 			TestGenSet = new TestGenset(gensetContainer, DataBus);
 
-			
-			container.AddPreprocessor(new GensetPreprocessor(GenSetCharacteristics ,TestGenSet, runData.EngineData,
+
+			container.AddPreprocessor(new GensetPreprocessor(GenSetCharacteristics, TestGenSet, runData.EngineData,
 				runData.ElectricMachinesData.FirstOrDefault(x => x.Item1 == PowertrainPosition.GEN)?.Item2));
 		}
 
@@ -221,7 +191,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			}
 
 			GenSetCharacteristics.ContinuousTorque = ModelData.ElectricMachinesData
-				.FirstOrDefault(x => x.Item1 == EmPosition)?.Item2.Overload.ContinuousTorque ?? 0.SI<NewtonMeter>(); 
+				.FirstOrDefault(x => x.Item1 == EmPosition)?.Item2.Overload.ContinuousTorque ?? 0.SI<NewtonMeter>();
 
 			PreviousState.AngularVelocity = outAngularVelocity;
 			PreviousState.SMState = DataBus.BatteryInfo.StateOfCharge > StrategyParameters.TargetSoC
@@ -449,22 +419,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			}
 
 			return ApproachGensetOperatingPoint(absTime, dt, gensetLimit, gensetState);
-			
+
 		}
 
 		public GenSetOperatingPoint GensetOff => new
-			GenSetOperatingPoint
-			{
-				ICEOn = false,
-				ICESpeed = ModelData.EngineData.IdleSpeed,
-				ICETorque = null,
-				EMTorque =  null
-			};
+			GenSetOperatingPoint {
+			ICEOn = false,
+			ICESpeed = ModelData.EngineData.IdleSpeed,
+			ICETorque = null,
+			EMTorque = null
+		};
 
 		public GenSetOperatingPoint GensetIdle => new GenSetOperatingPoint() {
-			ICEOn =  true,
+			ICEOn = true,
 			ICESpeed = ModelData.EngineData.IdleSpeed,
-			ICETorque =  0.SI<NewtonMeter>(),
+			ICETorque = 0.SI<NewtonMeter>(),
 			EMTorque = null,
 		};
 
@@ -620,7 +589,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 
 			var iceSpeed = op.ICESpeed;
 			var emTqDt = op.ICETorque;
-			
+
 			TestGenSet.ElectricMotorCtl.EMTorque = emTqDt;
 			var r1 = TestGenSet.ElectricMotor.Request(absTime, dt, 0.SI<NewtonMeter>(), iceSpeed);
 
@@ -760,8 +729,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 
 			return (tqDt, iceSpeed, r1);
 		}
-		
-		
+
+
 		public IResponse AmendResponse(IResponse response, Second absTime, Second dt, NewtonMeter outTorque,
 			PerSecond outAngularVelocity, bool dryRun)
 		{
@@ -773,7 +742,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			CurrentState.ICEOn = DataBus.EngineCtl.CombustionEngineOn;
 			PreviousState = CurrentState;
 			CurrentState = new StrategyState();
-			
+
 			AllowEmergencyShift = false;
 		}
 
@@ -788,12 +757,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 		public void OperatingpointChangedDuringRequest(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
 			bool dryRun, IResponse retVal)
 		{
-			
+
 		}
 
 		public void RepeatDrivingAction(Second absTime)
 		{
-			
+
 		}
 
 		#endregion
@@ -854,8 +823,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 
 		public GenSetOperatingPoint OptimalPoint
 		{
-			get
-			{
+			get {
 				if (_optimalPoint == null) {
 					var tmp = OptimalPoints.Values.SelectMany(x => x).Where(x => x.ElectricPower > MinGensetPower).ToArray();
 					if (!tmp.Any()) {
@@ -870,8 +838,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 
 		public GenSetOperatingPoint OptimalPointDeRated
 		{
-			get
-			{
+			get {
 				if (_optimalPointDerated == null) {
 					var tmp = OptimalPoints.Values.SelectMany(x => x).Where(x => x.EMTorque.IsSmaller(ContinuousTorque)).Where(x => x.ElectricPower > MinGensetPower).ToArray();
 					if (!tmp.Any()) {
@@ -880,7 +847,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 							.Where(x => x.EMTorque.IsSmaller(ContinuousTorque)).ToArray();
 
 					}
-					
+
 					_optimalPointDerated = tmp.MinBy(x => x.FuelConsumption / x.ElectricPower);
 				}