diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
index 0c82d81701065806307988bf3d8ffa5aa8b8c8e0..d81f854fc74751975731275256259552efeaa73a 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
@@ -175,7 +175,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Gener
 
 		public abstract class Hybrid : CompletedBusDeclarationBase
 		{
-			private ElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
+			private IElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
 
             #region Overrides of CompletedBusDeclarationBase
 
@@ -242,7 +242,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Gener
 
 		public abstract class BatteryElectric : CompletedBusDeclarationBase
 		{
-			private readonly ElectricStorageAdapter _electricStorageAdapter = null;
+			private readonly IElectricStorageAdapter _electricStorageAdapter = new GenericElectricStorageDataAdapter();
 
             protected override IEngineDataAdapter EngineDataAdapter => throw new NotImplementedException();
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
index 674e24c4623ce1a1aec935f25d81bd3dd61b53d9..076cc8106d18a9e53e8753e92cf1cc16bc944767 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/DeclarationDataAdapterHeavyLorry.cs
@@ -243,7 +243,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 
 		public abstract class Hybrid : LorryBase
 		{
-			private ElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
+			private IElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
 			protected IAuxiliaryDataAdapter _auxAdapter = new HeavyLorryAuxiliaryDataAdapter();
 
 			protected override IEngineDataAdapter EngineDataAdapter { get; } = new CombustionEngineComponentDataAdapter();
@@ -310,7 +310,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 			protected override GearboxType[] SupportedGearboxTypes { get; }
 
 			//private readonly GearboxDataAdapter _gearboxDataAdapter = new GearboxDataAdapter(null);
-			private readonly ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
+			private readonly IElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
 			private readonly ElectricMachinesDataAdapter _electricMachineAdapter = new ElectricMachinesDataAdapter();
 			
 			private readonly HeavyLorryPEVAuxiliaryDataAdapter
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
index 1153cd700bf3dc62017777b5b82d0800f282d329..42c94698a47b406eaed43ce23a8d5931345fa10f 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
@@ -34,9 +34,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 		List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(
 			IIEPCDeclarationInputData iepc, Volt averageVoltage);
-	}
 
-	public interface ILorryDeclarationDataAdapter : IDeclarationDataAdapter
+		IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, GearList gears = null);
+
+		void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
+			VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData,
+			Action<SuperCapData> setSuperCapData);
+    }
+
+    public interface ILorryDeclarationDataAdapter : IDeclarationDataAdapter
 	{
 		DriverData CreateDriverData(Segment segment);
 
@@ -68,11 +74,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			Meter vehicleLength, int? numSteeredAxles, VectoSimulationJobType jobType);
 		
 		
-		IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, GearList gears = null);
-
-		void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
-			VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData,
-			Action<SuperCapData> setSuperCapData);
 
 		//BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
 		//	VectoSimulationJobType jobType,
@@ -122,12 +123,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 		AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment);
 
-		IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, GearList gears = null);
-
-		void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
-			VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData,
-			Action<SuperCapData> setSuperCapData);
-
 		HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
 			SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType);
 
@@ -164,10 +159,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		IAuxiliaryConfig CreateBusAuxiliariesData(
 			Mission mission, IVehicleDeclarationInputData primaryVehicle, IVehicleDeclarationInputData completedVehicle, VectoRunData runData);
 
-		void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
-			VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData,
-			Action<SuperCapData> setSuperCapData);
-
 		HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
 			SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType);
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
index 12cd0c6d031ad895269f4ca11cd3b1a3abb1b538..e130263dcfe2cb853363a285720854e84eb0b956 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
@@ -190,7 +190,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 
 		public abstract class Hybrid : PrimaryBusBase
 		{
-			private ElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
+			private IElectricStorageAdapter _eletricStorageAdapter = new ElectricStorageAdapter();
 
 			#region Overrides of PrimaryBusBase
 
@@ -291,7 +291,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 
 		public abstract class BatteryElectric : PrimaryBusBase
 		{
-			private readonly ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
+			private readonly IElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
 
 			#region Overrides of PrimaryBusBase
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/BatteryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/BatteryDataAdapter.cs
index afe3abdeebe831709e2894569f7bd95c608d29d5..623075264d37f2d9a7285f72d291f5b4a3337023 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/BatteryDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/BatteryDataAdapter.cs
@@ -5,28 +5,28 @@ using TUGraz.VectoCommon.Exceptions;
 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.GenericModelData;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
 using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
 {
-	public class ElectricStorageAdapter
+    public class ElectricStorageAdapter : IElectricStorageAdapter
 	{
 		public BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData batteryInputData,
 			VectoSimulationJobType jobType,
 			bool ovc)
 		{
-			if (batteryInputData == null)
-			{
+			if (batteryInputData == null) {
 				return null;
 			}
 
 			var batteries = batteryInputData.ElectricStorageElements.Where(x => x.REESSPack.StorageType == REESSType.Battery).ToArray();
 
-			if (batteries.Length == 0)
-			{
+			if (batteries.Length == 0) {
 				return null;
 			}
 
@@ -115,7 +115,41 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		}
 
 
-		
+	}
+
+	public class GenericElectricStorageDataAdapter : IElectricStorageAdapter
+	{
+		protected GenericBusBatteryData busBattery = new GenericBusBatteryData();
+		protected GenericBusSuperCapData busSuperCap = new GenericBusSuperCapData();
+
+		#region Implementation of IElectricStorageAdapter
+
+		public BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData batteryInputData,
+			VectoSimulationJobType jobType, bool ovc)
+		{
+			if (batteryInputData == null) {
+				return null;
+			}
+            return busBattery.CreateBatteryData(batteryInputData, jobType, ovc);
+		}
+
+		public SuperCapData CreateSuperCapData(IElectricStorageSystemDeclarationInputData reessInputData)
+		{
+			if (reessInputData == null) {
+				return null;
+			}
+			var superCaps = reessInputData.ElectricStorageElements.Where(x => x.REESSPack.StorageType == REESSType.SuperCap).ToArray();
+
+			var superCap = superCaps.FirstOrDefault()?.REESSPack as ISuperCapDeclarationInputData;
+
+			if (superCap == null) {
+				return null;
+			}
+
+			return busSuperCap.CreateGenericSuperCapData(superCap);
+		}
+
+		#endregion
 	}
 
 	public static class BatterySystemHelper
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricStorageAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricStorageAdapter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f343a62bd42f64cbb02da5e784a19755359539c1
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/Interfaces/IElectricStorageAdapter.cs
@@ -0,0 +1,14 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents.Interfaces
+{
+    public interface IElectricStorageAdapter
+    {
+        BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData batteryInputData,
+            VectoSimulationJobType jobType,
+            bool ovc);
+
+        SuperCapData CreateSuperCapData(IElectricStorageSystemDeclarationInputData reessInputData);
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs
index 426b95a1e6558c6bb7f0c0008e791aba8c02d748..81deeecbcf2de46662028383df0c4bd46eaab597 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/AbstractDeclarationVectoRunDataFactory.cs
@@ -79,5 +79,31 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
 
 		protected abstract VectoRunData GetPowertrainConfigForReportInit();
 
-	}
+		/// <summary>
+		/// Super caps are not allowed for ovc hevs or pevs
+		/// </summary>
+		protected void CheckSuperCap(IVehicleDeclarationInputData vehicle)
+		{
+			if (vehicle.VehicleType == VectoSimulationJobType.BatteryElectricVehicle || vehicle.OvcHev) {
+				if (vehicle.Components.ElectricStorage.ElectricStorageElements.Any(e =>
+						e.REESSPack.StorageType == REESSType.SuperCap)) {
+					throw new VectoException("Super caps are not allowed for OVC-HEVs or PEVs");
+				}
+			}
+
+			if (vehicle.Components.ElectricStorage?.ElectricStorageElements == null) {
+				return;
+			}
+
+			var hasSuperCap = vehicle.Components.ElectricStorage.ElectricStorageElements.Any(e =>
+				e.REESSPack.StorageType == REESSType.SuperCap);
+			var hasBattery = vehicle.Components.ElectricStorage.ElectricStorageElements.Any(e =>
+				e.REESSPack.StorageType == REESSType.Battery);
+
+			if (hasSuperCap && hasBattery) {
+				//Already handled by XML Schema
+				throw new VectoException("Super caps AND batteries are not supported");
+			}
+		}
+    }
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
index 34628c81eeb553d5519b6bee8f75f582c530c23f..cee210f4fdcff22632f79b794b229b91e14b89ca 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
@@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
@@ -65,121 +66,41 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 			}
 
 
-			protected virtual VectoRunData CreateVectoRunDataGeneric(Mission mission,
-				KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int? modeIdx)
-			{
-				var cycle = DeclarationData.CyclesCache.GetOrAdd(mission.MissionType,
-					_ => DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false));
-
-				var primaryBusAuxiliaries = PrimaryVehicle.Components.BusAuxiliaries;
+			protected abstract VectoRunData CreateVectoRunDataGeneric(Mission mission,
+				KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int? modeIdx);
 
-				var simulationRunData = new VectoRunData {
-					InputData = DataProvider.MultistageJobInputData,
-					Loading = loading.Key,
-					VehicleData =
-						DataAdapterGeneric.CreateVehicleData(PrimaryVehicle, primarySegment, mission, loading, false),
-					AirdragData = DataAdapterGeneric.CreateAirdragData(null, mission, new Segment()),
-					EngineData = DataAdapterGeneric.CreateEngineData(PrimaryVehicle, modeIdx.Value, mission),
-					ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(),
-					//GearboxData = _gearboxData,
-					AxleGearData = DataAdapterGeneric.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData),
-					AngledriveData = DataAdapterGeneric.CreateAngledriveData(PrimaryVehicle.Components.AngledriveInputData) ,
-					Aux = DataAdapterGeneric.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData,
-						primaryBusAuxiliaries, mission.MissionType, primarySegment.VehicleClass,
-						mission.BusParameter.VehicleLength,
-						PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType),
-					Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()),
-					Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData),
-					DriverData = DriverData,
-					ExecutionMode = ExecutionMode.Declaration,
-					JobName = DataProvider.MultistageJobInputData.JobInputData.ManufacturingStages.Last().Vehicle
-						.Identifier,
-					ModFileSuffix = $"_{_segment.VehicleClass.GetClassNumber()}-Generic_{loading.Key}",
-					Report = Report,
-					Mission = mission,
-					InputDataHash = DataProvider.MultistageJobInputData.XMLHash,
-					SimulationType = SimulationType.DistanceCycle,
-					VehicleDesignSpeed = _segment.DesignSpeed,
-					MaxChargingPower = PrimaryVehicle.MaxChargingPower,
-					//GearshiftParameters = _gearshiftData,
-				};
-				simulationRunData.EngineData.FuelMode = 0;
-				simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
-				simulationRunData.BusAuxiliaries =
-					DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, simulationRunData);
-				var shiftStrategyName =
-					PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type,
-						PrimaryVehicle.VehicleType);
-				simulationRunData.GearboxData = DataAdapterGeneric.CreateGearboxData(PrimaryVehicle, simulationRunData,
-					ShiftPolygonCalculator.Create(shiftStrategyName, simulationRunData.GearshiftParameters));
-				simulationRunData.GearshiftParameters =
-					DataAdapterGeneric.CreateGearshiftData(
-						simulationRunData.GearboxData,
-						(simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) *
-						(simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0),
-						PrimaryVehicle.EngineIdleSpeed
-					);
-				return simulationRunData;
-			}
+			protected abstract VectoRunData CreateVectoRunDataSpecific(Mission mission,
+				KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx);
 
-			protected virtual VectoRunData CreateVectoRunDataSpecific(Mission mission,
-				KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx)
+			protected virtual VectoRunData CreateCommonRunData(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, string modSuffix)
 			{
 				var cycle = DeclarationData.CyclesCache.GetOrAdd(mission.MissionType,
 					_ => DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false));
 
+				CheckSuperCap(PrimaryVehicle);
+
 				var simulationRunData = new VectoRunData {
 					InputData = DataProvider.MultistageJobInputData,
 					Loading = loading.Key,
-					VehicleData = DataAdapterSpecific.CreateVehicleData(PrimaryVehicle, CompletedVehicle, _segment,
-						mission, loading),
-					AirdragData = DataAdapterSpecific.CreateAirdragData(CompletedVehicle, mission),
-					EngineData = DataAdapterGeneric.CreateEngineData(PrimaryVehicle, modeIdx.Value, mission),
-					ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(),
-					//GearboxData = _gearboxData,
-					AxleGearData = DataAdapterGeneric.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData),
-					AngledriveData = DataAdapterGeneric.CreateAngledriveData(PrimaryVehicle.Components.AngledriveInputData),
-					Aux = DataAdapterSpecific.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData,
-						PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
-						CompletedVehicle.Length,
-						PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType),
 					Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()),
-					Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData),
 					DriverData = DriverData,
 					ExecutionMode = ExecutionMode.Declaration,
 					JobName = DataProvider.MultistageJobInputData.JobInputData.ManufacturingStages.Last().Vehicle
 						.Identifier, //?!? Jobname
-					ModFileSuffix = $"_{_segment.VehicleClass.GetClassNumber()}-Specific_{loading.Key}",
+					ModFileSuffix = $"_{_segment.VehicleClass.GetClassNumber()}-{modSuffix}_{loading.Key}",
 					Report = Report,
 					Mission = mission,
 					InputDataHash = DataProvider.MultistageJobInputData.XMLHash, // right hash?!?
 					SimulationType = SimulationType.DistanceCycle,
 					VehicleDesignSpeed = _segment.DesignSpeed,
 					MaxChargingPower = PrimaryVehicle.MaxChargingPower,
-					//GearshiftParameters = _gearshiftData,
 				};
-				simulationRunData.EngineData.FuelMode = 0;
-				simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
-				simulationRunData.BusAuxiliaries =
-					DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle,
-						simulationRunData);
 
-				var shiftStrategyName =
-					PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type,
-						PrimaryVehicle.VehicleType);
-				simulationRunData.GearboxData = DataAdapterGeneric.CreateGearboxData(PrimaryVehicle, simulationRunData,
-					ShiftPolygonCalculator.Create(shiftStrategyName, simulationRunData.GearshiftParameters));
-				simulationRunData.GearshiftParameters =
-					DataAdapterGeneric.CreateGearshiftData(
-						simulationRunData.GearboxData,
-						(simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) *
-						(simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0),
-						PrimaryVehicle.EngineIdleSpeed
-					);
 				return simulationRunData;
 			}
 
-			protected virtual Segment GetPrimarySegment(IVehicleDeclarationInputData primaryVehicle)
+
+            protected virtual Segment GetPrimarySegment(IVehicleDeclarationInputData primaryVehicle)
 			{
 				var primarySegment = DeclarationData.PrimaryBusSegments.Lookup(
 					primaryVehicle.VehicleCategory, primaryVehicle.AxleConfiguration, primaryVehicle.Articulated);
@@ -217,6 +138,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 				yield return simulationRunData;
 			}
 
+
 			protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading,
 				int? modeIdx = null, VectoRunData.OvcHevMode ovcMode = VectoRunData.OvcHevMode.NotApplicable)
 			{
@@ -262,7 +184,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
             }
             #endregion
 
-		}
+			protected abstract void CreateGearboxAndGearshiftData(VectoRunData runData);
+        }
 
         public class Conventional : CompletedBusBase
         {
@@ -293,9 +216,97 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 				}
 			}
 
-		}
+            protected override VectoRunData CreateVectoRunDataGeneric(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int? modeIdx)
+            {
+                var simulationRunData = CreateCommonRunData(mission, loading, "Generic");
+
+                var primaryBusAuxiliaries = PrimaryVehicle.Components.BusAuxiliaries;
+
+                simulationRunData.VehicleData =
+                    DataAdapterGeneric.CreateVehicleData(PrimaryVehicle, primarySegment, mission, loading, false);
+                simulationRunData.AirdragData = DataAdapterGeneric.CreateAirdragData(null, mission, new Segment());
+                simulationRunData.EngineData =
+                    DataAdapterGeneric.CreateEngineData(PrimaryVehicle, modeIdx.Value, mission);
+                simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>();
+                simulationRunData.AxleGearData =
+                    DataAdapterGeneric.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData);
+                simulationRunData.AngledriveData =
+                    DataAdapterGeneric.CreateAngledriveData(PrimaryVehicle.Components.AngledriveInputData);
+                simulationRunData.Aux = DataAdapterGeneric.CreateAuxiliaryData(
+                    PrimaryVehicle.Components.AuxiliaryInputData, primaryBusAuxiliaries, mission.MissionType,
+                    primarySegment.VehicleClass, mission.BusParameter.VehicleLength,
+                    PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
+                simulationRunData.Retarder =
+                    DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
+
+                simulationRunData.EngineData.FuelMode = 0;
+                simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
+                simulationRunData.BusAuxiliaries =
+                    DataAdapterGeneric.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, simulationRunData);
+                var shiftStrategyName =
+                    PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type,
+                        PrimaryVehicle.VehicleType);
+                simulationRunData.GearboxData = DataAdapterGeneric.CreateGearboxData(PrimaryVehicle, simulationRunData,
+                    ShiftPolygonCalculator.Create(shiftStrategyName, simulationRunData.GearshiftParameters));
+                simulationRunData.GearshiftParameters =
+                    DataAdapterGeneric.CreateGearshiftData(
+                        simulationRunData.GearboxData,
+                        (simulationRunData.AxleGearData?.AxleGear.Ratio ?? 1.0) *
+                        (simulationRunData.AngledriveData?.Angledrive.Ratio ?? 1.0),
+                        PrimaryVehicle.EngineIdleSpeed);
+                return simulationRunData;
+            }
 
-		public abstract class Hybrid : CompletedBusBase
+            protected override VectoRunData CreateVectoRunDataSpecific(Mission mission,
+                KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx)
+            {
+                var simulationRunData = CreateCommonRunData(mission, loading, "Specific");
+
+                simulationRunData.VehicleData = DataAdapterSpecific.CreateVehicleData(PrimaryVehicle,
+                            CompletedVehicle, _segment, mission, loading);
+                simulationRunData.AirdragData = DataAdapterSpecific.CreateAirdragData(CompletedVehicle, mission);
+                simulationRunData.EngineData =
+                    DataAdapterGeneric.CreateEngineData(PrimaryVehicle, modeIdx.Value, mission);
+                simulationRunData.ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>();
+                simulationRunData.AxleGearData =
+                        DataAdapterGeneric.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData);
+                simulationRunData.AngledriveData =
+                    DataAdapterGeneric.CreateAngledriveData(PrimaryVehicle.Components.AngledriveInputData);
+                simulationRunData.Aux = DataAdapterSpecific.CreateAuxiliaryData(
+                    PrimaryVehicle.Components.AuxiliaryInputData,
+                    PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
+                    CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles, PrimaryVehicle.VehicleType);
+                simulationRunData.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
+                simulationRunData.EngineData.FuelMode = 0;
+                simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
+                simulationRunData.BusAuxiliaries =
+                    DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle,
+                        simulationRunData);
+
+               CreateGearboxAndGearshiftData(simulationRunData);
+                return simulationRunData;
+            }
+
+
+			protected override void CreateGearboxAndGearshiftData(VectoRunData runData)
+			{
+				var shiftStrategyName =
+					PowertrainBuilder.GetShiftStrategyName(PrimaryVehicle.Components.GearboxInputData.Type,
+						PrimaryVehicle.VehicleType);
+				runData.GearboxData = DataAdapterGeneric.CreateGearboxData(PrimaryVehicle, runData,
+					ShiftPolygonCalculator.Create(shiftStrategyName, runData.GearshiftParameters));
+				runData.GearshiftParameters =
+					DataAdapterGeneric.CreateGearshiftData(
+						runData.GearboxData,
+						(runData.AxleGearData?.AxleGear.Ratio ?? 1.0) *
+						(runData.AngledriveData?.Angledrive.Ratio ?? 1.0),
+						PrimaryVehicle.EngineIdleSpeed
+					);
+
+            }
+        }
+
+        public abstract class Hybrid : CompletedBusBase
 		{
 			protected Hybrid(IMultistageVIFInputData dataProvider, IDeclarationReport report,
 				ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific,
@@ -323,7 +334,26 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 					}
 				}
 			}
-        }
+
+			#region Overrides of CompletedBusBase
+
+			protected override VectoRunData CreateVectoRunDataGeneric(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int? modeIdx)
+			{
+				throw new NotImplementedException("dummy implementation");
+			}
+
+			protected override VectoRunData CreateVectoRunDataSpecific(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx)
+			{
+				throw new NotImplementedException("dummy implementation");
+			}
+
+			protected override void CreateGearboxAndGearshiftData(VectoRunData runData)
+			{
+				throw new NotImplementedException("dummy implementation");
+			}
+
+			#endregion
+		}
 
 
 		public abstract class SerialHybrid : Hybrid
@@ -350,15 +380,18 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 
 			#endregion
 		}
-        public class HEV_S3 : SerialHybrid
+       
+		public class HEV_S3 : SerialHybrid
         {
             public HEV_S3(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
-        public class HEV_S4 : SerialHybrid
+        
+		public class HEV_S4 : SerialHybrid
         {
             public HEV_S4(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
-        public class HEV_S_IEPC : SerialHybrid
+        
+		public class HEV_S_IEPC : SerialHybrid
         {
             public HEV_S_IEPC(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
@@ -375,19 +408,23 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
         {
             public HEV_P1(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
-        public class HEV_P2 : ParallelHybrid
+        
+		public class HEV_P2 : ParallelHybrid
         {
             public HEV_P2(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
-        public class HEV_P2_5 : ParallelHybrid
+        
+		public class HEV_P2_5 : ParallelHybrid
         {
             public HEV_P2_5(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
-        public class HEV_P3 : ParallelHybrid
+        
+		public class HEV_P3 : ParallelHybrid
         {
             public HEV_P3(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
-        public class HEV_P4 : ParallelHybrid
+        
+		public class HEV_P4 : ParallelHybrid
         {
             public HEV_P4(IMultistageVIFInputData dataProvider, IDeclarationReport report, ISpecificCompletedBusDeclarationDataAdapter dataAdapterSpecific, IGenericCompletedBusDeclarationDataAdapter dataAdapterGeneric) : base(dataProvider, report, dataAdapterSpecific, dataAdapterGeneric) { }
         }
@@ -410,7 +447,76 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 					}
 				}
 			}
-		}
+
+			protected override VectoRunData CreateVectoRunDataGeneric(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int? modeIdx)
+			{
+				throw new NotImplementedException();
+			}
+
+            protected override VectoRunData CreateVectoRunDataSpecific(Mission mission,
+                KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx)
+            {
+                var result = CreateCommonRunData(mission, loading, "Specific");
+
+				DataAdapterGeneric.CreateREESSData(
+					componentsElectricStorage: PrimaryVehicle.Components.ElectricStorage,
+					PrimaryVehicle.VehicleType,
+					true,
+					(bs) => result.BatteryData = bs,
+					(sc) => result.SuperCapData = sc);
+
+				if (PrimaryVehicle.VehicleType == VectoSimulationJobType.IEPC_E) {
+					result.ElectricMachinesData = DataAdapterGeneric.CreateIEPCElectricMachines(PrimaryVehicle.Components.IEPC,
+						result.BatteryData.CalculateAverageVoltage());
+				} else {
+					result.ElectricMachinesData = DataAdapterGeneric.CreateElectricMachines(PrimaryVehicle.Components.ElectricMachines,
+						PrimaryVehicle.ElectricMotorTorqueLimits, result.BatteryData.CalculateAverageVoltage(), null);
+				}
+
+                result.VehicleData = DataAdapterSpecific.CreateVehicleData(PrimaryVehicle, CompletedVehicle, _segment,
+					mission, loading);
+				result.AirdragData = DataAdapterSpecific.CreateAirdragData(CompletedVehicle, mission);
+				if (AxleGearRequired() || PrimaryVehicle.Components.AxleGearInputData != null) {
+					result.AxleGearData =
+						DataAdapterGeneric.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData);
+				}
+
+				result.AngledriveData =
+					DataAdapterGeneric.CreateAngledriveData(PrimaryVehicle.Components.AngledriveInputData);
+				result.Aux = DataAdapterSpecific.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData,
+					PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass,
+					CompletedVehicle.Length, PrimaryVehicle.Components.AxleWheels.NumSteeredAxles,
+					PrimaryVehicle.VehicleType);
+				result.Retarder = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData);
+				result.MaxChargingPower = PrimaryVehicle.MaxChargingPower;
+                   
+				result.EngineData.FuelMode = 0;
+				result.VehicleData.VehicleClass = _segment.VehicleClass;
+				result.BusAuxiliaries =
+                    DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle,
+						result);
+
+                CreateGearboxAndGearshiftData(result);
+                return result;
+            }
+
+			
+			protected virtual bool AxleGearRequired()
+			{
+				return InputDataProvider.JobInputData.Vehicle.ArchitectureID != ArchitectureID.E4;
+			}
+
+			protected override void CreateGearboxAndGearshiftData(VectoRunData runData)
+			{
+				if (PrimaryVehicle.ArchitectureID == ArchitectureID.E2) {
+					throw new ArgumentException();
+				}
+				runData.GearshiftParameters = new ShiftStrategyParameters() {
+					StartSpeed = DeclarationData.GearboxTCU.StartSpeed,
+					StartAcceleration = DeclarationData.GearboxTCU.StartAcceleration
+				};
+			}
+        }
 	
         public class PEV_E2 : BatteryElectric
         {
@@ -457,6 +563,21 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
                     InputData = DataProvider.MultistageJobInputData
                 };
 			}
-        }
+
+			protected override VectoRunData CreateVectoRunDataGeneric(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int? modeIdx)
+			{
+				throw new NotImplementedException();
+			}
+
+			protected override VectoRunData CreateVectoRunDataSpecific(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int? modeIdx)
+			{
+				throw new NotImplementedException();
+			}
+
+            protected override void CreateGearboxAndGearshiftData(VectoRunData runData)
+			{
+				throw new NotImplementedException();
+			}
+		}
     }
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
index 4dbed2f775c4deea86d30669543e7cf14fae5eaf..2c44ac4a234eb2c08a25ab1fee8ff03d27dc533a 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
@@ -115,33 +115,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 				return simulationRunData;
 			}
 
-			/// <summary>
-			/// Super caps are not allowed for ovc hevs or pevs
-			/// </summary>
-			protected void CheckSuperCap(IVehicleDeclarationInputData vehicle)
-			{
-				if (vehicle.VehicleType == VectoSimulationJobType.BatteryElectricVehicle || vehicle.OvcHev) {
-					if (vehicle.Components.ElectricStorage.ElectricStorageElements.Any(e =>
-							e.REESSPack.StorageType == REESSType.SuperCap)) {
-						throw new VectoException("Super caps are not allowed for OVC-HEVs or PEVs");
-					}
-				}
-
-				if (vehicle.Components.ElectricStorage?.ElectricStorageElements == null) {
-					return;
-				}
-
-				var hasSuperCap = vehicle.Components.ElectricStorage.ElectricStorageElements.Any(e =>
-					e.REESSPack.StorageType == REESSType.SuperCap);
-				var hasBattery = vehicle.Components.ElectricStorage.ElectricStorageElements.Any(e =>
-					e.REESSPack.StorageType == REESSType.Battery);
-
-				if (hasSuperCap && hasBattery) {
-					//Already handled by XML Schema
-					throw new VectoException("Super caps AND batteries are not supported");
-				}
-			}
-
 			protected abstract void CreateGearboxAndGearshiftData(IVehicleDeclarationInputData vehicle,
 				VectoRunData runData);
 
diff --git a/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs b/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs
index 2c8e67e9bdf35bf3967352d7057b34cb0f7177a6..7da1b00ab1f02ccece9e030e8256b10df2c9a601 100644
--- a/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/Mockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs
@@ -167,7 +167,12 @@ namespace TUGraz.VectoMockup.Simulation.RundataFactories
             //return base.CreateVectoRunDataSpecific(mission, loading, modeIdx);
         }
 
-        private IEnumerable<VectoRunData> CreateVectoRunDataForMissions(int modeIdx, string fuelMode)
+		protected override void CreateGearboxAndGearshiftData(VectoRunData runData)
+		{
+			throw new NotImplementedException();
+		}
+
+		private IEnumerable<VectoRunData> CreateVectoRunDataForMissions(int modeIdx, string fuelMode)
         {
 			var InputDataProvider = DataProvider.MultistageJobInputData;
             foreach (var mission in _segment.Missions) {
@@ -237,7 +242,7 @@ namespace TUGraz.VectoMockup.Simulation.RundataFactories
                 GearboxData = PrimaryBusMockupRunDataFactory.CreateMockupGearboxData(PrimaryVehicle),
                 AxleGearData = PrimaryBusMockupRunDataFactory.CreateMockupAxleGearData(PrimaryVehicle)
             };
-            return base.CreateVectoRunDataGeneric(mission, loading, primarySegment, modeIdx);
+            //return base.CreateVectoRunDataGeneric(mission, loading, primarySegment, modeIdx);
         }
 
         //#endregion
diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericBusBatteryData.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericBusBatteryData.cs
index 2104199e16cc1e9e0c5a81d81ac1da0c83b75778..5c8c05599e227ba1a1b13a7a767cbf5d5a4d950d 100644
--- a/VectoCore/VectoCore/Models/GenericModelData/GenericBusBatteryData.cs
+++ b/VectoCore/VectoCore/Models/GenericModelData/GenericBusBatteryData.cs
@@ -6,6 +6,8 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
 using TUGraz.VectoCore.Utils;
 
@@ -13,7 +15,8 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 {
 	public class GenericBusBatteryData
 	{
-		public BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData batteryData, double initialSOC)
+		public BatterySystemData CreateBatteryData(IElectricStorageSystemDeclarationInputData batteryData, VectoSimulationJobType jobType,
+			bool ovc)
 		{
 			var currentBatteryData = batteryData.ElectricStorageElements
 				.Where(x => x.REESSPack.StorageType == REESSType.Battery).ToList();
@@ -21,32 +24,47 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 			if (currentBatteryData.Count == 0)
 				return null;
 
-			return new BatterySystemData
-			{
-				InitialSoC = initialSOC,
-				Batteries = GetBatteries(currentBatteryData)
+			var retVal = new BatterySystemData {
+				Batteries = GetBatteries(currentBatteryData, jobType, ovc)
 			};
+			var limits = retVal.GetSocLimits();
+			retVal.InitialSoC = (limits.MaxSoc + limits.MinSoc) / 2;
+			return retVal;
 		}
 
-		private List<Tuple<int, BatteryData>> GetBatteries(List<IElectricStorageDeclarationInputData> currentBatteries)
+		private List<Tuple<int, BatteryData>> GetBatteries(List<IElectricStorageDeclarationInputData> currentBatteries, VectoSimulationJobType jobType,
+			bool ovc)
 		{
 			var result = new List<Tuple<int, BatteryData>>();
 
 			foreach (var currentBattery in currentBatteries) {
 				var entry = new Tuple<int, BatteryData>(currentBattery.StringId,
-					GetBatteryData(currentBattery.REESSPack as IBatteryPackDeclarationInputData));
+					GetBatteryData(currentBattery.REESSPack as IBatteryPackDeclarationInputData, jobType, ovc));
 				result.Add(entry);
 			}
 			
 			return result;
 		}
 		
-		private BatteryData GetBatteryData(IBatteryPackDeclarationInputData battery)
+		private BatteryData GetBatteryData(IBatteryPackDeclarationInputData battery, VectoSimulationJobType jobType,
+			bool ovc)
 		{
-			return new BatteryData {
-				MinSOC = battery.MinSOC ?? double.NaN,
-				MaxSOC = battery.MaxSOC ?? double.NaN,
-				MaxCurrent = BatteryMaxCurrentReader.Create(battery.MaxCurrentMap),
+			var genericSOC = DeclarationData.Battery.GenericSOC.Lookup(jobType, ovc);
+            var minSoc = genericSOC.SOCMin;
+			if (battery.MinSOC != null && battery.MinSOC > minSoc) {
+				minSoc = battery.MinSOC.Value;
+			}
+
+			var maxSoc = genericSOC.SOCMax;
+			if (battery.MaxSOC != null && battery.MaxSOC < maxSoc && battery.MaxSOC > battery.MinSOC) {
+				maxSoc = battery.MaxSOC.Value;
+			}
+            return new BatteryData {
+				MinSOC = maxSoc * ((1d / 2) * DeclarationData.Battery.GenericDeterioration)
+						+ minSoc * (1 - (1d / 2) * DeclarationData.Battery.GenericDeterioration),
+				MaxSOC = (maxSoc * (1 - (1d / 2) * DeclarationData.Battery.GenericDeterioration)
+						+ minSoc * ((1d / 2) * DeclarationData.Battery.GenericDeterioration)),
+                MaxCurrent = BatteryMaxCurrentReader.Create(battery.MaxCurrentMap),
 				Capacity = battery.Capacity,
 				InternalResistance = GetGenericInternalResistanceMap(battery),
 				SOCMap = BatterySOCReader.Create(battery.VoltageCurve)
diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericBusSuperCapData.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericBusSuperCapData.cs
index 63ad0c3aa48f4fd8b8f818cdb241b2776543fb08..22bfc0862312a32863e3111df3f93f6dbe20e40c 100644
--- a/VectoCore/VectoCore/Models/GenericModelData/GenericBusSuperCapData.cs
+++ b/VectoCore/VectoCore/Models/GenericModelData/GenericBusSuperCapData.cs
@@ -1,4 +1,5 @@
-using TUGraz.VectoCommon.InputData;
+using System;
+using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
 
@@ -10,20 +11,23 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 		public static Volt ReferenceMaximumVoltage =  2.7.SI<Volt>();
 		public static Farad CapacitanceReference = 3000.SI<Farad>();
 		
-		public SuperCapData CreateGenericSuperCapData(ISuperCapDeclarationInputData superCapData, double initialSoc)
+		public SuperCapData CreateGenericSuperCapData(ISuperCapDeclarationInputData superCapData)
 		{
 			if (superCapData == null)
 				return null;
 
-			return new SuperCapData {
+			var retVal = new SuperCapData {
 				InternalResistance = GetInternalResistance(superCapData),
 				MaxVoltage = superCapData.MaxVoltage,
 				MinVoltage = superCapData.MinVoltage,
 				MaxCurrentDischarge = superCapData.MaxCurrentDischarge,
 				MaxCurrentCharge = superCapData.MaxCurrentCharge,
 				Capacity = superCapData.Capacity,
-				InitialSoC = initialSoc
+				//InitialSoC = initialSoc
 			};
+			retVal.InitialSoC = Math.Sqrt(Math.Pow(retVal.MaxVoltage.Value(), 2) - Math.Pow(retVal.MinVoltage.Value(), 2)) /
+								retVal.MaxVoltage.Value();
+            return retVal;
 		}
 
 		private Ohm GetInternalResistance(ISuperCapDeclarationInputData superCapData)
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs b/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs
index a96fd3e5ed1ae0d38fd941669ebc1bed2335da84..aa0f8a89f3b41c357336f3591e402184948f062f 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs
@@ -151,21 +151,21 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 			Assert.AreEqual(2, ihpcData.EfficiencyData.VoltageLevels.Count);
 		}
 
-		[TestCase(@"TestData\XML\XMLVIFBusReport\IEPC_completedBus_2.VIF_Report_2.xml", 0.1)]
+		[TestCase(@"TestData\XML\XMLVIFBusReport\IEPC_completedBus_2.VIF_Report_2.xml", 0.5)]
 		public void TestGenericBatteryData(string vifFilePath, double initialSoC)
 		{
 			var multistepBusInputData = xmlInputReader.Create(vifFilePath) as IMultistepBusInputDataProvider;
 			var electricStorage = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.ElectricStorage;
 			
 			var genericBusBatteryData = new GenericBusBatteryData();
-			var batterySystemData = genericBusBatteryData.CreateBatteryData(electricStorage, initialSoC);
+			var batterySystemData = genericBusBatteryData.CreateBatteryData(electricStorage, VectoSimulationJobType.BatteryElectricVehicle, true);
 
 			Assert.AreEqual(initialSoC, batterySystemData.InitialSoC);
 			Assert.AreEqual(2, batterySystemData.Batteries.Count);
 
 			var battery0 = batterySystemData.Batteries[0];
-			Assert.AreEqual(0.80, battery0.Item2.MaxSOC, 1e-6);
-			Assert.AreEqual(0.20, battery0.Item2.MinSOC, 1e-6);
+			Assert.AreEqual(0.9275, battery0.Item2.MaxSOC, 1e-6);
+			Assert.AreEqual(0.0725, battery0.Item2.MinSOC, 1e-6);
 			Assert.AreEqual(72, battery0.Item2.Capacity.AsAmpHour);
 			Assert.AreEqual(2, battery0.Item2.InternalResistance.Entries.Length);
 			
@@ -183,8 +183,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 			Assert.AreEqual(resistance, battery0.Item2.InternalResistance.Entries[1].Resistance[2].Item2.Value());
 
 			var battery1 = batterySystemData.Batteries[1];
-			Assert.AreEqual(0.80, battery1.Item2.MaxSOC, 1e-6);
-			Assert.AreEqual(0.20, battery1.Item2.MinSOC, 1e-6);
+			Assert.AreEqual(0.9275, battery1.Item2.MaxSOC, 1e-6);
+			Assert.AreEqual(0.0725, battery1.Item2.MinSOC, 1e-6);
 			Assert.AreEqual(72, battery1.Item2.Capacity.AsAmpHour);
 			Assert.AreEqual(2, battery1.Item2.InternalResistance.Entries.Length);
 			
@@ -203,12 +203,12 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 		}
 
 		
-		[TestCase(@"TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\SuperCap.vreess", 0.1)]
+		[TestCase(@"TestData\Hybrids\Hyb_P2_Group2SuperCapOvl\SuperCap.vreess", 1)]
 		public void TestGenericSuperCapData(string superCapFilePath, double initialSoC)
 		{
 			var superCap = JSONInputDataFactory.ReadREESSData(superCapFilePath, false) as ISuperCapDeclarationInputData; 
 			var genericBusSuperCapData = new GenericBusSuperCapData();
-			var superCapData = genericBusSuperCapData.CreateGenericSuperCapData(superCap, initialSoC);
+			var superCapData = genericBusSuperCapData.CreateGenericSuperCapData(superCap);
 
 			Assert.AreEqual(37.0, superCapData.Capacity.Value());
 			Assert.AreEqual(0, superCapData.MinVoltage.Value());