diff --git a/VectoCore/VectoCore/InputData/IVectoRunDataFactoryFactory.cs b/VectoCore/VectoCore/InputData/IVectoRunDataFactoryFactory.cs
deleted file mode 100644
index 9a992a969f40307b5ba8efe3b2f4545d0b2ec4a7..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/InputData/IVectoRunDataFactoryFactory.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TUGraz.VectoCore.InputData
-{
-    public interface IVectoRunDataFactoryFactory
-    {
-
-    }
-}
diff --git a/VectoCore/VectoCore/InputData/Reader/IVectoRunDataFactoryFactory.cs b/VectoCore/VectoCore/InputData/Reader/IVectoRunDataFactoryFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b928e4a345969269f4d7f51de04f8e17ff017d04
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/IVectoRunDataFactoryFactory.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JetBrains.Annotations;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.InputData
+{
+    public interface IVectoRunDataFactoryFactory
+    {
+		IVectoRunDataFactory CreateEngineeringRunDataFactory(IEngineeringInputDataProvider inputDataProvider);
+
+		/// <summary>
+		/// Creates a VectoRunDataFactory based on the type of inputDataProvider
+		/// </summary>
+		/// <param name="inputDataProvider"></param>
+		/// <param name="report"></param>
+		/// <returns></returns>
+		IVectoRunDataFactory CreateDeclarationRunDataFactory([NotNull] IInputDataProvider inputDataProvider,
+			IDeclarationReport report, IVTPReport vtpReport);
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e138534474e60d42e74530eba9de56b419d4f530
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryFactory.cs
@@ -0,0 +1,125 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JetBrains.Annotations;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.OutputData.XML;
+
+namespace TUGraz.VectoCore.InputData.Reader
+{
+    public class VectoRunDataFactoryFactory : IVectoRunDataFactoryFactory
+	{
+		/// <summary>
+		/// Creates a VectoRunDataFactory based on the type of inputDataProvider
+		/// </summary>
+		/// <param name="inputDataProvider"></param>
+		/// <param name="report"></param>
+		/// <returns></returns>
+		public IVectoRunDataFactory CreateDeclarationRunDataFactory([NotNull] IInputDataProvider inputDataProvider,
+			IDeclarationReport report, IVTPReport vtpReport)
+		{
+			if (inputDataProvider == null)
+				throw new ArgumentNullException(nameof(inputDataProvider));
+
+			switch (inputDataProvider)
+			{
+				case IVTPDeclarationInputDataProvider vtpProvider:
+					return CreateRunDataReader(vtpProvider, vtpReport);
+				case ISingleBusInputDataProvider singleBusProvider:
+					return CreateRunDataReader(singleBusProvider, report);
+				case IDeclarationInputDataProvider declDataProvider:
+					return CreateRunDataReader(declDataProvider, report);
+				case IMultistageVIFInputData multistageVifInputData:
+					return CreateRunDataReader(multistageVifInputData, report);
+				default:
+					break;
+			}
+			throw new VectoException("Unknown InputData for Declaration Mode!");
+		}
+
+
+		private IVectoRunDataFactory CreateRunDataReader(IMultistageVIFInputData multistageVifInputData, IDeclarationReport report)
+		{
+			if (multistageVifInputData.VehicleInputData == null) {
+				return new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
+					multistageVifInputData.MultistageJobInputData,
+					report);
+			}
+			else {
+				CastReport<DeclarationModeMultistageBusVectoRunDataFactory>(report);
+				return new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report);
+			}
+		}
+
+		private IVectoRunDataFactory CreateRunDataReader(IDeclarationInputDataProvider declDataProvider, IDeclarationReport report)
+		{
+			var vehicleCategory = declDataProvider.JobInputData.Vehicle.VehicleCategory;
+			if (vehicleCategory.IsLorry()) {
+				return new DeclarationModeTruckVectoRunDataFactory(declDataProvider, report);
+			}
+
+			if (vehicleCategory.IsBus())
+				switch (declDataProvider.JobInputData.Vehicle.VehicleCategory)
+				{
+					case VehicleCategory.HeavyBusCompletedVehicle:
+						return new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, report);
+					case VehicleCategory.HeavyBusPrimaryVehicle:
+						return new DeclarationModePrimaryBusVectoRunDataFactory(declDataProvider, report);
+					default:
+						break;
+				}
+
+			throw new Exception(
+				$"Could not create RunDataFactory for Vehicle Category{vehicleCategory}");
+		}
+
+		private IVectoRunDataFactory CreateRunDataReader(IVTPDeclarationInputDataProvider vtpProvider, IDeclarationReport report)
+		{
+			var vtpReport = CastReport<IVTPReport>(report);
+
+			if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry())
+			{
+				return new DeclarationVTPModeVectoRunDataFactoryLorries(vtpProvider, vtpReport);
+			}
+
+			if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus())
+			{
+				return new DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider, vtpReport);
+			}
+			
+
+			throw new Exception(
+				$"Could not create RunDataFactory for Vehicle Category{vtpProvider.JobInputData.Vehicle.VehicleCategory}");
+		}
+
+		private IVectoRunDataFactory CreateRunDataReader(ISingleBusInputDataProvider singleBusProvider, IDeclarationReport report)
+		{
+			return new DeclarationModeSingleBusVectoRunDataFactory(singleBusProvider, report);
+		}
+
+
+
+
+		public IVectoRunDataFactory CreateEngineeringRunDataFactory(IEngineeringInputDataProvider inputDataProvider)
+		{
+			throw new NotImplementedException();
+		}
+
+		private T CastReport<T>(object report)
+		{
+			if (report is T castedReport) {
+				return castedReport;
+			} else {
+				throw new VectoException("Error creating VectoRunDataFactory - wrong ReportType");
+				//return null;
+			}
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7bc75be024efa0c23b34e5d4f3ab1bfbf586a264
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/VectoRunDataFactoryNinjectModule.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Ninject.Modules;
+
+namespace TUGraz.VectoCore.InputData.Reader
+{
+    class VectoRunDataFactoryNinjectModule : NinjectModule
+    {
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<IVectoRunDataFactoryFactory>().To<VectoRunDataFactoryFactory>().InSingletonScope();
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
index 6d5135be918e460bafdded1cdbdd832eb0737d24..20cce3d9efe1c6cc84bd5e73e4c854950c63ff2d 100644
--- a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
+++ b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
@@ -44,7 +44,7 @@ using TUGraz.VectoHashing;
 
 namespace TUGraz.VectoCore.Models.Simulation
 {
-	public class SimulationFactoryNinjectModule : VectoNinjectModule
+	public class SimulatorFactoryNinjectModule : VectoNinjectModule
 	{
 		#region Overrides of NinjectModule
 
diff --git a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs
index 73361e4525fd39b46e21fad46f30903d8ca43296..3f0baeffc70462b2e8adc5a16c6b7e6a2b631675 100644
--- a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs
+++ b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs
@@ -31,6 +31,7 @@
 
 using Ninject.Modules;
 using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.InputData.Reader;
 using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.OutputData.XML;
 using TUGraz.VectoCore.OutputData.XML.ComponentWriter;
@@ -60,10 +61,12 @@ namespace TUGraz.VectoCore
 
 			LoadModule<XMLEngineeringWriterInjectModule>();
 
-			LoadModule<SimulationFactoryNinjectModule>();
+			LoadModule<SimulatorFactoryNinjectModule>();
 
 			LoadModule<XMLDeclarationReportFactoryNinjectModule>();
 
+			LoadModule<VectoRunDataFactoryNinjectModule>();
+
 			LoadModule<GroupWriterNinjectModule>();
 
 			LoadModule<ComponentWriterNinjectModule>();
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 672a39bd589d3998794176dae7a5c9f6071791e3..9e48b4ef3c7b41ac5dda0409ea7373ede383d3e8 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -282,9 +282,11 @@
     <Compile Include="InputData\FileIO\XML\Declaration\IXMLDeclarationInputDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\IXMLInputDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\XMLInputDataNinjectModule.cs" />
-    <Compile Include="InputData\IVectoRunDataFactoryFactory.cs" />
+    <Compile Include="InputData\Reader\IVectoRunDataFactoryFactory.cs" />
     <Compile Include="InputData\Reader\ComponentData\BatteryInternalResistanceReader.cs" />
     <Compile Include="InputData\Reader\ComponentData\BatteryMaxCurrentReader.cs" />
+    <Compile Include="InputData\Reader\VectoRunDataFactoryFactory.cs" />
+    <Compile Include="InputData\Reader\VectoRunDataFactoryNinjectModule.cs" />
     <Compile Include="Models\SimulationComponent\Impl\BatterySystem.cs" />
     <Compile Include="Models\SimulationComponent\Impl\PTODriveAuxiliary.cs" />
     <Compile Include="Models\SimulationComponent\Impl\RoadSweeperAuxiliary.cs" />