diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
index e5cf42d04eaacf5e539e6b98cd967f89a1bfb294..1b0121772780738a9ae6f91a272785f03ec4ae72 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
@@ -314,9 +314,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 			private SerialHybridStrategyParameterDataAdapter _hybridStrategyParameterData =
 				new SerialHybridStrategyParameterDataAdapter();
-
-			//protected ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
-
+			private readonly ElectricPTODataAdapter _ptoDataAdapter = new ElectricPTODataAdapter();
 
 			public override HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
 				SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType)
@@ -331,15 +329,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 			public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
 			{
-				//throw new NotImplementedException();
-				return null;
+				return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx);
 			}
 
 			public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
 				IGearboxDeclarationInputData gbx)
 			{
-				//throw new NotImplementedException();
-				return null;
+				return _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx);
 			}
 			public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs
index 32aeb3d276f3b86bdb8cfa67810555c5210840a1..64a5ce462c59592cb8214ce0930e09da03065688 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs
@@ -28,6 +28,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 					DrivingCycleDataReader.ReadFromStream(RessourceHelper.ReadStream(DeclarationData.PTO.DefaultPTOActivationCycle),
 						CycleType.PTO, "PTO", false),
 				TransmissionPowerDemand = DeclarationData.PTOTransmission.Lookup(DeclarationData.PTO.DefaultPTOTechnology).PowerDemand,
+				ConsumerType = PTOConsumerType.mechanical,
 			};
 		}
         public virtual PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx)
@@ -39,6 +40,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 					TransmissionPowerDemand = powerDemand,
 					TransmissionType = pto.PTOTransmissionType,
 					LossMap = PTOIdleLossMapReader.GetZeroLossMap(),
+					ConsumerType = PTOConsumerType.mechanical,
 				};
 			}
 			return null;
@@ -66,6 +68,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 					DrivingCycleDataReader.ReadFromStream(RessourceHelper.ReadStream(DeclarationData.PTO.DefaultE_PTOActivationCycle),
 						CycleType.EPTO, "PTO", false),
 				TransmissionPowerDemand = powerDemand,
+				ConsumerType = PTOConsumerType.electrical,
 			};
 		}
 
@@ -84,6 +87,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 					TransmissionPowerDemand = powerDemand,
 					TransmissionType = pto.PTOTransmissionType,
 					LossMap = PTOIdleLossMapReader.GetZeroLossMap(),
+					ConsumerType = PTOConsumerType.electrical,
 				};
 			}
 
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs
index 44e253a3679b34da1f3b0b63c837332e83f72a6d..6b129ea8295aa50b60c69c7c2451ee29087a7ceb 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs
@@ -49,11 +49,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
 						{
 							if (vehicle.OvcHev) {
 								yield return CreateVectoRunData(vehicle, mission, loading, modeIdx, VectoRunData.OvcHevMode.ChargeDepleting);
-
-
 								yield return CreateVectoRunData(vehicle, mission, loading, modeIdx, VectoRunData.OvcHevMode.ChargeSustaining);
 							} else {
-								yield return CreateVectoRunData(vehicle, mission, loading, modeIdx);
+								yield return CreateVectoRunData(vehicle, mission, loading, modeIdx, VectoRunData.OvcHevMode.ChargeSustaining);
 							}
 						}
 					}
@@ -140,10 +138,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
 
 				var ptoTransmissionData = DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData);
 
-				var municipalPtoTransmissionData = DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData);
+				var municipalPtoData = DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData);
 
 				runData.PTO = mission.MissionType == MissionType.MunicipalUtility
-					? municipalPtoTransmissionData
+					? municipalPtoData
 					: ptoTransmissionData;
 
 
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/FollowUpOVCRunCreator.cs b/VectoCore/VectoCore/Models/Simulation/Impl/FollowUpOVCRunCreator.cs
index 24788920221378f31ffea97c352741657c1f70be..1608063927fd6b1ce8bb3a8e889cd07933b659c5 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/FollowUpOVCRunCreator.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/FollowUpOVCRunCreator.cs
@@ -46,7 +46,7 @@ public class NoFollowUpRunCreator : LoggingObject, IFollowUpRunCreator
 
 	public bool RunAgain(Action<VectoRunData> runAgainAction, IVectoRun run, Action beforeNextRun)
 	{
-		throw new NotImplementedException();
+		return false;
 	}
 
 	#endregion
@@ -79,6 +79,9 @@ public class NoFollowUpRunCreator : LoggingObject, IFollowUpRunCreator
 		/// <return>true if the run is executed again, false otherwise</return>
 		public bool RunAgain(Action<VectoRunData> runAgainAction, IVectoRun run, Action beforeNextRun)
 		{
+			if (run.GetContainer().RunData.OVCMode == VectoRunData.OvcHevMode.ChargeSustaining) {
+				return false;
+			}
 #pragma warning disable IDE0054 // Verbundzuweisung verwenden
             original_modfile_suffix = original_modfile_suffix ?? (original_modfile_suffix = run.GetContainer().RunData.ModFileSuffix);
 #pragma warning restore IDE0054 // Verbundzuweisung verwenden
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/IFollowUpRunCreatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/IFollowUpRunCreatorFactory.cs
index 3c12d607a00b04f01ad7ee71981d49dc8f0c72fe..70df7f1dd077b2024c87660131514f2ae7dc1b98 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/IFollowUpRunCreatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/IFollowUpRunCreatorFactory.cs
@@ -1,4 +1,5 @@
-using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.Simulation.Data;
 
 namespace TUGraz.VectoCore.Models.Simulation.Impl
 {
@@ -12,7 +13,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		public IFollowUpRunCreator CreateFollowUpRunCreator(VectoRunData runData)
 		{
-            if (runData.VehicleData.InputData.OvcHev)
+            if (runData.OVCMode == VectoRunData.OvcHevMode.ChargeSustaining && runData.JobType == VectoSimulationJobType.ParallelHybridVehicle)
             {
 				return new FollowUpOvcRunCreator();
             }
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 35679ec60a3564602a118c700ba204cd89a1b534..54d88d4605bee7476b0c0578b41490286e08fbe8 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -413,6 +413,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		/// </summary>
 		private static IVehicleContainer BuildFullPowertrainParallelHybrid(VectoRunData data, IModalDataContainer modData, ISumData _sumWriter)
 		{
+			if (data.SavedInDeclarationMode) {
+				throw new NotImplementedException();
+			}
 			if (_sumWriter == null)
 				throw new ArgumentNullException(nameof(_sumWriter));
 			if (data.Cycle.CycleType != CycleType.DistanceBased) {
@@ -661,7 +664,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				IEPTO epto = null;
 				if (data.PTO?.PTOCycle != null)
 				{
-					var pevPTOController = GetPEVIdleController(data.PTO, container);
+					var pevPTOController = GetPEV_SHEVIdleController(data.PTO, container);
 					cycle.IdleController = pevPTOController;
 					var eptoAux = new EPTO(pevPTOController);
 					elAux.AddAuxiliary(eptoAux);
@@ -807,7 +810,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				IEPTO epto = null;
 				if (data.PTO?.PTOCycle != null)
 				{
-					var pevPTOController = GetPEVIdleController(data.PTO, container);
+					var pevPTOController = GetPEV_SHEVIdleController(data.PTO, container);
 					cycle.IdleController = pevPTOController;
 					var eptoAux = new EPTO(pevPTOController);
 					elAux.AddAuxiliary(eptoAux);
@@ -1492,7 +1495,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				? engine.IdleController
 				: new IdleControllerSwitcher(engine.IdleController, new PTOCycleController(container, pto.PTOCycle));
 
-		private static IIdleControllerSwitcher GetPEVIdleController(PTOData pto,
+		private static IIdleControllerSwitcher GetPEV_SHEVIdleController(PTOData pto,
 			IVehicleContainer container) => pto?.PTOCycle is null ? null : new EPTOCycleController(container, pto?.PTOCycle);
 			
 
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
index bf9811d66a72f9427f199ea951043490e8b1c917..90a67eae7f44f68ac4d55503ec08c011774cfb20 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
@@ -53,6 +53,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 {
 	public class VehicleContainer : LoggingObject, IVehicleContainer, IPowertainInfo
 	{
+
 		private List<Tuple<int, VectoSimulationComponent>> _components =
 			new List<Tuple<int, VectoSimulationComponent>>();
 
@@ -111,7 +112,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			ExecutionMode = executionMode;
 		}
 
-		#region IVehicleContainer
+#region IVehicleContainer
 
 		public virtual IModalDataContainer ModalData => ModData;
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/PTOData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/PTOData.cs
index 9a8e832206fb856ad778e4d3428290e653566362..ef11bd54b7d75fa88ce22df84a1668d5cb90d655 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/PTOData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/PTOData.cs
@@ -33,7 +33,7 @@ using TUGraz.VectoCommon.Utils;
 
 namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 {
-	enum PTOConsumerType
+	public enum PTOConsumerType
 	{
 		mechanical,
 		electrical
@@ -53,5 +53,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 
 		public ILossMap LossMap;
 		public DrivingCycleData PTOCycle;
+		public PTOConsumerType ConsumerType = PTOConsumerType.mechanical;
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
index 4ad1c9a5afc100cb43e297ce2984a56ebd893f78..c35467baaf1a64ffbda36b7bab040ff813dab166 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs
@@ -57,7 +57,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		public EngineAuxiliary(IVehicleContainer container) : base(container)
 		{
 			EngineStopStartUtilityFactor = 1; // container.RunData?.DriverData?.EngineStopStart?.UtilityFactorStandstill ?? double.NaN;
-			_writePTO = container.RunData?.PTO != null;
+			_writePTO = container.RunData?.PTO?.ConsumerType == PTOConsumerType.mechanical;
 		}
 
 		public IAuxPort Port()
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/HeavyLorrySimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/HeavyLorrySimulation.cs
index 96cb0be755c666e394cea10da2a1a6f6432d1eac..71b9e347951f84ee09f6a755dccb4c18306381f8 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/HeavyLorrySimulation.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/HeavyLorrySimulation.cs
@@ -5,12 +5,16 @@
 using System.Collections.Immutable;
 using System.IO;
 using System.Linq;
-using Microsoft.VisualStudio.TestPlatform.ObjectModel;
 using Ninject;
 using NUnit.Framework;
+using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
@@ -27,6 +31,10 @@ public class HeavyLorrySimulation
 
 
 	private const string BASE_DIR = @"TestData\Integration\DeclarationMode\V24_DeclarationMode\";
+
+
+	private const string HeavylorryGroup2HevS2XML = @"HeavyLorry\Group2_HEV_S2.xml";
+	private const string HeavylorryGroup2HevS4XML = @"HeavyLorry\Group2_HEV_S4.xml";
 	private StandardKernel _kernel;
 	private IXMLInputDataReader _xmlReader;
 
@@ -44,7 +52,8 @@ public class HeavyLorrySimulation
 	TestCase(@"HeavyLorry\PEV_heavyLorry_E3_realistic_municipal.xml"),
 	TestCase(@"HeavyLorry\PEV_heavyLorry_AMT_E2_pto_transm.xml"),
 	TestCase(@"HeavyLorry\PEV_heavyLorry_E4.xml"),
-	TestCase(@"HeavyLorry\Group2_HEV_S2.xml"),
+	TestCase(HeavylorryGroup2HevS2XML),
+	TestCase(HeavylorryGroup2HevS4XML),
 	TestCase(@"HeavyLorry\Group5_HEV_P2_.xml"),
 	TestCase(@"HeavyLorry\Group5_HEV_P3_ovc.xml")]
 	[TestCase(@"HeavyLorry\HEV_heavy_lorry_S4_ovc.xml")]
@@ -60,12 +69,9 @@ public class HeavyLorrySimulation
 	public void RunSimulation(string jobFile, bool multiThreaded = true)
 	{
 		var filePath = Path.Combine(BASE_DIR, jobFile);
-		var dataProvider = _xmlReader.CreateDeclaration(filePath);
-		var fileWriter = new FileOutputWriter(filePath);
-		var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+		var runsFactory = GetSimulatorFactory(filePath, out var dataProvider, out var fileWriter, out var summaryDataContainer);
 		runsFactory.WriteModalResults = true;
-		var jobContainer = new JobContainer(new MockSumWriter()){};
-		//var jobContainer = new JobContainer(new MockSumWriter()) { };
+		var jobContainer = new JobContainer(summaryDataContainer){};
 		jobContainer.AddRuns(runsFactory);
 		PrintRuns(jobContainer, null);
 		
@@ -81,7 +87,58 @@ public class HeavyLorrySimulation
 		PrintFiles(fileWriter);
 	}
 
+	private ISimulatorFactory GetSimulatorFactory(string filePath, out IDeclarationInputDataProvider dataProvider,
+		out FileOutputWriter fileWriter, out SummaryDataContainer sumWriter)
+	{
+		dataProvider = _xmlReader.CreateDeclaration(filePath);
+		fileWriter = new FileOutputWriter(filePath);
+	
+		var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+		sumWriter = new MockSumWriter();
+		runsFactory.SumData = sumWriter;
+		return runsFactory;
+	}
+
+
+	[Test]
+	public void HEVS4()
+	{
+		var simFactory = GetSimulatorFactory(Path.Combine(BASE_DIR, HeavylorryGroup2HevS4XML), out var dataProvider,
+			out var fileWriter, out var mockSumWriter);
+		
+		var runs = simFactory.SimulationRuns();
+		foreach (var vectoRun in runs) {
+			var rd = vectoRun.GetContainer().RunData;
+		}
+		var container = runs.First().GetContainer();
+		var runData = container.RunData;
+		
+		
+		
+		//Pneumatic system data test
+
+
+
+		var ps = runData.Aux.Where(x => x.ID == Constants.Auxiliaries.IDs.PneumaticSystem).Single();
+		Assume.That(ps.IsFullyElectric);
+
+
+		//Fully electric aux have a seperate electric power table
+		//Assume.That(ps.PowerDemandMech != ps.PowerDemandElectric * DeclarationData.AlternatorEfficiency);
+
+		Assert.That(ps.ConnectToREESS);
+		
+
+
+
+	}
+
+
+
+
+
     [TestCase(@"HeavyLorry\HEV_heavy_lorry_S4_ovc.xml", 12)]
+	[TestCase(HeavylorryGroup2HevS2XML, 6)]
     [TestCase(@"HeavyLorry\Group5_HEV_P3_ovc.xml", 20)]
     public void OVCHevSimulationSingleRun(string jobFile, int nrRuns)
 	{
@@ -95,6 +152,8 @@ public class HeavyLorrySimulation
 		runsFactory.SumData = sumWriter;
 		var runs = runsFactory.SimulationRuns().ToList();
 		Assert.AreEqual(nrRuns, runs.Count);
+
+
 		jobContainer.AddRun(runs.First(r => r.GetContainer().RunData.BatteryData.Batteries.Any(tuple => !tuple.Item2.ChargeSustainingBattery)));
 		Assert.AreEqual(1, jobContainer.Runs.Count);
 		jobContainer.Execute(false);
@@ -105,6 +164,8 @@ public class HeavyLorrySimulation
 		Assert.IsTrue(jobContainer.Runs.TrueForAll(runEntry => runEntry.Success));
 		PrintRuns(jobContainer, fileWriter);
 		PrintFiles(fileWriter);
+
+		
 	}
 
 
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/AuxiliaryDataAdapterTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/AuxiliaryDataAdapterTest.cs
index 9af6230e982c62df1694d681f8bcca58399db29b..f2a7641ba294ecdd886c915c7852708f1cc3946e 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/AuxiliaryDataAdapterTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/AuxiliaryDataAdapterTest.cs
@@ -34,9 +34,7 @@ public class AuxiliaryDataAdapterTest
 
         Assert.That(ps.ConnectToREESS == fullyElectric);
         Assert.That(ps.IsFullyElectric == fullyElectric);
-
-
-    }
+	}
 
     [TestCase("Small + AMS", "", true, 0.0f, true, TestName = "PEV Fail 2")]
 	[TestCase("Small + ESS", "", true, 0.0f, true, TestName = "PEV Fail 3")]