diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs
index b4f559513be701c651b831b878347e39a731fc3c..893f857e8a3ac4b1201d60d134a2b9a05a24e525 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs
@@ -8,6 +8,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.Models.BusAuxiliaries;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5a0d69093716358b4686b426ce802dfea05d2420
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Generic/DeclarationDataAdapterGenericCompletedBus.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Generic
+{
+	public abstract class DeclarationDataAdapterGenericCompletedBus
+	{
+		public abstract class CompletedBusBase : IGenericCompletedBusDataAdapter
+		{
+            #region Implementation of IDeclarationDataAdapter
+
+			private readonly IDriverDataAdapter _driverDataAdapter = new CompletedBusGenericDriverDataAdapter();
+            public DriverData CreateDriverData()
+            {
+                return _driverDataAdapter.CreateDriverData();
+            }
+
+            public VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission,
+                KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode,
+                Mission mission)
+            {
+                throw new NotImplementedException();
+            }
+
+            public GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
+                IShiftPolygonCalculator shiftPolygonCalc)
+            {
+                throw new NotImplementedException();
+            }
+
+            public ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
+            {
+                throw new NotImplementedException();
+            }
+
+            public RetarderData CreateRetarderData(IRetarderInputData retarderData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData,
+                MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData)
+            {
+                throw new NotImplementedException();
+            }
+
+            #endregion
+		}
+		public class Conventional : CompletedBusBase { }
+		public class HEV_S2 : CompletedBusBase { }
+		public class HEV_S3 : CompletedBusBase { }
+		public class HEV_S4 : CompletedBusBase { }
+		public class HEV_S_IEPC : CompletedBusBase { }
+		public class HEV_P1 : CompletedBusBase { }
+		public class HEV_P2 : CompletedBusBase { }
+		public class HEV_P2_5 : CompletedBusBase { }
+		public class HEV_P3 : CompletedBusBase { }
+		public class HEV_P4 : CompletedBusBase { }
+		public class PEV_E2 : CompletedBusBase { }
+		public class PEV_E3 : CompletedBusBase { }
+		public class PEV_E4 : CompletedBusBase { }
+		public class PEV_E_IEPC : CompletedBusBase { }
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1b7523b5f8c525f99b4909378e89a850dc107287
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Specific
+{
+	public abstract class DeclarationDataAdapterSpecificCompletedBus
+	{
+		public abstract class CompletedBusBase : ISpecificCompletedBusDataAdapter
+        {
+			private readonly IDriverDataAdapter _driverDataAdapter = new CompletedBusSpecificDriverDataAdapter();
+            #region Implementation of IDeclarationDataAdapter
+
+
+            public DriverData CreateDriverData()
+			{
+				return _driverDataAdapter.CreateDriverData();
+			}
+
+            public VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission,
+                KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode,
+                Mission mission)
+            {
+                throw new NotImplementedException();
+            }
+
+            public GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
+                IShiftPolygonCalculator shiftPolygonCalc)
+            {
+                throw new NotImplementedException();
+            }
+
+            public ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
+            {
+                throw new NotImplementedException();
+            }
+
+            public RetarderData CreateRetarderData(IRetarderInputData retarderData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
+            {
+                throw new NotImplementedException();
+            }
+
+            public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData,
+                MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles)
+            {
+                throw new NotImplementedException();
+            }
+
+            public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData)
+            {
+                throw new NotImplementedException();
+            }
+
+            #endregion
+        }
+
+
+        public class Conventional : CompletedBusBase { }
+        public class HEV_S2 : CompletedBusBase { }
+        public class HEV_S3 : CompletedBusBase { }
+        public class HEV_S4 : CompletedBusBase { }
+        public class HEV_S_IEPC : CompletedBusBase { }
+        public class HEV_P1 : CompletedBusBase { }
+        public class HEV_P2 : CompletedBusBase { }
+        public class HEV_P2_5 : CompletedBusBase { }
+        public class HEV_P3 : CompletedBusBase { }
+        public class HEV_P4 : CompletedBusBase { }
+        public class PEV_E2 : CompletedBusBase { }
+        public class PEV_E3 : CompletedBusBase { }
+        public class PEV_E4 : CompletedBusBase { }
+        public class PEV_E_IEPC : CompletedBusBase { }
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DataAdapter b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DataAdapter.cd
similarity index 76%
rename from VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DataAdapter
rename to VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DataAdapter.cd
index 50da0f52338f61db5ca05bc81de27329323202c1..b6e762df24718906e7507c7ac7aee9f73418219e 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DataAdapter
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DataAdapter.cd
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
-<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="NameAndType">
+<ClassDiagram MajorVersion="1" MinorVersion="1">
   <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry">
-    <Position X="1" Y="2.75" Width="6" />
+    <Position X="0.5" Y="1.5" Width="3" />
     <Compartments>
       <Compartment Name="Nested Types" Collapsed="false" />
     </Compartments>
     <NestedTypes>
-      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.Conventional" Collapsed="true">
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_S_IEPC" Collapsed="true">
         <TypeIdentifier>
-          <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\Conventional.cs</NewMemberFileName>
+          <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\SerialHybrid.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
-      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P4">
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P4" Collapsed="true">
         <TypeIdentifier>
           <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_P4.cs</NewMemberFileName>
         </TypeIdentifier>
@@ -21,27 +21,32 @@
           <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_S4.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
-      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P1">
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P1" Collapsed="true">
         <TypeIdentifier>
           <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_P1.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
-      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P2_5">
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P2_5" Collapsed="true">
         <TypeIdentifier>
           <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_P2_5.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
-      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P2">
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P2" Collapsed="true">
         <TypeIdentifier>
           <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_P2.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
       <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_S2" Collapsed="true">
         <TypeIdentifier>
-          <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_S2.cs</NewMemberFileName>
+          <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\SerialHybrid.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
-      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P3">
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.SerialHybrid" Collapsed="true">
+        <TypeIdentifier>
+          <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\SerialHybrid.cs</NewMemberFileName>
+        </TypeIdentifier>
+      </Class>
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_P3" Collapsed="true">
         <TypeIdentifier>
           <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_P3.cs</NewMemberFileName>
         </TypeIdentifier>
@@ -77,9 +82,9 @@
           <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\PEV_E_IEPC.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
-      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.HEV_S_IEPC" Collapsed="true">
+      <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry.DeclarationDataAdapterHeavyLorry.Conventional" Collapsed="true">
         <TypeIdentifier>
-          <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\HEV_S_IEPC.cs</NewMemberFileName>
+          <NewMemberFileName>InputData\Reader\DataObjectAdapter\HeavyLorry\Conventional.cs</NewMemberFileName>
         </TypeIdentifier>
       </Class>
     </NestedTypes>
@@ -89,33 +94,19 @@
     </TypeIdentifier>
     <Lollipop Position="0.2" />
   </Class>
-  <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.AbstractSimulationDataAdapter">
-    <Position X="8.25" Y="0.5" Width="5" />
+  <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.DeclarationDataAdapterCompletedBusGeneric">
+    <Position X="5" Y="1.25" Width="3.5" />
     <TypeIdentifier>
-      <HashCode>AAggAEAAEAAABAAAAAAAAhAEABEAAgAMAAgAAAAADAA=</HashCode>
-      <FileName>InputData\Reader\DataObjectAdapter\AbstractSimulationDataAdapter.cs</FileName>
+      <HashCode>AAEAAAgAgAIgAAAAAABAAgACAAAAAACEAIEABAAASAA=</HashCode>
+      <FileName>InputData\Reader\DataObjectAdapter\DeclarationDataAdapterCompletedBusGeneric.cs</FileName>
     </TypeIdentifier>
   </Class>
-  <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.DeclarationDataAdapterPrimaryBus">
-    <Position X="7.25" Y="7.75" Width="2.75" />
+  <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.DeclarationDataAdapterCompletedBusSpecific">
+    <Position X="9" Y="1.25" Width="3" />
     <TypeIdentifier>
-      <HashCode>AAAQAAAAgDAgAAAAAAAIAgIASABgAqIgEAAAAAABQAQ=</HashCode>
-      <FileName>InputData\Reader\DataObjectAdapter\DeclarationDataAdapterPrimaryBus.cs</FileName>
+      <HashCode>AAAAAAAAgAAACAAAAAgAAAAgCCAABgKAAAAAQAAAQAA=</HashCode>
+      <FileName>InputData\Reader\DataObjectAdapter\DeclarationDataAdapterCompletedBusSpecific.cs</FileName>
     </TypeIdentifier>
   </Class>
-  <Class Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.ElectricConsumerEntry">
-    <Position X="10.5" Y="6" Width="4" />
-    <TypeIdentifier>
-      <HashCode>AAAAAAAAAAAAAAAAAACAAAAACAAAAAAAAAAAEEAAAAA=</HashCode>
-      <FileName>InputData\Reader\DataObjectAdapter\DeclarationDataAdapterPrimaryBus.cs</FileName>
-    </TypeIdentifier>
-  </Class>
-  <Interface Name="TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.IDeclarationDataAdapter">
-    <Position X="6" Y="0.5" Width="3.25" />
-    <TypeIdentifier>
-      <HashCode>AAEAAAgAgCAgAAAAAAEAAgIAAAAAAAAEAAAAQAABQAA=</HashCode>
-      <FileName>InputData\Reader\DataObjectAdapter\IDeclarationDataAdapter.cs</FileName>
-    </TypeIdentifier>
-  </Interface>
   <Font Name="Segoe UI" Size="9" />
 </ClassDiagram>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs
index 8d8b4f2750b4d7f91720c9fee5146c84e08e01a6..9610bd77c5356a758a6b2769885657d5c1f95080 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs
@@ -5,6 +5,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.PrimaryBus;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.GenericModelData;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -25,7 +26,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 		#region Overrides of DeclarationDataAdapterPrimaryBus
 
-		public override DriverData CreateDriverData()
+		public new DriverData CreateDriverData()
 		{
 			var retVal = base.CreateDriverData();
 			retVal.LookAheadCoasting.Enabled = false;
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
index b11c599c0695fa580b9b2254e5113d525004d290..7f948cc86115c05db86b710e53d625861908ef5b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusSpecific.cs
@@ -7,6 +7,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.Models.BusAuxiliaries;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterNinjectModule.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterNinjectModule.cs
index 1c3560efba3704b960f5a296d3ecd439506d6f16..a82f81a1fb7d0e20a2a9323670f4593b7d7e732b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterNinjectModule.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterNinjectModule.cs
@@ -1,5 +1,10 @@
-using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Generic;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Specific;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
+using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRunDataFactory;
 using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDataFactory;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDataFactory;
 
 namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 {
@@ -52,9 +57,177 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			Bind<IDeclarationDataAdapter>().To<HeavyLorry.DeclarationDataAdapterHeavyLorry.PEV_E_IEPC>()
 				.WhenInjectedExactlyInto<DeclarationModeHeavyLorryRunDataFactory.PEV_E_IEPC>();
 			#endregion HeavyLorry
-		}
 
-		#endregion
-	}
+			#region PrimaryBus
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.Conventional>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.Conventional>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_S2>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_S2>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_S3>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_S3>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_S4>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_S4>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_S_IEPC>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_S_IEPC>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_P1>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_P1>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_P2>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_P2>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_P2_5>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_P2_5>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_P3>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_P3>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.HEV_P4>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.HEV_P4>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.PEV_E2>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.PEV_E2>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.PEV_E3>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.PEV_E3>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.PEV_E4>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.PEV_E4>();
+
+			Bind<IDeclarationDataAdapter>().To<DeclarationDataAdapterPrimaryBus.PEV_E_IEPC>()
+				.WhenInjectedExactlyInto<DeclarationModePrimaryBusRunDataFactory.PEV_E_IEPC>();
+
+			#endregion
+
+			#region CompletedBus Generic
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.Conventional>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.Conventional>();
+
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_S2>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S2>();
+
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_S3>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S3>();
+
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_S4>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S4>();
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_S_IEPC>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S4>();
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_P1>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P1>();
+
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_P2>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P2>();
+
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_P2_5>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P2_5>();
+
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_P3>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P3>();
+
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.HEV_P4>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P4>();
+            Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.PEV_E2>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E2>();
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.PEV_E3>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E3>();
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.PEV_E4>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E4>();
+			Bind<IGenericCompletedBusDataAdapter>()
+				.To<DeclarationDataAdapterGenericCompletedBus.PEV_E_IEPC>()
+				.WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E_IEPC>();
+
+            #endregion
+
+            #region CompletedBus Specific
+            Bind<ISpecificCompletedBusDataAdapter>()
+			    .To<DeclarationDataAdapterSpecificCompletedBus.Conventional>()
+			    .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.Conventional>();
+
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_S2>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S2>();
+
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_S3>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S3>();
+
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_S4>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S4>();
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_S_IEPC>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_S4>();
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_P1>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P1>();
+
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_P2>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P2>();
+
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_P2_5>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P2_5>();
+
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_P3>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P3>();
+
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.HEV_P4>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.HEV_P4>();
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.PEV_E2>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E2>();
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.PEV_E3>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E3>();
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.PEV_E4>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E4>();
+            Bind<ISpecificCompletedBusDataAdapter>()
+                .To<DeclarationDataAdapterSpecificCompletedBus.PEV_E_IEPC>()
+                .WhenInjectedExactlyInto<DeclarationModeCompletedBusRunDataFactory.PEV_E_IEPC>();
+            #endregion
+        }
+
+        #endregion
+    }
 }
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
index 2363f7c692551f2186feae1ebcbc53e60cce413e..6f6e5df2d2f0704a25d02ad3c87c1c84817c512c 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
@@ -41,6 +41,7 @@ using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.Impl;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.InputData.Reader.ShiftStrategy;
 using TUGraz.VectoCore.Models.BusAuxiliaries;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/Conventional.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/Conventional.cs
index ae836867a3c09c46eba77697ce710c8f9de7b040..146ca0f720108a09f9560ac85954bfdcee54de3f 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/Conventional.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/Conventional.cs
@@ -25,49 +25,6 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 			public static readonly GearboxType[] SupportedGearboxTypes =
 				{ GearboxType.MT, GearboxType.AMT, GearboxType.ATPowerSplit, GearboxType.ATSerial };
 
-			public override DriverData CreateDriverData()
-			{
-				var lookAheadData = new DriverData.LACData {
-					Enabled = DeclarationData.Driver.LookAhead.Enabled,
-
-					//Deceleration = DeclarationData.Driver.LookAhead.Deceleration,
-					MinSpeed = DeclarationData.Driver.LookAhead.MinimumSpeed,
-					LookAheadDecisionFactor = new LACDecisionFactor(),
-					LookAheadDistanceFactor = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor,
-				};
-				var overspeedData = new DriverData.OverSpeedData {
-					Enabled = true,
-					MinSpeed = DeclarationData.Driver.OverSpeed.MinSpeed,
-					OverSpeed = DeclarationData.Driver.OverSpeed.AllowedOverSpeed,
-				};
-
-				var retVal = new DriverData {
-					LookAheadCoasting = lookAheadData,
-					OverSpeed = overspeedData,
-					EngineStopStart = new DriverData.EngineStopStartData() {
-						EngineOffStandStillActivationDelay = DeclarationData.Driver.EngineStopStart.ActivationDelay,
-						MaxEngineOffTimespan = DeclarationData.Driver.EngineStopStart.MaxEngineOffTimespan,
-						UtilityFactorStandstill = DeclarationData.Driver.EngineStopStart.UtilityFactor,
-						UtilityFactorDriving = DeclarationData.Driver.EngineStopStart.UtilityFactor,
-					},
-					EcoRoll = new DriverData.EcoRollData() {
-						UnderspeedThreshold = DeclarationData.Driver.EcoRoll.UnderspeedThreshold,
-						MinSpeed = DeclarationData.Driver.EcoRoll.MinSpeed,
-						ActivationPhaseDuration = DeclarationData.Driver.EcoRoll.ActivationDelay,
-						AccelerationLowerLimit = DeclarationData.Driver.EcoRoll.AccelerationLowerLimit,
-						AccelerationUpperLimit = DeclarationData.Driver.EcoRoll.AccelerationUpperLimit,
-					},
-					PCC = new DriverData.PCCData() {
-						PCCEnableSpeed = DeclarationData.Driver.PCC.PCCEnableSpeed,
-						MinSpeed = DeclarationData.Driver.PCC.MinSpeed,
-						PreviewDistanceUseCase1 = DeclarationData.Driver.PCC.PreviewDistanceUseCase1,
-						PreviewDistanceUseCase2 = DeclarationData.Driver.PCC.PreviewDistanceUseCase2,
-						UnderSpeed = DeclarationData.Driver.PCC.Underspeed,
-						OverspeedUseCase3 = DeclarationData.Driver.PCC.OverspeedUseCase3
-					}
-				};
-				return retVal;
-			}
 
 			public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment,
 				Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/HEV_S2.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/HEV_S2.cs
deleted file mode 100644
index e15d55e1ba3bc0d7f2beae4dcfc424554e6600d1..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/HEV_S2.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using System;
-using System.Collections.Generic;
-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;
-using TUGraz.VectoCore.Models.SimulationComponent.Data;
-
-namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
-{
-	public partial class DeclarationDataAdapterHeavyLorry
-	{
-		public class HEV_S2 : LorryBase
-		{
-			#region Overrides of LorryBase
-
-			public override DriverData CreateDriverData()
-			{
-				throw new NotImplementedException();
-			}
-
-			public override VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment,
-				Mission mission,
-				KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission,
-				Segment segment)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle,
-				IEngineModeDeclarationInputData engineMode,
-				Mission mission)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
-				IShiftPolygonCalculator shiftPolygonCalc)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio,
-				PerSecond engineIdlingSpeed)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override RetarderData CreateRetarderData(IRetarderInputData retarderData)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData,
-				IBusAuxiliariesDeclarationData busAuxData,
-				MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles)
-			{
-				throw new NotImplementedException();
-			}
-
-			public override AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData)
-			{
-				throw new NotImplementedException();
-			}
-
-			#endregion
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/HEV_S_IEPC.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/HEV_S_IEPC.cs
deleted file mode 100644
index 44194285ad0bfcbb75be344bb9f01e78c93c1c0e..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/HEV_S_IEPC.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
-{
-    public partial class DeclarationDataAdapterHeavyLorry
-    {
-		public class HEV_S_IEPC : LorryBase
-		{
-
-		}
-    }
-}
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/LorryBase.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/LorryBase.cs
index 2ab8ab830344df81df1115c7325eba4a59d8a9ae..e573fd19bd949ec337547f1e8f4a553a073800b1 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/LorryBase.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/LorryBase.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent;
@@ -16,9 +17,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
 		{
 			#region Implementation of IDeclarationDataAdapter
 
-			public virtual DriverData CreateDriverData()
+			private readonly IDriverDataAdapter _driverDataAdapter = new LorryDriverDataAdapter();
+
+			public DriverData CreateDriverData()
 			{
-				throw new NotImplementedException();
+				return _driverDataAdapter.CreateDriverData();
 			}
 
 			public virtual VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment,
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/SerialHybrid.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/SerialHybrid.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a5361f26d6bd040e2401fdefd3ec8f5fdc410394
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/HeavyLorry/SerialHybrid.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+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;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
+{
+	public partial class DeclarationDataAdapterHeavyLorry
+	{
+		public abstract class SerialHybrid : LorryBase { }
+
+		public class HEV_S2 : SerialHybrid
+		{
+		}
+
+
+
+
+		public class HEV_S_IEPC : SerialHybrid
+		{
+
+		}
+    }
+}
\ 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 e5c788adb136e9673042149e53d199f3a774cd50..646604ee60f301cf65f54a78ea73f27fa82a1d69 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/IDeclarationDataAdapter.cs
@@ -17,16 +17,23 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter {
 		AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData);
 		AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData);
 		CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission);
-
 		GearboxData CreateGearboxData(
 			IVehicleDeclarationInputData inputData, VectoRunData runData,
 			IShiftPolygonCalculator shiftPolygonCalc);
-
 		ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed);
-
 		RetarderData CreateRetarderData(IRetarderInputData retarderData);
 		PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData);
 		IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles);
 		AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData);
 	}
+
+	public interface IGenericCompletedBusDataAdapter : IDeclarationDataAdapter
+	{
+
+	}
+
+	public interface ISpecificCompletedBusDataAdapter : IDeclarationDataAdapter
+	{
+
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
similarity index 86%
rename from VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
rename to VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
index 373c7c44c700bdbaf8c1e6240eb9550f1952cd6f..d709fc41b23c430cb7ce949a2e05d41161424ec3 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/PrimaryBus/DeclarationDataAdapterPrimaryBus.cs
@@ -7,28 +7,29 @@ using TUGraz.VectoCommon.InputData;
 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;
 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.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Utils;
 
-namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus
 {
 	public class DeclarationDataAdapterPrimaryBus : HeavyLorry.DeclarationDataAdapterHeavyLorry.Conventional
 	{
 		#region Overrides of DeclarationDataAdapterHeavyLorry
 
-		public override DriverData CreateDriverData()
-		{
-			var retVal = base.CreateDriverData();
-			retVal.LookAheadCoasting.Enabled = true;
-			return retVal;
-		}
+		//public override DriverData CreateDriverData()
+		//{
+		//	var retVal = base.CreateDriverData();
+		//	retVal.LookAheadCoasting.Enabled = true;
+		//	return retVal;
+		//}
 
 
 		public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
@@ -477,7 +478,158 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				StopBrakeActuation = Constants.BusAuxiliaries.PneumaticConsumersDemands.StopBrakeActuation,
 			};
 		}
-	}
+
+
+		public abstract class PrimaryBusBase : IDeclarationDataAdapter
+		{
+			#region Implementation of IDeclarationDataAdapter
+
+			private readonly IDriverDataAdapter _driverDataAdapter = new PrimaryBusDriverDataAdapter();
+			public DriverData CreateDriverData()
+			{
+				return _driverDataAdapter.CreateDriverData();
+			}
+
+			public VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Segment segment, Mission mission,
+				KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational)
+			{
+				throw new NotImplementedException();
+			}
+
+			public AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment)
+			{
+				throw new NotImplementedException();
+			}
+
+			public AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData)
+			{
+				throw new NotImplementedException();
+			}
+
+			public AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
+			{
+				throw new NotImplementedException();
+			}
+
+			public CombustionEngineData CreateEngineData(IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode,
+				Mission mission)
+			{
+				throw new NotImplementedException();
+			}
+
+			public GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
+				IShiftPolygonCalculator shiftPolygonCalc)
+			{
+				throw new NotImplementedException();
+			}
+
+			public ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
+			{
+				throw new NotImplementedException();
+			}
+
+			public RetarderData CreateRetarderData(IRetarderInputData retarderData)
+			{
+				throw new NotImplementedException();
+			}
+
+			public PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
+			{
+				throw new NotImplementedException();
+			}
+
+			public IList<VectoRunData.AuxData> CreateAuxiliaryData(IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData,
+				MissionType missionType, VehicleClass vehicleClass, Meter vehicleLength, int? numSteeredAxles)
+			{
+				throw new NotImplementedException();
+			}
+
+			public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData)
+			{
+				throw new NotImplementedException();
+			}
+
+			#endregion
+		}
+
+		public class Conventional : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S2 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S3 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S4 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_S_IEPC : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P1 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P2 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P2_5 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P3 : PrimaryBusBase
+		{
+
+		}
+
+		public class HEV_P4 : PrimaryBusBase
+		{
+
+		}
+
+		public class PEV_E2 : PrimaryBusBase
+		{
+
+		}
+
+		public class PEV_E3 : PrimaryBusBase
+		{
+
+		}
+
+
+		public class PEV_E4 : PrimaryBusBase
+		{
+
+		}
+
+
+		public class PEV_E_IEPC : PrimaryBusBase
+		{
+
+		}
+
+
+		public class Exempted : PrimaryBusBase
+		{
+
+		}
+    }
 
 	public class ElectricConsumerEntry {
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fc526f584254f819a1f9f3be488f267ad7181255
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/DriverDataAdapter.cs
@@ -0,0 +1,121 @@
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents
+{
+
+	public interface IDriverDataAdapter
+	{
+		DriverData CreateDriverData();
+	}
+	internal abstract class DriverDataAdapter : IDriverDataAdapter
+	{
+		protected DriverDataAdapter() { }
+
+		#region Implementation of IDriverDataAdapter
+
+		
+
+		public virtual DriverData CreateDriverData()
+		{
+            var lookAheadData = new DriverData.LACData
+            {
+                Enabled = DeclarationData.Driver.LookAhead.Enabled,
+
+                //Deceleration = DeclarationData.Driver.LookAhead.Deceleration,
+                MinSpeed = DeclarationData.Driver.LookAhead.MinimumSpeed,
+                LookAheadDecisionFactor = new LACDecisionFactor(),
+                LookAheadDistanceFactor = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor,
+            };
+            var overspeedData = new DriverData.OverSpeedData
+            {
+                Enabled = true,
+                MinSpeed = DeclarationData.Driver.OverSpeed.MinSpeed,
+                OverSpeed = DeclarationData.Driver.OverSpeed.AllowedOverSpeed,
+            };
+
+            var retVal = new DriverData
+            {
+                LookAheadCoasting = lookAheadData,
+                OverSpeed = overspeedData,
+                EngineStopStart = new DriverData.EngineStopStartData()
+                {
+                    EngineOffStandStillActivationDelay = DeclarationData.Driver.EngineStopStart.ActivationDelay,
+                    MaxEngineOffTimespan = DeclarationData.Driver.EngineStopStart.MaxEngineOffTimespan,
+                    UtilityFactorStandstill = DeclarationData.Driver.EngineStopStart.UtilityFactor,
+                    UtilityFactorDriving = DeclarationData.Driver.EngineStopStart.UtilityFactor,
+                },
+                EcoRoll = new DriverData.EcoRollData()
+                {
+                    UnderspeedThreshold = DeclarationData.Driver.EcoRoll.UnderspeedThreshold,
+                    MinSpeed = DeclarationData.Driver.EcoRoll.MinSpeed,
+                    ActivationPhaseDuration = DeclarationData.Driver.EcoRoll.ActivationDelay,
+                    AccelerationLowerLimit = DeclarationData.Driver.EcoRoll.AccelerationLowerLimit,
+                    AccelerationUpperLimit = DeclarationData.Driver.EcoRoll.AccelerationUpperLimit,
+                },
+                PCC = new DriverData.PCCData()
+                {
+                    PCCEnableSpeed = DeclarationData.Driver.PCC.PCCEnableSpeed,
+                    MinSpeed = DeclarationData.Driver.PCC.MinSpeed,
+                    PreviewDistanceUseCase1 = DeclarationData.Driver.PCC.PreviewDistanceUseCase1,
+                    PreviewDistanceUseCase2 = DeclarationData.Driver.PCC.PreviewDistanceUseCase2,
+                    UnderSpeed = DeclarationData.Driver.PCC.Underspeed,
+                    OverspeedUseCase3 = DeclarationData.Driver.PCC.OverspeedUseCase3
+                }
+            };
+            return retVal;
+        }
+        #endregion
+
+    }
+
+	internal sealed class LorryDriverDataAdapter : DriverDataAdapter
+	{
+
+		#region Overrides of DriverDataAdapter
+
+		public override DriverData CreateDriverData()
+		{
+			return base.CreateDriverData();
+		}
+
+		#endregion
+	}
+
+    internal sealed class PrimaryBusDriverDataAdapter : DriverDataAdapter
+	{
+		#region Overrides of DriverDataAdapter
+
+		public override DriverData CreateDriverData()
+		{
+			var retVal = base.CreateDriverData();
+			retVal.LookAheadCoasting.Enabled = true;
+			return retVal;
+        }
+
+		#endregion
+	}
+
+	internal sealed class CompletedBusGenericDriverDataAdapter : DriverDataAdapter
+	{
+		public override DriverData CreateDriverData()
+		{
+			var retVal = base.CreateDriverData();
+			retVal.LookAheadCoasting.Enabled = false;
+			retVal.OverSpeed.Enabled = false;
+			return retVal;
+		}
+    }
+
+	internal sealed class CompletedBusSpecificDriverDataAdapter : DriverDataAdapter
+	{
+		public override DriverData CreateDriverData()
+		{
+			var retVal = base.CreateDriverData();
+			retVal.LookAheadCoasting.Enabled = false;
+			retVal.OverSpeed.Enabled = false;
+			return retVal;
+        }
+	}
+}
+
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0b0a945eddb7d2525b8c073d9819806e352e83da
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
@@ -0,0 +1,104 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRunDataFactory
+{
+	public abstract class DeclarationModeCompletedBusRunDataFactory
+	{
+		public abstract class CompletedBusBase : IVectoRunDataFactory
+		{
+			public IDeclarationDataAdapter GenericDataAdapter { get; }
+			public IDeclarationDataAdapter SpecificDataAdapter { get; }
+			public IMultistageVIFInputData DataProvider { get; }
+
+			public CompletedBusBase(IMultistageVIFInputData dataProvider, 
+				ISpecificCompletedBusDataAdapter specificDataAdapter, 
+				IGenericCompletedBusDataAdapter genericDataAdapter)
+			{
+				SpecificDataAdapter = specificDataAdapter;
+				GenericDataAdapter = genericDataAdapter;
+				DataProvider = dataProvider;
+			}
+
+
+
+			#region Implementation of IVectoRunDataFactory
+			public IEnumerable<VectoRunData> NextRun()
+			{
+				throw new NotImplementedException();
+			}
+
+			#endregion
+		}
+
+
+		public class Conventional :
+			CompletedBusBase
+		{
+			public Conventional(IMultistageVIFInputData dataProvider,
+				ISpecificCompletedBusDataAdapter specificDataAdapter,
+				IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter,
+				genericDataAdapter) { }
+		}
+		public class HEV_S2 : CompletedBusBase
+		{
+			public HEV_S2(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_S3 : CompletedBusBase
+		{
+			public HEV_S3(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_S4 : CompletedBusBase
+		{
+			public HEV_S4(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_S_IEPC : CompletedBusBase
+		{
+			public HEV_S_IEPC(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_P1 : CompletedBusBase
+		{
+			public HEV_P1(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_P2 : CompletedBusBase
+		{
+			public HEV_P2(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_P2_5 : CompletedBusBase
+		{
+			public HEV_P2_5(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_P3 : CompletedBusBase
+		{
+			public HEV_P3(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class HEV_P4 : CompletedBusBase
+		{
+			public HEV_P4(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class PEV_E1 : CompletedBusBase
+		{
+			public PEV_E1(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class PEV_E2 : CompletedBusBase
+		{
+			public PEV_E2(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class PEV_E3 : CompletedBusBase
+		{
+			public PEV_E3(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class PEV_E4 : CompletedBusBase
+		{
+			public PEV_E4(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+		public class PEV_E_IEPC : CompletedBusBase
+		{
+			public PEV_E_IEPC(IMultistageVIFInputData dataProvider, ISpecificCompletedBusDataAdapter specificDataAdapter, IGenericCompletedBusDataAdapter genericDataAdapter) : base(dataProvider, specificDataAdapter, genericDataAdapter) { }
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
index cf845914d1196ac8b1f665e33f1e1e39ba327881..6064bab6e3e6956bb927c82578ee38e061aa062c 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
@@ -27,10 +27,8 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
 	{
 		public abstract class LorryBase : IVectoRunDataFactory
 		{
-
 			public IDeclarationDataAdapter DataAdapter { get; }
 			public IDeclarationInputDataProvider InputDataProvider { get; }
-
 			public IDeclarationReport Report { get; }
 
 			protected Segment _segment;
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/MediumLorryRunDataFactory/DeclarationModeMediumLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/MediumLorryRunDataFactory/DeclarationModeMediumLorryRunDataFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b255429f7803558c82e85ca4db9c6e7daedf3962
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/MediumLorryRunDataFactory/DeclarationModeMediumLorryRunDataFactory.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
+using TUGraz.VectoCore.Models.Simulation.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.MediumLorryRunDataFactory
+{
+    internal abstract class DeclarationModeMediumLorryRunDataFactory
+    {
+		public abstract class MediumLorryBase : IVectoRunDataFactory
+		{
+			#region Implementation of IVectoRunDataFactory
+
+			public IEnumerable<VectoRunData> NextRun()
+			{
+				throw new NotImplementedException();
+			}
+
+			#endregion
+		}
+
+		public class Conventional : MediumLorryBase
+		{
+
+		}
+
+		public class HEV_S2 : MediumLorryBase
+		{
+
+		}
+
+		public class HEV_S3 : MediumLorryBase
+		{
+
+		}
+
+
+		public class HEV_S4 : MediumLorryBase
+		{
+
+		}
+
+
+
+
+    }
+}
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1a868c744b566b6cb4883a52522d3fef76fa5ee6
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDataFactory
+{
+	public abstract class DeclarationModePrimaryBusRunDataFactory
+	{
+
+
+		public abstract class PrimaryBusBase : IVectoRunDataFactory
+		{
+			#region Implementation of IVectoRunDataFactory
+
+			public IDeclarationDataAdapter DataAdapter { get; }
+			public IDeclarationInputDataProvider DataProvider { get; }
+
+			public IDeclarationReport Report { get; }
+       
+            protected PrimaryBusBase(IDeclarationInputDataProvider dataProvider, IDeclarationReport report,
+				IDeclarationDataAdapter declarationDataAdapter)
+            {
+				DataAdapter = declarationDataAdapter;
+				DataProvider = dataProvider;
+				Report = report;
+			}
+
+
+
+			public IEnumerable<VectoRunData> NextRun()
+			{
+				throw new NotImplementedException();
+			}
+
+			#endregion
+		}
+
+		public class Conventional : PrimaryBusBase
+		{
+			public Conventional(IDeclarationInputDataProvider dataProvider, IDeclarationReport report,
+				IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_S2 : PrimaryBusBase
+		{
+			public HEV_S2(IDeclarationInputDataProvider dataProvider, IDeclarationReport report,
+				IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_S3 : PrimaryBusBase
+		{
+			public HEV_S3(IDeclarationInputDataProvider dataProvider, IDeclarationReport report,
+				IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_S4 : PrimaryBusBase
+		{
+			public HEV_S4(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_S_IEPC : PrimaryBusBase
+		{
+			public HEV_S_IEPC(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_P1 : PrimaryBusBase
+		{
+			public HEV_P1(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_P2 : PrimaryBusBase
+		{
+			public HEV_P2(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_P2_5 : PrimaryBusBase
+		{
+			public HEV_P2_5(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_P3 : PrimaryBusBase
+		{
+			public HEV_P3(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class HEV_P4 : PrimaryBusBase
+		{
+			public HEV_P4(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+
+		public class PEV_E2 : PrimaryBusBase
+		{
+			public PEV_E2(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class PEV_E3 : PrimaryBusBase
+		{
+			public PEV_E3(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class PEV_E4 : PrimaryBusBase
+		{
+			public PEV_E4(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class PEV_E_IEPC : PrimaryBusBase
+		{
+			public PEV_E_IEPC(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+
+		public class Exempted : PrimaryBusBase
+		{
+			public Exempted(IDeclarationInputDataProvider dataProvider, IDeclarationReport report, IDeclarationDataAdapter declarationDataAdapter) : base(dataProvider, report, declarationDataAdapter) { }
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs
index 7b28e518daebb83df3a2ae3278d39c7e10de3199..df3cbb3b3c317561fbabaad7ebc4efd0601c515e 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs
@@ -293,37 +293,4 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 
 
 	}
-
-
-	public abstract class DeclarationModeCompletedBusRunDataFactory
-	{
-		public abstract class CompletedBusBase : IVectoRunDataFactory
-		{
-			#region Implementation of IVectoRunDataFactory
-
-			public IEnumerable<VectoRunData> NextRun()
-			{
-				throw new NotImplementedException();
-			}
-
-			#endregion
-		}
-
-
-		public class Conventional : CompletedBusBase { }
-		public class HEV_S2 : CompletedBusBase { }
-		public class HEV_S3 : CompletedBusBase { }
-		public class HEV_S4 : CompletedBusBase { }
-		public class HEV_S_IEPC : CompletedBusBase { }
-		public class HEV_P1 : CompletedBusBase { }
-		public class HEV_P2 : CompletedBusBase { }
-		public class HEV_P2_5 : CompletedBusBase { }
-		public class HEV_P3 : CompletedBusBase { }
-		public class HEV_P4 : CompletedBusBase { }
-		public class PEV_E1 : CompletedBusBase { }
-		public class PEV_E2 : CompletedBusBase { }
-		public class PEV_E3 : CompletedBusBase { }
-		public class PEV_E4 : CompletedBusBase { }
-		public class PEV_E_IEPC : CompletedBusBase { }
-	}
 }
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
index 85dd67222381be6f71e6def32c310805a4d8ff8c..2e6dc575bdc02a5a1f18b6b0c9634c08a4d426cb 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs
@@ -7,6 +7,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
@@ -173,96 +174,5 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 				mission, InputDataProvider.JobInputData.Vehicle, simulationRunData);
 			return simulationRunData;
 		}
-
-
-
-	}
-
-
-
-	public abstract class DeclarationModePrimaryBusRunDataFactory
-	{
-		public abstract class PrimaryBusBase : IVectoRunDataFactory
-		{
-			#region Implementation of IVectoRunDataFactory
-
-			public IEnumerable<VectoRunData> NextRun()
-			{
-				throw new NotImplementedException();
-			}
-
-			#endregion
-		}
-
-		public class Conventional : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_S2 : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_S3 : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_S4 : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_S_IEPC : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_P1 : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_P2 : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_P2_5 : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_P3 : PrimaryBusBase
-		{
-
-		}
-
-		public class HEV_P4 : PrimaryBusBase
-		{
-
-		}
-
-
-		public class PEV_E2 : PrimaryBusBase
-		{
-
-		}
-
-		public class PEV_E3 : PrimaryBusBase
-		{
-
-		}
-
-		public class PEV_E4 : PrimaryBusBase
-		{
-
-		}
-
-		public class PEV_E_IEPC : PrimaryBusBase
-		{
-
-		}
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs
index d5662ca8144f2dd37018f852bd8a29891dc4b52b..e426f5a3507798143992da9f46c8bcfb900ec1ac 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary.cs
@@ -9,6 +9,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
diff --git a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
index a1aabcb7d591c1382dc94c73d2fd9d020bcb1e1a..85c94131687f7ce9071615736a27dbf4a9428ac0 100644
--- a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
+++ b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
@@ -8,7 +8,9 @@ using Ninject.Modules;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRunDataFactory;
 using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDataFactory;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDataFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.Utils.Ninject;
 
@@ -173,6 +175,9 @@ namespace TUGraz.VectoCore.InputData.Reader
 			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.PEV_E_IEPC>().Named(
 				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, VectoSimulationJobType.BatteryElectricVehicle,
 					ArchitectureID.E_IEPC));
+
+			Bind<IVectoRunDataFactory>().To<DeclarationModePrimaryBusRunDataFactory.Exempted>().Named(
+				_vehicleStringHelper.GetName(VehicleCategoryHelper.PrimaryBus, true));
 			#endregion
 
 
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs
index 155594684b752ca571b0464513953e7cdd6a60f3..e8fd9298b615fd8e9d22c75d1c5dfe24f67c5215 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs
@@ -17,6 +17,7 @@ using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics;
 
 namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 03aa0b455d9a33f2519fa07baf44f77e3370af97..65670ee07e3d8c4f1b90c57bf99fb05db23697fc 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -132,4 +132,9 @@
     </EmbeddedResource>
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="InputData\Reader\DataObjectAdapter\CompletedBus\Generic\" />
+    <Folder Include="InputData\Reader\DataObjectAdapter\SimulationComponents\" />
+  </ItemGroup>
+
 </Project>
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs b/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs
index c41ed30d97086f13d83e1240056f9b097feb7955..f38a4d8a337c27983831039d67a45b86814b7167 100644
--- a/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs
+++ b/VectoCore/VectoCoreTest/InputData/RunDataFactory/RunDataFactoryFactoryTest.cs
@@ -12,9 +12,14 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData;
 using TUGraz.VectoCore.InputData.Reader;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Generic;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Specific;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRunDataFactory;
 using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDataFactory;
+using TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDataFactory;
 
 namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 {
@@ -45,7 +50,8 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 
 		}
 
-		private void CreateRunDataFactory(Mock inputMock, Type expectedRunDataType, Type expectedDeclarationDataAdapterType = null)
+		private IVectoRunDataFactory CreateRunDataFactory(Mock inputMock, Type expectedRunDataType,
+			Type expectedDeclarationDataAdapterType = null)
 		{
 			var s = inputMock.Object;
 			var result = _runDataFactoryFactory.CreateDeclarationRunDataFactory((IInputDataProvider)inputMock.Object, null,
@@ -53,8 +59,25 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 			Assert.IsTrue(result.GetType() == expectedRunDataType, $"Invalid type of RunDataFactory! Expected {expectedRunDataType} got {result.GetType()}");
 			if (expectedDeclarationDataAdapterType != null) {
 				dynamic concreteResult = result;
-				Assert.IsTrue(concreteResult.DeclarationDataAdapter.GetType() == expectedDeclarationDataAdapterType, $"Invalid type of DeclarationDataAdapter! Expected {expectedDeclarationDataAdapterType} got {concreteResult.DeclarationDataAdapter.GetType()}");
+				Assert.IsTrue(concreteResult.DataAdapter.GetType() == expectedDeclarationDataAdapterType, $"Invalid type of DeclarationDataAdapter! Expected {expectedDeclarationDataAdapterType} got {concreteResult.DataAdapter.GetType()}");
 			}
+
+			return result;
+		}
+
+		private void CheckCompletedBusAdapters(IVectoRunDataFactory runDataResult, Type genericDataAdapter,
+			Type specificDataAdapter)
+		{
+
+			var genericPropertyInfo = runDataResult.GetType().GetProperty(nameof(DeclarationModeCompletedBusRunDataFactory.CompletedBusBase.GenericDataAdapter));
+			var generic = genericPropertyInfo.GetValue(runDataResult, null);
+
+			
+			var specificPropertyInfo = runDataResult.GetType().GetProperty(nameof(DeclarationModeCompletedBusRunDataFactory.CompletedBusBase.SpecificDataAdapter));
+			var specific = specificPropertyInfo.GetValue(runDataResult, null);
+
+            Assert.AreEqual(genericDataAdapter, generic.GetType());
+			Assert.AreEqual(specificDataAdapter, specific.GetType());
 		}
 
 #region HeavyLorry
@@ -197,13 +220,16 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
 
 		}
 
-		[TestCase()]
-		public void Exempted_HeavyLorryTest(Type expectedDataAdapter = null)
+		[Test]
+		public void Exempted_HeavyLorryTest([Values]ArchitectureID architectureId, [Values]VectoSimulationJobType simType)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.Exempted()
 				.Lorry();
-			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.Exempted), expectedDataAdapter);
+
+			input.Setup(m => m.JobInputData.JobType).Returns(simType);
+			input.Setup(m => m.JobInputData.Vehicle.ArchitectureID).Returns(architectureId);
+			CreateRunDataFactory(input, typeof(DeclarationModeHeavyLorryRunDataFactory.Exempted), null);
 
 		}
 
@@ -211,264 +237,379 @@ namespace TUGraz.VectoCore.Tests.InputData.RunDataFactory
         #endregion HeavyLorry
         #region PrimaryBus
         [TestCase()]
-		public void ConventionalPrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.Conventional))]
+        public void ConventionalPrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.Conventional()
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.Conventional));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.Conventional), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void HEV_S2_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_S2))]
+        public void HEV_S2_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.S2)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S2));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S2), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void HEV_S3_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_S3))]
+        public void HEV_S3_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.S3)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S3));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S3), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void HEV_S4_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_S4))]
+        public void HEV_S4_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.S4)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S4));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S4), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void HEV_S_IEPC_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_S_IEPC))]
+        public void HEV_S_IEPC_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.S_IEPC)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S_IEPC));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S_IEPC), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void HEV_P1_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_P1))]
+        public void HEV_P1_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.P1)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P1));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P1), expectedDataAdapter);
 		}
 
 
 		[TestCase()]
-		public void HEV_P2_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_P2))]
+        public void HEV_P2_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
-				.HEV(ArchitectureID.S2)
+				.HEV(ArchitectureID.P2)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_S2));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P2), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void HEV_P2_5_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_P2_5))]
+		public void HEV_P2_5_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.P2_5)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P2_5));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P2_5), expectedDataAdapter);
 		}
 
         [TestCase()]
-		public void HEV_P3_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_P3))]
+        public void HEV_P3_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.P3)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P3));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P3), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void HEV_P4_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.HEV_P4))]
+        public void HEV_P4_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.HEV(ArchitectureID.P4)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P4));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.HEV_P4), expectedDataAdapter);
 		}
 
 
 		[TestCase()]
-		public void PEV_E2_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.PEV_E2))]
+        public void PEV_E2_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.PEV(ArchitectureID.E2)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E2));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E2), expectedDataAdapter);
 		}
 
 
 		[TestCase()]
-		public void PEV_E3_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.PEV_E3))]
+        public void PEV_E3_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.PEV(ArchitectureID.E3)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E3));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E3), expectedDataAdapter);
 		}
 		[TestCase()]
-		public void PEV_E4_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.PEV_E4))]
+        public void PEV_E4_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.PEV(ArchitectureID.E4)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E4));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E4), expectedDataAdapter);
 		}
 
 		[TestCase()]
-		public void PEV_E_IEPC_PrimaryBus()
+		[TestCase(typeof(DeclarationDataAdapterPrimaryBus.PEV_E_IEPC))]
+        public void PEV_E_IEPC_PrimaryBus(Type expectedDataAdapter = null)
 		{
 			var input = new Mock<IDeclarationInputDataProvider>()
 				.PEV(ArchitectureID.E_IEPC)
 				.PrimaryBus();
-			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E_IEPC));
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.PEV_E_IEPC), expectedDataAdapter);
 		}
 
+
+		[Test]
+		public void Exempted_PrimaryBusTest([Values] ArchitectureID architectureId, [Values] VectoSimulationJobType simType)
+		{
+			var input = new Mock<IDeclarationInputDataProvider>()
+				.Exempted()
+				.PrimaryBus();
+
+			input.Setup(m => m.JobInputData.JobType).Returns(simType);
+			input.Setup(m => m.JobInputData.Vehicle.ArchitectureID).Returns(architectureId);
+			CreateRunDataFactory(input, typeof(DeclarationModePrimaryBusRunDataFactory.Exempted), null);
+
+		}
+
+
         #endregion PrimaryBus
-		#region CompletedBus
+        #region CompletedBus
         [TestCase()]
-        public void ConventionalCompletedBus()
+		[TestCase(true)]
+        public void ConventionalCompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .Conventional()
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.Conventional));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.Conventional));
+			if(checkCompletedBusAdapters){
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.Conventional), 
+				typeof(DeclarationDataAdapterSpecificCompletedBus.Conventional));
+			}
+
         }
 
         [TestCase()]
-        public void HEV_S2_CompletedBus()
+		[TestCase(true)]
+        public void HEV_S2_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.S2)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S2));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S2));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_S2),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_S2));
+			}
+
         }
 
         [TestCase()]
-        public void HEV_S3_CompletedBus()
+		[TestCase(true)]
+        public void HEV_S3_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.S3)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S3));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S3));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_S3),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_S3));
+			}
         }
 
         [TestCase()]
-        public void HEV_S4_CompletedBus()
+		[TestCase(true)]
+        public void HEV_S4_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.S4)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S4));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S4));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_S4),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_S4));
+			}
         }
 
         [TestCase()]
-        public void HEV_S_IEPC_CompletedBus()
+		[TestCase(true)]
+        public void HEV_S_IEPC_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.S_IEPC)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S_IEPC));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S_IEPC));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_S_IEPC),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_S_IEPC));
+			}
         }
 
         [TestCase()]
-        public void HEV_P1_CompletedBus()
+		[TestCase(true)]
+        public void HEV_P1_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.P1)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P1));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P1));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_P1),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_P1));
+			}
         }
 
 
         [TestCase()]
-        public void HEV_P2_CompletedBus()
+		[TestCase(true)]
+        public void HEV_P2_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.S2)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_S2));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P2));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_P2),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_P2));
+			}
         }
 
 
         [TestCase()]
-        public void HEV_P3_CompletedBus()
+		[TestCase(true)]
+        public void HEV_P3_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.P3)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P3));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P3));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_P3),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_P3));
+			}
         }
 
 
         [TestCase()]
-        public void HEV_P2_5_CompletedBus()
+		[TestCase(true)]
+        public void HEV_P2_5_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.P2_5)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P2_5));
+			var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P2_5));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_P2_5),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_P2_5));
+			}
         }
 
 
         [TestCase()]
-        public void HEV_P4_CompletedBus()
+		[TestCase(true)]
+        public void HEV_P4_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .HEV(ArchitectureID.P4)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P4));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.HEV_P4));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.HEV_P4),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.HEV_P4));
+			}
         }
 
 
         [TestCase()]
-        public void PEV_E2_CompletedBus()
+		[TestCase(true)]
+        public void PEV_E2_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .PEV(ArchitectureID.E2)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E2));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E2));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.PEV_E2),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.PEV_E2));
+			}
         }
 
 
         [TestCase()]
-        public void PEV_E3_CompletedBus()
+		[TestCase(true)]
+        public void PEV_E3_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .PEV(ArchitectureID.E3)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E3));
+			var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E3));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.PEV_E3),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.PEV_E3));
+			}
         }
         [TestCase()]
-        public void PEV_E4_CompletedBus()
+		[TestCase(true)]
+        public void PEV_E4_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .PEV(ArchitectureID.E4)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E4));
+			var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E4));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.PEV_E4),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.PEV_E4));
+			}
         }
 
         [TestCase()]
-        public void PEV_E_IEPC_CompletedBus()
+		[TestCase(true)]
+        public void PEV_E_IEPC_CompletedBus(bool checkCompletedBusAdapters = false)
         {
             var input = new Mock<IMultistageVIFInputData>()
                 .PEV(ArchitectureID.E_IEPC)
                 .CompletedBus();
-            CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E_IEPC));
+            var fact = CreateRunDataFactory(input, typeof(DeclarationModeCompletedBusRunDataFactory.PEV_E_IEPC));
+			if (checkCompletedBusAdapters)
+			{
+				CheckCompletedBusAdapters(fact, typeof(DeclarationDataAdapterGenericCompletedBus.PEV_E_IEPC),
+					typeof(DeclarationDataAdapterSpecificCompletedBus.PEV_E_IEPC));
+			}
+
         }
         #endregion CompletedBus
     }
diff --git a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
index 0dbc656f2cd038a38be872715789ae68e9e4bc9e..9018b6bc2fe7cfecb697ee3e20855c60b44cd8a3 100644
--- a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
+++ b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
@@ -15,6 +15,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.PrimaryBus;
 using TUGraz.VectoCore.InputData.Reader.Impl;
 using TUGraz.VectoCore.Models.BusAuxiliaries;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;