diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
index 079a1b2850ca62314d9009e5262a46c0ef753378..400ea653426bf78caa43489d13881d19d7f9efdc 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
@@ -397,6 +397,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		P_electricMotor_mech_P2,
 		[ModalResultField(typeof(SI), caption: "P_em-P3_mech [kW]", outputFactor: 1e-3)]
 		P_electricMotor_mech_P3,
+		[ModalResultField(typeof(SI), caption: "P_em-P4_mech [kW]", outputFactor: 1e-3)]
+		P_electricMotor_mech_P4,
 		// -->
 
 		[ModalResultField(typeof(SI), caption: "P_bat_T [kW]", outputFactor: 1e-3)] P_battery_terminal,
diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
index efeab63c8da55ae43937ebaaa9c3a3b037f162ee..6415b741a8328265a3184177b335a2ff486b4ac0 100644
--- a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
@@ -62,9 +62,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			GraphWriter.Yfields = new[] {
 				ModalResultField.v_act, ModalResultField.altitude, ModalResultField.acc, ModalResultField.Gear,
-				ModalResultField.P_ice_out, ModalResultField.P_electricMotor_mech_P3 , ModalResultField.BatterySOC, ModalResultField.FCMap
+				ModalResultField.P_ice_out, ModalResultField.BatterySOC, ModalResultField.FCMap
 			};
-			GraphWriter.Series1Label = "Hybrid P2";
+			GraphWriter.Series1Label = "Hybrid";
 			GraphWriter.PlotIgnitionState = true;
 		}
 		
@@ -76,6 +76,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 			]
 		public void P2HybridDriveOff(double vmax, double initialSoC, double slope)
 		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray();
 			var cycleData = string.Format(
 				@"   0,   0, {1},    3
 				   700, {0}, {1},    0", vmax, slope);
@@ -122,6 +123,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 		]
 		public void P2HybridConstantSpeed(double vmax, double initialSoC, double slope, double  pAuxEl)
 		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray();
+
 			var cycleData = string.Format(
 				@"   0, {0}, {1},    0
 				  7000, {0}, {1},    0", vmax, slope);
@@ -163,6 +166,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 		]
 		public void P2HybriDriveCycle(string declarationMission, double payload, double initialSoC, double pAuxEl)
 		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray();
+
 			var cycleData = RessourceHelper.ReadStream(
 				DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." +
 				declarationMission +
@@ -229,6 +234,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 		]
 		public void P2HybridBrakeStandstill(double vmax, double initialSoC, double slope)
 		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P2 }).ToArray();
+
 			//var dst =
 			var cycleData = string.Format(
 				@"   0, {0}, {1},    0
@@ -256,6 +263,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 			GraphWriter.Write(modFilename);
 		}
 
+		// - - - - - - - - - - - - - - - - - - - - - - - - - 
+
+
 		[
 			TestCase(30, 0.7, 0, 0, TestName = "P3 Hybrid ConstantSpeed 30km/h SoC: 0.7, level"),
 			TestCase(50, 0.7, 0, 0, TestName = "P3 Hybrid ConstantSpeed 50km/h SoC: 0.7, level"),
@@ -278,6 +288,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 		]
 		public void P3HybridConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl)
 		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P3 }).ToArray();
+
 			var cycleData = string.Format(
 				@"   0, {0}, {1},    0
 				  7000, {0}, {1},    0", vmax, slope);
@@ -314,6 +326,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 		]
 		public void P3HybridDriveOff(double vmax, double initialSoC, double slope)
 		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P3 }).ToArray();
+
 			var cycleData = string.Format(
 				@"   0,   0, {1},    3
 				   700, {0}, {1},    0", vmax, slope);
@@ -344,6 +358,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 		]
 		public void P3HybridBrakeStandstill(double vmax, double initialSoC, double slope)
 		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P3 }).ToArray();
+
 			//var dst =
 			var cycleData = string.Format(
 				@"   0, {0}, {1},    0
@@ -371,6 +387,129 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 			GraphWriter.Write(modFilename);
 		}
 
+		// - - - - - - - - - - - - - - - - - - - - - - - - - 
+
+		[
+			TestCase(30, 0.7, 0, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.7, level"),
+			TestCase(50, 0.7, 0, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.7, level"),
+			TestCase(80, 0.7, 0, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.7, level"),
+
+			TestCase(30, 0.25, 0, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.25, level"),
+			TestCase(50, 0.25, 0, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.25, level"),
+			TestCase(80, 0.25, 0, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.25, level"),
+
+			TestCase(30, 0.5, 5, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.5, UH 5%"),
+			TestCase(50, 0.5, 5, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.5, UH 5%"),
+			TestCase(80, 0.5, 5, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.5, UH 5%"),
+
+			TestCase(30, 0.5, -5, 0, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.5, DH 5%"),
+			TestCase(50, 0.5, -5, 0, TestName = "P4 Hybrid ConstantSpeed 50km/h SoC: 0.5, DH 5%"),
+			TestCase(80, 0.5, -5, 0, TestName = "P4 Hybrid ConstantSpeed 80km/h SoC: 0.5, DH 5%"),
+
+			TestCase(30, 0.25, 0, 1000, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 1kW"),
+			TestCase(30, 0.25, 0, 5000, TestName = "P4 Hybrid ConstantSpeed 30km/h SoC: 0.25, level P_auxEl: 5kW"),
+		]
+		public void P4HybridConstantSpeed(double vmax, double initialSoC, double slope, double pAuxEl)
+		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P4 }).ToArray();
+
+			var cycleData = string.Format(
+				@"   0, {0}, {1},    0
+				  7000, {0}, {1},    0", vmax, slope);
+			var cycle = SimpleDrivingCycles.CreateCycleData(cycleData);
+
+			const bool largeMotor = true;
+
+			var modFilename = string.Format("SimpleParallelHybrid-P4_constant_{0}-{1}_{2}_{3}.vmod", vmax, initialSoC, slope, pAuxEl);
+			const PowertrainPosition pos = PowertrainPosition.HybridP4;
+			var run = CreateEngineeringRun(
+				cycle, modFilename, initialSoC, pos, largeMotor: true, pAuxEl: pAuxEl);
+
+			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+			Assert.NotNull(hybridController);
+
+			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
+
+			var data = run.GetContainer().RunData;
+			//File.WriteAllText(
+			//	$"{modFilename}.json",
+			//	JsonConvert.SerializeObject(data, Formatting.Indented));
+
+			run.Run();
+			Assert.IsTrue(run.FinishedWithoutErrors);
+
+			Assert.IsTrue(modData.Rows.Count > 0);
+			GraphWriter.Write(modFilename);
+		}
+
+		[
+			TestCase(30, 0.7, 0, TestName = "P4 Hybrid DriveOff 30km/h SoC: 0.7, level"),
+			TestCase(80, 0.7, 0, TestName = "P4 Hybrid DriveOff 80km/h SoC: 0.7, level"),
+			TestCase(30, 0.22, 0, TestName = "P4 Hybrid DriveOff 30km/h SoC: 0.22, level")
+		]
+		public void P4HybridDriveOff(double vmax, double initialSoC, double slope)
+		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P4 }).ToArray();
+
+			var cycleData = string.Format(
+				@"   0,   0, {1},    3
+				   700, {0}, {1},    0", vmax, slope);
+			var cycle = SimpleDrivingCycles.CreateCycleData(cycleData);
+
+			const bool largeMotor = true;
+
+			var modFilename = string.Format("SimpleParallelHybrid-P4_acc_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
+			const PowertrainPosition pos = PowertrainPosition.HybridP4;
+			var run = CreateEngineeringRun(
+				cycle, modFilename, initialSoC, pos, largeMotor: true);
+
+			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+			Assert.NotNull(hybridController);
+
+			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
+
+			run.Run();
+			Assert.IsTrue(run.FinishedWithoutErrors);
+
+			Assert.IsTrue(modData.Rows.Count > 0);
+			GraphWriter.Write(modFilename);
+		}
+
+		[TestCase(50, 0.79, 0, TestName = "P4 Hybrid Brake Standstill 50km/h SoC: 0.79, level"),
+		TestCase(50, 0.25, 0, TestName = "P4 Hybrid Brake Standstill 50km/h SoC: 0.25, level"),
+		TestCase(50, 0.65, 0, TestName = "P4 Hybrid Brake Standstill 50km/h SoC: 0.65, level")
+		]
+		public void P4HybridBrakeStandstill(double vmax, double initialSoC, double slope)
+		{
+			GraphWriter.Yfields = GraphWriter.Yfields.Concat(new[] { ModalResultField.P_electricMotor_mech_P4 }).ToArray();
+
+			//var dst =
+			var cycleData = string.Format(
+				@"   0, {0}, {1},    0
+				   200,   0, {1},    3", vmax, slope);
+			var cycle = SimpleDrivingCycles.CreateCycleData(cycleData);
+
+			const bool largeMotor = true;
+
+			var modFilename = string.Format("SimpleParallelHybrid-P4_stop_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
+			const PowertrainPosition pos = PowertrainPosition.HybridP4;
+			var run = CreateEngineeringRun(
+				cycle, modFilename, initialSoC, pos, largeMotor: true);
+
+			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+			Assert.NotNull(hybridController);
+			//var strategy = (DelegateParallelHybridStrategy)hybridController.Strategy;
+			//Assert.NotNull(strategy);
+
+			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
+
+			run.Run();
+			Assert.IsTrue(run.FinishedWithoutErrors);
+
+			Assert.IsTrue(modData.Rows.Count > 0);
+			GraphWriter.Write(modFilename);
+		}
+
 		// =================================================
 
 		public static VectoRun CreateEngineeringRun(DrivingCycleData cycleData, string modFileName, double initialSoc, PowertrainPosition pos, bool largeMotor = false,