From dae48638d42f54fffbb60ee0bd7491ec5ed3c36e Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <quaritsch@ivt.tugraz.at>
Date: Tue, 28 Mar 2023 17:36:48 +0200
Subject: [PATCH] refactoring: heavy lorry declaration data adapter: implement
 methods in base class, get component data adapter via property implemented in
 derived class refactoring: extract interfaces of data adapter in separate
 files start implementation primary bus (PEV E2)

---
 ...clarationDataAdapterGenericCompletedBus.cs |   3 +-
 ...larationDataAdapterSpecificCompletedBus.cs |   3 +-
 .../DeclarationDataAdapterHeavyLorry.cs       | 423 ++++----------
 .../IDeclarationDataAdapter.cs                |   4 +-
 .../DeclarationDataAdapterPrimaryBus.cs       | 140 ++---
 .../SimulationComponents/ADASDataAdapter.cs   |   7 +-
 .../AirdragDataAdapter.cs                     |  12 +-
 .../AngledriveDataAdapter.cs                  |   9 +-
 .../AuxiliaryDataAdapter.cs                   |  35 +-
 .../AxleGearDataAdapter.cs                    |   9 +-
 .../SimulationComponents/DriverDataAdapter.cs |   8 +-
 .../ElectricMachinesDataAdapter.cs            | 525 ++++++++----------
 .../SimulationComponents/EngineDataAdapter.cs |  10 +-
 .../GearBoxDataAdapter.cs                     |  12 +-
 .../Interfaces/IADASDataAdapter.cs            |  10 +
 .../Interfaces/IAirdragDataAdapter.cs         |  15 +
 .../Interfaces/IAngledriveDataAdapter.cs      |  11 +
 .../Interfaces/IAuxiliaryDataAdapter.cs       |  30 +
 .../Interfaces/IAxleGearDataAdapter.cs        |  11 +
 .../Interfaces/IDriverDataAdapter.cs          |  10 +
 .../{ => Interfaces}/IEPCDataAdapter.cs       |   6 +-
 .../IElectricMachinesDataAdapter.cs           |  19 +
 .../Interfaces/IEngineDataAdapter.cs          |  14 +
 .../Interfaces/IGearboxDataAdapter.cs         |  18 +
 .../Interfaces/IPTODataAdapter.cs             |  11 +
 .../Interfaces/IRetarderDataAdapter.cs        |  10 +
 .../Interfaces/ITorqueConverterDataAdapter.cs |  14 +
 .../Interfaces/IVehicleDataAdapter.cs         |  21 +
 .../SimulationComponents/PTODataAdapter.cs    |   9 +-
 .../RetarderDataAdapter.cs                    |   7 +-
 .../HybridStrategyParameterDataAdapter.cs     |  39 +-
 .../IHybridStrategyDataAdapter.cs             |  27 +
 .../TorqueConverterDataAdapter.cs             |   9 +-
 .../VehicleDataAdapter.cs                     |  14 +-
 .../DeclarationDataAdapterSingleBus.cs        |   3 +-
 ...DeclarationModeHeavyLorryRunDataFactory.cs |   7 +-
 ...DeclarationModePrimaryBusRunDataFactory.cs | 200 ++++---
 ...PModeVectoRunDataFactoryHeavyBusPrimary.cs |   7 +-
 .../Models/Declaration/DeclarationData.cs     |  13 +-
 .../Reports/ModDataPostprocessingTest.cs      |   8 +-
 40 files changed, 829 insertions(+), 914 deletions(-)
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs
 rename VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/{ => Interfaces}/IEPCDataAdapter.cs (93%)
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs
 create mode 100644 VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs

diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
index e98844d18b..35aee8c2e6 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
@@ -5,6 +5,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent;
@@ -12,7 +13,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Generic
 {
-	public abstract class DeclarationDeclarationDataAdapterGenericCompletedBusDeclaration
+    public abstract class DeclarationDeclarationDataAdapterGenericCompletedBusDeclaration
 	{
 		public abstract class CompletedBusDeclarationBase : IGenericCompletedBusDeclarationDataAdapter
 		{
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
index 629854476f..9a2c09430e 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
@@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.BusAuxiliaries;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics;
@@ -19,7 +20,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Specific
 {
-	public abstract class DeclarationDataAdapterSpecificCompletedBus
+    public abstract class DeclarationDataAdapterSpecificCompletedBus
 	{
 		public abstract class CompletedBusDeclarationBase : AbstractSimulationDataAdapter, ISpecificCompletedBusDeclarationDataAdapter
         {
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
index 4450ced9e5..f98c7e674d 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
@@ -40,6 +40,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter;
 using TUGraz.VectoCore.InputData.Reader.ShiftStrategy;
 using TUGraz.VectoCore.Models.Declaration;
@@ -54,20 +55,30 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 {
-	public class DeclarationDataAdapterHeavyLorry
+    public class DeclarationDataAdapterHeavyLorry
 	{
 		public abstract class LorryBase : AbstractSimulationDataAdapter, ILorryDeclarationDataAdapter
 		{
-			#region Implementation of IDeclarationDataAdapter
-
-			private readonly IDriverDataAdapter _driverDataAdapter = new LorryDriverDataAdapter();
-			protected readonly IVehicleDataAdapter _vehicleDataAdapter = new LorryVehicleDataAdapter();
+            
+            private readonly IDriverDataAdapter _driverDataAdapter = new LorryDriverDataAdapter();
+            protected readonly IVehicleDataAdapter _vehicleDataAdapter = new LorryVehicleDataAdapter();
 			private readonly IAxleGearDataAdapter _axleGearDataAdapter = new AxleGearDataAdapter();
 			private readonly IRetarderDataAdapter _retarderDataAdapter = new RetarderDataAdapter();
 			private readonly IAirdragDataAdapter _airdragDataAdapter = new AirdragDataAdapter();
 
 			private IAngledriveDataAdapter _angleDriveDataAdapter = new AngledriveDataAdapter();
-			public DriverData CreateDriverData(Segment segment)
+
+			protected abstract IEngineDataAdapter EngineDataAdapter { get; }
+			protected abstract IGearboxDataAdapter GearboxDataAdapter { get; }
+			protected abstract IAuxiliaryDataAdapter AuxDataAdapter { get; }
+
+			protected abstract IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; }
+
+			protected abstract IPTODataAdapter PtoDataAdapter { get; }
+
+			protected virtual IElectricMachinesDataAdapter ElectricMachinesDataAdapter => throw new NotImplementedException();
+
+			public virtual DriverData CreateDriverData(Segment segment)
 			{
 				return _driverDataAdapter.CreateDriverData(segment);
 			}
@@ -82,23 +93,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 					loading.Value.Item2, allowVocational);
 			}
 
-			public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
-				IElectricMachinesDeclarationInputData electricMachines,
-				IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage,
-				GearList gears = null)
-			{
-				throw new NotImplementedException();
-			}
-
+			
 			public abstract void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData,
 				Action<SuperCapData> setSuperCapData);
 
 
-			public virtual HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, SuperCapData runDataSuperCapData,
-				Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType)
+			public virtual HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData, 
+				SuperCapData runDataSuperCapData,
+				Kilogram vehicleMass, 
+				VectoRunData.OvcHevMode ovcMode, 
+				LoadingType loading, 
+				VehicleClass vehicleClass, 
+				MissionType missionType)
 			{
-				throw new NotImplementedException();
+				return HybridStrategyDataAdapter.CreateHybridStrategyParameters(runDataBatteryData,
+					runDataSuperCapData, vehicleMass, ovcMode);
 			}
 
 			public virtual HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
@@ -113,17 +123,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 				CombustionEngineData engineData, 
 				ArchitectureID archId)
 			{
-				throw new NotImplementedException();
-			}
-
-			public virtual ShiftStrategyParameters CreateDummyGearshiftStrategy()
-			{
-				throw new NotImplementedException();
+				return HybridStrategyDataAdapter.CreateHybridStrategyParameters(
+					batterySystemData: runDataBatteryData,
+					superCap: runDataSuperCapData,
+					ovcMode: ovcMode,
+					loading: loading,
+					vehicleClass: vehicleClass,
+					missionType: missionType, archId, engineData, gearboxData, boostingLimitations);
 			}
 
 
-			
-
 			public virtual AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission,
 				Segment segment)
 			{
@@ -145,19 +154,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 				IEngineModeDeclarationInputData engineMode,
 				Mission mission)
 			{
-				throw new NotImplementedException();
+				return EngineDataAdapter.CreateEngineData(vehicle, engineMode, mission);
 			}
 
 			public virtual GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
 				IShiftPolygonCalculator shiftPolygonCalc)
 			{
-				throw new NotImplementedException();
+				return GearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
 			}
 
 			public virtual ShiftStrategyParameters CreateGearshiftData(double axleRatio,
 				PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount)
 			{
-				throw new NotImplementedException();
+				return GearboxDataAdapter.CreateGearshiftData(axleRatio, null, gearboxType, gearsCount);
 			}
 
 			public RetarderData CreateRetarderData(IRetarderInputData retarderData, PowertrainPosition position)
@@ -165,9 +174,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 				return _retarderDataAdapter.CreateRetarderData(retarderData, position);
 			}
 
-			public abstract PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto);
-			public abstract PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
-				IGearboxDeclarationInputData gbx);
+			public virtual PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
+			{
+				return PtoDataAdapter.CreateDefaultPTOData(pto, gbx);
+			}
+
+			public virtual PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
+				IGearboxDeclarationInputData gbx)
+			{
+				return PtoDataAdapter.CreatePTOTransmissionData(ptoData, gbx);
+			}
 
 
 			public virtual IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData,
@@ -184,14 +200,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 				return _axleGearDataAdapter.CreateDummyAxleGearData(gbxData);
 			}
 
-			#endregion
-
-			protected abstract IAuxiliaryDataAdapter AuxDataAdapter { get; }
+			public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
+				IElectricMachinesDeclarationInputData electricMachines,
+				IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage,
+				GearList gears = null)
+			{
+				return ElectricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage,
+					gears);
+			}
 
 			public virtual List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(
 				IIEPCDeclarationInputData iepc, Volt averageVoltage)
 			{
-				throw new NotImplementedException();
+				return ElectricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage);
 			}
 		}
 
@@ -203,53 +224,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 			protected override GearboxType[] SupportedGearboxTypes => new []
 				{ GearboxType.MT, GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial };
 
-			private IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter();
-			private IGearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter());
-			private IAuxiliaryDataAdapter _auxAdapter = new HeavyLorryAuxiliaryDataAdapter();
-			private readonly IPTODataAdapter _ptoDataAdapter = new PTODataAdapterLorry();
-			public override CombustionEngineData CreateEngineData(
-				IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData mode, Mission mission)
-			{
-				return _engineDataAdapter.CreateEngineData(vehicle, mode, mission);
-			}
-
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
-			}
-
-			public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
-				IGearboxDeclarationInputData gbx)
-			{
-				return _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx);
-			}
-
-			public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
-			{
-				return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx);
-			}
-
-
-			#region Overrides of LorryBase
-
-			public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount)
-			{
-				return _gearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount);
-			}
+			protected override IAuxiliaryDataAdapter AuxDataAdapter { get; } = new HeavyLorryAuxiliaryDataAdapter();
+			protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException();
+			protected override IPTODataAdapter PtoDataAdapter { get; } = new PTODataAdapterLorry();
 
-			protected override IAuxiliaryDataAdapter AuxDataAdapter => _auxAdapter;
-
-			#endregion
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
 
-			//public override IList<VectoRunData.AuxData> CreateAuxiliaryData(
-			//	IAuxiliariesDeclarationInputData auxInputData,
-			//	IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass,
-			//	Meter vehicleLength, int? numSteeredAxles, VectoSimulationJobType jobType)
-			//{
-			//	return _auxAdapter.CreateAuxiliaryData(auxInputData, busAuxData, mission, hvdClass, vehicleLength,
-			//		numSteeredAxles, jobType);
-			//}
+			protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter();
 
 			public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData,
@@ -261,37 +242,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 		public abstract class Hybrid : LorryBase
 		{
-			private IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter();
-			private ElectricMachinesDataAdapter _electricMachinesDataAdapter = new ElectricMachinesDataAdapter();
 			private ElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
 			protected IAuxiliaryDataAdapter _auxAdapter = new HeavyLorryAuxiliaryDataAdapter();
 
-			public override CombustionEngineData CreateEngineData(
-				IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData mode, Mission mission)
-			{
-				return _engineDataAdapter.CreateEngineData(vehicle, mode, mission);
-			}
-
-			#region Overrides of LorryBase
-
-			public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
-				IElectricMachinesDeclarationInputData electricMachines,
-				IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage,
-				GearList gears = null)
-			{
-				return _electricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage,
-					gears);
-			}
-
+			protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter();
 
-			//public override IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData,
-			//	IBusAuxiliariesDeclarationData busAuxData,
-			//	MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles,
-			//	VectoSimulationJobType jobType)
-			//{
-			//	return _auxAdapter.CreateAuxiliaryData(auxData, busAuxData, missionType, vehicleClass, vehicleLength,
-			//		numSteeredAxles, jobType);
-			//}
+			protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter();
 
 			protected override IAuxiliaryDataAdapter AuxDataAdapter => _auxAdapter;
 
@@ -312,8 +268,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 					throw new VectoException("Either battery or super cap must be provided");
 				}
 			}
-
-			#endregion
 		}
 
 		public abstract class SerialHybrid : Hybrid
@@ -322,99 +276,29 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 			protected override GearboxType[] SupportedGearboxTypes { get; }
 
-			private SerialHybridStrategyParameterDataAdapter _hybridStrategyParameterData =
-				new SerialHybridStrategyParameterDataAdapter();
-			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)
-			{
-				return _hybridStrategyParameterData.CreateHybridStrategyParameters(runDataBatteryData,
-					runDataSuperCapData, vehicleMass, ovcMode);
-			}
-
-			#endregion
-
-			#region Overrides of LorryBase
-
-			public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
-			{
-				return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx);
-			}
-
-			public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
-				IGearboxDeclarationInputData gbx)
-			{
-				return _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx);
-			}
-			public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
-				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
-			{
-				base.CreateREESSData(componentsElectricStorage, jobType, ovc, setBatteryData, setSuperCapData);
-			}
-
+			protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException();
 
+			protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; } = new
+				SerialHybridStrategyParameterDataAdapter();
 
+			protected override IPTODataAdapter PtoDataAdapter { get; } = new ElectricPTODataAdapter();
 
 			#endregion
+
 		}
 
 		public abstract class ParallelHybrid : Hybrid
 		{
-			private ParallelHybridStrategyParameterDataAdapter _hybridStrategyDataAdapter =
-				new ParallelHybridStrategyParameterDataAdapter();
-
-			private PTODataAdapterLorry _ptoAdapterLorry = new PTODataAdapterLorry();
 			protected override GearboxType[] SupportedGearboxTypes => new[]
 				{ GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial };
-			private IGearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter());
-			//private GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null);
-
-			//private ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
-			#region Overrides of LorryBase
-
-			public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType type, int gearsCount)
-			{
-
-				return _gearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, type, gearsCount);
-			}
-
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
-			}
 
-			public override HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
-				SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode,
-				LoadingType loading, VehicleClass vehicleClass, MissionType missionType, TableData boostingLimitations,
-				GearboxData gearboxData, CombustionEngineData engineData, ArchitectureID archID)
-			{
-				return _hybridStrategyDataAdapter.CreateHybridStrategyParameters(
-					batterySystemData: runDataBatteryData, 
-					superCap: runDataSuperCapData, 
-					ovcMode: ovcMode, 
-					loading: loading, 
-					vehicleClass: vehicleClass, 
-					missionType: missionType, archID, engineData, gearboxData, boostingLimitations);
-			}
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
 
-			#endregion
+			protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter { get; } = new
+				ParallelHybridStrategyParameterDataAdapter();
 
-			#region Overrides of LorryBase
-
-			public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
-			{
-				return _ptoAdapterLorry.CreateDefaultPTOData(pto, gbx);
-			}
+			protected override IPTODataAdapter PtoDataAdapter { get; } = new PTODataAdapterLorry();
 
-			public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
-				IGearboxDeclarationInputData gbx)
-			{
-				return _ptoAdapterLorry.CreatePTOTransmissionData(ptoData, gbx);
-			}
-
-			#endregion
 		}
 
 		public abstract class BatteryElectric : LorryBase
@@ -424,42 +308,24 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 			protected override GearboxType[] SupportedGearboxTypes { get; }
 
-			private readonly GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null);
+			//private readonly GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null);
 			private readonly ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
 			private readonly ElectricMachinesDataAdapter _electricMachineAdapter = new ElectricMachinesDataAdapter();
-			private readonly ElectricPTODataAdapter _ptoDataAdapter = new ElectricPTODataAdapter();
-
+			
 			private readonly HeavyLorryPEVAuxiliaryDataAdapter
 				_auxDataAdapter = new HeavyLorryPEVAuxiliaryDataAdapter();
 
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
-			}
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(null);
 
-			public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount)
-			{
-				System.Diagnostics.Debug.Assert(engineIdlingSpeed == null);
-				return _gearboxDataAdapter.CreateGearshiftData(axleRatio, null, gearboxType, gearsCount);
-			}
+			protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException();
 
-			//public override IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData,
-			//	IBusAuxiliariesDeclarationData busAuxData,
-			//	MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles,
-			//	VectoSimulationJobType jobType)
-			//{
-			//	return _auxDataAdapter.CreateAuxiliaryData(auxData, null, missionType, vehicleClass, vehicleLength, numSteeredAxles,
-			//		jobType);
-			//}
+			protected override IPTODataAdapter PtoDataAdapter { get; } = new ElectricPTODataAdapter();
 
 			protected override IAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter;
-			
-			public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
-				Volt averageVoltage, GearList gears = null)
-			{
-				return _electricMachineAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, gears);
-			}
+
+			protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException();
+
+			protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter();
 
 			public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
@@ -480,28 +346,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 			}
 
-			//public override BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData componentsElectricStorage, VectoSimulationJobType jobType, bool ovc)
-			//{
-			//	return _electricStorageAdapter.CreateBatteryData(batteryInputData: componentsElectricStorage, jobType: jobType, ovc: ovc);
-			//}
-
-			//public override SuperCapData CreateSuperCapData(IElectricStorageSystemDeclarationInputData componentsElectricStorage)
-			//{
-			//	return _electricStorageAdapter.CreateSuperCapData(componentsElectricStorage);
-			//}
-
-			public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
-			{
-				return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx);
-			}
-
-			public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
-				IGearboxDeclarationInputData gbx)
-			{
-				var result = _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx);
-				return result;
-			}
-
 			#endregion
 		}
 
@@ -511,20 +355,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 			protected override GearboxType[] SupportedGearboxTypes => new[]
 				{ GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial, GearboxType.APTN };
 
-
-
-			private GearboxDataAdapter _gearBoxDataAdaper = new GearboxDataAdapter(new TorqueConverterDataAdapter());
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearBoxDataAdaper.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
-			}
-
-			public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed,
-				GearboxType gearboxType, int gearsCount)
-			{
-				return _gearBoxDataAdaper.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount);
-			}
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
 
 			#endregion
 		}
@@ -537,28 +368,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 			protected override GearboxType[] SupportedGearboxTypes => new[]
 				{ GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial, GearboxType.APTN };
 
-
-
-			private IGearboxDataAdapter _gearBoxDataAdaper = new IEPCGearboxDataAdapter();
 			private ElectricMachinesDataAdapter _electricMachinesDataAdapter = new ElectricMachinesDataAdapter();
 
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearBoxDataAdaper.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
-			}
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new IEPCGearboxDataAdapter();
 
-			public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed,
-				GearboxType gearboxType, int gearsCount)
-			{
-				return _gearBoxDataAdaper.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount);
-			}
+			protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter();
 
-			public override List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(
-				IIEPCDeclarationInputData iepc, Volt averageVoltage)
-			{
-				return _electricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage);
-			}
 		}
 
 		public class HEV_P1 : ParallelHybrid
@@ -595,29 +410,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 		public class PEV_E_IEPC : BatteryElectric
 		{
-			#region Overrides of LorryBase
-
-			private ElectricMachinesDataAdapter _emDataAdapter = new ElectricMachinesDataAdapter();
-			private IEPCGearboxDataAdapter _gearboxDataAdapter = new IEPCGearboxDataAdapter();
-			public override List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
-			{
-				return _emDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage);
-			}
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new IEPCGearboxDataAdapter();
 
-			#region Overrides of BatteryElectric
+			protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter();
 
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, new GearboxType[]
-					{
-						GearboxType.APTN
-				});
-			}
-
-			#endregion
-
-			#endregion
 		}
 		public class Exempted : LorryBase
 		{
@@ -637,22 +433,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 				throw new NotImplementedException();
 			}
 
-			public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
-				IGearboxDeclarationInputData gbx)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount)
-			{
-				throw new NotImplementedException();
-			}
-
 			public override IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData,
 				IBusAuxiliariesDeclarationData busAuxData,
 				MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles,
@@ -661,34 +441,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 				throw new NotImplementedException();
 			}
 
-			protected override IAuxiliaryDataAdapter AuxDataAdapter { get; }
-
-			#endregion
-		}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+			protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException();
 
+			protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException();
 
+			protected override IAuxiliaryDataAdapter AuxDataAdapter => throw new NotImplementedException();
 
+			protected override IHybridStrategyDataAdapter HybridStrategyDataAdapter => throw new NotImplementedException();
 
+			protected override IPTODataAdapter PtoDataAdapter => throw new NotImplementedException();
 
+			#endregion
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
index 05ac40d9ab..3c26f06944 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
@@ -94,7 +94,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			GearboxData gearboxData,
 			CombustionEngineData engineData,
 			ArchitectureID archId);
-		ShiftStrategyParameters CreateDummyGearshiftStrategy();
 	}
 
 	public interface IPrimaryBusDeclarationDataAdapter : IDeclarationDataAdapter
@@ -115,7 +114,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		//RetarderData CreateRetarderData(IRetarderInputData retarderData);
 		//PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData);
 
-		ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed);
+		ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed,
+			GearboxType gearboxType, int gearsCount);
 
 		//VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission,
 		//    KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational);
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
index 2b2186ebdd..811ae09d2d 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
@@ -1,28 +1,22 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
-using TUGraz.VectoCore.Models.BusAuxiliaries;
-using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
-using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
-using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
 using TUGraz.VectoCore.Models.SimulationComponent.Impl;
-using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 {
-	public abstract class DeclarationDataAdapterPrimaryBus
+    public abstract class DeclarationDataAdapterPrimaryBus
 	{
 		public abstract class PrimaryBusBase : IPrimaryBusDeclarationDataAdapter
 		{
@@ -37,7 +31,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 			protected readonly IRetarderDataAdapter _retarderDataAdapter = new RetarderDataAdapter();
 			protected readonly IAirdragDataAdapter _airdragDataAdapter = new AirdragDataAdapter();
 			private readonly IAngledriveDataAdapter _angledriveDataAdapter = new AngledriveDataAdapter();
-			private readonly IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter();
+
+			protected abstract IEngineDataAdapter EngineDataAdapter { get; }
+
+			protected abstract IGearboxDataAdapter GearboxDataAdapter { get; }
+
+			protected virtual IElectricMachinesDataAdapter ElectricMachinesDataAdapter => throw new NotImplementedException();
 
 			public DriverData CreateDriverData(Segment segment)
 			{
@@ -56,12 +55,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 				return _airdragDataAdapter.CreateAirdragData(airdragData, mission, segment);
 			}
 
-			public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
-				Volt averageVoltage, GearList gears = null)
-			{
-				throw new NotImplementedException();
-			}
-
 			public abstract void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData);
 
@@ -78,18 +71,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 			public virtual CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode,
 				Mission mission)
 			{
-				throw new NotImplementedException();
+				return EngineDataAdapter.CreateEngineData(vehicle, engineMode, mission);
 			}
 
 			public virtual GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
 				IShiftPolygonCalculator shiftPolygonCalc)
 			{
-				throw new NotImplementedException();
+				return GearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
 			}
 
-			public virtual ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
+			public virtual ShiftStrategyParameters CreateGearshiftData(double axleRatio, PerSecond engineIdlingSpeed,
+				GearboxType gearboxType, int gearsCount)
 			{
-				throw new NotImplementedException();
+				return GearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gearboxType, gearsCount);
 			}
 
 
@@ -98,9 +92,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 				return _retarderDataAdapter.CreateRetarderData(retarderData, position);
 			}
 
+
+			public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
+				Volt averageVoltage, GearList gears = null)
+			{
+				return ElectricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, gears);
+			}
+
 			public virtual List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
 			{
-				throw new NotImplementedException();
+				return ElectricMachinesDataAdapter.CreateIEPCElectricMachines(iepc, averageVoltage);
 			}
 
 			public virtual IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData,
@@ -134,65 +135,36 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 
 		public class Conventional : PrimaryBusBase
 		{
-			protected IEngineDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter();
-			protected IGearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter());
-			protected readonly IPrimaryBusAuxiliaryDataAdapter _auxDataAdapter = new PrimaryBusAuxiliaryDataAdapter();
+			#region Overrides of PrimaryBusBase
 
+			protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter();
 
-			#region Overrides of PrimaryBusBase
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
 
+			protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter { get; } = new PrimaryBusAuxiliaryDataAdapter();
 			public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
 			{
 				throw new NotImplementedException();
 			}
 
-			public override CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode,
-				Mission mission)
-			{
-				return _engineDataAdapter.CreateEngineData(vehicle, engineMode, mission);
-			}
-
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc, SupportedGearboxTypes);
-			}
-
-			public override ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
-			{
-				return _gearboxDataAdapter.CreateGearshiftData(axleRatio, engineIdlingSpeed, gbx.Type, gbx.Gears.Count);
-			}
-
-			protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter;
-
+			
 			#endregion
 		}
 
 		public abstract class Hybrid : PrimaryBusBase
 		{
 			private CombustionEngineComponentDataAdapter _engineDataAdapter = new CombustionEngineComponentDataAdapter();
-			private ElectricMachinesDataAdapter _electricMachinesDataAdapter = new ElectricMachinesDataAdapter();
 			private ElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
 
 			protected readonly IPrimaryBusAuxiliaryDataAdapter _auxDataAdapter = new PrimaryBusAuxiliaryDataAdapter();
 
 			#region Overrides of PrimaryBusBase
 
-			public override CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode,
-				Mission mission)
-			{
-				return _engineDataAdapter.CreateEngineData(vehicle, engineMode, mission);
-			}
+			protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter();
+
+			protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter();
 
-			public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
-				IElectricMachinesDeclarationInputData electricMachines,
-				IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage,
-				GearList gears = null)
-			{
-				return _electricMachinesDataAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage,
-					gears);
-			}
 
 			public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
@@ -223,11 +195,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 
 		public abstract class SerialHybrid : Hybrid
 		{
+			protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException();
 
 		}
 
 		public class HEV_S2 : SerialHybrid
 		{
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
 
 		}
 
@@ -243,24 +217,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 
 		public class HEV_S_IEPC : SerialHybrid
 		{
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new IEPCGearboxDataAdapter();
 
 		}
 
 		public abstract class ParallelHybrid : Hybrid
 		{
-			private GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(new TorqueConverterDataAdapter());
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				return _gearboxDataAdapter.CreateGearboxData(inputData, runData, shiftPolygonCalc,
-					supportedGearboxTypes: SupportedGearboxTypes);
-			}
+			#region Overrides of PrimaryBusBase
 
-			public override ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
-			{
-				throw new NotImplementedException();
-				//return _gearboxDataAdapter.CreateGearshiftData(gbx, axleRatio, engineIdlingSpeed, gbx.Type, gbx.Gears.Count);
-			}
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(new TorqueConverterDataAdapter());
+
+			#endregion
+
+			
 		}
 
 		public class HEV_P1 : ParallelHybrid
@@ -290,17 +259,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 
 		public abstract class BatteryElectric : PrimaryBusBase
 		{
-			private readonly GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null);
 			private readonly ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
-			private readonly ElectricMachinesDataAdapter _electricMachineAdapter = new ElectricMachinesDataAdapter();
 
 			protected readonly IPrimaryBusAuxiliaryDataAdapter _auxDataAdapter = new PrimaryBusPEVAuxiliaryDataAdapter();
 
-			public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
-				Volt averageVoltage, GearList gears = null)
-			{
-				return _electricMachineAdapter.CreateElectricMachines(electricMachines, torqueLimits, averageVoltage, gears);
-			}
+			#region Overrides of PrimaryBusBase
+
+			protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException();
+
+			protected override IGearboxDataAdapter GearboxDataAdapter { get; } = new GearboxDataAdapter(null);
+		
+			protected override IElectricMachinesDataAdapter ElectricMachinesDataAdapter { get; } = new ElectricMachinesDataAdapter();
+
+			protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter;
+
+			#endregion
+
 
 			public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 				VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
@@ -318,14 +292,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 				if (superCapData != null) {
 					throw new VectoException("Supercaps are not allowed for PEVs");
 				}
-
 			}
-
-			#region Overrides of PrimaryBusBase
-
-			protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => _auxDataAdapter;
-
-			#endregion
+			
 		}
 
 
@@ -356,6 +324,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 		{
 			#region Overrides of PrimaryBusBase
 
+			protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException();
+
 			public override VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission,
 				KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
 			{
@@ -368,7 +338,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 				throw new NotImplementedException();
 			}
 
-			protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter { get; }
+			protected override IPrimaryBusAuxiliaryDataAdapter AuxDataAdapter => throw new NotImplementedException();
+
+			protected override IGearboxDataAdapter GearboxDataAdapter => throw new NotImplementedException();
 
 			#endregion
 		}
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs
index 330e260c79..508b93d5d7 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ADASDataAdapter.cs
@@ -1,13 +1,10 @@
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IADASDataAdapter
-	{
-		VehicleData.ADASData CreateADAS(IAdvancedDriverAssistantSystemDeclarationInputData adas);
-	}
-	public class ADASDataAdapter : IADASDataAdapter
+    public class ADASDataAdapter : IADASDataAdapter
 	{
 
 		public VehicleData.ADASData CreateADAS(IAdvancedDriverAssistantSystemDeclarationInputData adas)
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs
index 380e4297ae..2fe2301e3a 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AirdragDataAdapter.cs
@@ -8,22 +8,14 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IAirdragDataAdapter
-	{
-		AirdragData CreateAirdragData(
-			IAirdragDeclarationInputData airdragInputData, Mission mission,
-			Segment segment);
-
-		AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission);
-	}
-
-	public static class AirdragDataAdapterHelper
+    public static class AirdragDataAdapterHelper
 	{
 		public static List<CrossWindCorrectionCurveReader.CrossWindCorrectionEntry> GetDeclarationAirResistanceCurve(
 			string crosswindCorrectionParameters, SquareMeter aerodynamicDragAera, Meter vehicleHeight)
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs
index 0f88899d1e..459d233e2b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AngledriveDataAdapter.cs
@@ -4,19 +4,14 @@ using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.GenericModelData;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IAngledriveDataAdapter
-	{
-		AngledriveData CreateAngledriveData(IAngledriveInputData data, bool useEfficiencyFallback);
-		AngledriveData CreateAngledriveData(IAngledriveInputData data);
-	}
-
-	public class AngledriveDataAdapter : IAngledriveDataAdapter
+    public class AngledriveDataAdapter : IAngledriveDataAdapter
 	{
 		public AngledriveData CreateAngledriveData(IAngledriveInputData data, bool useEfficiencyFallback)
 		{
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
index ab674ce7e4..ecea0fff88 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
@@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDataFactory;
 using TUGraz.VectoCore.Models.BusAuxiliaries;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
@@ -22,27 +23,9 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IAuxiliaryDataAdapter
-	{
-		IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData,
-			IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass, Meter vehicleLength,
-			int? numSteeredAxles, VectoSimulationJobType jobType);
-	}
 
-	public interface ICompletedBusAuxiliaryDataAdapter : IPrimaryBusAuxiliaryDataAdapter
-	{
-		IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle,
-			IVehicleDeclarationInputData completedVehicle, VectoRunData runData);
-	}
 
-	public interface IPrimaryBusAuxiliaryDataAdapter : IAuxiliaryDataAdapter
-	{
-		AuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, VectoRunData runData);
-		
-	}
-
-
-	public abstract class AuxiliaryDataAdapter : ComponentDataAdapterBase, IAuxiliaryDataAdapter
+    public abstract class AuxiliaryDataAdapter : ComponentDataAdapterBase, IAuxiliaryDataAdapter
 	{
 		public class ElectricConsumerEntry
 		{
@@ -553,7 +536,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				KneelingHeight = VectoMath.Max(0.SI<Meter>(), mission.BusParameter.EntranceHeight - Constants.BusParameters.EntranceHeight),
 				CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency,
 				CompressorGearRatio = busAux.PneumaticSupply.Ratio,
-				CompressorMap = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply.CompressorSize, busAux.PneumaticSupply.Clutch),
+				CompressorMap = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply),
 				SmartAirCompression = busAux.PneumaticSupply.SmartAirCompression,
 				SmartRegeneration = busAux.PneumaticSupply.SmartRegeneration,
 				AdBlueDosing = busAux.PneumaticConsumers.AdBlueDosing,
@@ -821,10 +804,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			ssmHeating.ElectricHeater = GetElectricHeater(mission, runData);
 			ssmHeating.HeatingDistributions = DeclarationData.BusAuxiliaries.HeatingDistributionCases;
 
+			var electricUserInputs =
+				GetElectricalUserConfig(mission, primaryVehicle, actuations, runData.VehicleData.VehicleClass);
+			electricUserInputs.ConnectESToREESS = true;
+
 			var retVal = new AuxiliaryConfig
 			{
 				InputData = primaryVehicle.Components.BusAuxiliaries,
-				ElectricalUserInputsConfig = GetElectricalUserConfig(mission, primaryVehicle, actuations, runData.VehicleData.VehicleClass),
+				ElectricalUserInputsConfig = electricUserInputs,
 				PneumaticUserInputsConfig = GetPneumaticUserConfig(primaryVehicle, mission),
 				PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type),
 				Actuations = actuations,
@@ -1102,11 +1089,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		{
 			return new PneumaticUserInputsConfig
 			{
-				CompressorMap = completedVehicle.VehicleType == VectoSimulationJobType.BatteryElectricVehicle
-					? null
-					: DeclarationData.BusAuxiliaries.GetCompressorMap(
-						primaryBusAuxiliaries.PneumaticSupply.CompressorSize,
-						primaryBusAuxiliaries.PneumaticSupply.Clutch),
+				CompressorMap = DeclarationData.BusAuxiliaries.GetCompressorMap(primaryBusAuxiliaries.PneumaticSupply),
 				CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency,
 				CompressorGearRatio = completedVehicle.VehicleType == VectoSimulationJobType.BatteryElectricVehicle
 					? 0 : primaryBusAuxiliaries.PneumaticSupply.Ratio,
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs
index de8a94b9f4..8c48bc4527 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AxleGearDataAdapter.cs
@@ -1,19 +1,14 @@
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.GenericModelData;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IAxleGearDataAdapter
-	{
-		AxleGearData CreateAxleGearData(IAxleGearInputData data);
-		AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData);
-	}
-
-	public class AxleGearDataAdapter : IAxleGearDataAdapter
+    public class AxleGearDataAdapter : IAxleGearDataAdapter
 	{
 		public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData)
 		{
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs
index 16105fddcf..e81dfc39eb 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs
@@ -1,15 +1,11 @@
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-
-	public interface IDriverDataAdapter
-	{
-		DriverData CreateDriverData(Segment segment);
-	}
-	internal abstract class DriverDataAdapter : IDriverDataAdapter
+    internal abstract class DriverDataAdapter : IDriverDataAdapter
 	{
 		protected DriverDataAdapter() { }
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
index a73638a3d5..f70cd98ca3 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
@@ -7,6 +7,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor;
@@ -16,198 +17,7 @@ using TUGraz.VectoCore.Utils.Ninject;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	internal abstract class StandardValuesInputData
-	{
-		/// <summary>
-		/// Wraps the standard value input data and overrides the voltage level
-		/// </summary>
-		internal class StandardValueVoltageLevelInputData : IElectricMotorVoltageLevel
-		{
-			
-			public StandardValueVoltageLevelInputData(IElectricMotorVoltageLevel inputData, Volt voltageLevel)
-			{
-				_electricMotorVoltageLevelImplementation = inputData;
-				_voltageLevel = voltageLevel;
-			}
-			private IElectricMotorVoltageLevel _electricMotorVoltageLevelImplementation;
-			private Volt _voltageLevel;
-
-			public Volt VoltageLevel => _voltageLevel;
-
-
-			#region Implementation of IElectricMotorVoltageLevel
-
-
-
-			public NewtonMeter ContinuousTorque => _electricMotorVoltageLevelImplementation.ContinuousTorque;
-
-			public PerSecond ContinuousTorqueSpeed => _electricMotorVoltageLevelImplementation.ContinuousTorqueSpeed;
-
-			public NewtonMeter OverloadTorque => _electricMotorVoltageLevelImplementation.OverloadTorque;
-
-			public PerSecond OverloadTestSpeed => _electricMotorVoltageLevelImplementation.OverloadTestSpeed;
-
-			public Second OverloadTime => _electricMotorVoltageLevelImplementation.OverloadTime;
-
-			public TableData FullLoadCurve => _electricMotorVoltageLevelImplementation.FullLoadCurve;
-
-			public IList<IElectricMotorPowerMap> PowerMap => _electricMotorVoltageLevelImplementation.PowerMap;
-
-			#endregion
-		}
-
-		internal class StandardValueIEPCInputData : IIEPCDeclarationInputData
-		{
-			private IIEPCDeclarationInputData _iiepcDeclarationInputDataImplementation;
-			private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>();
-
-			/// <summary>
-			/// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data
-			/// </summary>
-			/// <param name="inputData"></param>
-			/// <param name="voltageLevels"></param>
-			/// <exception cref="ArgumentException"></exception>
-			public StandardValueIEPCInputData(IIEPCDeclarationInputData inputData, params Volt[] voltageLevels)
-			{
-				_iiepcDeclarationInputDataImplementation = inputData;
-				if (inputData.CertificationMethod != CertificationMethod.StandardValues) {
-					throw new ArgumentException("Only for standard value certification");
-				}
-
-				foreach (var voltageLevel in voltageLevels) {
-					_voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel));
-				}
-
-			}
-
-			public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels;
-
-			#region Implementation of IComponentInputData
-
-			public DataSource DataSource => _iiepcDeclarationInputDataImplementation.DataSource;
-
-			public bool SavedInDeclarationMode => _iiepcDeclarationInputDataImplementation.SavedInDeclarationMode;
-
-			public string Manufacturer => _iiepcDeclarationInputDataImplementation.Manufacturer;
-
-			public string Model => _iiepcDeclarationInputDataImplementation.Model;
-
-			public DateTime Date => _iiepcDeclarationInputDataImplementation.Date;
-
-			public string AppVersion => _iiepcDeclarationInputDataImplementation.AppVersion;
-
-			public CertificationMethod CertificationMethod => _iiepcDeclarationInputDataImplementation.CertificationMethod;
-
-			public string CertificationNumber => _iiepcDeclarationInputDataImplementation.CertificationNumber;
-
-			public DigestData DigestValue => _iiepcDeclarationInputDataImplementation.DigestValue;
-
-			#endregion
-
-			#region Implementation of IIEPCDeclarationInputData
-
-			public ElectricMachineType ElectricMachineType => _iiepcDeclarationInputDataImplementation.ElectricMachineType;
-
-			public Watt R85RatedPower => _iiepcDeclarationInputDataImplementation.R85RatedPower;
-
-			public KilogramSquareMeter Inertia => _iiepcDeclarationInputDataImplementation.Inertia;
-
-			public bool DifferentialIncluded => _iiepcDeclarationInputDataImplementation.DifferentialIncluded;
-
-			public bool DesignTypeWheelMotor => _iiepcDeclarationInputDataImplementation.DesignTypeWheelMotor;
-
-			public int? NrOfDesignTypeWheelMotorMeasured => _iiepcDeclarationInputDataImplementation.NrOfDesignTypeWheelMotorMeasured;
-
-			public IList<IGearEntry> Gears => _iiepcDeclarationInputDataImplementation.Gears;
-
-	
-
-			public IList<IDragCurve> DragCurves => _iiepcDeclarationInputDataImplementation.DragCurves;
-
-			public TableData Conditioning => _iiepcDeclarationInputDataImplementation.Conditioning;
-
-			#endregion
-		}
-
-		internal class StandardValuesEmInputData : IElectricMotorDeclarationInputData
-		{
-			private IElectricMotorDeclarationInputData _electricMotorDeclarationInputDataImplementation;
-
-			private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>();
-
-			/// <summary>
-			/// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data
-			/// </summary>
-			/// <param name="inputData"></param>
-			/// <param name="voltageLevels"></param>
-			/// <exception cref="ArgumentException"></exception>
-			public StandardValuesEmInputData(IElectricMotorDeclarationInputData inputData, params Volt[] voltageLevels)
-			{
-				_electricMotorDeclarationInputDataImplementation = inputData;
-				if (inputData.CertificationMethod != CertificationMethod.StandardValues)
-				{
-					throw new ArgumentException("Only for standard value certification");
-				}
-
-				foreach (var voltageLevel in voltageLevels)
-				{
-					_voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel));
-				}
-
-			}
-
-			public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels;
-
-
-			#region Implementation of IComponentInputData
-
-			public DataSource DataSource => _electricMotorDeclarationInputDataImplementation.DataSource;
-
-			public bool SavedInDeclarationMode => _electricMotorDeclarationInputDataImplementation.SavedInDeclarationMode;
-
-			public string Manufacturer => _electricMotorDeclarationInputDataImplementation.Manufacturer;
-
-			public string Model => _electricMotorDeclarationInputDataImplementation.Model;
-
-			public DateTime Date => _electricMotorDeclarationInputDataImplementation.Date;
-
-			public string AppVersion => _electricMotorDeclarationInputDataImplementation.AppVersion;
-
-			public CertificationMethod CertificationMethod => _electricMotorDeclarationInputDataImplementation.CertificationMethod;
-
-			public string CertificationNumber => _electricMotorDeclarationInputDataImplementation.CertificationNumber;
-
-			public DigestData DigestValue => _electricMotorDeclarationInputDataImplementation.DigestValue;
-
-			#endregion
-
-			#region Implementation of IElectricMotorDeclarationInputData
-
-			public ElectricMachineType ElectricMachineType => _electricMotorDeclarationInputDataImplementation.ElectricMachineType;
-
-			public Watt R85RatedPower => _electricMotorDeclarationInputDataImplementation.R85RatedPower;
-
-			public KilogramSquareMeter Inertia => _electricMotorDeclarationInputDataImplementation.Inertia;
-
-			public bool DcDcConverterIncluded => _electricMotorDeclarationInputDataImplementation.DcDcConverterIncluded;
-
-			public string IHPCType => _electricMotorDeclarationInputDataImplementation.IHPCType;
-
-		
-
-			public TableData DragCurve => _electricMotorDeclarationInputDataImplementation.DragCurve;
-
-			public TableData Conditioning => _electricMotorDeclarationInputDataImplementation.Conditioning;
-
-			#endregion
-		}
-	}
-
-
-
-
-
-	public class ElectricMachinesDataAdapter
+	public class ElectricMachinesDataAdapter : IElectricMachinesDataAdapter
 	{
 		public IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
 			IElectricMachinesDeclarationInputData electricMachines,
@@ -220,8 +30,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			}
 
 
-			if (electricMachines.Entries.Select(x => x.Position).Where(x => x != PowertrainPosition.GEN).Distinct().Count() > 1)
-			{
+			if (electricMachines.Entries.Select(x => x.Position).Where(x => x != PowertrainPosition.GEN).Distinct().Count() > 1) {
 				throw new VectoException("multiple electric propulsion motors are not supported at the moment");
 			}
 
@@ -229,7 +38,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 
 			CheckTorqueLimitVoltageLevels(electricMachines, torqueLimits);
-			
+
 			return electricMachines.Entries
 				.Select(m => Tuple.Create(m.Position,
 					CreateElectricMachine(m.Position, m.ElectricMachine, m.Count, m.RatioADC, m.RatioPerGear,
@@ -237,17 +46,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 		}
 
-		private void CheckTorqueLimitVoltageLevels(IElectricMachinesDeclarationInputData electricMachines, 
+		private void CheckTorqueLimitVoltageLevels(IElectricMachinesDeclarationInputData electricMachines,
 			IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits)
 		{
 			if (torqueLimits == null) {
 				return;
 			}
-			
-			foreach (var torqueLimit  in torqueLimits.OrderBy(x => x.Key)) {
-				
+
+			foreach (var torqueLimit in torqueLimits.OrderBy(x => x.Key)) {
+
 				//E-machines at position
-				foreach(var eMachine in electricMachines.Entries.Where(e => e.Position == torqueLimit.Key).Select(x => x.ElectricMachine)) {
+				foreach (var eMachine in electricMachines.Entries.Where(e => e.Position == torqueLimit.Key).Select(x => x.ElectricMachine)) {
 					foreach (var torqueLimitVoltageLevel in torqueLimit.Value.Select(tl => tl.Item1)) {
 						if (eMachine.VoltageLevels.All(vl => vl.VoltageLevel != torqueLimitVoltageLevel)) {
 							throw new VectoException(
@@ -258,9 +67,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			}
 		}
 
-		private ElectricMotorData CreateElectricMachine(PowertrainPosition powertrainPosition, 
+		private ElectricMotorData CreateElectricMachine(PowertrainPosition powertrainPosition,
 			IElectricMotorDeclarationInputData motorData,
-			int count, 
+			int count,
 			double adcRatio,
 			double[] ratioPerGear,
 			TableData adcLossMap,
@@ -274,8 +83,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			}
 			var voltageLevels = new List<ElectricMotorVoltageLevelData>();
 
-			foreach (var entry in motorData.VoltageLevels.OrderBy(x => x.VoltageLevel))
-			{
+			foreach (var entry in motorData.VoltageLevels.OrderBy(x => x.VoltageLevel)) {
 				var fullLoadCurve = ElectricFullLoadCurveReader.Create(entry.FullLoadCurve, count);
 				var maxTorqueCurve = torqueLimits == null
 					? null
@@ -297,8 +105,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				}
 			}
 
-			if (averageVoltage == null)
-			{
+			if (averageVoltage == null) {
 				// if no average voltage is provided (e.g. for supercap) use mean value of measured voltage maps
 				averageVoltage = (voltageLevels.Min(x => x.Voltage) + voltageLevels.Max(x => x.Voltage)) / 2.0;
 			}
@@ -308,10 +115,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				: adcLossMap != null
 					? TransmissionLossMapReader.CreateEmADCLossMap(adcLossMap, adcRatio, "EM ADC LossMap")
 					: TransmissionLossMapReader.CreateEmADCLossMap(DeclarationData.ElectricMachineDefaultMechanicalTransmissionEfficiency, adcRatio, "EM ADC LossMap Eff");
-			
 
-			var retVal = new ElectricMotorData()
-			{
+
+			var retVal = new ElectricMotorData() {
 				EfficiencyData = new VoltageLevelData() { VoltageLevels = voltageLevels },
 				EMDragCurve = ElectricMotorDragCurveReader.Create(motorData.DragCurve, count),
 				Inertia = motorData.Inertia * count,
@@ -327,43 +133,35 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		private static ElectricMotorFullLoadCurve IntersectEMFullLoadCurves(ElectricMotorFullLoadCurve fullLoadCurve,
 			ElectricMotorFullLoadCurve maxTorqueCurve)
 		{
-			if (maxTorqueCurve == null)
-			{
+			if (maxTorqueCurve == null) {
 				return fullLoadCurve;
 			}
 
-			if (maxTorqueCurve.MaxSpeed.IsSmaller(fullLoadCurve.MaxSpeed))
-			{
+			if (maxTorqueCurve.MaxSpeed.IsSmaller(fullLoadCurve.MaxSpeed)) {
 				throw new VectoException("EM Torque limitation has to cover the whole speed range");
 			}
 
 			var motorSpeeds = fullLoadCurve.FullLoadEntries.Select(x => x.MotorSpeed)
 				.Concat(maxTorqueCurve.FullLoadEntries.Select(x => x.MotorSpeed)).ToList();
 			// iterate over all segments in the full-load curve
-			foreach (var fldTuple in fullLoadCurve.FullLoadEntries.Pairwise())
-			{
+			foreach (var fldTuple in fullLoadCurve.FullLoadEntries.Pairwise()) {
 				// find all grid points of max torque curve within the current segment of fld
 				var maxPtsWithinSegment = maxTorqueCurve.FullLoadEntries.Where(x =>
 					x.MotorSpeed.IsGreaterOrEqual(fldTuple.Item1.MotorSpeed) &&
 					x.MotorSpeed.IsSmallerOrEqual(fldTuple.Item2.MotorSpeed)).OrderBy(x => x.MotorSpeed).ToList();
-				if (maxPtsWithinSegment.Count == 0)
-				{
+				if (maxPtsWithinSegment.Count == 0) {
 					// if grid pint is within, take the 'surrounding' segment
 					var segment =
 						maxTorqueCurve.FullLoadEntries.GetSection(x => x.MotorSpeed < fldTuple.Item1.MotorSpeed);
 					maxPtsWithinSegment = new[] { segment.Item1, segment.Item2 }.ToList();
-				}
-				else
-				{
+				} else {
 					// add the point just before and just after the current list of points 
-					if (maxPtsWithinSegment.Min(x => x.MotorSpeed).IsGreater(fldTuple.Item1.MotorSpeed))
-					{
+					if (maxPtsWithinSegment.Min(x => x.MotorSpeed).IsGreater(fldTuple.Item1.MotorSpeed)) {
 						maxPtsWithinSegment.Add(maxTorqueCurve.FullLoadEntries.Last(x =>
 							x.MotorSpeed.IsSmaller(fldTuple.Item1.MotorSpeed)));
 					}
 
-					if (maxPtsWithinSegment.Max(x => x.MotorSpeed).IsSmaller(fldTuple.Item2.MotorSpeed))
-					{
+					if (maxPtsWithinSegment.Max(x => x.MotorSpeed).IsSmaller(fldTuple.Item2.MotorSpeed)) {
 						maxPtsWithinSegment.Add(maxTorqueCurve.FullLoadEntries.First(x => x.MotorSpeed.IsGreater(fldTuple.Item2.MotorSpeed)));
 					}
 
@@ -376,19 +174,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				var fldEdgeGenerate =
 					Edge.Create(new Point(fldTuple.Item1.MotorSpeed.Value(), fldTuple.Item1.FullGenerationTorque.Value()),
 						new Point(fldTuple.Item2.MotorSpeed.Value(), fldTuple.Item2.FullGenerationTorque.Value()));
-				foreach (var maxTuple in maxPtsWithinSegment.Pairwise())
-				{
+				foreach (var maxTuple in maxPtsWithinSegment.Pairwise()) {
 					var maxEdgeDrive =
 						Edge.Create(new Point(maxTuple.Item1.MotorSpeed.Value(), maxTuple.Item1.FullDriveTorque.Value()),
 							new Point(maxTuple.Item2.MotorSpeed.Value(), maxTuple.Item2.FullDriveTorque.Value()));
-					if (!(maxEdgeDrive.SlopeXY - fldEdgeDrive.SlopeXY).IsEqual(0, 1e-12))
-					{
+					if (!(maxEdgeDrive.SlopeXY - fldEdgeDrive.SlopeXY).IsEqual(0, 1e-12)) {
 						// lines are not parallel
 						var nIntersectDrive =
 							((fldEdgeDrive.OffsetXY - maxEdgeDrive.OffsetXY) /
 							(maxEdgeDrive.SlopeXY - fldEdgeDrive.SlopeXY)).SI<PerSecond>();
-						if (nIntersectDrive.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed))
-						{
+						if (nIntersectDrive.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed)) {
 							motorSpeeds.Add(nIntersectDrive);
 						}
 					}
@@ -396,16 +191,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 					var maxEdgeGenerate =
 						Edge.Create(new Point(maxTuple.Item1.MotorSpeed.Value(), maxTuple.Item1.FullGenerationTorque.Value()),
 							new Point(maxTuple.Item2.MotorSpeed.Value(), maxTuple.Item2.FullGenerationTorque.Value()));
-					if (!((maxEdgeGenerate.SlopeXY - fldEdgeGenerate.SlopeXY).IsEqual(0, 1e-12)))
-					{
+					if (!((maxEdgeGenerate.SlopeXY - fldEdgeGenerate.SlopeXY).IsEqual(0, 1e-12))) {
 						// lines are not parallel
 						var nIntersectGenerate =
 							((fldEdgeGenerate.OffsetXY - maxEdgeGenerate.OffsetXY) /
 							(maxEdgeGenerate.SlopeXY - fldEdgeGenerate.SlopeXY)).SI<PerSecond>();
 
 
-						if (nIntersectGenerate.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed))
-						{
+						if (nIntersectGenerate.IsBetween(fldTuple.Item1.MotorSpeed, fldTuple.Item2.MotorSpeed)) {
 							motorSpeeds.Add(nIntersectGenerate);
 						}
 					}
@@ -414,8 +207,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 			// create new full-load curve with values closest to zero.
 			return new ElectricMotorFullLoadCurve(motorSpeeds.OrderBy(x => x.Value()).Distinct().Select(x =>
-				new ElectricMotorFullLoadCurve.FullLoadEntry()
-				{
+				new ElectricMotorFullLoadCurve.FullLoadEntry() {
 					MotorSpeed = x,
 					FullDriveTorque = VectoMath.Max(fullLoadCurve.FullLoadDriveTorque(x),
 						maxTorqueCurve.FullLoadDriveTorque(x)),
@@ -426,23 +218,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 		private ElectricMotorVoltageLevelData CreateIHPCVoltageLevelData(int count, IElectricMotorVoltageLevel entry, ElectricMotorFullLoadCurve fullLoadCurveCombined, GearList gearList)
 		{
-			if (gearList == null)
-			{
+			if (gearList == null) {
 				throw new VectoException("no gears provided for IHPC EM");
 			}
 
-			if (gearList.Count() != entry.PowerMap.Count)
-			{
+			if (gearList.Count() != entry.PowerMap.Count) {
 				throw new VectoException(
 					$"number of gears in transmission does not match gears in electric motor (IHPC) - {gearList.Count()}/{entry.PowerMap.Count}");
 			}
 			var effMap = new Dictionary<uint, EfficiencyMap>();
-			foreach (var gear in gearList)
-			{
+			foreach (var gear in gearList) {
 				effMap.Add(gear.Gear, ElectricMotorMapReader.Create(entry.PowerMap[(int)gear.Gear - 1].PowerMap, count));
 			}
-			return new IEPCVoltageLevelData()
-			{
+			return new IEPCVoltageLevelData() {
 				Voltage = entry.VoltageLevel,
 				FullLoadCurve = fullLoadCurveCombined,
 				EfficiencyMaps = effMap,
@@ -468,12 +256,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 		public List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
 		{
-			if (iepc == null)
-			{
+			if (iepc == null) {
 				return null;
 			}
-			if (iepc.CertificationMethod == CertificationMethod.StandardValues)
-			{
+			if (iepc.CertificationMethod == CertificationMethod.StandardValues) {
 				//Fake one very low voltage level and one very high for standard values
 				iepc = new StandardValuesInputData.StandardValueIEPCInputData(iepc, 1.SI<Volt>(), 10E9.SI<Volt>());
 			}
@@ -493,19 +279,16 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 			var voltageLevels = new List<ElectricMotorVoltageLevelData>();
 
-			foreach (var entry in iepc.VoltageLevels.OrderBy(x => x.VoltageLevel).AsEnumerable())
-			{
+			foreach (var entry in iepc.VoltageLevels.OrderBy(x => x.VoltageLevel).AsEnumerable()) {
 				var effMap = new Dictionary<uint, EfficiencyMap>();
 				var fldCurve =
 					IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count, gearRatioUsedForMeasurement.Ratio);
-				for (var i = 0u; i < entry.PowerMap.Count; i++)
-				{
+				for (var i = 0u; i < entry.PowerMap.Count; i++) {
 					var ratio = iepc.Gears.First(x => x.GearNumber == i + 1).Ratio;
 					effMap.Add(i + 1, IEPCMapReader.Create(entry.PowerMap[(int)i].PowerMap, count, ratio, fldCurve));
 					//fullLoadCurves.Add(i + 1, IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count, ratio));
 				}
-				voltageLevels.Add(new IEPCVoltageLevelData()
-				{
+				voltageLevels.Add(new IEPCVoltageLevelData() {
 
 					Voltage = iepc.CertificationMethod != CertificationMethod.StandardValues ? entry.VoltageLevel : null, //No voltagelevel is provided for standard values
 					FullLoadCurve = fldCurve,
@@ -518,26 +301,20 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 
 			var dragCurves = new Dictionary<uint, DragCurve>();
-			if (iepc.DragCurves.Count > 1)
-			{
-				for (var i = 0u; i < iepc.DragCurves.Count; i++)
-				{
+			if (iepc.DragCurves.Count > 1) {
+				for (var i = 0u; i < iepc.DragCurves.Count; i++) {
 					var ratio = iepc.Gears.First(x => x.GearNumber == i + 1).Ratio;
 					dragCurves.Add(i + 1, IEPCDragCurveReader.Create(iepc.DragCurves[(int)i].DragCurve, count, ratio));
 				}
-			}
-			else
-			{
+			} else {
 				var dragCurve = iepc.DragCurves.First().DragCurve;
-				for (var i = 0u; i < iepc.Gears.Count; i++)
-				{
+				for (var i = 0u; i < iepc.Gears.Count; i++) {
 					var ratio = iepc.Gears.First(x => x.GearNumber == i + 1).Ratio;
 					dragCurves.Add(i + 1, IEPCDragCurveReader.Create(dragCurve, count, ratio));
 				}
 			}
 
-			var retVal = new IEPCElectricMotorData()
-			{
+			var retVal = new IEPCElectricMotorData() {
 				EfficiencyData = new VoltageLevelData() { VoltageLevels = voltageLevels },
 				IEPCDragCurves = dragCurves,
 				Inertia = iepc.Inertia * count,
@@ -556,14 +333,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		private OverloadData CalculateOverloadData(IIEPCDeclarationInputData iepc, int count,
 			VoltageLevelData voltageLevel, Volt averageVoltage, Tuple<uint, double> gearRatioUsedForMeasurement)
 		{
-			
+
 			// if average voltage is outside of the voltage-level range, do not extrapolate but take the min voltage entry, or max voltage entry
-			if (averageVoltage < iepc.VoltageLevels.Min(x => x.VoltageLevel))
-			{
+			if (averageVoltage < iepc.VoltageLevels.Min(x => x.VoltageLevel)) {
 				return CalculateOverloadBuffer(iepc.VoltageLevels.First(), count, voltageLevel, gearRatioUsedForMeasurement);
 			}
-			if (averageVoltage > iepc.VoltageLevels.Max(x => x.VoltageLevel))
-			{
+			if (averageVoltage > iepc.VoltageLevels.Max(x => x.VoltageLevel)) {
 				return CalculateOverloadBuffer(iepc.VoltageLevels.Last(), count, voltageLevel, gearRatioUsedForMeasurement);
 			}
 
@@ -571,8 +346,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			var ovlLo = CalculateOverloadBuffer(vLow, count, voltageLevel, gearRatioUsedForMeasurement);
 			var ovlHi = CalculateOverloadBuffer(vHigh, count, voltageLevel, gearRatioUsedForMeasurement);
 
-			var retVal = new OverloadData()
-			{
+			var retVal = new OverloadData() {
 				OverloadBuffer = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.OverloadBuffer, ovlHi.OverloadBuffer, averageVoltage),
 				ContinuousTorque = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousTorque, ovlHi.ContinuousTorque, averageVoltage),
 				ContinuousPowerLoss = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousPowerLoss, ovlHi.ContinuousPowerLoss, averageVoltage)
@@ -585,12 +359,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		{
 
 			// if average voltage is outside of the voltage-level range, do not extrapolate but take the min voltage entry, or max voltage entry
-			if (averageVoltage < motorData.VoltageLevels.Min(x => x.VoltageLevel))
-			{
+			if (averageVoltage < motorData.VoltageLevels.Min(x => x.VoltageLevel)) {
 				return CalculateOverloadBuffer(motorData.VoltageLevels.First(), count, voltageLevel);
 			}
-			if (averageVoltage > motorData.VoltageLevels.Max(x => x.VoltageLevel))
-			{
+			if (averageVoltage > motorData.VoltageLevels.Max(x => x.VoltageLevel)) {
 				return CalculateOverloadBuffer(motorData.VoltageLevels.Last(), count, voltageLevel);
 			}
 
@@ -598,8 +370,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			var ovlLo = CalculateOverloadBuffer(vLow, count, voltageLevel);
 			var ovlHi = CalculateOverloadBuffer(vHigh, count, voltageLevel);
 
-			var retVal = new OverloadData()
-			{
+			var retVal = new OverloadData() {
 				OverloadBuffer = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.OverloadBuffer, ovlHi.OverloadBuffer, averageVoltage),
 				ContinuousTorque = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousTorque, ovlHi.ContinuousTorque, averageVoltage),
 				ContinuousPowerLoss = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousPowerLoss, ovlHi.ContinuousPowerLoss, averageVoltage)
@@ -618,10 +389,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			var overloadTestSpeed = (voltageEntry.OverloadTestSpeed ?? 0.RPMtoRad()) * gearRatioUsedForMeasurement;
 
 
-            var peakElPwr = voltageLevel.LookupElectricPower(voltageEntry.VoltageLevel,
-                    overloadTestSpeed,
+			var peakElPwr = voltageLevel.LookupElectricPower(voltageEntry.VoltageLevel,
+					overloadTestSpeed,
 					-overloadTorque,
-					gear, 
+					gear,
 					true)
 					.ElectricalPower;
 			var peakPwrLoss = -peakElPwr - overloadTorque * overloadTestSpeed; // losses need to be positive
@@ -633,8 +404,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 								gear, true).ElectricalPower;
 			var continuousPowerLoss = -contElPwr - continuousTorque * continuousTorqueSpeed; // loss needs to be positive
 			var overloadBuffer = (peakPwrLoss - continuousPowerLoss) * voltageEntry.OverloadTime;
-			return new OverloadData()
-			{
+			return new OverloadData() {
 				OverloadBuffer = overloadBuffer,
 				ContinuousTorque = continuousTorque,
 				ContinuousPowerLoss = continuousPowerLoss
@@ -642,4 +412,193 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		}
 	}
 
+	internal abstract class StandardValuesInputData
+	{
+		/// <summary>
+		/// Wraps the standard value input data and overrides the voltage level
+		/// </summary>
+		internal class StandardValueVoltageLevelInputData : IElectricMotorVoltageLevel
+		{
+			
+			public StandardValueVoltageLevelInputData(IElectricMotorVoltageLevel inputData, Volt voltageLevel)
+			{
+				_electricMotorVoltageLevelImplementation = inputData;
+				_voltageLevel = voltageLevel;
+			}
+			private IElectricMotorVoltageLevel _electricMotorVoltageLevelImplementation;
+			private Volt _voltageLevel;
+
+			public Volt VoltageLevel => _voltageLevel;
+
+
+			#region Implementation of IElectricMotorVoltageLevel
+
+
+
+			public NewtonMeter ContinuousTorque => _electricMotorVoltageLevelImplementation.ContinuousTorque;
+
+			public PerSecond ContinuousTorqueSpeed => _electricMotorVoltageLevelImplementation.ContinuousTorqueSpeed;
+
+			public NewtonMeter OverloadTorque => _electricMotorVoltageLevelImplementation.OverloadTorque;
+
+			public PerSecond OverloadTestSpeed => _electricMotorVoltageLevelImplementation.OverloadTestSpeed;
+
+			public Second OverloadTime => _electricMotorVoltageLevelImplementation.OverloadTime;
+
+			public TableData FullLoadCurve => _electricMotorVoltageLevelImplementation.FullLoadCurve;
+
+			public IList<IElectricMotorPowerMap> PowerMap => _electricMotorVoltageLevelImplementation.PowerMap;
+
+			#endregion
+		}
+
+		internal class StandardValueIEPCInputData : IIEPCDeclarationInputData
+		{
+			private IIEPCDeclarationInputData _iiepcDeclarationInputDataImplementation;
+			private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>();
+
+			/// <summary>
+			/// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data
+			/// </summary>
+			/// <param name="inputData"></param>
+			/// <param name="voltageLevels"></param>
+			/// <exception cref="ArgumentException"></exception>
+			public StandardValueIEPCInputData(IIEPCDeclarationInputData inputData, params Volt[] voltageLevels)
+			{
+				_iiepcDeclarationInputDataImplementation = inputData;
+				if (inputData.CertificationMethod != CertificationMethod.StandardValues) {
+					throw new ArgumentException("Only for standard value certification");
+				}
+
+				foreach (var voltageLevel in voltageLevels) {
+					_voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel));
+				}
+
+			}
+
+			public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels;
+
+			#region Implementation of IComponentInputData
+
+			public DataSource DataSource => _iiepcDeclarationInputDataImplementation.DataSource;
+
+			public bool SavedInDeclarationMode => _iiepcDeclarationInputDataImplementation.SavedInDeclarationMode;
+
+			public string Manufacturer => _iiepcDeclarationInputDataImplementation.Manufacturer;
+
+			public string Model => _iiepcDeclarationInputDataImplementation.Model;
+
+			public DateTime Date => _iiepcDeclarationInputDataImplementation.Date;
+
+			public string AppVersion => _iiepcDeclarationInputDataImplementation.AppVersion;
+
+			public CertificationMethod CertificationMethod => _iiepcDeclarationInputDataImplementation.CertificationMethod;
+
+			public string CertificationNumber => _iiepcDeclarationInputDataImplementation.CertificationNumber;
+
+			public DigestData DigestValue => _iiepcDeclarationInputDataImplementation.DigestValue;
+
+			#endregion
+
+			#region Implementation of IIEPCDeclarationInputData
+
+			public ElectricMachineType ElectricMachineType => _iiepcDeclarationInputDataImplementation.ElectricMachineType;
+
+			public Watt R85RatedPower => _iiepcDeclarationInputDataImplementation.R85RatedPower;
+
+			public KilogramSquareMeter Inertia => _iiepcDeclarationInputDataImplementation.Inertia;
+
+			public bool DifferentialIncluded => _iiepcDeclarationInputDataImplementation.DifferentialIncluded;
+
+			public bool DesignTypeWheelMotor => _iiepcDeclarationInputDataImplementation.DesignTypeWheelMotor;
+
+			public int? NrOfDesignTypeWheelMotorMeasured => _iiepcDeclarationInputDataImplementation.NrOfDesignTypeWheelMotorMeasured;
+
+			public IList<IGearEntry> Gears => _iiepcDeclarationInputDataImplementation.Gears;
+
+	
+
+			public IList<IDragCurve> DragCurves => _iiepcDeclarationInputDataImplementation.DragCurves;
+
+			public TableData Conditioning => _iiepcDeclarationInputDataImplementation.Conditioning;
+
+			#endregion
+		}
+
+		internal class StandardValuesEmInputData : IElectricMotorDeclarationInputData
+		{
+			private IElectricMotorDeclarationInputData _electricMotorDeclarationInputDataImplementation;
+
+			private IList<IElectricMotorVoltageLevel> _voltageLevels = new List<IElectricMotorVoltageLevel>();
+
+			/// <summary>
+			/// Wraps the inputData and creates new voltage levels based on the voltage level provided in the input data
+			/// </summary>
+			/// <param name="inputData"></param>
+			/// <param name="voltageLevels"></param>
+			/// <exception cref="ArgumentException"></exception>
+			public StandardValuesEmInputData(IElectricMotorDeclarationInputData inputData, params Volt[] voltageLevels)
+			{
+				_electricMotorDeclarationInputDataImplementation = inputData;
+				if (inputData.CertificationMethod != CertificationMethod.StandardValues)
+				{
+					throw new ArgumentException("Only for standard value certification");
+				}
+
+				foreach (var voltageLevel in voltageLevels)
+				{
+					_voltageLevels.Add(new StandardValueVoltageLevelInputData(inputData.VoltageLevels.First(), voltageLevel));
+				}
+
+			}
+
+			public IList<IElectricMotorVoltageLevel> VoltageLevels => _voltageLevels;
+
+
+			#region Implementation of IComponentInputData
+
+			public DataSource DataSource => _electricMotorDeclarationInputDataImplementation.DataSource;
+
+			public bool SavedInDeclarationMode => _electricMotorDeclarationInputDataImplementation.SavedInDeclarationMode;
+
+			public string Manufacturer => _electricMotorDeclarationInputDataImplementation.Manufacturer;
+
+			public string Model => _electricMotorDeclarationInputDataImplementation.Model;
+
+			public DateTime Date => _electricMotorDeclarationInputDataImplementation.Date;
+
+			public string AppVersion => _electricMotorDeclarationInputDataImplementation.AppVersion;
+
+			public CertificationMethod CertificationMethod => _electricMotorDeclarationInputDataImplementation.CertificationMethod;
+
+			public string CertificationNumber => _electricMotorDeclarationInputDataImplementation.CertificationNumber;
+
+			public DigestData DigestValue => _electricMotorDeclarationInputDataImplementation.DigestValue;
+
+			#endregion
+
+			#region Implementation of IElectricMotorDeclarationInputData
+
+			public ElectricMachineType ElectricMachineType => _electricMotorDeclarationInputDataImplementation.ElectricMachineType;
+
+			public Watt R85RatedPower => _electricMotorDeclarationInputDataImplementation.R85RatedPower;
+
+			public KilogramSquareMeter Inertia => _electricMotorDeclarationInputDataImplementation.Inertia;
+
+			public bool DcDcConverterIncluded => _electricMotorDeclarationInputDataImplementation.DcDcConverterIncluded;
+
+			public string IHPCType => _electricMotorDeclarationInputDataImplementation.IHPCType;
+
+		
+
+			public TableData DragCurve => _electricMotorDeclarationInputDataImplementation.DragCurve;
+
+			public TableData Conditioning => _electricMotorDeclarationInputDataImplementation.Conditioning;
+
+			#endregion
+		}
+	}
+
+
+
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs
index 7f1d8d5052..0597a5c1be 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs
@@ -6,6 +6,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -13,14 +14,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IEngineDataAdapter
-	{
-		CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle,
-			IEngineModeDeclarationInputData mode, Mission mission);
-
-		CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, int modeIdx, Mission mission);
-	}
-	public abstract class EngineComponentDataAdapter : ComponentDataAdapterBase, IEngineDataAdapter
+    public abstract class EngineComponentDataAdapter : ComponentDataAdapterBase, IEngineDataAdapter
 	{
 		internal static EngineFullLoadCurve IntersectFullLoadCurves(EngineFullLoadCurve engineCurve, NewtonMeter maxTorque)
 		{
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs
index f05d285827..808bccce88 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/GearBoxDataAdapter.cs
@@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Impl;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.InputData.Reader.ShiftStrategy;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
@@ -19,16 +20,7 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IGearboxDataAdapter
-	{
-		GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-			IShiftPolygonCalculator shiftPolygonCalculator, GearboxType[] supportedGearboxTypes);
-
-		ShiftStrategyParameters CreateGearshiftData(double axleRatio,
-			PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount);
-	}
-
-	public abstract class GearboxDataAdapterBase : ComponentDataAdapterBase, IGearboxDataAdapter
+    public abstract class GearboxDataAdapterBase : ComponentDataAdapterBase, IGearboxDataAdapter
 	{
 		#region Helper
 		protected internal static NewtonMeter GbxMaxTorque(
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs
new file mode 100644
index 0000000000..fcabfd058e
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IADASDataAdapter.cs
@@ -0,0 +1,10 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IADASDataAdapter
+    {
+        VehicleData.ADASData CreateADAS(IAdvancedDriverAssistantSystemDeclarationInputData adas);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs
new file mode 100644
index 0000000000..5c7dc780b1
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAirdragDataAdapter.cs
@@ -0,0 +1,15 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IAirdragDataAdapter
+    {
+        AirdragData CreateAirdragData(
+            IAirdragDeclarationInputData airdragInputData, Mission mission,
+            Segment segment);
+
+        AirdragData CreateAirdragData(IVehicleDeclarationInputData completedVehicle, Mission mission);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs
new file mode 100644
index 0000000000..f91809fcfa
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAngledriveDataAdapter.cs
@@ -0,0 +1,11 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IAngledriveDataAdapter
+    {
+        AngledriveData CreateAngledriveData(IAngledriveInputData data, bool useEfficiencyFallback);
+        AngledriveData CreateAngledriveData(IAngledriveInputData data);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs
new file mode 100644
index 0000000000..246c74a129
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAuxiliaryDataAdapter.cs
@@ -0,0 +1,30 @@
+using System.Collections.Generic;
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.BusAuxiliaries;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IAuxiliaryDataAdapter
+    {
+        IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxInputData,
+            IBusAuxiliariesDeclarationData busAuxData, MissionType mission, VehicleClass hvdClass, Meter vehicleLength,
+            int? numSteeredAxles, VectoSimulationJobType jobType);
+    }
+	public interface ICompletedBusAuxiliaryDataAdapter : IPrimaryBusAuxiliaryDataAdapter
+	{
+		IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle,
+			IVehicleDeclarationInputData completedVehicle, VectoRunData runData);
+	}
+
+	public interface IPrimaryBusAuxiliaryDataAdapter : IAuxiliaryDataAdapter
+	{
+		AuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, VectoRunData runData);
+
+	}
+
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs
new file mode 100644
index 0000000000..dbc20226cc
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IAxleGearDataAdapter.cs
@@ -0,0 +1,11 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IAxleGearDataAdapter
+    {
+        AxleGearData CreateAxleGearData(IAxleGearInputData data);
+        AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs
new file mode 100644
index 0000000000..0d10a46d33
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IDriverDataAdapter.cs
@@ -0,0 +1,10 @@
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IDriverDataAdapter
+    {
+        DriverData CreateDriverData(Segment segment);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/IEPCDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEPCDataAdapter.cs
similarity index 93%
rename from VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/IEPCDataAdapter.cs
rename to VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEPCDataAdapter.cs
index 03c58d718a..4af31d9495 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/IEPCDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEPCDataAdapter.cs
@@ -10,10 +10,10 @@ using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor;
 
-namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
 {
     public class IEPCDataAdapter
     {
-		
-	}
+
+    }
 }
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs
new file mode 100644
index 0000000000..05a4a34662
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricMachinesDataAdapter.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Impl;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IElectricMachinesDataAdapter
+    {
+        IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
+            IElectricMachinesDeclarationInputData electricMachines,
+            IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, GearList gearlist = null);
+
+		List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc,
+			Volt averageVoltage);
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs
new file mode 100644
index 0000000000..347b3a2cd6
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IEngineDataAdapter.cs
@@ -0,0 +1,14 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IEngineDataAdapter
+    {
+        CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle,
+            IEngineModeDeclarationInputData mode, Mission mission);
+
+        CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, int modeIdx, Mission mission);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs
new file mode 100644
index 0000000000..16aa7ac027
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IGearboxDataAdapter.cs
@@ -0,0 +1,18 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IGearboxDataAdapter
+    {
+        GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
+            IShiftPolygonCalculator shiftPolygonCalculator, GearboxType[] supportedGearboxTypes);
+
+        ShiftStrategyParameters CreateGearshiftData(double axleRatio,
+            PerSecond engineIdlingSpeed, GearboxType gearboxType, int gearsCount);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs
new file mode 100644
index 0000000000..a81fea75f4
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IPTODataAdapter.cs
@@ -0,0 +1,11 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IPTODataAdapter
+    {
+        PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx);
+        PTOData CreateDefaultPTOData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs
new file mode 100644
index 0000000000..752d41eebb
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IRetarderDataAdapter.cs
@@ -0,0 +1,10 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IRetarderDataAdapter
+    {
+        RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs
new file mode 100644
index 0000000000..ea8dd7461b
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/ITorqueConverterDataAdapter.cs
@@ -0,0 +1,14 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface ITorqueConverterDataAdapter
+    {
+        TorqueConverterData CreateTorqueConverterData(GearboxType gearboxType,
+            ITorqueConverterDeclarationInputData torqueConverter, double ratio,
+            CombustionEngineData engineData);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs
new file mode 100644
index 0000000000..774fd01a0c
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IVehicleDataAdapter.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IVehicleDataAdapter
+    {
+        VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission,
+            Kilogram loading, double? passengerCount, bool allowVocational);
+        VehicleData CreateExemptedVehicleData(IVehicleDeclarationInputData data);
+
+        VehicleData CreateVehicleData(IVehicleDeclarationInputData primaryVehicle,
+            IVehicleDeclarationInputData completedVehicle, Segment segment, Mission mission,
+            KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading);
+
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs
index 64a5ce462c..5011385a9c 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/PTODataAdapter.cs
@@ -2,6 +2,7 @@
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -9,13 +10,7 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IPTODataAdapter
-	{
-		PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx);
-		PTOData CreateDefaultPTOData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx);
-	}
-
-	public class PTODataAdapterLorry : IPTODataAdapter
+    public class PTODataAdapterLorry : IPTODataAdapter
 	{
 
         public virtual PTOData CreateDefaultPTOData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx)
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs
index 215ba949b5..ee3b6a1511 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/RetarderDataAdapter.cs
@@ -4,16 +4,13 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IRetarderDataAdapter
-	{
-		RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet);
-	}
-	public class RetarderDataAdapter : IRetarderDataAdapter
+    public class RetarderDataAdapter : IRetarderDataAdapter
 	{
 		public RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
 		{
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs
index 7fcd4e108c..d63ed42668 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/HybridStrategyParameterDataAdapter.cs
@@ -16,8 +16,8 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter
 {
-
-    public abstract class HybridStrategyDataAdapter{
+	public abstract class HybridStrategyDataAdapter : IHybridStrategyDataAdapter
+	{
         protected internal static Dictionary<GearshiftPosition, VehicleMaxPropulsionTorque> CreateMaxPropulsionTorque(
 			ArchitectureID archId, CombustionEngineData engineData, GearboxData gearboxData, TableData boostingLimitations)
         {
@@ -168,11 +168,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
             return entries;
         }
-    }
+
+		#region Implementation of IHybridStrategyDataAdapter
+
+		public abstract HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCap,
+			VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType, ArchitectureID archID,
+			CombustionEngineData engineData, GearboxData gearboxData, TableData boostingLimitations);
+
+		public abstract HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCapData,
+			Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode);
+
+		#endregion
+	}
 
     public class ParallelHybridStrategyParameterDataAdapter : HybridStrategyDataAdapter
 	{
-		public HybridStrategyParameters CreateHybridStrategyParameters(
+		public override HybridStrategyParameters CreateHybridStrategyParameters(
 			BatterySystemData batterySystemData,
 			SuperCapData superCap, 
 			VectoRunData.OvcHevMode ovcMode, 
@@ -236,15 +247,23 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			return result;
 		}
 
-
-
-		
-
-    }
+		public override HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCapData,
+			Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode)
+		{
+			throw new NotImplementedException("Not supported for parallel hybrid strategy");
+		}
+	}
 
 	public class SerialHybridStrategyParameterDataAdapter : HybridStrategyDataAdapter
 	{
-		public HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData,
+		public override HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData, SuperCapData superCap,
+			VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType, ArchitectureID archID,
+			CombustionEngineData engineData, GearboxData gearboxData, TableData boostingLimitations)
+		{
+			throw new NotImplementedException("Not supported for serial hybrid strategy");
+		}
+
+		public override HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData,
 			SuperCapData superCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode)
 		{
 			if (batterySystemData == null && superCapData == null) {
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs
new file mode 100644
index 0000000000..f656527161
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/StrategyDataAdapter/IHybridStrategyDataAdapter.cs
@@ -0,0 +1,27 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.StrategyDataAdapter
+{
+	public interface IHybridStrategyDataAdapter
+	{
+		// parallel hybrid params
+		HybridStrategyParameters CreateHybridStrategyParameters(
+			BatterySystemData batterySystemData,
+			SuperCapData superCap,
+			VectoRunData.OvcHevMode ovcMode,
+			LoadingType loading,
+			VehicleClass vehicleClass,
+			MissionType missionType, ArchitectureID archID, CombustionEngineData engineData, GearboxData gearboxData,
+			TableData boostingLimitations);
+
+		// serial hybrid params
+		HybridStrategyParameters CreateHybridStrategyParameters(BatterySystemData batterySystemData,
+			SuperCapData superCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode);
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs
index eb7d615599..c25724f2ca 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/TorqueConverterDataAdapter.cs
@@ -1,19 +1,14 @@
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface ITorqueConverterDataAdapter
-	{
-		TorqueConverterData CreateTorqueConverterData(GearboxType gearboxType,
-			ITorqueConverterDeclarationInputData torqueConverter, double ratio,
-			CombustionEngineData engineData);
-	}
-	public class TorqueConverterDataAdapter : ITorqueConverterDataAdapter
+    public class TorqueConverterDataAdapter : ITorqueConverterDataAdapter
 	{
 		public virtual TorqueConverterData CreateTorqueConverterData(GearboxType gearboxType,
 			ITorqueConverterDeclarationInputData torqueConverter, double ratio,
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs
index a6487417bc..b7b9708a46 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/VehicleDataAdapter.cs
@@ -6,24 +6,14 @@ using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public interface IVehicleDataAdapter
-	{
-		VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission,
-			Kilogram loading, double? passengerCount, bool allowVocational);
-		VehicleData CreateExemptedVehicleData(IVehicleDeclarationInputData data);
-
-		VehicleData CreateVehicleData(IVehicleDeclarationInputData primaryVehicle,
-			IVehicleDeclarationInputData completedVehicle, Segment segment, Mission mission,
-			KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading);
-
-	}
-	internal abstract class VehicleDataAdapter : ComponentDataAdapterBase, IVehicleDataAdapter
+    internal abstract class VehicleDataAdapter : ComponentDataAdapterBase, IVehicleDataAdapter
 	{
 		public static NewtonMeter VehMaxTorque(
 			ITransmissionInputData gear, int numGears,
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs
index 46799d3843..ea82c0546d 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SingleBus/DeclarationDataAdapterSingleBus.cs
@@ -8,6 +8,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent;
@@ -15,7 +16,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SingleBus
 {
-	public abstract class DeclarationDataAdapterSingleBus
+    public abstract class DeclarationDataAdapterSingleBus
 	{
 		public abstract class SingleBusBase : ISingleBusDeclarationDataAdapter
 		{
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
index ea7f482c8e..8f818e38b8 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
@@ -95,6 +95,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
 					InputDataHash = InputDataProvider.XMLHash,
 					MaxChargingPower = InputDataProvider.JobInputData.Vehicle.MaxChargingPower,
 				};
+
 				return simulationRunData;
 			}
 
@@ -295,12 +296,12 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
 						mission); // _engineData.Copy(), // a copy is necessary because every run has a different correction factor!
 
 				simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>();
-		
 
-				CreateGearboxAndGearshiftData(vehicle, simulationRunData);
+
+                CreateGearboxAndGearshiftData(vehicle, simulationRunData);
 
 
-				simulationRunData.AngledriveData = _angledriveData;
+                simulationRunData.AngledriveData = _angledriveData;
 				simulationRunData.Aux = DataAdapter.CreateAuxiliaryData(
 					vehicle.Components.AuxiliaryInputData,
 					vehicle.Components.BusAuxiliaries, mission.MissionType,
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
index e57617e60c..01a7c6c394 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
@@ -38,32 +38,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 				Report = report;
 			}
 
-
-			//protected abstract IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary();
-			//protected override IEnumerable<VectoRunData> GetNextRun()
-			//{
-			//	if (InputDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle)
-			//	{
-			//		//if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle)
-			//		//{
-			//		//	yield return CreateVectoRunData(InputDataProvider.JobInputData.Vehicle, 0, null,
-			//		//		new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>());
-			//		//}
-			//		//else
-			//		//{
-			//			foreach (var vectoRunData in VectoRunDataHeavyBusPrimary())
-			//			{
-			//				yield return vectoRunData;
-			//			}
-			//		//}
-			//	}
-
-			//	foreach (var entry in new List<VectoRunData>())
-			//	{
-			//		yield return entry;
-			//	}
-			//}
-
 			protected override VectoRunData GetPowertrainConfigForReportInit()
 			{
 				var vehicle = InputDataProvider.JobInputData.Vehicle;
@@ -166,6 +140,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 					//DriverData = _driverdata,
 					//GearshiftParameters = _gearshiftData,
 				};
+
 				return simulationRunData;
 			}
 
@@ -195,6 +170,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 					throw new VectoException("Super caps AND batteries are not supported");
 				}
 			}
+
+			protected abstract void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle,
+				VectoRunData runData);
 		}
 
 		public class Conventional : PrimaryBusBase
@@ -259,19 +237,28 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 				simulationRunData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData(
 					mission, InputDataProvider.JobInputData.Vehicle, simulationRunData);
 				
+				CreateGearboxAndGearshiftData(vehicle, simulationRunData);
+				return simulationRunData;
+			}
+
+			#region Overrides of PrimaryBusBase
+
+			protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
+			{
 				var shiftStrategyName = PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, vehicle.VehicleType);
-				simulationRunData.GearboxData = DataAdapter.CreateGearboxData(vehicle, simulationRunData,
-					ShiftPolygonCalculator.Create(shiftStrategyName, simulationRunData.GearshiftParameters));
-				simulationRunData.GearshiftParameters =
+				runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData,
+					ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters));
+				
+				runData.GearshiftParameters =
 					DataAdapter.CreateGearshiftData(
-						simulationRunData.GearboxData,
-						(simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0),
-						vehicle.EngineIdleSpeed
-					);
+						(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
+						vehicle.EngineIdleSpeed, 
+						vehicle.Components.GearboxInputData.Type, 
+						vehicle.Components.GearboxInputData.Gears.Count);
 
-				return simulationRunData;
 			}
 
+			#endregion
 		}
 
 		public abstract class Hybrid : PrimaryBusBase
@@ -320,6 +307,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 				throw new NotImplementedException();
 			}
 
+			protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
+			{
+				if (vehicle.ArchitectureID.IsOneOf(ArchitectureID.S2, ArchitectureID.S_IEPC)) {
+					throw new ArgumentException(nameof(vehicle.ArchitectureID));
+				}
+				runData.GearshiftParameters = new ShiftStrategyParameters() {
+					StartSpeed = DeclarationData.GearboxTCU.StartSpeed,
+					StartAcceleration = DeclarationData.GearboxTCU.StartAcceleration
+				};
+			}
 		}
 
 
@@ -337,16 +334,27 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 
 			//#endregion
 
-			#region Overrides of PrimaryBusBase
-
-		
+			protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
+			{
+				if (vehicle.ArchitectureID != ArchitectureID.E2) {
+					throw new ArgumentException(nameof(vehicle));
+				}
 
-			#endregion
+				runData.GearshiftParameters =
+					DataAdapter.CreateGearshiftData(
+						(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
+						null, 
+						vehicle.Components.GearboxInputData.Type,
+						vehicle.Components.GearboxInputData.Gears.Count);
 
-			#region Overrides of PrimaryBusBase
 
+				var shiftStrategyName =
+					PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type,
+						vehicle.VehicleType);
+				runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData,
+					ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters));
 
-			#endregion
+			}
 		}
 
 		public class HEV_S3 : SerialHybrid
@@ -374,10 +382,27 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 		{
 			public HEV_S_IEPC(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IPrimaryBusDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
 
-			#region Overrides of PrimaryBusBase
+			protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
+			{
+				if (vehicle.ArchitectureID != ArchitectureID.E2) {
+					throw new ArgumentException(nameof(vehicle));
+				}
 
+				runData.GearshiftParameters =
+					DataAdapter.CreateGearshiftData(
+						(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
+						null, 
+						vehicle.Components.GearboxInputData.Type,
+						vehicle.Components.GearboxInputData.Gears.Count);
 
-			#endregion
+
+				var shiftStrategyName =
+					PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type,
+						vehicle.VehicleType);
+				runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData,
+					ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters));
+
+			}
 		}
 
 		public abstract class ParallelHybrid : Hybrid
@@ -400,6 +425,22 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 				throw new NotImplementedException();
 			}
 
+			protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
+			{
+				var shiftStrategyName = PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type, vehicle.VehicleType);
+				
+				runData.GearshiftParameters =
+					DataAdapter.CreateGearshiftData(
+						(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
+						vehicle.EngineIdleSpeed,
+						vehicle.Components.GearboxInputData.Type,
+						vehicle.Components.GearboxInputData.Gears.Count);
+				
+				runData.GearboxData = DataAdapter.CreateGearboxData(vehicle, runData,
+					ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters));
+
+			}
+
 		}
 
 		public class HEV_P1 : ParallelHybrid
@@ -484,66 +525,54 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 			protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading,
 				int? modeIdx = null, VectoRunData.OvcHevMode ovcMode = VectoRunData.OvcHevMode.NotApplicable)
 			{
-				var simulationRunData = CreateCommonRunData(vehicle, mission, loading, _segment);
+				var result = CreateCommonRunData(vehicle, mission, loading, _segment);
 
 
 				DataAdapter.CreateREESSData(
 					componentsElectricStorage: vehicle.Components.ElectricStorage,
 					vehicle.VehicleType,
 					true,
-					(bs) => simulationRunData.BatteryData = bs,
-					(sc) => simulationRunData.SuperCapData = sc);
+					(bs) => result.BatteryData = bs,
+					(sc) => result.SuperCapData = sc);
 
-				simulationRunData.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, 
-					vehicle.ElectricMotorTorqueLimits, simulationRunData.BatteryData.CalculateAverageVoltage(), null);
+				result.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, 
+					vehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null);
 				if (vehicle.VehicleType == VectoSimulationJobType.IEPC_E) {
-					simulationRunData.ElectricMachinesData = DataAdapter.CreateIEPCElectricMachines(vehicle.Components.IEPC,
-						simulationRunData.BatteryData.CalculateAverageVoltage());
+					result.ElectricMachinesData = DataAdapter.CreateIEPCElectricMachines(vehicle.Components.IEPC,
+						result.BatteryData.CalculateAverageVoltage());
 				}
 
-				simulationRunData.VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational);
-				simulationRunData.AirdragData = DataAdapter.CreateAirdragData(null, mission, new Segment());
-				//EngineData = DataAdapter.CreateEngineData(InputDataProvider.JobInputData.Vehicle, engineMode, mission),
-				simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>();
-				simulationRunData.GearboxData = _gearboxData;
+				result.VehicleData = DataAdapter.CreateVehicleData(vehicle, _segment, mission, loading, _allowVocational);
+				result.AirdragData = DataAdapter.CreateAirdragData(null, mission, new Segment());
+				result.ElectricMachinesData = DataAdapter.CreateElectricMachines(vehicle.Components.ElectricMachines, vehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null);
+				result.GearboxData = _gearboxData;
 				if (AxleGearRequired() || vehicle.Components.AxleGearInputData != null) {
-					simulationRunData.AxleGearData = _axlegearData;
+					result.AxleGearData = _axlegearData;
 				}
 
-				simulationRunData.AngledriveData = _angledriveData;
-				simulationRunData.Aux = DataAdapter.CreateAuxiliaryData(
+				result.AngledriveData = _angledriveData;
+				result.Aux = DataAdapter.CreateAuxiliaryData(
 					vehicle.Components.AuxiliaryInputData,
 					vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
 					vehicle.Length ?? mission.BusParameter.VehicleLength,
 					vehicle.Components.AxleWheels.NumSteeredAxles, vehicle.VehicleType);
-				simulationRunData.Retarder = _retarderData;
-				simulationRunData.DriverData = _driverdata;
-				simulationRunData.GearshiftParameters = _gearshiftData;
-
-				//simulationRunData.EngineData.FuelMode = modeIdx.Value;
-				simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
-				simulationRunData.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData(
-					mission, InputDataProvider.JobInputData.Vehicle, simulationRunData);
-				var shiftStrategyName =
-					PowertrainBuilder.GetShiftStrategyName(vehicle.Components.GearboxInputData.Type,
-						vehicle.VehicleType);
-				simulationRunData.GearboxData = DataAdapter.CreateGearboxData(vehicle, simulationRunData,
-					ShiftPolygonCalculator.Create(shiftStrategyName, simulationRunData.GearshiftParameters));
-				simulationRunData.GearshiftParameters =
-					DataAdapter.CreateGearshiftData(
-						simulationRunData.GearboxData,
-						(simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0),
-						vehicle.EngineIdleSpeed
-					);
-
-				return simulationRunData;
+				result.Retarder = _retarderData;
+				result.DriverData = _driverdata;
+				result.GearshiftParameters = _gearshiftData;
+
+				result.VehicleData.VehicleClass = _segment.VehicleClass;
+				result.BusAuxiliaries = DataAdapter.CreateBusAuxiliariesData(
+					mission, InputDataProvider.JobInputData.Vehicle, result);
+				CreateGearboxAndGearshiftData(vehicle, result);
+				
+				return result;
 			}
 			protected virtual bool AxleGearRequired()
 			{
 				return InputDataProvider.JobInputData.Vehicle.ArchitectureID != ArchitectureID.E4;
 			}
 
-			protected virtual void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
+			protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
 			{
 				if (vehicle.ArchitectureID == ArchitectureID.E2) {
 					throw new ArgumentException();
@@ -574,9 +603,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 				}
 
 				runData.GearshiftParameters =
-					DataAdapter.CreateGearshiftData(runData.GearboxData,
-						runData.AxleGearData?.AxleGear.Ratio ?? 1.0,
-						null);
+					DataAdapter.CreateGearshiftData(
+						(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) * (runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
+						null,
+						vehicle.Components.GearboxInputData.Type,
+						vehicle.Components.GearboxInputData.Gears.Count);
 
 
 				var shiftStrategyName =
@@ -643,6 +674,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 				return CreateVectoRunData(vehicle, null, new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(), 0);
 			}
 
+			protected override void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle, VectoRunData runData)
+			{
+				throw new NotImplementedException();
+			}
+
 			//protected override IEnumerable<VectoRunData> VectoRunDataHeavyBusPrimary()
 			//{
 			//	yield return new VectoRunData {
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs
index 097137e86b..6cf4b896f7 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs
@@ -77,7 +77,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
             //    DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData);
 
             GearshiftData = DataAdapter.CreateGearshiftData(
-                GearboxData, AxlegearData.AxleGear.Ratio * (AngledriveData?.Angledrive.Ratio ?? 1.0), EngineData.IdleSpeed);
+				AxlegearData.AxleGear.Ratio * (AngledriveData?.Angledrive.Ratio ?? 1.0), 
+				EngineData.IdleSpeed, 
+				vehicle.Components.GearboxInputData.Type,
+				vehicle.Components.GearboxInputData.Gears.Count);
 
             AuxVTP = CreateVTPAuxData(vehicle);
         }
@@ -157,7 +160,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
             });
 
             var busAux = vehicle.Components.BusAuxiliaries;
-            var psCompressor = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply.CompressorSize, busAux.PneumaticSupply.Clutch);
+            var psCompressor = DeclarationData.BusAuxiliaries.GetCompressorMap(busAux.PneumaticSupply);
             retVal.Add(new VectoRunData.AuxData()
             {
                 DemandType = AuxiliaryDemandType.Direct,
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 2be73e6a81..6e54283f1b 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -285,8 +285,19 @@ namespace TUGraz.VectoCore.Models.Declaration
 			//	}
 			//}
 
-			public static ICompressorMap GetCompressorMap(string compressorSize, string clutchType)
+			public static ICompressorMap GetCompressorMap(
+				IPneumaticSupplyDeclarationData pneumaticSupply)
 			{
+				var compressorSize = pneumaticSupply.CompressorSize;
+				var clutchType = pneumaticSupply.Clutch;
+
+				if (pneumaticSupply.CompressorDrive == CompressorDrive.electrically) {
+					return null;
+					//var size = GetCompressorResourceForSize("Small");
+					//return CompressorMapReader.ReadStream(
+					//	RessourceHelper.ReadStream(DeclarationDataResourcePrefix + ".VAUXBus." + size), 1, $"{compressorSize} - {clutchType}");
+				}
+
 				var resource = GetCompressorResourceForSize(compressorSize);
 
 				var dragCurveFactorClutch = 1.0;
diff --git a/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs
index 379d473730..8c8ad60982 100644
--- a/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/ModDataPostprocessingTest.cs
@@ -4,6 +4,7 @@ using System.Data;
 using System.Diagnostics;
 using System.IO;
 using System.Linq;
+using Moq;
 using NUnit.Framework;
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
@@ -2826,9 +2827,14 @@ namespace TUGraz.VectoCore.Tests.Reports
 
 		protected PneumaticUserInputsConfig CreatePneumaticUserInputsConfig(bool smartCompressor)
 		{
+			var mock = new Mock<IPneumaticSupplyDeclarationData>();
+			mock.Setup(x => x.CompressorDrive).Returns(CompressorDrive.mechanically);
+			mock.Setup(x => x.CompressorSize).Returns("Medium Supply 2-stage");
+			mock.Setup(x => x.Clutch).Returns("visco");
+
 			return new PneumaticUserInputsConfig() {
 				CompressorMap =
-					DeclarationData.BusAuxiliaries.GetCompressorMap("Medium Supply 2-stage", "visco"),
+					DeclarationData.BusAuxiliaries.GetCompressorMap(mock.Object),
 				CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency,
 				CompressorGearRatio = 1.0,
 				SmartAirCompression = smartCompressor,
-- 
GitLab