diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs
index 230f4ebb439453957d1bccf563e3cd129eda84ac..88c8e5a8b6b8af06fba0f925ce9f32f6f5d58964 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PCCEcoRollEngineStopPreprocessor.cs
@@ -118,19 +118,19 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			var absTime = 0.SI<Second>();
 			var gradient = 0.SI<Radian>();
 			var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
-			var delta = initialResponse.Gearbox.GearboxPowerRequest;
+			var delta = initialResponse.Gearbox.PowerRequest;
 
 			try {
 				gradient = SearchAlgorithm.Search(
 					gradient, delta, 0.1.SI<Radian>(),
 					getYValue: response => {
 						var r = (ResponseDryRun)response;
-						return r.Gearbox.GearboxPowerRequest;
+						return r.Gearbox.PowerRequest;
 					},
 					evaluateFunction: grad => { return vehicle.Request(absTime, simulationInterval, acceleration, grad, true); },
 					criterion: response => {
 						var r = (ResponseDryRun)response;
-						return r.Gearbox.GearboxPowerRequest.Value();
+						return r.Gearbox.PowerRequest.Value();
 					}
 				);
 			} catch (VectoSearchAbortedException) {
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs
index ddfacd14136f6ce14a464bd747d66ffb226995e7..bbcb6157d1186e9b7514fe96048709be35655ac8 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs
@@ -123,9 +123,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				var response = _gearbox.Initialize(gear, outTorque, outAngularVelocity);
 
 				var inAngularSpeed = outAngularVelocity * ModelData.Gears[gear].Ratio;
-				var fullLoadPower = response.Engine.EnginePowerRequest - response.DeltaFullLoad;
-				var reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
-				var inTorque = response.Clutch.ClutchPowerRequest / inAngularSpeed;
+				var fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad;
+				var reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
+				var inTorque = response.Clutch.PowerRequest / inAngularSpeed;
 
 				// if in shift curve and torque reserve is provided: return the current gear
 				if (!IsBelowDownShiftCurve(gear, inTorque, inAngularSpeed) && !IsAboveUpShiftCurve(gear, inTorque, inAngularSpeed) &&
@@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				var response = _gearbox.Initialize(gear, outTorque, outAngularVelocity);
 
 				var fullLoadPower = response.Engine.DynamicFullLoadPower; //EnginePowerRequest - response.DeltaFullLoad;
-				var reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
+				var reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
 
 				if (response.Engine.EngineSpeed > DataBus.EngineIdleSpeed && reserve >= ModelData.StartTorqueReserve) {
 					_nextGear = gear;
@@ -174,7 +174,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return 1;
 		}
 
-		public override bool ShiftRequired(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, uint gear, Second lastShiftTime, IResponse response)
+		protected override bool DoCheckShiftRequired(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, uint gear, Second lastShiftTime, IResponse response)
 		{
 			// no shift when vehicle stands
 			if (DataBus.VehicleStopped) {
@@ -270,7 +270,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					var response = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, currentGear);
 
 					inAngularVelocity = response.Engine.EngineSpeed; //ModelData.Gears[currentGear].Ratio * outAngularVelocity;
-					inTorque = response.Clutch.ClutchPowerRequest / inAngularVelocity;
+					inTorque = response.Clutch.PowerRequest / inAngularVelocity;
 
 					var maxTorque = VectoMath.Min(response.Engine.DynamicFullLoadPower / ((DataBus.EngineSpeed + response.Engine.EngineSpeed) / 2),
 						currentGear > 1
@@ -301,13 +301,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var response = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, tryNextGear);
 
 			var inAngularVelocity = ModelData.Gears[tryNextGear].Ratio * outAngularVelocity;
-			var inTorque = response.Clutch.ClutchPowerRequest / inAngularVelocity;
+			var inTorque = response.Clutch.PowerRequest / inAngularVelocity;
 
 			// if next gear supplied enough power reserve: take it
 			// otherwise take
 			if (!IsBelowDownShiftCurve(tryNextGear, inTorque, inAngularVelocity)) {
-				var fullLoadPower = response.Engine.EnginePowerRequest - response.DeltaFullLoad;
-				var reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
+				var fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad;
+				var reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
 
 				if (reserve >= ModelData.TorqueReserve) {
 					currentGear = tryNextGear;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyACEA.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyACEA.cs
index e157a16c2bde616b7b870af503f23ce9455aa28a..734e12cdace8aafd22b914f9c22325c49e1947f4 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyACEA.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyACEA.cs
@@ -145,7 +145,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		}
 
 
-		public override bool ShiftRequired(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, uint gear, Second lastShiftTime, IResponse response)
+		protected override bool DoCheckShiftRequired(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, uint gear, Second lastShiftTime, IResponse response)
 		{
 			var cardanDemand = DataBus.CurrentAxleDemand;
 			var currentCardanPower = cardanDemand.Item1 * cardanDemand.Item2;
@@ -374,12 +374,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					respAccRsv.Engine.EngineSpeed);
 				retVal = new GearRating(
 					GearRatingCase.A,
-					(fc.Value.ConvertToGrammPerHour().Value / VectoMath.Max(respDriverDemand.Axlegear.AxlegearPowerRequest, 1.SI<Watt>())).Value() *
+					(fc.Value.ConvertToGrammPerHour().Value / VectoMath.Max(respDriverDemand.Axlegear.PowerRequest, 1.SI<Watt>())).Value() *
 					1e3,
 					engineSpeedHighThreshold);
 			} else {
 				retVal = new GearRating(
-					GearRatingCase.B, (respAccRsv.Engine.EnginePowerRequest - respAccRsv.Engine.DynamicFullLoadPower).Value(),
+					GearRatingCase.B, (respAccRsv.Engine.PowerRequest - respAccRsv.Engine.DynamicFullLoadPower).Value(),
 					engineSpeedHighThreshold);
 			}
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs
index 7a490003e97d8d01abf64d3e130dd8470637ca10..3d0bf0e534f29a9807638247ba005b4e02115af7 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs
@@ -115,7 +115,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				var response = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, tryNextGear);
 
 				var inAngularVelocity = ModelData.Gears[tryNextGear].Ratio * outAngularVelocity;
-				var inTorque = response.Clutch.ClutchPowerRequest / inAngularVelocity;
+				var inTorque = response.Clutch.PowerRequest / inAngularVelocity;
 
 				// if next gear supplied enough power reserve: take it
 				// otherwise take
@@ -130,12 +130,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 				var pNextGearMax = DataBus.EngineStationaryFullPower(estimatedEngineSpeed);
 
-				if (!response.Engine.EnginePowerRequest.IsSmaller(pNextGearMax)) {
+				if (!response.Engine.PowerRequest.IsSmaller(pNextGearMax)) {
 					continue;
 				}
 
-				var fullLoadPower = response.Engine.EnginePowerRequest - response.DeltaFullLoad;
-				var reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
+				var fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad;
+				var reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
 
 				//var reserve = 1 - response.EngineTorqueDemandTotal / response.EngineStationaryFullLoadTorque;
 
@@ -157,8 +157,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					var reducedTorque = outTorque - accelerationTorque * (1 - accelerationFactor);
 
 					response = RequestDryRunWithGear(absTime, dt, reducedTorque, outAngularVelocity, tryNextGear);
-					fullLoadPower = response.Engine.EnginePowerRequest - response.DeltaFullLoad;
-					reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
+					fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad;
+					reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
 					if (reserve < ModelData.TorqueReserve) {
 						continue;
 					} else {
@@ -254,7 +254,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				//var response = RequestDryRunWithGear(absTime, dt, DataBus.VehicleSpeed, DataBus.DriverAcceleration, tryNextGear);
 
 				var inAngularVelocity = ModelData.Gears[tryNextGear].Ratio * outAngularVelocity;
-				var inTorque = response.Clutch.ClutchPowerRequest / inAngularVelocity;
+				var inTorque = response.Clutch.PowerRequest / inAngularVelocity;
 
 				if (IsAboveUpShiftCurve(tryNextGear, inTorque, inAngularVelocity)) {
 					continue;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
index 97239457c2bbdb577eb7630397bf920b84ec3b10..bdcadaa91cf0df7b1aced984531eb3c4aecd0f6b 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
@@ -118,7 +118,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		#endregion
 
-		public override bool ClutchClosed(Second absTime)
+		public override bool GearEngaged(Second absTime)
 		{
 			return absTime.IsGreater(DataBus.AbsTime) ||
 					!(CurrentState.Disengaged || (DataBus.DriverBehavior == DrivingBehavior.Halted || (DisengageGearbox && !ModelData.ATEcoRollReleaseLockupClutch)));
@@ -208,10 +208,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return new ResponseDryRun(this) {
 				Engine = {
 					EngineSpeed = response.Engine.EngineSpeed,
-					EnginePowerRequest = response.Engine.EnginePowerRequest,
+					PowerRequest = response.Engine.PowerRequest,
 				},
 				Gearbox = {
-					GearboxPowerRequest = outTorque * outAngularVelocity,
+					PowerRequest = outTorque * outAngularVelocity,
 				}
 			};
 		}
@@ -254,7 +254,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					retVal = new ResponseFailTimeInterval(this) {
 						DeltaT = ModelData.PowershiftShiftTime,
 						Gearbox = {
-							GearboxPowerRequest =
+							PowerRequest =
 								outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0
 						}
 					};
@@ -267,7 +267,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				}
 			} while (loop && ++count < 2);
 
-			retVal.Gearbox.GearboxPowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0;
+			retVal.Gearbox.PowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0;
 			return retVal;
 		}
 
@@ -366,7 +366,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				// if gearbox is disengaged the 0[W]-line is the limit for drag and full load.
 				return new ResponseDryRun(this) {
 					Gearbox = {
-						GearboxPowerRequest = outTorque * avgAngularVelocity,
+						PowerRequest = outTorque * avgAngularVelocity,
 					},
 					DeltaDragLoad = outTorque * avgAngularVelocity,
 					DeltaFullLoad = outTorque * avgAngularVelocity,
@@ -377,7 +377,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return new ResponseOverload(this) {
 					Delta = outTorque * avgAngularVelocity,
 					Gearbox = {
-						GearboxPowerRequest = outTorque * avgAngularVelocity
+						PowerRequest = outTorque * avgAngularVelocity
 					}
 				};
 			}
@@ -387,7 +387,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return new ResponseUnderload(this) {
 					Delta = outTorque * avgAngularVelocity,
 					Gearbox = {
-						GearboxPowerRequest = outTorque * avgAngularVelocity
+						PowerRequest = outTorque * avgAngularVelocity
 					}
 				};
 			}
@@ -395,7 +395,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			Log.Debug("Invoking IdleController...");
 
 			var retval = IdleController.Request(absTime, dt, 0.SI<NewtonMeter>(), null);
-			retval.Clutch.ClutchPowerRequest = 0.SI<Watt>();
+			retval.Clutch.PowerRequest = 0.SI<Watt>();
 
 			// no dry-run - update state
 			var effectiveRatio = ModelData.Gears[Gear].Ratio;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategyOptimized.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategyOptimized.cs
index bbecafe73c3169a2dd14c00d76ff827a766d37d7..7432e9f7cd51c0959aa377821a1fe37bcdb05e77 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategyOptimized.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategyOptimized.cs
@@ -288,11 +288,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 				//var response = RequestDryRunWithGear(absTime, dt, vehicleSpeedPostShift, DataBus.DriverAcceleration, next);
 
-				if (!response.Engine.EnginePowerRequest.IsSmaller(pNextGearMax)) {
+				if (!response.Engine.PowerRequest.IsSmaller(pNextGearMax)) {
 					continue;
 				}
 
-				var inTorque = response.Engine.EnginePowerRequest / inAngularVelocity;
+				var inTorque = response.Engine.PowerRequest / inAngularVelocity;
 
 				// if next gear supplied enough power reserve: take it
 				// otherwise take
@@ -300,8 +300,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					continue;
 				}
 
-				var fullLoadPower = response.Engine.EnginePowerRequest - response.DeltaFullLoad;
-				var reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
+				var fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad;
+				var reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
 
 				if (reserve < ModelData.TorqueReserve) {
 					var accelerationFactor = outAngularVelocity * ModelData.Gears[currentGear].Ratio < fld[0].NTq98hSpeed
@@ -319,8 +319,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					response = RequestDryRunWithGear(absTime, dt, reducedTorque, outAngularVelocity, next);
 
 					//response = RequestDryRunWithGear(absTime, dt, vehicleSpeedPostShift, DataBus.DriverAcceleration * accelerationFactor, next);
-					fullLoadPower = response.Engine.EnginePowerRequest - response.DeltaFullLoad;
-					reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
+					fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad;
+					reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
 					if (reserve < ModelData.TorqueReserve) {
 						continue;
 					}
@@ -412,7 +412,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				var response = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, next);
 
 				var inAngularVelocity = ModelData.Gears[next.Gear].Ratio * outAngularVelocity;
-				var inTorque = response.Engine.EnginePowerRequest / inAngularVelocity;
+				var inTorque = response.Engine.PowerRequest / inAngularVelocity;
 
 				if (!IsAboveUpShiftCurve(next.Gear, inTorque, inAngularVelocity, next.TorqueConverterLocked.Value)) {
 					if (double.IsNaN(fcCurrent)) {
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Angledrive.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Angledrive.cs
index fa5416a989e7d9783433985e9144e61f06280d97..7c9a1d017eb265228095d70204475f42f18c9c42 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Angledrive.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Angledrive.cs
@@ -46,7 +46,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			bool dryRun = false)
 		{
 			var retVal = base.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
-			retVal.Angledrive.AngledrivePowerRequest = outTorque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
+			retVal.Angledrive.PowerRequest = outTorque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
 			return retVal;
 		}
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
index a568e53585ba4e19c653b152d4c892b702ff5b65..720c808f16008ef10a6534f017fa4f31ec78028f 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
@@ -46,7 +46,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		public override IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
 		{
 			var retVal = base.Initialize(outTorque, outAngularVelocity);
-			retVal.Axlegear.AxlegearPowerRequest = outTorque * outAngularVelocity;
+			retVal.Axlegear.PowerRequest = outTorque * outAngularVelocity;
 			retVal.Axlegear.CardanTorque = PreviousState.InTorque;
 			return retVal;
 		}
@@ -56,7 +56,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			bool dryRun = false)
 		{
 			var retVal = base.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
-			retVal.Axlegear.AxlegearPowerRequest = outTorque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
+			retVal.Axlegear.PowerRequest = outTorque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
 			retVal.Axlegear.CardanTorque = CurrentState.InTorque;
 			return retVal;
 		}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
index 0d67ecc8245390d7ea61359dad5584528a7a95de..051e6abd59c9b90fab5a3cf21a0a32cae91fd4dc 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
@@ -221,7 +221,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					DeltaEngineSpeed = avgEngineSpeed - engineSpeedLimit,
 					Engine = {
 						EngineSpeed = angularVelocity,
-						EnginePowerRequest = torqueOut * avgEngineSpeed,
+						PowerRequest = torqueOut * avgEngineSpeed,
 						DynamicFullLoadPower = dynamicFullLoadPower,
 						EngineTorqueDemand = torqueOut,
 						EngineTorqueDemandTotal = totalTorqueDemand,
@@ -268,7 +268,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					Delta = deltaFull * avgEngineSpeed,
 					Engine = {
 						EngineSpeed = angularVelocity,
-						EnginePowerRequest = totalTorqueDemand * avgEngineSpeed,
+						PowerRequest = totalTorqueDemand * avgEngineSpeed,
 						DynamicFullLoadPower = dynamicFullLoadPower,
 						EngineTorqueDemand = torqueOut,
 						EngineTorqueDemandTotal = totalTorqueDemand,
@@ -287,7 +287,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					AbsTime = absTime,
 					Delta = deltaDrag * avgEngineSpeed,
 					Engine = {
-						EnginePowerRequest = totalTorqueDemand * avgEngineSpeed,
+						PowerRequest = totalTorqueDemand * avgEngineSpeed,
 						DynamicFullLoadPower = dynamicFullLoadPower,
 						EngineTorqueDemand = torqueOut,
 						EngineTorqueDemandTotal = totalTorqueDemand,
@@ -304,7 +304,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			return new ResponseSuccess(this) {
 				Engine = {
-					EnginePowerRequest = totalTorqueDemand * avgEngineSpeed,
+					PowerRequest = totalTorqueDemand * avgEngineSpeed,
 					EngineTorqueDemand = torqueOut,
 					EngineTorqueDemandTotal = totalTorqueDemand,
 					EngineStationaryFullLoadTorque = stationaryFullLoadTorque,
@@ -348,7 +348,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			return new ResponseSuccess(this) {
 				Engine = {
-					EnginePowerRequest = PreviousState.EnginePower,
+					PowerRequest = PreviousState.EnginePower,
 					DynamicFullLoadPower = PreviousState.DynamicFullLoadTorque * PreviousState.EngineSpeed,
 					EngineSpeed = outAngularVelocity,
 					EngineTorqueDemand = outTorque,
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
index a60611c2842345d89827a87e2a3819e433cac77c..38bf3ebcf074cf975a064b75a3c13fc23b61739c 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
@@ -125,7 +125,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			PreviousState.InertiaTorqueLossOut = 0.SI<NewtonMeter>();
 			PreviousState.Gear = Gear;
 
-			response.Gearbox.GearboxPowerRequest = inTorque * inAngularVelocity;
+			response.Gearbox.PowerRequest = inTorque * inAngularVelocity;
 			return response;
 		}
 
@@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				? RequestDisengaged(absTime, dt, outTorque, outAngularVelocity, dryRun)
 				: RequestEngaged(absTime, dt, outTorque, outAngularVelocity, dryRun);
 
-			retVal.Gearbox.GearboxPowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2;
+			retVal.Gearbox.PowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2;
 			return retVal;
 		}
 
@@ -235,7 +235,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 			if (dryRun) {
 				var dryRunResponse = HandleDryRunRequest(absTime, dt, torqueConverterLocked, inTorque, inAngularVelocity);
-				dryRunResponse.Gearbox.GearboxPowerRequest = outTorque * avgOutAngularVelocity;
+				dryRunResponse.Gearbox.PowerRequest = outTorque * avgOutAngularVelocity;
 				return dryRunResponse;
 			}
 
@@ -257,7 +257,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					CurrentState.InAngularVelocity);
 			}
 			var response = NextComponent.Request(absTime, dt, inTorque, inAngularVelocity);
-			response.Gearbox.GearboxPowerRequest = outTorque * avgOutAngularVelocity;
+			response.Gearbox.PowerRequest = outTorque * avgOutAngularVelocity;
 			return response;
 		}
 
@@ -313,7 +313,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				// if gearbox is disengaged the 0-line is the limit for drag and full load
 				return new ResponseDryRun(this)				{
 					Gearbox = {
-						GearboxPowerRequest = outTorque * avgOutAngularVelocity,
+						PowerRequest = outTorque * avgOutAngularVelocity,
 					},
 					DeltaDragLoad = outTorque * avgOutAngularVelocity,
 					DeltaFullLoad = outTorque * avgOutAngularVelocity,
@@ -325,7 +325,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return new ResponseOverload(this) {
 					Delta = outTorque * avgOutAngularVelocity,
 					Gearbox = {
-						GearboxPowerRequest = outTorque * avgOutAngularVelocity
+						PowerRequest = outTorque * avgOutAngularVelocity
 					}
 				};
 			}
@@ -334,7 +334,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return new ResponseUnderload(this) {
 					Delta = outTorque * avgOutAngularVelocity,
 					Gearbox = {
-						GearboxPowerRequest = outTorque * avgOutAngularVelocity
+						PowerRequest = outTorque * avgOutAngularVelocity
 					}
 				};
 			}
@@ -360,7 +360,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 						disengagedResponse.Engine.EngineSpeed);
 				}
 			}
-			disengagedResponse.Gearbox.GearboxPowerRequest = outTorque * avgOutAngularVelocity;
+			disengagedResponse.Gearbox.PowerRequest = outTorque * avgOutAngularVelocity;
 			CurrentState.SetState(0.SI<NewtonMeter>(), disengagedResponse.Engine.EngineSpeed, 0.SI<NewtonMeter>(), outAngularVelocity);
 			CurrentState.Gear = Gear;
 
@@ -499,7 +499,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 		}
 
-		public override bool ClutchClosed(Second absTime)
+		public override bool GearEngaged(Second absTime)
 		{
 			return (DataBus.DriverBehavior == DrivingBehavior.Braking
 						? DataBus.CycleData.LeftSample.Gear
@@ -526,7 +526,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			public override IGearbox Gearbox { get; set; }
 
-			public override bool ShiftRequired(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, uint gear, Second lastShiftTime, IResponse response)
+			protected override bool DoCheckShiftRequired(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity, uint gear, Second lastShiftTime, IResponse response)
 			{
 				return false;
 			}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
index 131977144741a26f4786277c3467f1e1784bcd59..4a9f36f81031794c2e3bd41a17fde45127393964 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
@@ -744,7 +744,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					var nextResp = NextComponent.Request(absTime, operatingPoint.SimulationInterval,
 						operatingPoint.Acceleration,
 						gradient, true);
-					deltaPower = nextResp.Gearbox.GearboxPowerRequest;
+					deltaPower = nextResp.Gearbox.PowerRequest;
 				}).
 				Case<ResponseEngineSpeedTooHigh>(r => {
 					IterationStatistics.Increment(this, "SearchBrakingPower");
@@ -752,10 +752,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					var nextResp = NextComponent.Request(absTime, operatingPoint.SimulationInterval,
 						operatingPoint.Acceleration,
 						gradient, true);
-					deltaPower = nextResp.Gearbox.GearboxPowerRequest;
+					deltaPower = nextResp.Gearbox.PowerRequest;
 				}).
 				Case<ResponseUnderload>(r =>
-					deltaPower = DataBus.ClutchClosed(absTime) ? r.Delta : r.Gearbox.GearboxPowerRequest).
+					deltaPower = DataBus.ClutchClosed(absTime) ? r.Delta : r.Gearbox.PowerRequest).
 				Default(
 					r => {
 						throw new UnexpectedResponseException("cannot use response for searching braking power!", r);
@@ -766,7 +766,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					deltaPower.Abs() * (DataBus.GearboxType.AutomaticTransmission() ? 0.5 : 1),
 					getYValue: result => {
 						var response = (ResponseDryRun)result;
-						return DataBus.ClutchClosed(absTime) ? response.DeltaDragLoad : response.Gearbox.GearboxPowerRequest;
+						return DataBus.ClutchClosed(absTime) ? response.DeltaDragLoad : response.Gearbox.PowerRequest;
 					},
 					evaluateFunction: x => {
 						DataBus.BrakePower = x;
@@ -782,7 +782,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 						var response = (ResponseDryRun)result;
 						var delta = DataBus.ClutchClosed(absTime)
 							? response.DeltaDragLoad
-							: response.Gearbox.GearboxPowerRequest;
+							: response.Gearbox.PowerRequest;
 						return delta.Value();
 					},
 					forceLineSearch: DataBus.GearboxType.AutomaticTransmission() && !DataBus.TCLocked);
@@ -816,7 +816,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 						if (searchEngineSpeed) {
 							return r.DeltaEngineSpeed * 1.SI<NewtonMeter>();
 						}
-						return actionRoll ? r.Gearbox.GearboxPowerRequest : (coastingOrRoll ? r.DeltaDragLoad : r.DeltaFullLoad);
+						return actionRoll ? r.Gearbox.PowerRequest : (coastingOrRoll ? r.DeltaDragLoad : r.DeltaFullLoad);
 					},
 					evaluateFunction:
 						acc => {
@@ -852,7 +852,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 							return r.DeltaEngineSpeed.Value();
 						}
 						delta = actionRoll
-							? r.Gearbox.GearboxPowerRequest
+							? r.Gearbox.PowerRequest
 							: (coastingOrRoll ? r.DeltaDragLoad : r.DeltaFullLoad);
 						return delta.Value();
 					},
@@ -881,9 +881,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			Watt origDelta = null;
 			if (actionRoll) {
 				initialResponse.Switch().
-					Case<ResponseDryRun>(r => origDelta = r.Gearbox.GearboxPowerRequest).
+					Case<ResponseDryRun>(r => origDelta = r.Gearbox.PowerRequest).
 					Case<ResponseOverload>(r => origDelta = r.Delta).
-					Case<ResponseFailTimeInterval>(r => origDelta = r.Gearbox.GearboxPowerRequest).
+					Case<ResponseFailTimeInterval>(r => origDelta = r.Gearbox.PowerRequest).
 					Default(r => {
 						throw new UnexpectedResponseException("SearchOperatingPoint: Unknown response type.", r);
 					});
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
index 4882598ef81b5c5c97190cf76c180d1da6c97735..fee4bd8ffeed3515a9a90ac39797d13a0d2d6e00 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
@@ -39,7 +39,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			if (NextComponent == null) {
 				return new ResponseSuccess(this) {
 					Engine = {
-						EnginePowerRequest = outTorque * outAngularVelocity,
+						PowerRequest = outTorque * outAngularVelocity,
 						EngineSpeed = outAngularVelocity
 					}
 				};
@@ -175,7 +175,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 						ElectricMotorPowerMech = (inTorque - outTorque) * avgSpeed,
 					},
 					Engine = {
-						EnginePowerRequest = 0.SI<Watt>(),
+						PowerRequest = 0.SI<Watt>(),
 						EngineSpeed = outAngularVelocity
 					},
 				};
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
index e8eae4d1fd1a94b56516a3e5d3253a3eb6b03795..3cb707d4262f85fa2306c2327a3d0a5001f6251b 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
@@ -43,8 +43,8 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 {
-	public class Gearbox : AbstractGearbox<GearboxState>
-	{
+	public class Gearbox : AbstractGearbox<GearboxState>, IHybridControlledGearbox
+	{ 
 		/// <summary>
 		/// The shift strategy.
 		/// </summary>
@@ -61,6 +61,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		protected internal bool Disengaged = true;
 
 		protected internal GearInfo _nextGear;
+		private Second _overrideDisengage;
 
 		public Second LastUpshift { get; protected internal set; }
 
@@ -71,11 +72,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			get { return _strategy?.NextGear ?? _nextGear; }
 		}
 
-		public override bool ClutchClosed(Second absTime)
+		public override bool GearEngaged(Second absTime)
 		{
-			return !DisengageGearbox && EngageTime.IsSmallerOrEqual(absTime, ModelData.TractionInterruption / 20);
+			return !DisengageGearbox && (_overrideDisengage == null || !_overrideDisengage.IsEqual(absTime)) &&
+					EngageTime.IsSmallerOrEqual(absTime, ModelData.TractionInterruption / 20);
 		}
 
+		// controlled by driver (PCC / EcoRoll)
 		public override bool DisengageGearbox { get; set; }
 
 		public Gearbox(IVehicleContainer container, IShiftStrategy strategy, VectoRunData runData) : base(container, runData)
@@ -153,17 +156,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			Gear = oldGear;
 			return new ResponseDryRun(this) {
 				Engine = {
-					EnginePowerRequest = response.Engine.EnginePowerRequest,
+					PowerRequest = response.Engine.PowerRequest,
 					EngineSpeed = response.Engine.EngineSpeed,
 					DynamicFullLoadPower = response.Engine.DynamicFullLoadPower,
 				},
 				Clutch = {
-					ClutchPowerRequest = response.Clutch.ClutchPowerRequest,
+					PowerRequest = response.Clutch.PowerRequest,
 				},
 				Gearbox = {
-					GearboxPowerRequest = outTorque * outAngularVelocity,
+					PowerRequest = outTorque * outAngularVelocity,
 				},
-				DeltaFullLoad = response.Engine.EnginePowerRequest - fullLoad
+				DeltaFullLoad = response.Engine.PowerRequest - fullLoad
 			};
 		}
 
@@ -194,10 +197,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				EngageTime = absTime + dt;
 			}
 
-			if (ClutchClosed(absTime) && Disengaged && !outAngularVelocity.IsEqual(0)) {
+			if (GearEngaged(absTime) && Disengaged && !outAngularVelocity.IsEqual(0)) {
 				ReEngageGear(absTime, dt, outTorque, outAngularVelocity);
 				Log.Debug("Gearbox engaged gear {0}", Gear);
 			}
+			if (_overrideDisengage != null && (!_strategy?.CheckGearshiftRequired ?? false ) && !dryRun) {
+				var changeGear = _strategy?.ShiftRequired(absTime, dt, outTorque, outAngularVelocity,
+					outTorque / ModelData.Gears[Gear].Ratio, outAngularVelocity * ModelData.Gears[Gear].Ratio, Gear,
+					EngageTime, null) ?? false;
+				if (changeGear)
+				{
+					ReEngageGear(absTime, dt, outTorque, outAngularVelocity);
+				}
+			}
 
 			var gear = Disengaged ? NextGear.Gear : Gear;
 			var avgOutAngularVelocity = (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0;
@@ -232,7 +244,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return RequestGearDisengaged(absTime, dt, outTorque, outAngularVelocity, inTorque, dryRun);
 			}
 
-			return ClutchClosed(absTime)
+			return GearEngaged(absTime)
 				? RequestGearEngaged(absTime, dt, outTorque, outAngularVelocity, inTorque, inTorqueLossResult, inertiaTorqueLossOut, dryRun)
 				: RequestGearDisengaged(absTime, dt, outTorque, outAngularVelocity, inTorque, dryRun);
 		}
@@ -270,7 +282,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				var delta = inTorque * avgInAngularVelocity;
 				return new ResponseDryRun(this) {
 					Gearbox = {
-						GearboxPowerRequest = delta,
+						PowerRequest = delta,
 					},
 					DeltaDragLoad = delta,
 					DeltaFullLoad = delta,
@@ -284,7 +296,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return new ResponseFailTimeInterval(this) {
 					DeltaT = EngageTime - absTime,
 					Gearbox = {
-						GearboxPowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0
+						PowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0
 					}
 				};
 			}
@@ -300,7 +312,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return new ResponseOverload(this) {
 					Delta = inTorque * avgInAngularVelocity,
 					Gearbox = {
-						GearboxPowerRequest = inTorque * avgInAngularVelocity
+						PowerRequest = inTorque * avgInAngularVelocity
 					}
 				};
 			}
@@ -309,7 +321,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				return new ResponseUnderload(this) {
 					Delta = inTorque * avgInAngularVelocity,
 					Gearbox = {
-						GearboxPowerRequest = inTorque * avgInAngularVelocity
+						PowerRequest = inTorque * avgInAngularVelocity
 					}
 				};
 			}
@@ -328,7 +340,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			//CurrentState.InAngularVelocity = response.EngineSpeed;
 
-			response.Gearbox.GearboxPowerRequest = outTorque * avgAngularVelocity;
+			response.Gearbox.PowerRequest = outTorque * avgAngularVelocity;
 
 			return response;
 		}
@@ -354,7 +366,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			
 			if (dryRun) {
 				var dryRunResponse = NextComponent.Request(absTime, dt, inTorque, inAngularVelocity, true);
-				dryRunResponse.Gearbox.GearboxPowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0;
+				dryRunResponse.Gearbox.PowerRequest = outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0;
 				return dryRunResponse;
 			}
 
@@ -366,6 +378,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					response.Engine.EngineSpeed, Gear, EngageTime, response) ?? false;
 
 				if (shiftRequired) {
+					if (_overrideDisengage != null)
+					{
+						EngageTime = absTime;
+						return RequestGearEngaged(absTime, dt, outTorque, outAngularVelocity, inTorque, inTorqueLossResult, inertiaTorqueLossOut, dryRun);
+					}
 					EngageTime = absTime + ModelData.TractionInterruption;
 
 					Log.Debug("Gearbox is shifting. absTime: {0}, dt: {1}, interuptionTime: {2}, out: ({3}, {4}), in: ({5}, {6})",
@@ -379,14 +396,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					return new ResponseGearShift(this) {
 						SimulationInterval = ModelData.TractionInterruption,
 						Gearbox = {
-							GearboxPowerRequest =
+							PowerRequest =
 								outTorque * (PreviousState.OutAngularVelocity + outAngularVelocity) / 2.0,
 						},
 						Engine = {
 							EngineSpeed = response.Engine.EngineSpeed,
 							EngineTorqueDemand = response.Engine.EngineTorqueDemand,
 							EngineTorqueDemandTotal = response.Engine.EngineTorqueDemandTotal,
-							EnginePowerRequest = response.Engine.EnginePowerRequest
+							PowerRequest = response.Engine.PowerRequest
 						}
 					};
 				}
@@ -406,7 +423,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			// end critical section
 
 
-			response.Gearbox.GearboxPowerRequest = outTorque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
+			response.Gearbox.PowerRequest = outTorque * (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
 
 			return response;
 		}
@@ -464,7 +481,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				Disengaged = true;
 				EngageTime = -double.MaxValue.SI<Second>();
 			}
+			if (GearEngaged(DataBus.AbsTime))
+			{
+				_overrideDisengage = null;
+			}
 			base.DoCommitSimulationStep();
 		}
+
+		public bool SwitchToNeutral
+		{
+			set
+			{
+				_overrideDisengage = value ? DataBus.AbsTime : null;
+				Disengaged = value;
+			}
+		}
 	}
 }
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MaxGradabilityPreprocessor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MaxGradabilityPreprocessor.cs
index 453118b590eb0963183dd2067b5caf462f10a5f8..116bfd5728a573784c27dd8bd04b0b7ab947ae08 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MaxGradabilityPreprocessor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MaxGradabilityPreprocessor.cs
@@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
 		{
 			var gradientMax = VectoMath.InclinationToAngle(1);
 			var responseMax = vehicle.Initialize(vehicleSpeed, gradientMax);
-			var deltaMax = responseMax.Engine.EnginePowerRequest / responseMax.Engine.EngineSpeed - maxTorque;
+			var deltaMax = responseMax.Engine.PowerRequest / responseMax.Engine.EngineSpeed - maxTorque;
 			if (deltaMax.IsSmaller(0)) {
 				return gradientMax;
 			}
@@ -81,13 +81,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
 			var gradient = VectoMath.InclinationToAngle(0);
 			var response = vehicle.Initialize(vehicleSpeed, gradient);
 
-			var delta = response.Engine.EnginePowerRequest / response.Engine.EngineSpeed - maxTorque;
+			var delta = response.Engine.PowerRequest / response.Engine.EngineSpeed - maxTorque;
 			gradient = SearchAlgorithm.Search(
 				gradient, delta, VectoMath.InclinationToAngle(1),
 				getYValue: r => {
 					var rs = r as ResponseSuccess;
 					if (rs != null) {
-						return rs.Engine.EnginePowerRequest / rs.Engine.EngineSpeed - maxTorque;
+						return rs.Engine.PowerRequest / rs.Engine.EngineSpeed - maxTorque;
 					}
 
 					return 0.SI<NewtonMeter>();
@@ -98,7 +98,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
 				criterion: r => {
 					var rs = r as ResponseSuccess;
 					if (rs != null) {
-						return (rs.Engine.EnginePowerRequest / rs.Engine.EngineSpeed - maxTorque).Value();
+						return (rs.Engine.PowerRequest / rs.Engine.EngineSpeed - maxTorque).Value();
 					}
 					return 0;
 				}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs
index fd692244b3823d445276a172795c4405716c3f19..d1af5f767aeb8a5a702036a92342285a41ee62e7 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/MeasuredSpeedDrivingCycle.cs
@@ -230,14 +230,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			DataBus.BrakePower = SearchAlgorithm.Search(DataBus.BrakePower, r.Delta, -r.Delta,
 				getYValue: result => DataBus.ClutchClosed(absTime)
 					? ((ResponseDryRun)result).DeltaDragLoad
-					: ((ResponseDryRun)result).Gearbox.GearboxPowerRequest,
+					: ((ResponseDryRun)result).Gearbox.PowerRequest,
 				evaluateFunction: x => {
 					DataBus.BrakePower = x;
 					return NextComponent.Request(absTime, dt, acc, gradient, true);
 				},
 				criterion: y => DataBus.ClutchClosed(absTime)
 					? ((ResponseDryRun)y).DeltaDragLoad.Value()
-					: ((ResponseDryRun)y).Gearbox.GearboxPowerRequest.Value());
+					: ((ResponseDryRun)y).Gearbox.PowerRequest.Value());
 			Log.Info(
 				"Found operating point for braking. absTime: {0}, dt: {1}, acceleration: {2}, gradient: {3}, BrakePower: {4}",
 				absTime, dt, acceleration, gradient, DataBus.BrakePower);
@@ -277,14 +277,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				DataBus.BrakePower = SearchAlgorithm.Search(DataBus.BrakePower, r.Delta, -r.Delta,
 					getYValue: result => DataBus.ClutchClosed(absTime)
 						? ((ResponseDryRun)result).DeltaDragLoad
-						: ((ResponseDryRun)result).Gearbox.GearboxPowerRequest,
+						: ((ResponseDryRun)result).Gearbox.PowerRequest,
 					evaluateFunction: x => {
 						DataBus.BrakePower = x;
 						return NextComponent.Request(absTime, dt, acc, gradient, true);
 					},
 					criterion: y => DataBus.ClutchClosed(absTime)
 						? ((ResponseDryRun)y).DeltaDragLoad.Value()
-						: ((ResponseDryRun)y).Gearbox.GearboxPowerRequest.Value());
+						: ((ResponseDryRun)y).Gearbox.PowerRequest.Value());
 				Log.Info(
 					"Found operating point for braking. absTime: {0}, dt: {1}, acceleration: {2}, gradient: {3}, BrakePower: {4}",
 					absTime, dt, acceleration, gradient, DataBus.BrakePower);
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs
index 32110e49795260bbe2d53bd665af1ca938c9a571..cf876d7395f75138befad7162f375ead5c926713 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs
@@ -57,7 +57,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
 					DeltaDragLoad = 0.SI<Watt>(),
 					Engine = {
 						EngineTorqueDemandTotal = 0.SI<NewtonMeter>(),
-						EnginePowerRequest = 0.SI<Watt>(),
+						PowerRequest = 0.SI<Watt>(),
 						DynamicFullLoadPower = 0.SI<Watt>(),
 						DragPower = 0.SI<Watt>(),
 						EngineSpeed = 0.RPMtoRad(),
@@ -69,7 +69,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
 
 			return new ResponseSuccess(this) {
 				Engine = {
-					EnginePowerRequest = 0.SI<Watt>(),
+					PowerRequest = 0.SI<Watt>(),
 					DynamicFullLoadPower = 0.SI<Watt>(),
 					EngineTorqueDemandTotal = 0.SI<NewtonMeter>(),
 					DragPower = 0.SI<Watt>(),
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
index d9a9e5e9fd5f7b831cf69b6364980723d331ffa5..306eaa07de6ee33ff4746fd6b7c0f45a84aa501a 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
@@ -177,7 +177,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					Engine = {
 					EngineTorqueDemand = inTorque,
 					EngineSpeed = engineResponse.Engine.EngineSpeed,
-					EnginePowerRequest = engineResponse.Engine.EnginePowerRequest
+					PowerRequest = engineResponse.Engine.PowerRequest
 					}
 				};
 			}
@@ -209,7 +209,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					EngineTorqueDemand = inTorque,
 					EngineSpeed = dryOperatingPointMax?.InAngularVelocity ??
 								dryOperatingPointMin?.InAngularVelocity ?? 0.RPMtoRad(),
-					EnginePowerRequest = engineResponse.Engine.EnginePowerRequest
+					PowerRequest = engineResponse.Engine.PowerRequest
 				}
 			};
 		}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs
index 70744a68e257aec125ea895e42b00c72574fcd8e..5a6cf7c2b45090d9618eac9584fef6e2ed394541 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs
@@ -70,7 +70,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			return new ResponseSuccess(this) {
 				Engine = {
-					EnginePowerRequest = PreviousState.EnginePower,
+					PowerRequest = PreviousState.EnginePower,
 					EngineSpeed = outAngularVelocity
 				}
 			};
@@ -115,7 +115,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					DeltaDragLoad = deltaDrag * avgEngineSpeed,
 					DeltaEngineSpeed = 0.RPMtoRad(),
 					Engine = {
-						EnginePowerRequest = torqueOut * avgEngineSpeed,
+						PowerRequest = torqueOut * avgEngineSpeed,
 						DynamicFullLoadPower = fullLoadTorque * avgEngineSpeed,
 						DragPower = fullDragTorque * avgEngineSpeed,
 						EngineSpeed = angularVelocity,
@@ -158,7 +158,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					AbsTime = absTime,
 					Delta = deltaFull * avgEngineSpeed,
 					Engine = {
-						EnginePowerRequest = totalTorqueDemand * avgEngineSpeed,
+						PowerRequest = totalTorqueDemand * avgEngineSpeed,
 						DynamicFullLoadPower = fullLoadTorque * avgEngineSpeed,
 						DragPower = CurrentState.FullDragTorque * avgEngineSpeed,
 						EngineSpeed = angularVelocity,
@@ -174,7 +174,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					AbsTime = absTime,
 					Delta = deltaDrag * avgEngineSpeed,
 					Engine = {
-						EnginePowerRequest = totalTorqueDemand * avgEngineSpeed,
+						PowerRequest = totalTorqueDemand * avgEngineSpeed,
 						DynamicFullLoadPower = fullLoadTorque * avgEngineSpeed,
 						DragPower = CurrentState.FullDragTorque * avgEngineSpeed,
 						EngineSpeed = angularVelocity,
@@ -187,7 +187,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			return new ResponseSuccess(this) {
 				Engine = {
-					EnginePowerRequest = totalTorqueDemand * avgEngineSpeed,
+					PowerRequest = totalTorqueDemand * avgEngineSpeed,
 					DynamicFullLoadPower = fullLoadTorque * avgEngineSpeed,
 					DragPower = CurrentState.FullDragTorque * avgEngineSpeed,
 					EngineSpeed = angularVelocity,
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs
index abe168ed7cab64ce226ed410553664f81bdc50a0..2fcb83348dd7e11d992803d77bd823a7f2b044f0 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs
@@ -198,7 +198,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				var response = Initialize(gear, wheelStartTorque, wheelStartSpeed);
 
 				var fullLoadPower = response.Engine.DynamicFullLoadPower; //EnginePowerRequest - response.DeltaFullLoad;
-				var reserve = 1 - response.Engine.EnginePowerRequest / fullLoadPower;
+				var reserve = 1 - response.Engine.PowerRequest / fullLoadPower;
 
 				if (response.Engine.EngineSpeed > DataBus.EngineIdleSpeed && reserve >= RunData.GearboxData.StartTorqueReserve) {
 					StartGear = gear;
@@ -224,15 +224,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			return new ResponseDryRun(this) {
 				Engine = {
-					EnginePowerRequest = response.Engine.EnginePowerRequest,
+					PowerRequest = response.Engine.PowerRequest,
 					EngineSpeed = response.Engine.EngineSpeed,
 					DynamicFullLoadPower = response.Engine.DynamicFullLoadPower,
 				},
 				Clutch = {
-					ClutchPowerRequest = response.Clutch.ClutchPowerRequest,
+					PowerRequest = response.Clutch.PowerRequest,
 				},
 				Gearbox = {
-					GearboxPowerRequest = outTorque * outAngularVelocity,
+					PowerRequest = outTorque * outAngularVelocity,
 				}
 				//DeltaFullLoad = response.EnginePowerRequest - fullLoad
 			};
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs
index eee4eb1cd35501314e29ce3b60ff75ab28cb5fc2..a7d3338dd4f0f3f159e4fe7350a70712a0a3648c 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VelocitySpeedGearshiftPreprocessor.cs
@@ -133,14 +133,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var acceleration = 0.SI<MeterPerSquareSecond>();
 			var absTime = 0.SI<Second>();
 			var initialResponse = vehicle.Request(absTime, simulationInterval, acceleration, gradient);
-			var delta = initialResponse.Gearbox.GearboxPowerRequest;
+			var delta = initialResponse.Gearbox.PowerRequest;
 			try {
 				var time = absTime;
 				acceleration = SearchAlgorithm.Search(
 					acceleration, delta, Constants.SimulationSettings.OperatingPointInitialSearchIntervalAccelerating,
 					getYValue: response => {
 						var r = (ResponseDryRun)response;
-						return r.Gearbox.GearboxPowerRequest;
+						return r.Gearbox.PowerRequest;
 					},
 					evaluateFunction: acc => {
 						var response = vehicle.Request(time, simulationInterval, acc, gradient, true);
@@ -149,7 +149,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					},
 					criterion: response => {
 						var r = (ResponseDryRun)response;
-						return r.Gearbox.GearboxPowerRequest.Value() * 100;
+						return r.Gearbox.PowerRequest.Value() * 100;
 					},
 					abortCriterion: (response, cnt) => {
 						var r = (ResponseDryRun)response;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Wheels.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Wheels.cs
index 1fdf710917765df308383e9330bee28b6584c2af..73e3312961abc7ac7c99f11219a5e47d5bd699cc 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Wheels.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Wheels.cs
@@ -82,7 +82,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var retVal = NextComponent.Request(absTime, dt, CurrentState.TorqueIn, CurrentState.AngularVelocity,
 				dryRun);
 
-			retVal.Wheels.WheelsPowerRequest = CurrentState.TorqueIn * avgAngularSpeed;
+			retVal.Wheels.PowerRequest = CurrentState.TorqueIn * avgAngularSpeed;
 			return retVal;
 		}
 
diff --git a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
index 12941bb4824864c3d03fe306820922d4aa45fe9b..d2a2f466f254bd50405438c65f2fbdfe92521ef7 100644
--- a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
+++ b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
@@ -297,7 +297,7 @@ namespace TUGraz.VectoCore.Utils
 				row["delta"] = entry.delta;
 				row["AuxPower"] = response.Engine.AuxiliariesPowerDemand == null ? -1 : response.Engine.AuxiliariesPowerDemand.Value();
 				row["engineSpeed"] = response.Engine.EngineSpeed == null ? -1 : response.Engine.EngineSpeed.Value();
-				row["enginePower"] = response.Engine.EnginePowerRequest == null ? -1 : response.Engine.EnginePowerRequest.Value();
+				row["enginePower"] = response.Engine.PowerRequest == null ? -1 : response.Engine.PowerRequest.Value();
 
 				table.Rows.Add(row);
 			}
diff --git a/VectoCore/VectoCoreTest/Utils/MockPorts.cs b/VectoCore/VectoCoreTest/Utils/MockPorts.cs
index 14cb48750be0c28bfe07809542331d111e6d785b..5050a0427f45093a965b5c822ed236467f89a81c 100644
--- a/VectoCore/VectoCoreTest/Utils/MockPorts.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockPorts.cs
@@ -60,15 +60,15 @@ namespace TUGraz.VectoCore.Tests.Utils
 			if (dryRun) {
 				return new ResponseDryRun(this) {
 					Gearbox = {
-						GearboxPowerRequest = outTorque * outAngularVelocity,
+						PowerRequest = outTorque * outAngularVelocity,
 					},
 					Engine = {
-						EnginePowerRequest = outTorque * outAngularVelocity,
+						PowerRequest = outTorque * outAngularVelocity,
 						EngineSpeed = outAngularVelocity,
 						DynamicFullLoadPower = (outTorque + 2300.SI<NewtonMeter>()) * outAngularVelocity,
 					},
 					Clutch = {
-						ClutchPowerRequest = outTorque * outAngularVelocity,
+						PowerRequest = outTorque * outAngularVelocity,
 					},
 					DeltaFullLoad = (outTorque - 2300.SI<NewtonMeter>()) * outAngularVelocity,
 					DeltaDragLoad = (outTorque - -100.SI<NewtonMeter>()) * outAngularVelocity
@@ -77,14 +77,14 @@ namespace TUGraz.VectoCore.Tests.Utils
 
 			return new ResponseSuccess(this) {
 				Gearbox = {
-					GearboxPowerRequest = outTorque * outAngularVelocity,
+					PowerRequest = outTorque * outAngularVelocity,
 				},
 				Engine = {
-					EnginePowerRequest = outTorque * outAngularVelocity,
+					PowerRequest = outTorque * outAngularVelocity,
 					EngineSpeed = outAngularVelocity,
 				},
 				Clutch = {
-					ClutchPowerRequest = outTorque * outAngularVelocity,
+					PowerRequest = outTorque * outAngularVelocity,
 				},
 			};
 		}
@@ -93,10 +93,10 @@ namespace TUGraz.VectoCore.Tests.Utils
 		{
 			return new ResponseSuccess(this) {
 				Clutch = {
-					ClutchPowerRequest = outTorque * (outAngularVelocity ?? 0.SI<PerSecond>()),
+					PowerRequest = outTorque * (outAngularVelocity ?? 0.SI<PerSecond>()),
 				},
 				Engine = {
-					EnginePowerRequest = outTorque * (outAngularVelocity ?? 0.SI<PerSecond>()),
+					PowerRequest = outTorque * (outAngularVelocity ?? 0.SI<PerSecond>()),
 					EngineSpeed = outAngularVelocity,
 				}
 			};