diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb
index 97a83102913813ce33a974cd8c99a29975983961..b42ea57526f0b915dcbddf8d245f0e5968f80048 100644
--- a/VECTO/GUI/MainForm.vb
+++ b/VECTO/GUI/MainForm.vb
@@ -48,6 +48,7 @@ Imports TUGraz.VectoCommon.Resources
 Imports TUGraz.VectoCommon.Utils
 Imports TUGraz.VectoCore
 Imports TUGraz.VectoCore.InputData.FileIO.XML
+Imports TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
 Imports TUGraz.VectoCore.Models.SimulationComponent.Data
 Imports TUGraz.VectoCore.OutputData
 Imports TUGraz.VectoCore.OutputData.FileIO
@@ -58,7 +59,7 @@ Imports TUGraz.VectoCore.Utils
 ''' </summary>
 ''' <remarks></remarks>
 
-    Public Class MainForm
+Public Class MainForm
     Private _jobListView As FileListView
     Private _cycleListView As FileListView
 
@@ -76,7 +77,7 @@ Imports TUGraz.VectoCore.Utils
 
 #Region "SLEEP Control - Prevent sleep while VECTO is running"
 
-    Private Declare Function SetThreadExecutionState Lib "kernel32"(esFlags As Long) As Long
+    Private Declare Function SetThreadExecutionState Lib "kernel32" (esFlags As Long) As Long
 
     Private Shared Sub AllowSleepOff()
 #If Not PLATFORM = "x86" Then
@@ -117,7 +118,7 @@ Imports TUGraz.VectoCore.Utils
         JobfileFileBrowser = New FileBrowser("vecto")
         VehicleFileBrowser = New FileBrowser("vveh")
         VehicleXMLFileBrowser = New FileBrowser("vveh_xml")
-        ManRXMLFileBrowser = new FileBrowser("xml")
+        ManRXMLFileBrowser = New FileBrowser("xml")
         FuelConsumptionMapFileBrowser = New FileBrowser("vmap")
         DrivingCycleFileBrowser = New FileBrowser("vdri")
         FullLoadCurveFileBrowser = New FileBrowser("vfld")
@@ -137,7 +138,7 @@ Imports TUGraz.VectoCore.Utils
         CrossWindCorrectionFileBrowser = New FileBrowser("vcdx")
         ElectricMotorFileBrowser = New FileBrowser("vem")
         REESSFileBrowser = New FileBrowser("vreess")
-        EmADCLossMapFileBrowser = new FileBrowser("vtlm")
+        EmADCLossMapFileBrowser = New FileBrowser("vtlm")
         DriverDecisionFactorVelocityDropFileBrowser = New FileBrowser("DfVelocityDrop")
         DriverDecisionFactorTargetSpeedFileBrowser = New FileBrowser("DfTargetSpeed")
         DriverDecisionFactorVelocityDropFileBrowser.Extensions = New String() {"csv"}
@@ -147,12 +148,12 @@ Imports TUGraz.VectoCore.Utils
         ElectricMachineMaxTorqueFileBrowser = New FileBrowser("vemp")
         ElectricMachineEfficiencyMapFileBrowser = New FileBrowser("vemo")
         HCUFileBrowser = New FileBrowser("vhctl")
-        BusAuxFileBrowser = new FileBrowser(".vaux")
-        BusAuxCompressorMapFileBrowser = new FileBrowser(".acmp")
-        BatteryMaxCurrentCurveFileBrowser = new FileBrowser("vimax")
+        BusAuxFileBrowser = New FileBrowser(".vaux")
+        BusAuxCompressorMapFileBrowser = New FileBrowser(".acmp")
+        BatteryMaxCurrentCurveFileBrowser = New FileBrowser("vimax")
         BatteryInternalResistanceCurveFileBrowser = New FileBrowser("vbatr")
         BatterySoCCurveFileBrowser = New FileBrowser("vbatv")
-        PropulsionTorqueLimitFileBrowser = new FileBrowser("vtqp")
+        PropulsionTorqueLimitFileBrowser = New FileBrowser("vtqp")
         ModalResultsFileBrowser = New FileBrowser("vmod")
 
 
@@ -175,25 +176,25 @@ Imports TUGraz.VectoCore.Utils
         TransmissionLossMapFileBrowser.Extensions = New String() {"vtlm"}
         PtoLossMapFileBrowser.Extensions = New String() {"vptol"}
         PTODrivingCycleStandstillFileBrowser.Extensions = New String() {"vptoc"}
-        PTODrivingCycleDrivingFileBrowser.Extensions = New String() { "vptor" }
+        PTODrivingCycleDrivingFileBrowser.Extensions = New String() {"vptor"}
         TorqueConverterFileBrowser.Extensions = New String() {"vtcc"}
         TorqueConverterShiftPolygonFileBrowser.Extensions = New String() {"vgbs"}
         CrossWindCorrectionFileBrowser.Extensions = New String() {"vcdv", "vcdb"}
         ElectricMotorFileBrowser.Extensions = New String() {"vem"}
         REESSFileBrowser.Extensions = New String() {"vreess"}
-        EmADCLossMapFileBrowser.Extensions = new String(){"vtlm"}
+        EmADCLossMapFileBrowser.Extensions = New String() {"vtlm"}
 
         ElectricMachineDragTorqueFileBrowser.Extensions = New String() {"vemd"}
         ElectricMachineMaxTorqueFileBrowser.Extensions = New String() {"vemp"}
         ElectricMachineEfficiencyMapFileBrowser.Extensions = New String() {"vemo"}
 
-        BatteryMaxCurrentCurveFileBrowser.Extensions = new String() {"vimax"}
+        BatteryMaxCurrentCurveFileBrowser.Extensions = New String() {"vimax"}
         BatteryInternalResistanceCurveFileBrowser.Extensions = New String() {"vbatr"}
         BatterySoCCurveFileBrowser.Extensions = New String() {"vbatv"}
         HCUFileBrowser.Extensions = New String() {"vhctl"}
-        BusAuxFileBrowser.Extensions = New String(){"vaux"}
-        BusAuxCompressorMapFileBrowser.Extensions = new String(){"acmp"}
-        PropulsionTorqueLimitFileBrowser.Extensions = new String(){"vtqp"}
+        BusAuxFileBrowser.Extensions = New String() {"vaux"}
+        BusAuxCompressorMapFileBrowser.Extensions = New String() {"acmp"}
+        PropulsionTorqueLimitFileBrowser.Extensions = New String() {"vtqp"}
 
         ModalResultsFileBrowser.Extensions = New String() {"vmod"}
     End Sub
@@ -268,17 +269,17 @@ Imports TUGraz.VectoCore.Utils
 
 
         'FileLists
-        _jobListView = New FileListView(path.Combine(MyConfPath, CONFIG_JOBLIST_FILE))
+        _jobListView = New FileListView(Path.Combine(MyConfPath, CONFIG_JOBLIST_FILE))
         _jobListView.LVbox = LvGEN
-        _cycleListView = New FileListView(path.Combine(MyConfPath, CONFIG_CYCLELIST_FILE))
+        _cycleListView = New FileListView(Path.Combine(MyConfPath, CONFIG_CYCLELIST_FILE))
 
         _jobListView.LoadList()
 
         LoadOptions()
 
         'Resize columns ... after Loading the @file-lists
-        LvGEN.Columns(1).Width = - 2
-        LvMsg.Columns(2).Width = - 2
+        LvGEN.Columns(1).Width = -2
+        LvMsg.Columns(2).Width = -2
 
         'Initialize BackgroundWorker
 
@@ -540,7 +541,7 @@ Imports TUGraz.VectoCore.Utils
 
         lastindx = LvGEN.SelectedIndices(LvGEN.SelectedItems.Count - 1)
 
-        For i = UBound(selIx) To 0 Step - 1
+        For i = UBound(selIx) To 0 Step -1
             LvGEN.Items.RemoveAt(selIx(i))
         Next
 
@@ -609,14 +610,14 @@ Imports TUGraz.VectoCore.Utils
         Dim p As Integer
         Dim f As Integer
         Dim fList As String()
-        Dim fListDim As Integer = - 1
+        Dim fListDim As Integer = -1
         Dim listViewItem As ListViewItem
 
         'If VECTO runs: Cancel operation (because Mode-change during calculation is not very clever)
         If VectoWorkerV3.IsBusy Then Exit Sub
 
         pDim = UBound(path)
-        ReDim fList(0)	   'um Nullverweisausnahme-Warnung zu verhindern
+        ReDim fList(0)     'um Nullverweisausnahme-Warnung zu verhindern
 
         '******************************************* Begin Update '*******************************************
         LvGEN.BeginUpdate()
@@ -658,13 +659,13 @@ Imports TUGraz.VectoCore.Utils
             End If
 
             'Otherwise: Add File (without WorkDir)
-            listViewItem = New ListViewItem(path(p))	'fFileWD(Path(p)))
+            listViewItem = New ListViewItem(path(p))    'fFileWD(Path(p)))
             listViewItem.SubItems.Add(" ")
             listViewItem.Checked = True
             listViewItem.Selected = True
             LvGEN.Items.Add(listViewItem)
             listViewItem.EnsureVisible()
-            lbFound:
+lbFound:
         Next
 
         LvGEN.EndUpdate()
@@ -936,8 +937,8 @@ Imports TUGraz.VectoCore.Utils
             Status("Launching VECTO ...")
             JobFileList.Clear()
             JobFileList.AddRange(
-                From listViewItem As ListViewItem In LvGEN.CheckedItems.Cast (Of ListViewItem)()
-                                    Select fFileRepl = FileRepl(listViewItem.SubItems(0).Text))
+                From listViewItem As ListViewItem In LvGEN.CheckedItems.Cast(Of ListViewItem)()
+                Select fFileRepl = FileRepl(listViewItem.SubItems(0).Text))
 
             SetOptions()
             Cfg.Save()
@@ -977,7 +978,7 @@ Imports TUGraz.VectoCore.Utils
             mode = ExecutionMode.Declaration
         Else
             mode = ExecutionMode.Engineering
-            Physics.AirDensity = Cfg.AirDensity.SI (Of KilogramPerCubicMeter)()
+            Physics.AirDensity = Cfg.AirDensity.SI(Of KilogramPerCubicMeter)()
         End If
 
         'dictionary of run-identifiers to fileWriters (used for output directory of modfile)
@@ -998,16 +999,16 @@ Imports TUGraz.VectoCore.Utils
                     Case VectoCore.Configuration.Constants.FileExtensions.VectoJobFile
                         input = JSONInputDataFactory.ReadJsonJob(jobFile)
                     Case ".xml"
-                        Dim xDocument As XDocument = xDocument.Load(jobFile)
+                        Dim xDocument As XDocument = XDocument.Load(jobFile)
                         Dim rootNode As String = If(xDocument Is Nothing, "", xDocument.Root.Name.LocalName)
-                        Dim kernel as IKernel = New StandardKernel(new VectoNinjectModule)
-                        Dim xmlInputReader as IXMLInputDataReader = kernel.Get(Of IXMLInputDataReader)
+                        Dim kernel As IKernel = New StandardKernel(New VectoNinjectModule)
+                        Dim xmlInputReader As IXMLInputDataReader = kernel.Get(Of IXMLInputDataReader)
                         Select Case rootNode
                             Case XMLNames.VectoInputEngineering
                                 input = xmlInputReader.CreateEngineering(jobFile)
                             Case XMLNames.VectoInputDeclaration
                                 Using reader As XmlReader = XmlReader.Create(jobFile)
-                                input = xmlInputReader.CreateDeclaration(reader)
+                                    input = xmlInputReader.CreateDeclaration(reader)
                                 End Using
                         End Select
                 End Select
@@ -1023,7 +1024,7 @@ Imports TUGraz.VectoCore.Utils
                 Dim outFile As String = GetOutputDirectory(jobFile)
                 Dim fileWriter As FileOutputWriter = New FileOutputWriter(outFile)
 
-                Dim runsFactory As SimulatorFactory = New SimulatorFactory(mode, input, fileWriter)
+                Dim runsFactory As SimulatorFactory = SimulatorFactory.CreateSimulatorFactory(mode, input, fileWriter)
                 runsFactory.WriteModalResults = Cfg.ModOut
                 runsFactory.ModalResults1Hz = Cfg.Mod1Hz
                 runsFactory.Validate = cbValidateRunData.Checked
diff --git a/VECTO3GUI/ViewModel/Impl/JoblistViewModel.cs b/VECTO3GUI/ViewModel/Impl/JoblistViewModel.cs
index c585f453b3cedc8375a678434285db1865248911..52a9163b9cddf4f2901d4de46ae1e3d655d24d88 100644
--- a/VECTO3GUI/ViewModel/Impl/JoblistViewModel.cs
+++ b/VECTO3GUI/ViewModel/Impl/JoblistViewModel.cs
@@ -28,6 +28,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
@@ -932,13 +933,12 @@ namespace VECTO3GUI.ViewModel.Impl
 					}
 
 					var fileWriter = new FileOutputWriter(GetOutputDirectory(fullFileName));
-					var runsFactory = new SimulatorFactory(mode, input, fileWriter) {
-						WriteModalResults = WriteModData,
-						ModalResults1Hz = WriteModData1Hz,
-						Validate = ValidateData,
-						ActualModalData = WriteActualModData,
-						SerializeVectoRunData = WriteModelData
-					};
+					var runsFactory = SimulatorFactory.CreateSimulatorFactory(mode, input, fileWriter);
+					runsFactory.WriteModalResults = WriteModData;
+					runsFactory.ModalResults1Hz = WriteModData1Hz;
+					runsFactory.Validate = ValidateData;
+					runsFactory.ActualModalData = WriteActualModData;
+					runsFactory.SerializeVectoRunData = WriteModelData;
 					foreach (var runId in jobContainer.AddRuns(runsFactory)) {
 						fileWriters.Add(runId, fileWriter);
 					}
diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs
index 9c39912ea0b77d2a56c07444770f97ad86cfbc4f..21f936fb99193c2107f54669469e4da0b438a575 100644
--- a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs
@@ -28,6 +28,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Utils;
@@ -517,14 +518,12 @@ namespace VECTO3GUI2020.ViewModel.Implementation
 					}
 
 					var fileWriter = new FileOutputWriter(GetOutputDirectory(fullFileName));
-					var runsFactory = new SimulatorFactory(mode, input, fileWriter)
-					{
-						WriteModalResults = Settings.Default.WriteModalResults,
-						ModalResults1Hz = Settings.Default.ModalResults1Hz,
-						Validate = Settings.Default.Validate,
-						ActualModalData = Settings.Default.ActualModalData,
-						SerializeVectoRunData = Settings.Default.SerializeVectoRunData,
-					};
+					var runsFactory = SimulatorFactory.CreateSimulatorFactory(mode, input, fileWriter);
+					runsFactory.WriteModalResults = Settings.Default.WriteModalResults;
+					runsFactory.ModalResults1Hz = Settings.Default.ModalResults1Hz;
+					runsFactory.Validate = Settings.Default.Validate;
+					runsFactory.ActualModalData = Settings.Default.ActualModalData;
+					runsFactory.SerializeVectoRunData = Settings.Default.SerializeVectoRunData;
 
 					var stopwatch = new Stopwatch();
 					stopwatch.Start();
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
index a243599e2655138e5bde6392c60217abc0445417..6ef16df4754cfe923802acce507e565b1c0809c3 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
@@ -20,6 +20,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Utils;
@@ -216,7 +217,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 				var inputData =
 					new XMLDeclarationVIFInputData(vifData.MultistageJobInputData, vifData.VehicleInputData);
 
-				var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+				var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
 
 				var jobContainer = new JobContainer(new NullSumWriter());
 
diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs
index 0df22028197a780a4d8dfafa519711cafb79cd18..50155f95b51c7a8408d6658b0b981fafc62c6f27 100644
--- a/VectoConsole/Program.cs
+++ b/VectoConsole/Program.cs
@@ -50,6 +50,7 @@ using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Utils;
@@ -227,12 +228,11 @@ Examples:
 					}
 
 					fileWriter = new FileOutputWriter(file);
-					var runsFactory = new SimulatorFactory(mode, dataProvider, fileWriter) {
-						ModalResults1Hz = args.Contains("-1Hz"),
-						WriteModalResults = args.Contains("-mod"),
-						ActualModalData = args.Contains("-act"),
-						Validate = !args.Contains("-nv"),
-					};
+					var runsFactory = SimulatorFactory.CreateSimulatorFactory(mode, dataProvider, fileWriter);
+					runsFactory.ModalResults1Hz = args.Contains("-1Hz");
+					runsFactory.WriteModalResults = args.Contains("-mod");
+					runsFactory.ActualModalData = args.Contains("-act");
+					runsFactory.Validate = !args.Contains("-nv");
 
 					_jobContainer.AddRuns(runsFactory);
 				}
diff --git a/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs
index a224c48515fe629561d04cad86cf6af75a174e65..8e8617343ecec3c4db78f9a91822244d6fc61316 100644
--- a/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs
@@ -38,7 +38,13 @@ namespace TUGraz.VectoCore.Models.Simulation
 	public interface ISimulatorFactoryFactory
 	{
 		ISimulatorFactory Factory(
-			ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer,
-			IDeclarationReport declarationReport = null, IVTPReport vtpReport = null, bool validate = true);
+			ExecutionMode mode, IInputDataProvider dataProvider,
+			IOutputDataWriter writer);
+
+		ISimulatorFactory Factory(IInputDataProvider dataProvider,
+			IOutputDataWriter writer,
+			IDeclarationReport declarationReport = null,
+			IVTPReport vtpReport = null,
+			bool validate = true);
 	}
 }
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
deleted file mode 100644
index cf6112ccc43e7c09e50eb9f442fa2c8936989829..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Threading;
-using System.Xml;
-using Castle.DynamicProxy.Generators.Emitters.SimpleAST;
-using Newtonsoft.Json;
-using Ninject;
-using TUGraz.VectoCommon.BusAuxiliaries;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData;
-using TUGraz.VectoCore.InputData.FileIO.XML;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
-using TUGraz.VectoCore.InputData.Reader.Impl;
-using TUGraz.VectoCore.Models.Declaration;
-using TUGraz.VectoCore.Models.Simulation.Data;
-using TUGraz.VectoCore.Models.SimulationComponent.Data;
-using TUGraz.VectoCore.OutputData;
-using TUGraz.VectoCore.OutputData.FileIO;
-using TUGraz.VectoCore.OutputData.ModFilter;
-using TUGraz.VectoCore.OutputData.XML;
-using Formatting = Newtonsoft.Json.Formatting;
-
-namespace TUGraz.VectoCore.Models.Simulation.Impl
-{
-	public class SimulatorFactory : LoggingObject, ISimulatorFactory
-	{
-		private static int _jobNumberCounter;
-		
-		private readonly ExecutionMode _mode;
-
-		private Func<ISimulatorFactory> _followingSimulatorFactoryCreator = null;
-
-		private bool _simulate = true;
-
-		public ISimulatorFactory FollowUpSimulatorFactory
-		{
-			get => CreateFollowUpSimulatorFactory ? _followingSimulatorFactoryCreator?.Invoke() : null;
-		}
-
-		public bool CreateFollowUpSimulatorFactory = false;
-		
-
-
-
-		public SimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer) : this(mode, dataProvider, writer, null, null, true)
-		{
-			
-		}
-
-		public SimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer,
-			IDeclarationReport declarationReport = null, IVTPReport vtpReport = null, bool validate = true)
-		{
-			System.Diagnostics.Debug.WriteLine("Created Simulator Factory");
-			Log.Info("########## VectoCore Version {0} ##########", Assembly.GetExecutingAssembly().GetName().Version);
-			JobNumber = Interlocked.Increment(ref _jobNumberCounter);
-			_mode = mode;
-			ReportWriter = writer;
-			Validate = validate;
-
-			ThreadPool.GetMinThreads(out var workerThreads, out var completionThreads);
-			if (workerThreads < 12) {
-				workerThreads = 12;
-			}
-			ThreadPool.SetMinThreads(workerThreads, completionThreads);
-
-			switch (mode) {
-				case ExecutionMode.Declaration:
-					CreateDeclarationDataReader(dataProvider, declarationReport, vtpReport);
-					break;
-				case ExecutionMode.Engineering:
-					CreateEngineeringDataReader(dataProvider);
-					break;
-				default:
-					throw new VectoException("Unkown factory mode in SimulatorFactory: {0}", mode);
-			}
-		}
-
-		private void CreateDeclarationDataReader(IInputDataProvider dataProvider, IDeclarationReport declarationReport, IVTPReport vtpReport)
-		{
-			if (dataProvider is IVTPDeclarationInputDataProvider vtpProvider) {
-				var report = vtpReport ?? new XMLVTPReport(ReportWriter);
-				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry()) {
-					DataReader = new DeclarationVTPModeVectoRunDataFactoryLorries(vtpProvider, report);
-				}
-				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus()) {
-					DataReader = new DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider, report);
-				}
-				return;
-			}
-
-			if (dataProvider is ISingleBusInputDataProvider) {
-				var singleBus = dataProvider as ISingleBusInputDataProvider;
-				var report = declarationReport ?? new XMLDeclarationReport(ReportWriter);
-				DataReader = new DeclarationModeSingleBusVectoRunDataFactory(singleBus, report);
-				return;
-			}
-			if (dataProvider is IDeclarationInputDataProvider declDataProvider) {
-				if (declDataProvider.JobInputData.Vehicle.VehicleCategory.IsLorry()) {
-					var report = declarationReport ?? new XMLDeclarationReport(ReportWriter);
-					DataReader = new DeclarationModeTruckVectoRunDataFactory(declDataProvider, report);
-					return;
-				}
-
-				switch (declDataProvider.JobInputData.Vehicle.VehicleCategory) {
-					case VehicleCategory.HeavyBusCompletedVehicle:
-						var reportCompleted = declarationReport ??
-											new XMLDeclarationReportCompletedVehicle(ReportWriter,
-												declDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle) {
-												PrimaryVehicleReportInputData = declDataProvider.PrimaryVehicleData,
-						};
-						DataReader = new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, reportCompleted);
-						return;
-					case VehicleCategory.HeavyBusPrimaryVehicle:
-						var reportPrimary = declarationReport ??
-											new XMLDeclarationReportPrimaryVehicle(ReportWriter,
-												declDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
-						DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(declDataProvider, reportPrimary);
-						return;
-					default:
-						System.Diagnostics.Debug.Assert(false);
-						break;
-				}
-			}
-
-			if (dataProvider is IMultistageVIFInputData multistageVifInputData) {
-				//ToDo FK: check if data completed == true && final 
-				var inputComplete = multistageVifInputData.MultistageJobInputData.JobInputData.InputComplete;
-				var declType = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage
-					?.Vehicle.VehicleDeclarationType;
-				var final = declType == VehicleDeclarationType.final;
-				var exempted = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage?
-					.Vehicle.ExemptedVehicle == true;
-
-
-				if (multistageVifInputData.VehicleInputData == null) { // eigener writer für in-memory
-					var reportCompleted = new XMLDeclarationReportCompletedVehicle(ReportWriter, true) {
-						PrimaryVehicleReportInputData = multistageVifInputData.MultistageJobInputData.JobInputData.PrimaryVehicle,
-					};
-					DataReader = new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
-						multistageVifInputData.MultistageJobInputData,
-						reportCompleted);
-					if (!((final || exempted) && inputComplete)) {
-						_simulate = false;
-						//_followingSimulatorFactoryCreator = () => {
-						//	var container = new StandardKernel(
-						//		new VectoNinjectModule()
-						//	);
-						//	var inputDataReader = container.Get<IXMLInputDataReader>();
-
-						//	var mode = _mode;
-						//	var inputData =
-						//		inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter)
-						//			.XMLMultistageReportFileName);
-
-						//	return new SimulatorFactory(
-						//		mode: _mode,
-						//		dataProvider: new XMLDeclarationVIFInputData(
-						//			inputData as IMultistageBusInputDataProvider, null),
-						//		writer: ReportWriter,
-						//		declarationReport: reportCompleted, 
-						//		vtpReport: vtpReport,
-						//		validate: Validate);
-
-						//};
-					}
-
-				} else {
-					var report = declarationReport ?? new XMLDeclarationReportMultistageBusVehicle(ReportWriter);
-					DataReader = new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report);
-
-					_followingSimulatorFactoryCreator = () => {
-							var container = new StandardKernel(
-								new VectoNinjectModule()
-							);
-							var inputDataReader = container.Get<IXMLInputDataReader>();
-
-							var mode = _mode;
-							var inputData =
-								inputDataReader.CreateDeclaration(
-									XmlReader.Create(ReportWriter.MultistageXmlReport.ToString().ToStream()));
-								//inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter)
-								//	.XMLMultistageReportFileName);
-							return new SimulatorFactory(_mode, new XMLDeclarationVIFInputData(inputData as IMultistageBusInputDataProvider, null), ReportWriter, report, vtpReport, Validate) {
-								
-							};
-					};
-
-				}
-				return;
-			}
-
-			if (dataProvider is IMultistagePrimaryAndStageInputDataProvider multiStagePrimaryAndStageInputData)
-			{
-				System.Diagnostics.Debug.Assert(multiStagePrimaryAndStageInputData.PrimaryVehicle.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
-
-				var tempOutputWriter = new TempFileOutputWriter(ReportWriter, ReportType.DeclarationReportManufacturerXML);
-				var originalReportWriter = ReportWriter;
-				ReportWriter = tempOutputWriter;
-
-				var tempPrimaryReport = new XMLDeclarationReportPrimaryVehicle(tempOutputWriter, true);
-				
-				DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(multiStagePrimaryAndStageInputData.PrimaryVehicle, tempPrimaryReport);
-
-				var reportPrimary = new XMLDeclarationReportPrimaryVehicle(ReportWriter,
-										true);
-				
-				CreateFollowUpSimulatorFactory = true;
-				_followingSimulatorFactoryCreator = (() => {
-					//replace with dependency injection 
-					var container = new StandardKernel(
-						new VectoNinjectModule()
-					);
-					try {
-						var inputDataReader = container.Get<IXMLInputDataReader>();
-						var primaryInputData = inputDataReader.CreateDeclaration(tempOutputWriter
-							.GetDocument(ReportType.DeclarationReportPrimaryVehicleXML).CreateReader());
-						//var primaryInputData = inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter).XMLPrimaryVehicleReportName);
-						var vifInputData = new XMLDeclarationVIFInputData(
-							primaryInputData as IMultistageBusInputDataProvider,
-							multiStagePrimaryAndStageInputData.StageInputData);
-
-						var manStagesCount =
-							vifInputData.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? -1;
-
-						originalReportWriter.NumberOfManufacturingStages = manStagesCount;
-						var factory = new SimulatorFactory(_mode,
-							vifInputData, originalReportWriter,
-							null,
-							vtpReport,
-							Validate) {
-							CreateFollowUpSimulatorFactory = true,
-						};
-						return factory;
-					} catch (Exception ex) {
-						Log.Error($"Failed to create additional Simulation run: {ex.Message}");
-						return null;
-					}
-				});
-				return;
-			}
-
-
-			throw new VectoException("Unknown InputData for Declaration Mode!");
-		}
-
-
-		private void CreateEngineeringDataReader(IInputDataProvider dataProvider)
-		{
-			if (dataProvider is IVTPEngineeringInputDataProvider) {
-				var vtpProvider = dataProvider as IVTPEngineeringInputDataProvider;
-				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry()) {
-					DataReader = new EngineeringVTPModeVectoRunDataFactoryLorries(vtpProvider);
-				}
-				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus()) {
-					DataReader = new EngineeringVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider);
-				}
-				return;
-			}
-			if (dataProvider is IEngineeringInputDataProvider) {
-				var engDataProvider = dataProvider as IEngineeringInputDataProvider;
-				if (engDataProvider.JobInputData.JobType == VectoSimulationJobType.EngineOnlySimulation) {
-					DataReader = new EngineOnlyVectoRunDataFactory(engDataProvider);
-				} else {
-					DataReader = new EngineeringModeVectoRunDataFactory(engDataProvider);
-				}
-				return;
-			}
-			throw  new VectoException("Unknown InputData for Engineering Mode!");
-		}
-
-		public bool Validate { get; set; }
-
-		public IVectoRunDataFactory DataReader { get; private set; }
-
-		public SummaryDataContainer SumData { get; set; }
-
-		public IOutputDataWriter ReportWriter { get; private set; }
-
-		public int JobNumber { get; set; }
-
-		public bool WriteModalResults { get; set; }
-		public bool ModalResults1Hz { get; set; }
-		public bool ActualModalData { get; set; }
-
-		public bool SerializeVectoRunData { get; set; }
-
-		/// <summary>
-		/// Creates powertrain and initializes it with the component's data.
-		/// </summary>
-		/// <returns>new VectoRun Instance</returns>
-		public IEnumerable<IVectoRun> SimulationRuns()
-		{
-			var i = 0;
-			var warning1Hz = false;
-			if (!_simulate) {
-				yield break;
-			}
-			foreach (var data in DataReader.NextRun()) {
-				var current = i++;
-				var d = data;
-				data.JobRunId = current;
-				yield return data.Exempted || data.MultistageRun ? GetExemptedRun(data) : GetNonExemptedRun(data, current, d, ref warning1Hz);
-			}
-		}
-
-		private IVectoRun GetExemptedRun(VectoRunData data)
-		{
-			if (data.Report != null) {
-				data.Report.PrepareResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data);
-			}
-			return new ExemptedRun(new ExemptedRunContainer(data.ExecutionMode) { RunData = data }, modData => {
-				if (data.Report != null) {
-					data.Report.AddResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data, modData);
-				}
-			});
-		}
-
-		private IVectoRun GetNonExemptedRun(VectoRunData data, int current, VectoRunData d, ref bool warning1Hz)
-		{
-			var addReportResult = PrepareReport(data);
-			if (!data.Cycle.CycleType.IsDistanceBased() && ModalResults1Hz && !warning1Hz) {
-				Log.Error("Output filter for 1Hz results is only available for distance-based cycles!");
-				warning1Hz = true;
-			}
-			var fuels = data.EngineData != null ? data.EngineData.Fuels.Select(x => x.FuelData).ToList() : new List<IFuelProperties>();
-			IModalDataContainer modContainer =
-				new ModalDataContainer(
-					data, ReportWriter,
-					_mode == ExecutionMode.Declaration ? addReportResult : null,
-					GetModDataFilter(data)) {
-					WriteModalResults = _mode != ExecutionMode.Declaration || WriteModalResults
-				};
-
-
-			// TODO: MQ 20200410 - Remove for official release!
-			if (SerializeVectoRunData) {
-				File.WriteAllText(
-					Path.Combine(
-						(ReportWriter as FileOutputWriter)?.BasePath ?? "", $"{data.JobName}_{data.Cycle.Name}{data.ModFileSuffix}.json"),
-					JsonConvert.SerializeObject(data, Formatting.Indented));
-			}
-
-			var builder = new PowertrainBuilder(
-				modContainer, modData => {
-					if (SumData != null) {
-						SumData.Write(modData, JobNumber, current, d);
-					}
-				});
-
-			var run = GetVectoRun(data, builder);
-
-			if (Validate) {
-				ValidateVectoRunData(
-					run, data.JobType, data.ElectricMachinesData.FirstOrDefault()?.Item1, data.GearboxData?.Type,
-					data.Mission != null && data.Mission.MissionType.IsEMS());
-			}
-			return run;
-		}
-
-		private IModalDataFilter[] GetModDataFilter(VectoRunData data)
-		{
-			var modDataFilter = ModalResults1Hz
-				? new IModalDataFilter[] { new ModalData1HzFilter() }
-				: null;
-
-			if (ActualModalData) {
-				modDataFilter = new IModalDataFilter[] { new ActualModalDataFilter(), };
-			}
-			return data.Cycle.CycleType.IsDistanceBased() && ModalResults1Hz || ActualModalData ? modDataFilter : null;
-		}
-
-		private void ValidateVectoRunData(VectoRun run, VectoSimulationJobType jobType, PowertrainPosition? emPosition, GearboxType? gearboxtype, bool isEms)
-		{
-			var validationErrors = run.Validate(_mode, jobType, emPosition, gearboxtype, isEms);
-			if (validationErrors.Any()) {
-				throw new VectoException("Validation of Run-Data Failed: " +
-										string.Join("\n", validationErrors.Select(r => r.ErrorMessage + string.Join("; ", r.MemberNames))));
-			}
-		}
-
-		private static VectoRun GetVectoRun(VectoRunData data, PowertrainBuilder builder)
-		{
-			VectoRun run;
-			switch (data.Cycle.CycleType) {
-				case CycleType.DistanceBased:
-					if ((data.SimulationType & SimulationType.DistanceCycle) == 0) {
-						throw new VectoException("Distance-based cycle can not be simulated in {0} mode", data.SimulationType);
-					}
-					run = new DistanceRun(builder.Build(data));
-					break;
-				case CycleType.EngineOnly:
-					if ((data.SimulationType & SimulationType.EngineOnly) == 0) {
-						throw new VectoException("Engine-only cycle can not be simulated in {0} mode", data.SimulationType);
-					}
-					run = new TimeRun(builder.Build(data));
-					break;
-				case CycleType.VTP:
-					if ((data.SimulationType & SimulationType.VerificationTest) == 0) {
-						throw new VectoException("VTP-cycle can not be simulated in {0} mode", data.SimulationType);
-					}
-					run = new TimeRun(builder.Build(data));
-					break;
-
-				case CycleType.PWheel:
-				case CycleType.MeasuredSpeed:
-				case CycleType.MeasuredSpeedGear:
-					if ((data.SimulationType & (SimulationType.PWheel | SimulationType.MeasuredSpeedCycle)) == 0) {
-						throw new VectoException("{1}-cycle can not be simulated in {0} mode", data.SimulationType, data.Cycle.CycleType);
-					}
-					run = new TimeRun(builder.Build(data));
-					break;
-				case CycleType.PTO:
-					throw new VectoException("PTO Cycle can not be used as main cycle!");
-				default:
-					throw new ArgumentOutOfRangeException("CycleType unknown:" + data.Cycle.CycleType);
-			}
-			return run;
-		}
-
-		private static Action<ModalDataContainer> PrepareReport(VectoRunData data)
-		{
-			if (data.Report != null) {
-				data.Report.PrepareResult(data.Loading, data.Mission, data.EngineData.FuelMode, data);
-			}
-			Action<ModalDataContainer> addReportResult = modData => {
-				if (data.Report != null) {
-					data.Report.AddResult(data.Loading, data.Mission, data.EngineData.FuelMode, data, modData);
-				}
-			};
-			return addReportResult;
-		}
-	}
-}
-
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d1c9d384476a0f94368f2a7b92ea8b10d69956a2
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
@@ -0,0 +1,290 @@
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2019 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Threading;
+using System.Xml;
+using Newtonsoft.Json;
+using Ninject;
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
+using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.OutputData.FileIO;
+using TUGraz.VectoCore.OutputData.ModFilter;
+using TUGraz.VectoCore.OutputData.XML;
+using Formatting = Newtonsoft.Json.Formatting;
+
+namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
+{
+	public abstract class SimulatorFactory : LoggingObject, ISimulatorFactory
+	{
+		private static int _jobNumberCounter;
+		
+
+		protected Func<ISimulatorFactory> _followingSimulatorFactoryCreator = null;
+
+		protected bool _simulate = true;
+
+		public ISimulatorFactory FollowUpSimulatorFactory
+		{
+			get => CreateFollowUpSimulatorFactory ? _followingSimulatorFactoryCreator?.Invoke() : null;
+		}
+
+		public bool CreateFollowUpSimulatorFactory = false;
+		protected readonly ExecutionMode _mode;
+
+
+		#region Constructors and Factory Methods to instantiate Instances of SimulatorFactory without NInject (should only be used in Testcases that are not updated yet)
+
+		[Obsolete("Creation of new SimulatorFactories should be done with SimulatorFactoryFactory NInject Factory", false)]
+		public static SimulatorFactory CreateSimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer, IDeclarationReport declarationReport = null, IVTPReport vtpReport=null, bool validate = true)
+		{
+			switch (mode)
+			{
+				case ExecutionMode.Declaration:
+					ISimulatorFactoryFactory simFactoryFactory =
+						new StandardKernel(new VectoNinjectModule()).Get<ISimulatorFactoryFactory>();
+					return new SimulatorFactoryDeclaration(dataProvider, writer, declarationReport, vtpReport, validate);
+				case ExecutionMode.Engineering:
+					return new SimulatorFactoryEngineering(dataProvider, writer, validate);
+				default:
+					throw new VectoException("Unkown factory mode in SimulatorFactory: {0}", mode);
+			}
+		}
+		[Obsolete("Creation of new SimulatorFactories should be done with SimulatorFactoryFactory NInject Factory", false)]
+		public static SimulatorFactory CreateSimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer)
+		{
+			return CreateSimulatorFactory(mode, dataProvider, writer, null, null, true);
+		}
+
+		protected SimulatorFactory(ExecutionMode mode, IOutputDataWriter writer, bool validate = true)
+		{
+			System.Diagnostics.Debug.WriteLine("Created Simulator Factory");
+			Log.Info("########## VectoCore Version {0} ##########", Assembly.GetExecutingAssembly().GetName().Version);
+			JobNumber = Interlocked.Increment(ref _jobNumberCounter);
+			ReportWriter = writer;
+			Validate = validate;
+			_mode = mode;
+
+			ThreadPool.GetMinThreads(out var workerThreads, out var completionThreads);
+			if (workerThreads < 12) {
+				workerThreads = 12;
+			}
+			ThreadPool.SetMinThreads(workerThreads, completionThreads);
+
+		}
+
+
+		#endregion
+
+
+
+
+
+
+		public bool Validate { get; set; }
+
+		public IVectoRunDataFactory DataReader { get; protected set; }
+
+		public SummaryDataContainer SumData { get; set; }
+
+		public abstract IOutputDataWriter ReportWriter { get; protected set; }
+
+		public int JobNumber { get; set; }
+
+		public bool WriteModalResults { get; set; }
+		public bool ModalResults1Hz { get; set; }
+		public bool ActualModalData { get; set; }
+
+		public bool SerializeVectoRunData { get; set; }
+
+		/// <summary>
+		/// Creates powertrain and initializes it with the component's data.
+		/// </summary>
+		/// <returns>new VectoRun Instance</returns>
+		public IEnumerable<IVectoRun> SimulationRuns()
+		{
+			var i = 0;
+			var warning1Hz = false;
+			if (!_simulate) {
+				yield break;
+			}
+			foreach (var data in DataReader.NextRun()) {
+				var current = i++;
+				var d = data;
+				data.JobRunId = current;
+				yield return data.Exempted || data.MultistageRun ? GetExemptedRun(data) : GetNonExemptedRun(data, current, d, ref warning1Hz);
+			}
+		}
+
+		private IVectoRun GetExemptedRun(VectoRunData data)
+		{
+			if (data.Report != null) {
+				data.Report.PrepareResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data);
+			}
+			return new ExemptedRun(new ExemptedRunContainer(data.ExecutionMode) { RunData = data }, modData => {
+				if (data.Report != null) {
+					data.Report.AddResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data, modData);
+				}
+			});
+		}
+
+		private IVectoRun GetNonExemptedRun(VectoRunData data, int current, VectoRunData d, ref bool warning1Hz)
+		{
+			var addReportResult = PrepareReport(data);
+			if (!data.Cycle.CycleType.IsDistanceBased() && ModalResults1Hz && !warning1Hz) {
+				Log.Error("Output filter for 1Hz results is only available for distance-based cycles!");
+				warning1Hz = true;
+			}
+			var fuels = data.EngineData != null ? data.EngineData.Fuels.Select(x => x.FuelData).ToList() : new List<IFuelProperties>();
+			IModalDataContainer modContainer =
+				new ModalDataContainer(
+					data, ReportWriter,
+					(_mode == ExecutionMode.Declaration) ? addReportResult : null,
+					GetModDataFilter(data)) {
+					WriteModalResults = _mode != ExecutionMode.Declaration || WriteModalResults
+				};
+
+
+			// TODO: MQ 20200410 - Remove for official release!
+			if (SerializeVectoRunData) {
+				File.WriteAllText(
+					Path.Combine(
+						(ReportWriter as FileOutputWriter)?.BasePath ?? "", $"{data.JobName}_{data.Cycle.Name}{data.ModFileSuffix}.json"),
+					JsonConvert.SerializeObject(data, Formatting.Indented));
+			}
+
+			var builder = new PowertrainBuilder(
+				modContainer, modData => {
+					if (SumData != null) {
+						SumData.Write(modData, JobNumber, current, d);
+					}
+				});
+
+			var run = GetVectoRun(data, builder);
+
+			if (Validate) {
+				ValidateVectoRunData(
+					run, data.JobType, data.ElectricMachinesData.FirstOrDefault()?.Item1, data.GearboxData?.Type,
+					data.Mission != null && data.Mission.MissionType.IsEMS());
+			}
+			return run;
+		}
+
+		private IModalDataFilter[] GetModDataFilter(VectoRunData data)
+		{
+			var modDataFilter = ModalResults1Hz
+				? new IModalDataFilter[] { new ModalData1HzFilter() }
+				: null;
+
+			if (ActualModalData) {
+				modDataFilter = new IModalDataFilter[] { new ActualModalDataFilter(), };
+			}
+			return data.Cycle.CycleType.IsDistanceBased() && ModalResults1Hz || ActualModalData ? modDataFilter : null;
+		}
+
+		private void ValidateVectoRunData(VectoRun run, VectoSimulationJobType jobType, PowertrainPosition? emPosition, GearboxType? gearboxtype, bool isEms)
+		{
+			var validationErrors = run.Validate(_mode, jobType, emPosition, gearboxtype, isEms);
+			if (validationErrors.Any()) {
+				throw new VectoException("Validation of Run-Data Failed: " +
+										string.Join("\n", validationErrors.Select(r => r.ErrorMessage + string.Join("; ", r.MemberNames))));
+			}
+		}
+
+		private static VectoRun GetVectoRun(VectoRunData data, PowertrainBuilder builder)
+		{
+			VectoRun run;
+			switch (data.Cycle.CycleType) {
+				case CycleType.DistanceBased:
+					if ((data.SimulationType & SimulationType.DistanceCycle) == 0) {
+						throw new VectoException("Distance-based cycle can not be simulated in {0} mode", data.SimulationType);
+					}
+					run = new DistanceRun(builder.Build(data));
+					break;
+				case CycleType.EngineOnly:
+					if ((data.SimulationType & SimulationType.EngineOnly) == 0) {
+						throw new VectoException("Engine-only cycle can not be simulated in {0} mode", data.SimulationType);
+					}
+					run = new TimeRun(builder.Build(data));
+					break;
+				case CycleType.VTP:
+					if ((data.SimulationType & SimulationType.VerificationTest) == 0) {
+						throw new VectoException("VTP-cycle can not be simulated in {0} mode", data.SimulationType);
+					}
+					run = new TimeRun(builder.Build(data));
+					break;
+
+				case CycleType.PWheel:
+				case CycleType.MeasuredSpeed:
+				case CycleType.MeasuredSpeedGear:
+					if ((data.SimulationType & (SimulationType.PWheel | SimulationType.MeasuredSpeedCycle)) == 0) {
+						throw new VectoException("{1}-cycle can not be simulated in {0} mode", data.SimulationType, data.Cycle.CycleType);
+					}
+					run = new TimeRun(builder.Build(data));
+					break;
+				case CycleType.PTO:
+					throw new VectoException("PTO Cycle can not be used as main cycle!");
+				default:
+					throw new ArgumentOutOfRangeException("CycleType unknown:" + data.Cycle.CycleType);
+			}
+			return run;
+		}
+
+		private static Action<ModalDataContainer> PrepareReport(VectoRunData data)
+		{
+			if (data.Report != null) {
+				data.Report.PrepareResult(data.Loading, data.Mission, data.EngineData.FuelMode, data);
+			}
+			Action<ModalDataContainer> addReportResult = modData => {
+				if (data.Report != null) {
+					data.Report.AddResult(data.Loading, data.Mission, data.EngineData.FuelMode, data, modData);
+				}
+			};
+			return addReportResult;
+		}
+	}
+}
+
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs
new file mode 100644
index 0000000000000000000000000000000000000000..30088d630764e814b48f2c95a3ec915ba0da0f36
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs
@@ -0,0 +1,206 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using Ninject;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
+using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.OutputData.FileIO;
+using TUGraz.VectoCore.OutputData.XML;
+
+namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
+{
+    public class SimulatorFactoryDeclaration : SimulatorFactory
+    {
+		//private readonly ISimulatorFactoryFactory _simFactoryFactory;
+
+		public SimulatorFactoryDeclaration(IInputDataProvider dataProvider, 
+			IOutputDataWriter writer,
+			IDeclarationReport declarationReport, 
+			IVTPReport vtpReport,
+			bool validate) : base(ExecutionMode.Declaration, writer, validate)
+		{
+			CreateDeclarationDataReader(dataProvider, declarationReport, vtpReport);
+			//_simFactoryFactory = simFactoryFactory;
+		}
+
+		private void CreateDeclarationDataReader(IInputDataProvider dataProvider, IDeclarationReport declarationReport, IVTPReport vtpReport)
+		{
+			if (dataProvider is IVTPDeclarationInputDataProvider vtpProvider)
+			{
+				var report = vtpReport ?? new XMLVTPReport(ReportWriter);
+				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry())
+				{
+					DataReader = new DeclarationVTPModeVectoRunDataFactoryLorries(vtpProvider, report);
+				}
+				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus())
+				{
+					DataReader = new DeclarationVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider, report);
+				}
+				return;
+			}
+
+			if (dataProvider is ISingleBusInputDataProvider)
+			{
+				var singleBus = dataProvider as ISingleBusInputDataProvider;
+				var report = declarationReport ?? new XMLDeclarationReport(ReportWriter);
+				DataReader = new DeclarationModeSingleBusVectoRunDataFactory(singleBus, report);
+				return;
+			}
+			if (dataProvider is IDeclarationInputDataProvider declDataProvider)
+			{
+				if (declDataProvider.JobInputData.Vehicle.VehicleCategory.IsLorry())
+				{
+					var report = declarationReport ?? new XMLDeclarationReport(ReportWriter);
+					DataReader = new DeclarationModeTruckVectoRunDataFactory(declDataProvider, report);
+					return;
+				}
+
+				switch (declDataProvider.JobInputData.Vehicle.VehicleCategory)
+				{
+					case VehicleCategory.HeavyBusCompletedVehicle:
+						var reportCompleted = declarationReport ??
+											new XMLDeclarationReportCompletedVehicle(ReportWriter,
+												declDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle)
+											{
+												PrimaryVehicleReportInputData = declDataProvider.PrimaryVehicleData,
+											};
+						DataReader = new DeclarationModeCompletedBusVectoRunDataFactory(declDataProvider, reportCompleted);
+						return;
+					case VehicleCategory.HeavyBusPrimaryVehicle:
+						var reportPrimary = declarationReport ??
+											new XMLDeclarationReportPrimaryVehicle(ReportWriter,
+												declDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
+						DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(declDataProvider, reportPrimary);
+						return;
+					default:
+						System.Diagnostics.Debug.Assert(false);
+						break;
+				}
+			}
+
+			if (dataProvider is IMultistageVIFInputData multistageVifInputData)
+			{
+				//ToDo FK: check if data completed == true && final 
+				var inputComplete = multistageVifInputData.MultistageJobInputData.JobInputData.InputComplete;
+				var declType = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage
+					?.Vehicle.VehicleDeclarationType;
+				var final = declType == VehicleDeclarationType.final;
+				var exempted = multistageVifInputData.MultistageJobInputData.JobInputData.ConsolidateManufacturingStage?
+					.Vehicle.ExemptedVehicle == true;
+
+
+				if (multistageVifInputData.VehicleInputData == null)
+				{ // eigener writer für in-memory
+					var reportCompleted = new XMLDeclarationReportCompletedVehicle(ReportWriter, true)
+					{
+						PrimaryVehicleReportInputData = multistageVifInputData.MultistageJobInputData.JobInputData.PrimaryVehicle,
+					};
+					DataReader = new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
+						multistageVifInputData.MultistageJobInputData,
+						reportCompleted);
+					if (!((final || exempted) && inputComplete))
+					{
+						_simulate = false;
+					}
+
+				}
+				else
+				{
+					var report = declarationReport ?? new XMLDeclarationReportMultistageBusVehicle(ReportWriter);
+					DataReader = new DeclarationModeMultistageBusVectoRunDataFactory(multistageVifInputData, report);
+
+					_followingSimulatorFactoryCreator = () => {
+						var container = new StandardKernel(
+							new VectoNinjectModule()
+						);
+						var inputDataReader = container.Get<IXMLInputDataReader>();
+
+						var mode = _mode;
+						var inputData =
+							inputDataReader.CreateDeclaration(
+								XmlReader.Create(ReportWriter.MultistageXmlReport.ToString().ToStream()));
+						//inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter)
+						//	.XMLMultistageReportFileName);
+#pragma warning disable 618
+						return CreateSimulatorFactory(_mode, new XMLDeclarationVIFInputData(inputData as IMultistageBusInputDataProvider, null), ReportWriter, report, vtpReport, Validate);
+#pragma warning restore 618
+					};
+
+				}
+				return;
+			}
+
+			if (dataProvider is IMultistagePrimaryAndStageInputDataProvider multiStagePrimaryAndStageInputData)
+			{
+				System.Diagnostics.Debug.Assert(multiStagePrimaryAndStageInputData.PrimaryVehicle.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
+
+				var tempOutputWriter = new TempFileOutputWriter(ReportWriter, ReportType.DeclarationReportManufacturerXML);
+				var originalReportWriter = ReportWriter;
+				ReportWriter = tempOutputWriter;
+
+				var tempPrimaryReport = new XMLDeclarationReportPrimaryVehicle(tempOutputWriter, true);
+
+				DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(multiStagePrimaryAndStageInputData.PrimaryVehicle, tempPrimaryReport);
+
+				var reportPrimary = new XMLDeclarationReportPrimaryVehicle(ReportWriter,
+										true);
+
+				CreateFollowUpSimulatorFactory = true;
+				_followingSimulatorFactoryCreator = (() => {
+					//replace with dependency injection 
+					var container = new StandardKernel(
+						new VectoNinjectModule()
+					);
+					try
+					{
+						var inputDataReader = container.Get<IXMLInputDataReader>();
+						var primaryInputData = inputDataReader.CreateDeclaration(tempOutputWriter
+							.GetDocument(ReportType.DeclarationReportPrimaryVehicleXML).CreateReader());
+						//var primaryInputData = inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter).XMLPrimaryVehicleReportName);
+						var vifInputData = new XMLDeclarationVIFInputData(
+							primaryInputData as IMultistageBusInputDataProvider,
+							multiStagePrimaryAndStageInputData.StageInputData);
+
+						var manStagesCount =
+							vifInputData.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? -1;
+
+						originalReportWriter.NumberOfManufacturingStages = manStagesCount;
+#pragma warning disable 618
+						var factory = CreateSimulatorFactory(_mode,
+#pragma warning restore 618
+							vifInputData, originalReportWriter,
+							null,
+							vtpReport,
+							Validate);
+						factory.CreateFollowUpSimulatorFactory = true;
+						return factory;
+					}
+					catch (Exception ex)
+					{
+						Log.Error($"Failed to create additional Simulation run: {ex.Message}");
+						return null;
+					}
+				});
+				return;
+			}
+
+
+			throw new VectoException("Unknown InputData for Declaration Mode!");
+		}
+
+		#region Overrides of SimulatorFactory
+
+		public override IOutputDataWriter ReportWriter { get; protected set; }
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryEngineering.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryEngineering.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3ef0758934a9cce88f83dd5c224fa53f3b8381c6
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryEngineering.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
+{
+    public class SimulatorFactoryEngineering : SimulatorFactory
+    {
+        public SimulatorFactoryEngineering(IInputDataProvider dataProvider, IOutputDataWriter writer, bool validate) : base(ExecutionMode.Engineering, writer, validate)
+        {
+            CreateEngineeringDataReader(dataProvider);
+        }
+
+
+
+		private void CreateEngineeringDataReader(IInputDataProvider dataProvider)
+		{
+			if (dataProvider is IVTPEngineeringInputDataProvider vtpProvider)
+			{
+				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsLorry())
+				{
+					DataReader = new EngineeringVTPModeVectoRunDataFactoryLorries(vtpProvider);
+				}
+				if (vtpProvider.JobInputData.Vehicle.VehicleCategory.IsBus())
+				{
+					DataReader = new EngineeringVTPModeVectoRunDataFactoryHeavyBusPrimary(vtpProvider);
+				}
+				return;
+			}
+			if (dataProvider is IEngineeringInputDataProvider engDataProvider)
+			{
+				if (engDataProvider.JobInputData.JobType == VectoSimulationJobType.EngineOnlySimulation)
+				{
+					DataReader = new EngineOnlyVectoRunDataFactory(engDataProvider);
+				}
+				else
+				{
+					DataReader = new EngineeringModeVectoRunDataFactory(engDataProvider);
+				}
+				return;
+			}
+			throw new VectoException("Unknown InputData for Engineering Mode!");
+		}
+
+		#region Overrides of SimulatorFactory
+
+		public override IOutputDataWriter ReportWriter { get; protected set; }
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
index a64b23ec59b5721378dff38e0576e55088fc13c7..bda5e5f57d347d9478e118c7adf4a33661a58687 100644
--- a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
+++ b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
@@ -33,10 +33,13 @@ using System.Collections.Generic;
 using Ninject.Extensions.Factory;
 using Ninject.Modules;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoCore.Utils.Ninject;
 using TUGraz.VectoHashing;
 
 namespace TUGraz.VectoCore.Models.Simulation
@@ -47,9 +50,11 @@ namespace TUGraz.VectoCore.Models.Simulation
 
 		public override void Load()
 		{
-			Bind<ISimulatorFactoryFactory>().ToFactory();
+			Bind<ISimulatorFactoryFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider());
+
+			Bind<ISimulatorFactory>().To<SimulatorFactoryDeclaration>().Named(ExecutionMode.Declaration.ToString());
+			Bind<ISimulatorFactory>().To<SimulatorFactoryEngineering>().Named(ExecutionMode.Engineering.ToString());
 
-			Bind<ISimulatorFactory>().To<SimulatorFactory>();
 
 			Bind<IDeclarationReport>().To<NullDeclarationReport>();
 			Bind<IVTPReport>().To<NullVTPReport>();
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 36b3a28062de00f9a82907333d04a0e6768c06a4..ab04879a329c89cff7798953f406d21ded1ba966 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -438,6 +438,8 @@
     <Compile Include="Models\SimulationComponent\Impl\ATClutchInfo.cs" />
     <Compile Include="Models\Simulation\Impl\PCCEcoRollEngineStopPreprocessor.cs" />
     <Compile Include="Models\Simulation\Impl\PCCSegmentPreprocessor.cs" />
+    <Compile Include="Models\Simulation\Impl\SimulatorFactory\SimulatorFactoryDeclaration.cs" />
+    <Compile Include="Models\Simulation\Impl\SimulatorFactory\SimulatorFactoryEngineering.cs" />
     <Compile Include="Models\Simulation\ISimulationPreprocessor.cs" />
     <Compile Include="Models\Simulation\ISimulatorFactory.cs" />
     <Compile Include="Models\Simulation\ISimulatorFactoryFactory.cs" />
@@ -743,7 +745,7 @@
     <Compile Include="Models\SimulationComponent\Impl\PowertrainDrivingCycle.cs" />
     <Compile Include="Models\Simulation\Data\ModalResult.cs" />
     <Compile Include="Models\Simulation\IVectoRun.cs" />
-    <Compile Include="Models\Simulation\Impl\SimulatorFactory.cs" />
+    <Compile Include="Models\Simulation\Impl\SimulatorFactory\SimulatorFactory.cs" />
     <Compile Include="Models\Simulation\Impl\VectoRun.cs" />
     <Compile Include="Models\Simulation\Impl\JobContainer.cs" />
     <Compile Include="Models\Simulation\Impl\VehicleContainer.cs" />
diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs
index 2f0115a5829d5aa77a5a9f096b6fb3f18c6f9ba7..aa8967b189ded6858106aab6a670418b40bba0b7 100644
--- a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs
+++ b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs
@@ -8,6 +8,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
@@ -239,7 +240,7 @@ namespace TUGraz.VectoCore.Tests.FileIO
 		{
 			var inputProvider = JSONInputDataFactory.ReadJsonJob(@"TestData\Hybrids\GenericVehicle_Group2_P2\Class2_RigidTruck_ParHyb_ENG.vecto");
 
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, null);
 
 			var sumContainer = new SummaryDataContainer(null);
 			var jobContainer = new JobContainer(sumContainer);
@@ -266,7 +267,7 @@ namespace TUGraz.VectoCore.Tests.FileIO
 		{
 			var inputProvider = JSONInputDataFactory.ReadJsonJob(@"TestData\BatteryElectric\GenericVehicleB4\BEV_ENG.vecto");
 
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, null);
 
 			var sumContainer = new SummaryDataContainer(null);
 			var jobContainer = new JobContainer(sumContainer);
diff --git a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTests.cs b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTests.cs
index 9a5981be2d8504706b782ed7dd9e59b086e28d64..5d2c6e67771cdd1f5bf3ed9bb3fd319e6e768de6 100644
--- a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTests.cs
@@ -8,6 +8,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
@@ -95,11 +96,9 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			factory.SumData = sumContainer;
 
@@ -136,11 +135,9 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			factory.SumData = sumContainer;
 
@@ -177,11 +174,9 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			factory.SumData = sumContainer;
 
@@ -271,11 +266,9 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			factory.SumData = sumContainer;
 
@@ -303,11 +296,9 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS
 				? xmlInputReader.CreateDeclaration(relativeJobPath)
 				//? new XMLDeclarationInputDataProvider(relativeJobPath, true)
 				: JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
 			jobContainer.AddRuns(factory);
@@ -329,11 +320,9 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS
 				? xmlInputReader.CreateDeclaration(relativeJobPath)
 				//? new XMLDeclarationInputDataProvider(relativeJobPath, true)
 				: JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
 
diff --git a/VectoCore/VectoCoreTest/Integration/AMTShiftStrategyTests.cs b/VectoCore/VectoCoreTest/Integration/AMTShiftStrategyTests.cs
index 73d27a4a754efa732b8ab124d30c565bb522631a..8113b2a8edc0ba3837c7248d0675b21901b3b6fa 100644
--- a/VectoCore/VectoCoreTest/Integration/AMTShiftStrategyTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/AMTShiftStrategyTests.cs
@@ -7,6 +7,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
 
@@ -44,11 +45,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml"
 				? xmlInputReader.CreateDeclaration(relativeJobPath)
 				: JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			var runs = factory.SimulationRuns().ToArray();
@@ -66,11 +65,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml"
 				? xmlInputReader.CreateDeclaration(relativeJobPath)
 				: JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			jobContainer.AddRuns(factory);
diff --git a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs
index babc9da2252811cb0e3d524e8f0973afc84c50f7..193ac96d89e1963a8e41bce46bee639151caee18 100644
--- a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs
@@ -15,6 +15,7 @@ using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.DataBus;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
@@ -217,11 +218,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 			var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
 
 			var writer = new FileOutputWriter(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, writer)
-			{
-				Validate = false,
-				WriteModalResults = true,
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, writer);
+			factory.Validate = false;
+			factory.WriteModalResults = true;
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
@@ -376,10 +375,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 			var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
 
 			var writer = new FileOutputWriter(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, writer) {
-				Validate = false,
-				WriteModalResults = true,
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, writer);
+			factory.Validate = false;
+			factory.WriteModalResults = true;
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
@@ -595,11 +593,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 			var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
 
 			var writer = new FileOutputWriter(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, writer)
-			{
-				Validate = false,
-				WriteModalResults = true,
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, writer);
+			factory.Validate = false;
+			factory.WriteModalResults = true;
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs
index 947f16d6146b32527bfeb7d6b8eb1aa54a04a814..c3dc238657c48c6abbbf7e6bd893480b5f8aac09 100644
--- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs
@@ -27,6 +27,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.OutputData;
@@ -108,12 +109,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 				JSONInputDataFactory.ReadJsonJob(JobFile_Group41) as JSONInputDataCompletedBusFactorMethodV7,
 				xmlInputReader);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer)
-			{
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			//var sumContainer = new SummaryDataContainer(writer);
 			//var jobContainer = new JobContainer(sumContainer);
 
@@ -1038,12 +1036,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 				}
 			}
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			var runs = factory.DataReader.NextRun().ToList();
 			return runs;
@@ -1072,11 +1067,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 				}
 			}
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration,  inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration,  inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 
 			//var runs = factory.SimulationRuns().ToArray();
@@ -1109,11 +1102,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml"
 				? xmlInputReader.CreateDeclaration(relativeJobPath)
 				: JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 
 			//var runs = factory.SimulationRuns().ToArray();
@@ -1152,11 +1143,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml"
 				? xmlInputReader.CreateDeclaration(relativeJobPath)
 				: JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 
 			var runs = factory.SimulationRuns().ToArray();
@@ -1195,10 +1184,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			//var inputData = new MockCompletedBusInputData(XmlReader.Create(PifFile_33_34), modified);
 			//var inputData = new MockCompletedBusInputData(modified);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(completedVif as IMultistageBusInputDataProvider, null), writer) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(completedVif as IMultistageBusInputDataProvider, null), writer);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 
 			var runs = factory.DataReader.NextRun().ToList();
 			var run = runs[runIdx];
@@ -1228,11 +1216,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			var modifiedCompleted = xmlInputReader.CreateDeclaration(XmlReader.Create(new StringReader(modified)));
 
 			var inputData = new MockSingleBusInputDataProvider(primary.JobInputData.Vehicle, modifiedCompleted.JobInputData.Vehicle);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, null) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, null);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var runs = factory.DataReader.NextRun().ToList();
 			var run = runs[runIdx];
 
@@ -1322,11 +1308,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml"
 				? xmlInputReader.CreateDeclaration(relativeJobPath)
 				: JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 
 			var runs = factory.SimulationRuns().ToArray();
diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs
index 991a0731a24c60d11b48e945a7fdb55b2ca0353c..afb6c1fa084e37aa5bcb13141da68d13ddbb6efa 100644
--- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusSanityCheckTests.cs
@@ -15,6 +15,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
 using TUGraz.VectoCore.Tests.Utils;
@@ -64,11 +65,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			//var inputData = new MockCompletedBusInputData(XmlReader.Create(PifFile_33_34), modified);
 			//var inputData = _xmlInputReader.CreateDeclaration(modified);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(modified, null),  writer)
-			{
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(modified, null),  writer);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 
 			AssertHelper.Exception<VectoException>(() => {
 				var runs = factory.DataReader.NextRun().ToList();}, messageContains: "Input parameter 'separate air distribution ducts' has to be set to 'true' for vehicle group ");
@@ -114,13 +113,11 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
             //var inputData = new MockCompletedBusInputData(XmlReader.Create(PifFile_33_34), modified);
 			//var inputData = new MockCompletedBusInputData(modified);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(modified, null), writer)
-            {
-                WriteModalResults = true,
-                Validate = false
-            };
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(modified, null), writer);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 
-            //AssertHelper.Exception<VectoException>(() => {
+			//AssertHelper.Exception<VectoException>(() => {
                 var runs = factory.DataReader.NextRun().ToList();
             //}, messageContains: "Input parameter 'separate air distribution ducts' has to be set to 'true' for vehicle group ");
         }
@@ -147,7 +144,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
 			var filename = Guid.NewGuid().ToString().Substring(0, 20);
 			var writer = new FileOutputVIFWriter(filename, 0);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
 			var jobContainer = new JobContainer(new MockSumWriter());
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs b/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs
index 7ce45ca1af8b6954e93eec4e5191b205c73a1f1a..551d97958594c6e08e23bcc371982b7dc8387875 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/EngineInputDataTests.cs
@@ -40,6 +40,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.Utils;
 
@@ -91,7 +92,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Declaration
 			}
 			var inputDataProvider = xmlInputReader.CreateDeclaration(modified);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null, validate: false);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null, validate: false);
 			var first = factory.SimulationRuns().ToArray().First();
 
 			var modData = ((ModalDataContainer)first.GetContainer().ModalData).Data;
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
index 2b262cd9cbb18cf422175226be6446106b7373de..9d6a2270ca935b96908435da53b537b2c6ef782d 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
@@ -44,6 +44,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
 using TUGraz.VectoCore.Tests.Utils;
@@ -92,10 +93,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var inputData = xmlInputReader.CreateDeclaration(filename);
 			
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			var runs = factory.SimulationRuns().ToList();
@@ -156,10 +156,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var inputData = xmlInputReader.CreateDeclaration(modified);
 			
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			jobContainer.AddRuns(factory);
@@ -234,10 +233,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var inputData = xmlInputReader.CreateDeclaration(modified);
 			
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			jobContainer.AddRuns(factory);
@@ -310,10 +308,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var inputData = xmlInputReader.CreateDeclaration(filename);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			var runs = factory.SimulationRuns().ToList();
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs b/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
index c37a4affedb4c7ba29df1408cdcdac341d8157c5..a176dfdde8eb4b079867aa5636e682c34031a226 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
@@ -45,6 +45,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
@@ -100,10 +101,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Declaration
 
 			var writer = new FileOutputWriter(filename); // new MockDeclarationWriter(filename);
 			var inputData = xmlInputReader.CreateDeclaration(modified);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			jobContainer.AddRuns(factory);
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/TestMaxMassInMUCycle.cs b/VectoCore/VectoCoreTest/Integration/Declaration/TestMaxMassInMUCycle.cs
index d4284c458611e6e8d5d21c6e5d2a245246a8a783..0899ea8538f9aead4ac8caca547dc699fb9bfc27 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/TestMaxMassInMUCycle.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/TestMaxMassInMUCycle.cs
@@ -37,6 +37,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
 
@@ -66,11 +67,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Declaration
 			var relativeJobPath = jobFile;
 			var writer = new FileOutputWriter(relativeJobPath);
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml" ? xmlInputReader.CreateDeclaration(relativeJobPath) : JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			jobContainer.AddRuns(factory);
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/VocationalVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Declaration/VocationalVehicleTest.cs
index 05b72fc4ec65f1f4d9761d58ebedf402ee8fef5f..85246786987e121ea4123e0086d6fec85134f865 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/VocationalVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/VocationalVehicleTest.cs
@@ -37,6 +37,7 @@ using NUnit.Framework;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
 
@@ -69,10 +70,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var writer = new FileOutputWriter(filename);
 			var inputData = xmlInputReader.CreateDeclaration(filename);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			var runs = factory.SimulationRuns().ToList();
diff --git a/VectoCore/VectoCoreTest/Integration/DualFuel/DualFuelTests.cs b/VectoCore/VectoCoreTest/Integration/DualFuel/DualFuelTests.cs
index 3a91ec5a632d784d54844040b538588c83187066..292a3cd34817ec8893b49af5c0c8b00fcb399329 100644
--- a/VectoCore/VectoCoreTest/Integration/DualFuel/DualFuelTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/DualFuel/DualFuelTests.cs
@@ -5,6 +5,7 @@ using NUnit.Framework;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 
@@ -34,10 +35,9 @@ namespace TUGraz.VectoCore.Tests.Integration.DualFuel
 			var jobContainer = new JobContainer(sumData);
 			var inputData = xmlInputReader.CreateDeclaration(jobName);
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			runsFactory.WriteModalResults = true;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
@@ -57,10 +57,9 @@ namespace TUGraz.VectoCore.Tests.Integration.DualFuel
 			var jobContainer = new JobContainer(sumData);
 			var inputData = xmlInputReader.CreateDeclaration(jobName);
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			runsFactory.WriteModalResults = true;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
diff --git a/VectoCore/VectoCoreTest/Integration/FuelTypesTest.cs b/VectoCore/VectoCoreTest/Integration/FuelTypesTest.cs
index 9e23da4bef43cee7b4617cf6cdb5b2253371b7a8..3bacc185d0c34dfab8cd4b49d3ba81753e40069a 100644
--- a/VectoCore/VectoCoreTest/Integration/FuelTypesTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/FuelTypesTest.cs
@@ -40,6 +40,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
@@ -108,10 +109,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var jobContainer = new JobContainer(sumData);
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobName);
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			runsFactory.WriteModalResults = true;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
diff --git a/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs b/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
index ef936822099a928ec60d41e926040a6d9295ba9e..e40c44ba0f9d908810d484831b89ff3dfd4d5f6c 100644
--- a/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
@@ -42,6 +42,7 @@ using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
 using TUGraz.VectoCore.Utils;
 using NUnit.Framework;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 
 namespace TUGraz.VectoCore.Tests.Integration
 {
@@ -182,10 +183,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(LongHaulTruckDeclarationJob);
 			var fileWriter = new FileOutputWriter(LongHaulTruckDeclarationJob);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
@@ -216,14 +216,12 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(LongHaulTruckDeclarationJob);
 			var fileWriter = new FileOutputWriter("Truck40t_Mod1Hz_Test.vecto");
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				ModalResults1Hz = false
-			};
-			var factory1Hz = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				ModalResults1Hz = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
+			factory.ModalResults1Hz = false;
+			var factory1Hz = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory1Hz.WriteModalResults = true;
+			factory1Hz.ModalResults1Hz = true;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
@@ -300,10 +298,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(DeliveryTruckDeclarationJob);
 			var fileWriter = new FileOutputWriter(DeliveryTruckDeclarationJob);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
@@ -331,10 +328,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(DeliveryTruck8GearDeclarationJob);
 			var fileWriter = new FileOutputWriter(DeliveryTruck8GearDeclarationJob);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
@@ -355,9 +351,8 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(Class9RigidTruckPTOJob);
 			var fileWriter = new FileOutputWriter(Class9RigidTruckPTOJob);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
@@ -377,9 +372,8 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(Class5TractorDeclPrimaryRetarder);
 			var fileWriter = new FileOutputWriter(Class5TractorDeclPrimaryRetarder);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
index 8b81313065eef18eb73c750d8abf51bcaff8fe8c..8bfbfeb882bb4d6449c664edb0259e8b09f8bdcf 100644
--- a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
@@ -16,6 +16,7 @@ using TUGraz.VectoCore.InputData.Reader.ShiftStrategy;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
@@ -291,10 +292,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 			var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
 
 			var writer = new FileOutputWriter(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, writer) {
-				Validate = false,
-				WriteModalResults = true,
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, writer);
+			factory.Validate = false;
+			factory.WriteModalResults = true;
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
@@ -848,10 +848,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 			var inputProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
 			
 			var writer = new FileOutputWriter(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputProvider, writer) {
-				Validate = false,
-				WriteModalResults = true,
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputProvider, writer);
+			factory.Validate = false;
+			factory.WriteModalResults = true;
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
index 606784e322e98171e73e754064a701b98c4b625b..62a554a0c80717e9e8ac822162bf48bf5d754260 100644
--- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
@@ -11,6 +11,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 
@@ -190,14 +191,12 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		{
 			_fileoutputWriter = new FileOutputWriter(_outputDirectory);
 			_tempFileOutputWriter = new TempFileOutputWriter(_fileoutputWriter);
-			var runsFactory = new SimulatorFactory(_mode, input, _fileoutputWriter)
-			{
-				WriteModalResults = true,
-				ModalResults1Hz = true,
-				Validate = true,
-				ActualModalData = true,
-				SerializeVectoRunData = true,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(_mode, input, _fileoutputWriter);
+			runsFactory.WriteModalResults = true;
+			runsFactory.ModalResults1Hz = true;
+			runsFactory.Validate = true;
+			runsFactory.ActualModalData = true;
+			runsFactory.SerializeVectoRunData = true;
 
 			var timeout = 1000;
 
diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
index bc690a7de656abc596b6ff31b352a976bfe5a4bd..4288c4f5d3d4c3c9238d87f9864772b209e65a0a 100644
--- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs
@@ -17,6 +17,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.InputData.Impl;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.OutputData.XML;
@@ -88,7 +89,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			_generatedVIFFilepath = writer.XMLMultistageReportFileName;
 			
 			var inputData = new XMLDeclarationVIFInputData(vifDataProvider, vehicle);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
 			
 			var jobContainer = new JobContainer(new MockSumWriter());
 
@@ -127,7 +128,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			var writer = new FileOutputVIFWriter(vifResult, numberOfManufacturingStages);
 			
 			var inputData = new XMLDeclarationVIFInputData(vifDataProvider, vehicle);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			var runs = factory.SimulationRuns().ToList();
@@ -331,12 +332,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			var writer = new MockDeclarationWriter("vif_vehicle-sample_test.xml");
 			
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer)
-			{
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 			jobContainer.AddRuns(factory);
@@ -360,11 +358,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			var writer = new FileOutputWriter("vif_vehicle-sample_test.xml");
 
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 			jobContainer.AddRuns(factory);
@@ -388,11 +384,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			
 			//var xmlreport = new XMLDeclarationReportMultistageBusVehicle(writer);
 			var xmlreport = new XMLDeclarationReportPrimaryVehicle(writer);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer, xmlreport) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer, xmlreport);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 			jobContainer.AddRuns(factory);
@@ -408,12 +402,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			var inputData = xmlInputReader.Create(primaryFile);
 
 			var writer = new MockDeclarationWriter(outputFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer)
-			{
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 			jobContainer.AddRuns(factory);
@@ -434,11 +425,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 			var writer = new FileOutputWriter(outputFile);
 
 			var xmlreport = new XMLDeclarationReportPrimaryVehicle(writer);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer, xmlreport)
-			{
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer, xmlreport);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 			jobContainer.AddRuns(factory);
diff --git a/VectoCore/VectoCoreTest/Integration/RoadSweepers/RoadSweeperTests.cs b/VectoCore/VectoCoreTest/Integration/RoadSweepers/RoadSweeperTests.cs
index 309efab926658ed494f85bc8e0a80a90bb5f0743..6d198dcf89cf8e85da868b651e2f52138126dd35 100644
--- a/VectoCore/VectoCoreTest/Integration/RoadSweepers/RoadSweeperTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/RoadSweepers/RoadSweeperTests.cs
@@ -14,6 +14,7 @@ using TUGraz.VectoCore.InputData.Reader;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
@@ -198,11 +199,9 @@ namespace TUGraz.VectoCore.Tests.Integration.RoadSweepers
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			factory.SumData = sumContainer;
 
@@ -240,11 +239,9 @@ namespace TUGraz.VectoCore.Tests.Integration.RoadSweepers
 
 			var sumContainer = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumContainer);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			factory.SumData = sumContainer;
 
diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
index 4dfc179aca1dd162c11ba9f7b725c2080e16fd6e..2e96e7ad0d6165d5fae4bca65a3669d1d4761ca5 100644
--- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
@@ -53,6 +53,7 @@ using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels;
 using NUnit.Framework;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 
 namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 {
@@ -341,7 +342,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			var jobContainer = new JobContainer(sumData);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
 
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
diff --git a/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs b/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs
index 896bdaf5a83a3506dbff007ba1dd45b155978b4c..84f5f77111aa69ad41a7a8b3f05c92aef01d4c0d 100644
--- a/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs
+++ b/VectoCore/VectoCoreTest/Integration/TestVehicleIdlingSpeed.cs
@@ -43,6 +43,7 @@ using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Utils;
 using NUnit.Framework;
 using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 
 namespace TUGraz.VectoCore.Tests.Integration
 {
@@ -88,7 +89,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var inputDataProvider = xmlInputReader.CreateDeclaration(modified);
 			
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("Idle900"));
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("Idle900"));
 			//factory.WriteModalResults = true;
 
 			var jobContainer = new JobContainer(null);
diff --git a/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs b/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs
index 92b1d4a78c19b1324982ed3842f95d7ef37f956d..8fbdcd363150598727b3d56354795ca47c2b08a9 100644
--- a/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/TorqueLimitsTest.cs
@@ -40,6 +40,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using Assert = NUnit.Framework.Assert;
@@ -92,7 +93,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 		public void TestGearboxTorqueLimitsAbove90FLD()
 		{
 			var inputDataProvider = JSONInputDataFactory.ReadJsonJob(GearboxLimitJobDecl_865);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
 
 			var run = factory.DataReader.NextRun().First();
 
@@ -119,7 +120,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 		public void TestGearboxTorqueLimitsBelow90FLD()
 		{
 			var inputDataProvider = JSONInputDataFactory.ReadJsonJob(GearboxLimitJobDecl_800);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
 
 			var run = factory.DataReader.NextRun().First();
 
@@ -146,7 +147,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 		public void TestVehicleTorqueLimitsAbove95FLD()
 		{
 			var inputDataProvider = JSONInputDataFactory.ReadJsonJob(VehicleLimitJobDecl_910);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
 
 			var run = factory.DataReader.NextRun().First();
 
@@ -173,7 +174,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 		public void TestVehicleTorqueLimitsBelow95FLD()
 		{
 			var inputDataProvider = JSONInputDataFactory.ReadJsonJob(VehicleLimitJobDecl_850);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
 
 			var run = factory.DataReader.NextRun().First();
 
@@ -205,9 +206,8 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var fileWriter = new FileOutputWriter(file);
 			var sumData = new SummaryDataContainer(fileWriter);
 			var inputDataProvider = JSONInputDataFactory.ReadJsonJob(file);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, fileWriter) {
-				WriteModalResults = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, fileWriter);
+			factory.WriteModalResults = true;
 
 
 			var jobContainer = new JobContainer(sumData);
@@ -225,10 +225,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var fileWriter = new FileOutputWriter(file);
 			var sumData = new SummaryDataContainer(fileWriter);
 			var inputDataProvider = JSONInputDataFactory.ReadJsonJob(file);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, fileWriter) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, fileWriter);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 
 
 			var jobContainer = new JobContainer(sumData);
@@ -246,10 +245,8 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var fileWriter = new FileOutputWriter(file);
 			var sumData = new SummaryDataContainer(fileWriter);
 			var inputDataProvider = JSONInputDataFactory.ReadJsonJob(file);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, fileWriter) {
-				WriteModalResults = true,
-				//ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, fileWriter);
+			factory.WriteModalResults = true; //ActualModalData = true
 
 
 			var jobContainer = new JobContainer(sumData);
@@ -276,10 +273,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobFile);
 			var fileWriter = new FileOutputWriter(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
@@ -298,10 +294,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 		{
 			var inputData = xmlInputReader.CreateDeclaration(jobFile);
 			var fileWriter = new FileOutputWriter(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter) {
-				WriteModalResults = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			factory.WriteModalResults = true;
+			factory.Validate = false;
 			var sumData = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumData);
 			jobContainer.AddRuns(factory);
diff --git a/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs b/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs
index 2df34c4984a06e7c830a60d8d0f18b5d260f5caa..319b8c0505a2fffe1278911b8b730fc91b1506e1 100644
--- a/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/VTP/VTPTest.cs
@@ -40,6 +40,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Utils;
@@ -68,13 +69,12 @@ namespace TUGraz.VectoCore.Tests.Integration.VTP
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
-			
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
+
 			jobContainer.AddRuns(runsFactory);
 
 			Assert.AreEqual(1, jobContainer.Runs.Count);
@@ -101,12 +101,11 @@ namespace TUGraz.VectoCore.Tests.Integration.VTP
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
@@ -140,12 +139,11 @@ namespace TUGraz.VectoCore.Tests.Integration.VTP
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
@@ -177,12 +175,11 @@ namespace TUGraz.VectoCore.Tests.Integration.VTP
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
diff --git a/VectoCore/VectoCoreTest/Integration/XMLReportTest.cs b/VectoCore/VectoCoreTest/Integration/XMLReportTest.cs
index 841ca15840c84c4e04204c956b37fcdff81678c0..5f2b498c6bbaefbe09b947b8e1d06a38c9804143 100644
--- a/VectoCore/VectoCoreTest/Integration/XMLReportTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/XMLReportTest.cs
@@ -45,6 +45,7 @@ using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.OutputData.XML;
@@ -87,10 +88,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 				File.Delete(writer.SumFileName);
 			}
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport) {
-				WriteModalResults = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport);
+			runsFactory.WriteModalResults = false;
+			runsFactory.Validate = false;
 			jobContainer.AddRuns(runsFactory);
 
 			// no need to run the simulation, we only check whether the meta-data is correct, no results are considered
@@ -138,12 +138,10 @@ namespace TUGraz.VectoCore.Tests.Integration
             var sumData = new SummaryDataContainer(writer);
             var jobContainer = new JobContainer(sumData);
 
-            var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport)
-            {
-                WriteModalResults = false,
-                Validate = false,
-            };
-            jobContainer.AddRuns(runsFactory);
+            var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport);
+			runsFactory.WriteModalResults = false;
+			runsFactory.Validate = false;
+			jobContainer.AddRuns(runsFactory);
 
             // no need to run the simulation, we only check whether the meta-data is correct, no results are considered
             jobContainer.Execute();
@@ -170,10 +168,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 				File.Delete(writer.SumFileName);
 			}
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport) {
-				WriteModalResults = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport);
+			runsFactory.WriteModalResults = false;
+			runsFactory.Validate = false;
 			jobContainer.AddRuns(runsFactory);
 
 			jobContainer.Execute();
@@ -257,10 +254,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 					var dataProvider = xmlInputReader.CreateDeclaration(modified);
 					
-					var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport) {
-						WriteModalResults = false,
-						Validate = false,
-					};
+					var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport);
+					runsFactory.WriteModalResults = false;
+					runsFactory.Validate = false;
 					jobContainer.AddRuns(runsFactory);
 
 					xmlReport.DoWriteReport();
@@ -291,10 +287,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 				File.Delete(writer.SumFileName);
 			}
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport) {
-				WriteModalResults = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport);
+			runsFactory.WriteModalResults = false;
+			runsFactory.Validate = false;
 			jobContainer.AddRuns(runsFactory);
 
 			// no need to run the simulation, we only check whether the meta-data is correct, no results are considered
@@ -337,10 +332,9 @@ namespace TUGraz.VectoCore.Tests.Integration
 				File.Delete(writer.SumFileName);
 			}
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport) {
-				WriteModalResults = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport);
+			runsFactory.WriteModalResults = false;
+			runsFactory.Validate = false;
 			jobContainer.AddRuns(runsFactory);
 
 			// no need to run the simulation, we only check whether the meta-data is correct, no results are considered
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/BusFactoryTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/BusFactoryTest.cs
index a2e7a2b00d44a8157575771b726e5ebf5f6e042e..646c41f87887d369f4aa1d705129376836d1bc65 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/BusFactoryTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/BusFactoryTest.cs
@@ -6,6 +6,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
@@ -52,12 +53,10 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 				//? new XMLDeclarationInputDataProvider(relativeJobPath, true)
 				: JSONInputDataFactory.ReadJsonJob(jobFile);
 			var sumContainer = new SummaryDataContainer(writer);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				SumData = sumContainer,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.SumData = sumContainer; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(sumContainer);
 
 			
@@ -87,12 +86,10 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 				? xmlInputReader.CreateDeclaration(jobFile)
 				//? new XMLDeclarationInputDataProvider(relativeJobPath, true)
 				: JSONInputDataFactory.ReadJsonJob(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
-			
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
+
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 		
 			//var runs = factory.SimulationRuns().ToArray();
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs
index cab51b8904409611d3ead83d5da6958a45a0e8e4..4cd2d408b38317697d8703a430feacf56cf45513 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DeclarationAdapterCreateVocationalVehicleTest.cs
@@ -12,6 +12,7 @@ using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.OutputData.XML;
@@ -65,10 +66,9 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter
 			var sumData = new SummaryDataContainer(null);
 			var jobContainer = new JobContainer(sumData);
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, null, xmlReport) {
-				WriteModalResults = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, null, xmlReport);
+			runsFactory.WriteModalResults = false;
+			runsFactory.Validate = false;
 			jobContainer.AddRuns(runsFactory);
 
 			// no need to run the simulation, we only check whether the meta-data is correct, no results are considered
diff --git a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
index 1d3ff4dffd7fa6b55bbc0532b0aa539605b131e3..c96e6511929e51e419c43082cd3b20c4a3dac897 100644
--- a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
+++ b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
@@ -27,6 +27,7 @@ using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.DataBus;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Battery;
@@ -128,12 +129,10 @@ namespace TUGraz.VectoCore.Tests.Models.EngineeringMode
 				: JSONInputDataFactory.ReadJsonJob(jobFile);
 
 			var sumContainer = new SummaryDataContainer(writer);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-                SumData = sumContainer,
-                //ActualModalData = true,
-                Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.SumData = sumContainer; //ActualModalData = true,
+			factory.Validate = false;
 
 			var jobContainer = new JobContainer(sumContainer);
 
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs
index 190a47b6deb99a84a88d9cf41fe91d35b8cc69c7..f068ee90622f5bbf79b50e93d9e3d6e993055477 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/AuxTests.cs
@@ -51,6 +51,7 @@ using TUGraz.VectoCore.Tests.Models.SimulationComponent;
 using TUGraz.VectoCore.Tests.Utils;
 using NUnit.Framework;
 using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 
 // ReSharper disable ObjectCreationAsStatement
@@ -277,7 +278,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(
 				@"TestData\Generic Vehicles\Declaration Mode\40t Long Haul Truck\40t_Long_Haul_Truck.vecto");
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
 
 			jobContainer.AddRuns(runsFactory);
 		}
@@ -292,7 +293,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 
 			var inputData =
 				JSONInputDataFactory.ReadJsonJob(@"TestData\Generic Vehicles\Engineering Mode\24t Coach\24t Coach.vecto");
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
 
 			jobContainer.AddRuns(runsFactory);
 		}
@@ -305,7 +306,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var jobContainer = new JobContainer(sumData);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\40t_Long_Haul_Truck_wrong_AUX.vecto");
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
 
 			AssertHelper.Exception<VectoException>(() => jobContainer.AddRuns(runsFactory));
 		}
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs
index 3b526ac26503e136c935f27dc50d078dd0490842..d31b86a035075047c37c57e80dfe8b8800575b46 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/DeclarationSimulationFactoryTest.cs
@@ -39,6 +39,7 @@ using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Tests.Models.Simulation
@@ -87,7 +88,8 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 
 			var inputDataProvider = xmlInputReader.CreateDeclaration(modified);
 			
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null) { Validate = false };
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
+			factory.Validate = false;
 
 			var runs = factory.SimulationRuns().ToArray();
 			Assert.AreEqual(10, runs.Length);
@@ -98,7 +100,8 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		{
 			var inputDataProvider = xmlInputReader.CreateDeclaration(SampleVehicleDecl);
 			
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null) { Validate = false };
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, null);
+			factory.Validate = false;
 
 			var runs = factory.SimulationRuns().ToArray();
 
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/FactoryTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/FactoryTest.cs
index 2df4d2c4ea6b2521cc50fb659eae9567505b127c..6ad0a6d25d3ece17af0183cc03e6b2dfaf2a15bb 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/FactoryTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/FactoryTest.cs
@@ -39,6 +39,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.OutputData.FileIO;
 using NUnit.Framework;
 using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Tests.Utils;
 
 namespace TUGraz.VectoCore.Tests.Models.Simulation
@@ -64,7 +65,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var fileWriter = new FileOutputWriter(DeclarationJobFile);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(DeclarationJobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
 
 			//factory.DataReader.SetJobFile(DeclarationJobFile);
 
@@ -115,7 +116,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var fileWriter = new FileOutputWriter(EngineeringJobFile);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
 
 			var run = factory.SimulationRuns().First();
 
@@ -132,7 +133,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		public void TestDistanceCycleInVTPEngineering()
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\VTPModeWithDistanceCycle.vecto");
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, null);
 
 			AssertHelper.Exception<VectoException>(() => factory.SimulationRuns().ToArray(), "Distance-based cycle can not be simulated in VerificationTest mode");
 		}
@@ -142,7 +143,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		public void TestDistanceCycleInEngineOnly()
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\EngineOnlyJobWithDistanceCycle.vecto");
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, null);
 
 			AssertHelper.Exception<VectoException>(() => factory.SimulationRuns().ToArray(), "Distance-based cycle can not be simulated in EngineOnly mode");
 		}
@@ -151,7 +152,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		public void TestMeasuredSpeedCycleInEngineOnly()
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\EngineOnlyJobWithMeasuredCycle.vecto");
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, null);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, null);
 
 			AssertHelper.Exception<VectoException>(() => {
 				var container = new JobContainer(null);
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
index fd782aaed4c0e9a95d953ad23803bd23b8e7caeb..4d76763414f46e796a8a0d35320ab92e767ae72f 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
@@ -44,6 +44,7 @@ using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.OutputData.FileIO;
@@ -262,7 +263,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		public void CreateJobWithLossMapEfficiency_Engineering()
 		{
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\12t Delivery Truck Engineering Efficiency.vecto");
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, null);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, dataProvider, null);
 			var jobContainer = new JobContainer(null);
 			jobContainer.AddRuns(runsFactory);
 		}
@@ -277,7 +278,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var fileWriter = new FileOutputWriter(jobFileName);
 
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFileName);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
 			var jobContainer = new JobContainer(new MockSumWriter());
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
@@ -295,7 +296,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		public void CreateJobWith_Axle_LossMapEfficiency_Declaration()
 		{
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\40t_Long_Haul_Truck with AxleEfficiency.vecto");
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, null);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, null);
 			var jobContainer = new JobContainer(null);
 
 			AssertHelper.Exception<InvalidFileFormatException>(() => jobContainer.AddRuns(runsFactory));
@@ -308,7 +309,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		public void CreateJobWith_Gear_LossMapEfficiency_Declaration()
 		{
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\40t_Long_Haul_Truck with GearEfficiency.vecto");
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, null);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, null);
 			var jobContainer = new JobContainer(null);
 
 			AssertHelper.Exception<InvalidFileFormatException>(() => jobContainer.AddRuns(runsFactory));
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs
index a04c2c93295a1901e62e51cb2e25ddba96dfdfad..478489c4b6ff93a123bf0a4b9f484dc8d7f362d6 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/MeasuredSpeedModeTest.cs
@@ -44,6 +44,7 @@ using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
@@ -374,7 +375,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var jobContainer = new JobContainer(sumWriter);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
 			runsFactory.ActualModalData = actualModData;
 			runsFactory.WriteModalResults = true;
 
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs
index feb58293ab45e117d7f28e3db711b2c76f8762aa..9f02660a5851fb2b012a36c113b346332e61c4d4 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/PwheelModeTests.cs
@@ -49,6 +49,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using NUnit.Framework;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 
 namespace TUGraz.VectoCore.Tests.Models.Simulation
 {
@@ -195,7 +196,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var jobContainer = new JobContainer(sumWriter);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
 
 			jobContainer.AddRuns(runsFactory);
 			jobContainer.Execute();
@@ -224,7 +225,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var jobContainer = new JobContainer(sumWriter);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
 
 			jobContainer.AddRuns(runsFactory);
 			jobContainer.Execute();
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/ShiftStrategyV2Test.cs b/VectoCore/VectoCoreTest/Models/Simulation/ShiftStrategyV2Test.cs
index 6cce70c95eff8275ab29dffea6752f7866d6989a..5133157a4c668c716bc7863ae2dc8e25529ad4a3 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/ShiftStrategyV2Test.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/ShiftStrategyV2Test.cs
@@ -8,6 +8,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 
@@ -40,11 +41,9 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var relativeJobPath = jobFile;
 			var writer = new FileOutputWriter(relativeJobPath);
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml" ? xmlInputReader.CreateDeclaration(relativeJobPath) : JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 
 			Assert.NotNull(((IEngineeringInputDataProvider)inputData).DriverInputData.GearshiftInputData);
 			var jobContainer = new JobContainer(new MockSumWriter());
@@ -312,11 +311,9 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var relativeJobPath = jobName;
 			var writer = new FileOutputWriter(relativeJobPath);
 			var inputData =  JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var sumWriter = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumWriter);
 
@@ -335,11 +332,9 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var relativeJobPath = jobName;
 			var writer = new FileOutputWriter(relativeJobPath);
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml" ? xmlInputReader.CreateDeclaration(relativeJobPath) : JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			var runs = factory.SimulationRuns().ToArray();
@@ -354,11 +349,9 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var relativeJobPath = jobName;
 			var writer = new FileOutputWriter(relativeJobPath);
 			var inputData = Path.GetExtension(relativeJobPath) == ".xml" ? xmlInputReader.CreateDeclaration(relativeJobPath) : JSONInputDataFactory.ReadJsonJob(relativeJobPath);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			jobContainer.AddRuns(factory);
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/SimulationPreprocessingTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/SimulationPreprocessingTest.cs
index f154d32a4a84e693d3e4313fcc84e6886e0fc211..9dd063f106fce5e053b1bd37f2b7d70e93008849 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/SimulationPreprocessingTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/SimulationPreprocessingTest.cs
@@ -10,6 +10,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
@@ -48,12 +49,11 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = Path.GetExtension(jobFile) == ".xml" ? xmlInputReader.CreateDeclaration(jobFile) : JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
@@ -89,12 +89,11 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
@@ -123,12 +122,11 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(mode, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(mode, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
@@ -232,12 +230,11 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = true,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = true;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			jobContainer.AddRuns(runsFactory);
 
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/SimulationTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/SimulationTests.cs
index 32122b7005c4b72c6b040a2bb985a22b5c2b7a9e..fa2df82d7ed1dd4d5607416c47dee22fa35c4a3e 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/SimulationTests.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/SimulationTests.cs
@@ -40,6 +40,7 @@ using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
 using NUnit.Framework;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 
 namespace TUGraz.VectoCore.Tests.Models.Simulation
 {
@@ -108,9 +109,8 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var sumWriter = new SummaryDataContainer(fileWriter);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(EngineOnlyJob);
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter) {
-				SumData = sumWriter
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			factory.SumData = sumWriter;
 
 			return factory.SimulationRuns().First();
 		}
@@ -124,7 +124,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var jobContainer = new JobContainer(sumWriter);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
 
 			jobContainer.AddRuns(runsFactory);
 			jobContainer.Execute();
diff --git a/VectoCore/VectoCoreTest/Reports/ActualModalSimulationDataTest.cs b/VectoCore/VectoCoreTest/Reports/ActualModalSimulationDataTest.cs
index 5b6bd32989afca54441b1f008b06380735226dff..cac3aadf45e2b84f1d53a0e95765dd4f728185a8 100644
--- a/VectoCore/VectoCoreTest/Reports/ActualModalSimulationDataTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/ActualModalSimulationDataTest.cs
@@ -34,6 +34,7 @@ using NUnit.Framework;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 
@@ -59,7 +60,7 @@ namespace TUGraz.VectoCore.Tests.Reports
 			var jobContainer = new JobContainer(sumData);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, fileWriter);
 			factory.WriteModalResults = true;
 			factory.ActualModalData = true;
 
diff --git a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
index c6680bc1cba6c5891213cbc1686de7832105357d..76a6f57b12d74eb29eb97738642fc3c08c67ddfb 100644
--- a/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/ModDataTest.cs
@@ -51,6 +51,7 @@ using System.IO;
 using Ninject;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Tests.Models.Simulation;
 
 namespace TUGraz.VectoCore.Tests.Reports
@@ -166,9 +167,8 @@ namespace TUGraz.VectoCore.Tests.Reports
 		{
 			var writer = new FileOutputWriter(filename);
 			var inputData = xmlInputReader.CreateDeclaration(filename);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
 			var jobContainer = new JobContainer(new MockSumWriter());
 
 			jobContainer.AddRuns(factory);
@@ -312,7 +312,8 @@ namespace TUGraz.VectoCore.Tests.Reports
 			var jobContainer = new JobContainer(sumData);
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobName);
 
-			var runsFactory = new SimulatorFactory(mode, inputData, fileWriter) { WriteModalResults = true };
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(mode, inputData, fileWriter);
+			runsFactory.WriteModalResults = true;
 
 			jobContainer.AddRuns(runsFactory);
 			var modData = new List<Tuple<ModalResults, double>>();
@@ -614,7 +615,8 @@ namespace TUGraz.VectoCore.Tests.Reports
 			var inputData = JSONInputDataFactory.ReadJsonJob(jobName);
 
 			var runsFactory =
-				new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter) { WriteModalResults = true };
+				SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter);
+			runsFactory.WriteModalResults = true;
 
 			jobContainer.AddRuns(runsFactory);
 			var modData = new List<Tuple<ModalResults, Meter>>();
diff --git a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
index c752058c0926c3108460a2f9a4fd13b4650647d1..b2beefd81de185eb27c7083ea3a6c3f762362179 100644
--- a/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
+++ b/VectoCore/VectoCoreTest/Reports/SumWriterTest.cs
@@ -51,6 +51,7 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 
 namespace TUGraz.VectoCore.Tests.Reports
@@ -235,10 +236,9 @@ namespace TUGraz.VectoCore.Tests.Reports
 				File.Delete(writer.SumFileName);
 			}
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport) {
-				WriteModalResults = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, writer, xmlReport);
+			runsFactory.WriteModalResults = false;
+			runsFactory.Validate = false;
 			jobContainer.AddRuns(runsFactory);
 			jobContainer.Execute();
 			jobContainer.WaitFinished();
@@ -292,10 +292,9 @@ namespace TUGraz.VectoCore.Tests.Reports
 
 			var writer = new FileOutputWriter(jobFile);
 			var inputData = xmlInputReader.CreateDeclaration(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var sumWriter = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumWriter);
 
@@ -324,10 +323,9 @@ namespace TUGraz.VectoCore.Tests.Reports
 
 			var writer = new FileOutputWriter(jobFile);
 			var inputData = xmlInputReader.CreateDeclaration(jobFile);
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				ActualModalData = true
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true;
+			factory.ActualModalData = true;
 			var sumWriter = new SummaryDataContainer(writer);
 			var jobContainer = new JobContainer(sumWriter);
 
diff --git a/VectoCore/VectoCoreTest/Utils/CompletedVIF.cs b/VectoCore/VectoCoreTest/Utils/CompletedVIF.cs
index 422e16c9762caf89a0367b3ef515c38e776ade62..cad4740bce7fa4013c6d113f12092b17a5cd1271 100644
--- a/VectoCore/VectoCoreTest/Utils/CompletedVIF.cs
+++ b/VectoCore/VectoCoreTest/Utils/CompletedVIF.cs
@@ -7,6 +7,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
 
@@ -26,7 +27,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 			var filename = Guid.NewGuid().ToString().Substring(0, 20);
 			var writerAsm = new FileOutputVIFWriter(filename, 0);
 
-			var factoryAsm = new SimulatorFactory(ExecutionMode.Declaration, inputDataAsm, writerAsm);
+			var factoryAsm = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataAsm, writerAsm);
 			var jobContainer = new JobContainer(new MockSumWriter());
 			jobContainer.AddRuns(factoryAsm);
 			jobContainer.Execute();
diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs
index f333143bc0587336835d882229873095f6e40667..3b8acaf915aac426e8528049a394595062d20d59 100644
--- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputTest.cs
@@ -52,6 +52,7 @@ using NUnit.Framework;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 
 namespace TUGraz.VectoCore.Tests.XML
 {
@@ -413,7 +414,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			var jobContainer = new JobContainer(sumData);
 			var dataProvider = xmlInputReader.CreateDeclaration(reader);
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
 			runsFactory.WriteModalResults = true;
 
 			jobContainer.AddRuns(runsFactory);
@@ -574,7 +575,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			var inputDataProvider = xmlInputReader.CreateDeclaration(modified);
 
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("dummy"));
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputDataProvider, new FileOutputWriter("dummy"));
 			var jobContainer = new JobContainer(null);
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs
index 6cdfeddc2fa7b8d5fca51cbcd5d303ebffda55bd..e3772a80ce8b059a7283e5c07dac95f3f3b11fe4 100644
--- a/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationInputv210.cs
@@ -8,6 +8,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData.FileIO;
 
 namespace TUGraz.VectoCore.Tests.XML
@@ -113,12 +114,11 @@ namespace TUGraz.VectoCore.Tests.XML
 			//var sumWriter = new SummaryDataContainer(fileWriter);
 			//var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = xmlInputReader.CreateDeclaration(XmlReader.Create(filename));
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = false,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = false;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			var runs = runsFactory.SimulationRuns().ToArray();
 			Assert.IsTrue(runs.Length > 0);
diff --git a/VectoCore/VectoCoreTest/XML/XMLDeclarationReaderVersionsTest.cs b/VectoCore/VectoCoreTest/XML/XMLDeclarationReaderVersionsTest.cs
index 5c9451cab2c9d0d079a328d377224f0429559af8..71ec84c6b50643ba8f083a27e149cf7fa4c17b07 100644
--- a/VectoCore/VectoCoreTest/XML/XMLDeclarationReaderVersionsTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLDeclarationReaderVersionsTest.cs
@@ -39,6 +39,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
@@ -131,11 +132,9 @@ namespace TUGraz.VectoCore.Tests.XML
 			var writer = new FileOutputWriter(jobFile);
 			var inputData = xmlInputReader.CreateDeclaration(jobFile);
 			
-			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
-				WriteModalResults = true,
-				//ActualModalData = true,
-				Validate = false
-			};
+			var factory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, inputData, writer);
+			factory.WriteModalResults = true; //ActualModalData = true,
+			factory.Validate = false;
 			var jobContainer = new JobContainer(new SummaryDataContainer(writer));
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
@@ -164,12 +163,11 @@ namespace TUGraz.VectoCore.Tests.XML
 			//var sumWriter = new SummaryDataContainer(fileWriter);
 			//var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = xmlInputReader.CreateDeclaration(XmlReader.Create(filename));
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = false,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = false;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 
 			var runs = runsFactory.SimulationRuns().ToArray();
 			Assert.IsTrue(runs.Length > 0);
diff --git a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs
index d88ce535c17b527c5cc484ba83803e2f8543feb9..769446aa76aac446623200148efdce797358f860 100644
--- a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs
@@ -37,6 +37,7 @@ using NUnit.Framework;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Utils;
@@ -78,12 +79,11 @@ namespace TUGraz.VectoCore.Tests.XML
 			var sumWriter = new SummaryDataContainer(fileWriter);
 			var jobContainer = new JobContainer(sumWriter);
 			var dataProvider = xmlInputReader.CreateDeclaration(XmlReader.Create(filename));
-			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) {
-				ModalResults1Hz = false,
-				WriteModalResults = false,
-				ActualModalData = false,
-				Validate = false,
-			};
+			var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
+			runsFactory.ModalResults1Hz = false;
+			runsFactory.WriteModalResults = false;
+			runsFactory.ActualModalData = false;
+			runsFactory.Validate = false;
 			jobContainer.AddRuns(runsFactory);
 			jobContainer.Execute();
 			jobContainer.WaitFinished();