diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index 7c9aa0b33f5fb207188ca7a7cb1b7b26d524f390..159bc878c56bc49583e567d30d6e73b14069737d 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -68,6 +68,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		private Func<ISimulatorFactory> _followingSimulatorFactoryCreator = null;
 
+		private bool _simulate = true;
+
 		public ISimulatorFactory FollowUpSimulatorFactory
 		{
 			get => CreateFollowUpSimulatorFactory ? _followingSimulatorFactoryCreator?.Invoke() : null;
@@ -86,6 +88,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		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;
@@ -174,28 +177,29 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 					DataReader = new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
 						multistageVifInputData.MultistageJobInputData,
 						reportCompleted);
-					if ((final || exempted) && inputComplete) {
-						_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);
-
-						};
+					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 {
@@ -225,7 +229,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			{
 				System.Diagnostics.Debug.Assert(multiStagePrimaryAndStageInputData.PrimaryVehicle.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
 
-				var tempOutputWriter = new TempFileOutputWriter(ReportWriter.JobFile);
+				var tempOutputWriter = new TempFileOutputWriter(ReportWriter.JobFile, ReportType.DeclarationReportManufacturerXML);
 				var originalReportWriter = ReportWriter;
 				ReportWriter = tempOutputWriter;
 
@@ -327,7 +331,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		{
 			var i = 0;
 			var warning1Hz = false;
-
+			if (!_simulate) {
+				yield break;
+			}
 			foreach (var data in DataReader.NextRun()) {
 				var current = i++;
 				var d = data;
diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
index f6b382f1f21d2de4436e25c16ed99506bbeecacd..a6a94c4656e9ca15aec0118bc3e942640ab905e1 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
@@ -46,7 +46,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 {
 	public class FileOutputWriter : LoggingObject, IOutputDataWriter
 	{
-		private readonly string _jobFile;
+		protected readonly string _jobFile;
 
 		public string JobFile => _jobFile;
 
@@ -82,7 +82,8 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 
 		public string PDFReportName => Path.ChangeExtension(_jobFile, Constants.FileExtensions.PDFReport);
 
-		public string XMLFullReportName => Path.ChangeExtension(_jobFile, "RSLT_MANUFACTURER.xml");
+		public virtual string XMLFullReportName => Path.ChangeExtension(_jobFile, "RSLT_MANUFACTURER.xml");
+
 
 		public string XMLCustomerReportName => Path.ChangeExtension(_jobFile, "RSLT_CUSTOMER.xml");
 
diff --git a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
index a6c934e957bfc19f99d42c66589c6b80f03d6c4f..94a3bd18a17460810d88c015e7d42d1dff193fbf 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
@@ -3,24 +3,42 @@ using System.Collections.Generic;
 using System.Data;
 using System.IO;
 using System.Xml.Linq;
+using Castle.Core.Internal;
 using TUGraz.VectoCommon.Models;
 
 namespace TUGraz.VectoCore.OutputData.FileIO
 {
 	public class TempFileOutputWriter : FileOutputWriter
 	{
-		private Dictionary<ReportType, XDocument> _writtenReports = new Dictionary<ReportType, XDocument>();
+		private readonly Dictionary<ReportType, XDocument> _storedReports = new Dictionary<ReportType, XDocument>();
+		private readonly HashSet<ReportType> _reportsToWrite;
 
-		public TempFileOutputWriter(string jobFile) : base(jobFile)
-		{
+		#region Overrides of FileOutputWriter
+
+		public override string XMLFullReportName => Path.ChangeExtension(_jobFile, "RSLT_MANUFACTURER_PRIMARY.xml");
+
+		#endregion
 
+		/// <summary>
+		/// Stores all written Documents by default.
+		/// </summary>
+		/// <param name="jobFile"></param>
+		/// <param name="reportsToWrite">ReportTypes specified here are written to disk</param>
+		public TempFileOutputWriter(string jobFile, params ReportType[] reportsToWrite) : base(jobFile)
+		{
+			_reportsToWrite = new HashSet<ReportType>();
+			if (!reportsToWrite.IsNullOrEmpty()) {
+				foreach (var reportType in reportsToWrite) {
+					_reportsToWrite.Add(reportType);
+				}
+			}
 		}
 
 		#region Overrides of FileOutputWriter
 
 		public override IDictionary<ReportType, string> GetWrittenFiles()
 		{
-			return new Dictionary<ReportType, string>();
+			return base.GetWrittenFiles();
 		}
 
 		#endregion
@@ -38,9 +56,11 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 				throw new ArgumentOutOfRangeException("PDF is not supported by TempFileOutputWriter");
 			}
 
-			
+			if (_reportsToWrite.Contains(type)) {
+				base.WriteReport(type, data);
+			}
 
-			_writtenReports.Add(type, data);
+			_storedReports.Add(type, data);
 		}
 
 		public override void WriteReport(ReportType type, Stream data)
@@ -52,7 +72,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 		public XDocument GetDocument(ReportType type)
 		{
 			
-			var docStored = _writtenReports.TryGetValue(type, out var report);
+			var docStored = _storedReports.TryGetValue(type, out var report);
 			if (!docStored) {
 				Log.Warn($"No Document with type {type} stored");
 			}
diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
index c635441bc2e9125381c64a632e2b8f7cbd5e55c7..9f9354c1e525a38a22eaa87e2410032e1487c166 100644
--- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs
@@ -29,6 +29,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		private FileOutputWriter _sumFileWriter;
 		private SummaryDataContainer _sumContainer;
 		private JobContainer _jobContainer;
+
+		private FileOutputWriter _fileoutputWriter;
+		private TempFileOutputWriter _tempFileOutputWriter;
 		private ExecutionMode _mode = ExecutionMode.Declaration;
 
 		private string _outputDirectory;
@@ -64,19 +67,20 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		{
 			var inputFile = Path.GetFullPath(CompletedExempted);
 			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
-			var fileWriter = StartSimulation(input);
+			StartSimulation(input);
 
 
 			while (!_jobContainer.AllCompleted) {
 				//Busy wait
 			}
 
-			var writtenFiles = fileWriter.GetWrittenFiles();
-			ShowWrittenFiles(fileWriter.GetWrittenFiles());
+			var writtenFiles = GetWrittenFiles();
+			ShowWrittenFiles(writtenFiles);
 
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML));
+			Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName));
 			
 		}
 
@@ -86,7 +90,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		{
 			var inputFile = Path.GetFullPath(InterimExempted);
 			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
-			var fileWriter = StartSimulation(input);
+			StartSimulation(input);
 
 
 			while (!_jobContainer.AllCompleted)
@@ -94,12 +98,25 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 				//Busy wait
 			}
 
-			var writtenFiles = fileWriter.GetWrittenFiles();
-			ShowWrittenFiles(fileWriter.GetWrittenFiles());
+			var writtenFiles = GetWrittenFiles();
+			ShowWrittenFiles(writtenFiles);
+
+			Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName));
+			Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName));
+			Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName));
 
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML));
+		}
+
+		private IList<string> GetWrittenFiles()
+		{
+			var files = new List<string>();
+			var outputWriters = _jobContainer.GetOutputDataWriters();
+			foreach (var outputDataWriter in outputWriters) {
+				files.AddRange(outputDataWriter.GetWrittenFiles().Values);
+			}
+
+			return files;
 		}
 
 		//SpecialCase II
@@ -108,7 +125,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		{
 			var inputFile = Path.GetFullPath(CompletedDiesel);
 			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
-			var fileWriter = StartSimulation(input);
+			StartSimulation(input);
 
 
 			while (!_jobContainer.AllCompleted)
@@ -116,12 +133,13 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 				//Busy wait
 			}
 
-			var writtenFiles = fileWriter.GetWrittenFiles();
-			ShowWrittenFiles(fileWriter.GetWrittenFiles());
+			var writtenFiles = GetWrittenFiles();
+			ShowWrittenFiles(writtenFiles);
 
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML));
+			Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName));
 
 
 		}
@@ -132,7 +150,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 		{
 			var inputFile = Path.GetFullPath(InterimDiesel);
 			var input = JSONInputDataFactory.ReadJsonJob(inputFile);
-			var fileWriter = StartSimulation(input);
+			
+			
+			StartSimulation(input);
 
 
 			while (!_jobContainer.AllCompleted)
@@ -140,19 +160,21 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 				//Busy wait
 			}
 
-			var writtenFiles = fileWriter.GetWrittenFiles();
-			ShowWrittenFiles(fileWriter.GetWrittenFiles());
+			var writtenFiles = GetWrittenFiles();
+			ShowWrittenFiles(writtenFiles);
 
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportManufacturerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportCustomerXML));
-			Assert.That(writtenFiles.ContainsKey(ReportType.DeclarationReportMultistageVehicleXML));
+			Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName));
+			Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName));
+			Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName));
+			Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName));
 		}
 
 
-		private FileOutputWriter StartSimulation(IInputDataProvider input)
+		private void StartSimulation(IInputDataProvider input)
 		{
-			var fileWriter = new FileOutputWriter(_outputDirectory);
-			var runsFactory = new SimulatorFactory(_mode, input, fileWriter)
+			_fileoutputWriter = new FileOutputWriter(_outputDirectory);
+			_tempFileOutputWriter = new TempFileOutputWriter(_outputDirectory);
+			var runsFactory = new SimulatorFactory(_mode, input, _fileoutputWriter)
 			{
 				WriteModalResults = true,
 				ModalResults1Hz = true,
@@ -166,19 +188,17 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage
 
 			_jobContainer.AddRuns(runsFactory);
 			_jobContainer.Execute();
-			return fileWriter;
 		}
 
-		private void ShowWrittenFiles(IDictionary<ReportType, string> getWrittenFiles)
+		private void ShowWrittenFiles(IList<string> writtenFiles)
 		{
-			if (getWrittenFiles.Count == 0)
+			if (writtenFiles.Count == 0)
 			{
 				TestContext.WriteLine("No Files Written");
 			}
-			foreach (var keyValuePair in getWrittenFiles)
+			foreach (var fileName in writtenFiles)
 			{
-				TestContext.WriteLine(keyValuePair.Key.ToString());
-				TestContext.WriteLine(keyValuePair.Value.ToString());
+				TestContext.WriteLine(fileName);
 			}
 		}