From 44fe474424adad994ffc12da0991fb512de277f8 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Thu, 16 Sep 2021 20:05:20 +0200
Subject: [PATCH] jobcontainer: check if runs have been added in waitFinished
 refactor tempwriter in case of chained simulation runs to allow avoiding
 writing files refactor datawriter to provide vif for next simulation run

---
 VECTO.sln                                     | 145 ++++++------------
 .../Models/Simulation/Impl/JobContainer.cs    |  24 ++-
 .../Simulation/Impl/SimulatorFactory.cs       |  11 +-
 .../OutputData/FileIO/FileOutputWriter.cs     |   2 +
 .../OutputData/FileIO/TempFileOutputWriter.cs |  53 +++++--
 VectoCore/VectoCore/OutputData/IDataWriter.cs |   4 +-
 .../Declaration/NaturalGasVehicles.cs         |   2 +
 7 files changed, 117 insertions(+), 124 deletions(-)

diff --git a/VECTO.sln b/VECTO.sln
index fb0a7c6567..54a24ad8f2 100644
--- a/VECTO.sln
+++ b/VECTO.sln
@@ -36,9 +36,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelbasedTests", "VectoCor
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{D29E62A2-CF08-469F-B29F-1B25DCB35386}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoAPI", "..\VECTO_API\VectoAPI\VectoAPI.csproj", "{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoAPI", "..\VECTO_API_DEV\VectoAPI\VectoAPI.csproj", "{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoAPI Test", "..\VECTO_API\VectoAPI Test\VectoAPI Test.csproj", "{D959CB7C-F514-4F5E-9C33-684D0012474B}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoAPI Test", "..\VECTO_API_DEV\VectoAPI Test\VectoAPI Test.csproj", "{F79D87B8-9C5A-439B-9EAD-D66386447719}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoEngineeringAPI", "..\VECTO_API\VectoEngineeringAPI\VectoEngineeringAPI.csproj", "{41314A40-AB3E-4F43-B1A4-58443F4014F2}"
 EndProject
@@ -66,8 +66,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VECTO3GUI", "VECTO3GUI\VECT
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PluginsDEV", "PluginsDEV", "{C4D97EBF-BA80-4943-9D27-33179405D8D5}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoAPI", "..\VECTO_API_DEV\VectoAPI\VectoAPI.csproj", "{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VECTO3GUI2020", "VECTO3GUI2020\VECTO3GUI2020.csproj", "{7E9172D4-07E3-4077-814E-7117AB2B3E22}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vecto3GUI2020Test", "Vecto3GUI2020Test\Vecto3GUI2020Test.csproj", "{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}"
@@ -372,52 +370,52 @@ Global
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Deploy|x64.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Deploy|x86.ActiveCfg = Debug|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Release|x64.ActiveCfg = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.Release|x86.ActiveCfg = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Deploy|x64.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Deploy|x86.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Release|x64.ActiveCfg = Release|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Release|x86.ActiveCfg = Release|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|x64.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|x86.ActiveCfg = Debug|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|x64.ActiveCfg = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|x86.ActiveCfg = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Deploy|x64.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Deploy|x86.ActiveCfg = Debug|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Release|x64.ActiveCfg = Release|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.Release|x86.ActiveCfg = Release|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
+		{F79D87B8-9C5A-439B-9EAD-D66386447719}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
@@ -738,48 +736,6 @@ Global
 		{A17C6067-4DD9-41FC-B335-39F3DE1DE6B3}.ReleaseTUG|x64.Build.0 = Release|Any CPU
 		{A17C6067-4DD9-41FC-B335-39F3DE1DE6B3}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
 		{A17C6067-4DD9-41FC-B335-39F3DE1DE6B3}.ReleaseTUG|x86.Build.0 = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|Any CPU.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|x64.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceStats|x86.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|Any CPU.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|x64.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug PerformanceTrace|x86.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|x64.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Debug|x86.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|x64.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.DebugTUG|x86.Build.0 = Debug|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|Any CPU.ActiveCfg = Deploy|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|Any CPU.Build.0 = Deploy|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|x64.ActiveCfg = Deploy|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|x64.Build.0 = Deploy|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|x86.ActiveCfg = Deploy|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Deploy|x86.Build.0 = Deploy|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|Any CPU.Build.0 = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|x64.ActiveCfg = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|x64.Build.0 = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|x86.ActiveCfg = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.Release|x86.Build.0 = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|x64.Build.0 = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2}.ReleaseTUG|x86.Build.0 = Release|Any CPU
 		{7E9172D4-07E3-4077-814E-7117AB2B3E22}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU
 		{7E9172D4-07E3-4077-814E-7117AB2B3E22}.Debug PerformanceStats|Any CPU.Build.0 = Debug|Any CPU
 		{7E9172D4-07E3-4077-814E-7117AB2B3E22}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU
@@ -917,8 +873,8 @@ Global
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 		{E8B0B447-1A54-4BEC-A160-AF0017000781} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4} = {73A5BF70-6168-456F-95E5-A1402BFA488C}
-		{512C2CD1-E5BE-4F6B-943B-2BFA7E0CBD64} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
-		{D959CB7C-F514-4F5E-9C33-684D0012474B} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
+		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
+		{F79D87B8-9C5A-439B-9EAD-D66386447719} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
 		{749F150A-F974-46DC-A1E2-F4153C54FC0D} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 		{2C58BA97-2954-4D19-920F-A24B78FC80A4} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
@@ -926,7 +882,6 @@ Global
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D} = {73A5BF70-6168-456F-95E5-A1402BFA488C}
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550} = {73A5BF70-6168-456F-95E5-A1402BFA488C}
 		{C234077C-F81E-42FA-9367-1319753678A6} = {D29E62A2-CF08-469F-B29F-1B25DCB35386}
-		{DD260CC4-7978-45E3-8646-AD4F5E6A8FA2} = {C4D97EBF-BA80-4943-9D27-33179405D8D5}
 		{E672322E-44DC-41C8-A3A4-603233C72F92} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs
index 9db07ad7cb..e8d2b01df1 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs
@@ -306,15 +306,23 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		public void WaitFinished()
 		{
-			Task[] tasks;
-			try {
-				_runsRwLock.EnterReadLock();
-				tasks = Runs.Select(r => r.RunTask).ToArray();
-			} finally {
-				_runsRwLock.ExitReadLock();
-			}
+			Task[] prevTasks;
+			Task[] tasks = {};
+			for (var i = 0; i < 5; i++) {
+				try {
+					prevTasks = tasks;
+					_runsRwLock.EnterReadLock();
+					tasks = Runs.Select(r => r.RunTask).ToArray();
+				} finally {
+					_runsRwLock.ExitReadLock();
+				}
 
-			Task.WaitAll(tasks);
+				if (prevTasks.Length != tasks.Length) {
+					Task.WaitAll(tasks);
+				} else {
+					return;
+				}
+			}
 		}
 
 		//[MethodImpl(MethodImplOptions.Synchronized)]
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index 3e1e6c78d5..cf6112ccc4 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -214,8 +214,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 							var mode = _mode;
 							var inputData =
-								inputDataReader.CreateDeclaration(((FileOutputWriter)ReportWriter)
-									.XMLMultistageReportFileName);
+								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) {
 								
 							};
@@ -229,7 +231,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			{
 				System.Diagnostics.Debug.Assert(multiStagePrimaryAndStageInputData.PrimaryVehicle.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle);
 
-				var tempOutputWriter = new TempFileOutputWriter(ReportWriter.JobFile, ReportType.DeclarationReportManufacturerXML);
+				var tempOutputWriter = new TempFileOutputWriter(ReportWriter, ReportType.DeclarationReportManufacturerXML);
 				var originalReportWriter = ReportWriter;
 				ReportWriter = tempOutputWriter;
 
@@ -237,12 +239,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 				
 				DataReader = new DeclarationModePrimaryBusVectoRunDataFactory(multiStagePrimaryAndStageInputData.PrimaryVehicle, tempPrimaryReport);
 
-
 				var reportPrimary = new XMLDeclarationReportPrimaryVehicle(ReportWriter,
 										true);
 				
-
-
 				CreateFollowUpSimulatorFactory = true;
 				_followingSimulatorFactoryCreator = (() => {
 					//replace with dependency injection 
diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
index a6a94c4656..ab736db2e5 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs
@@ -68,6 +68,8 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 			set => _numberOfManufacturingStages = value;
 		}
 
+		public XDocument MultistageXmlReport => XDocument.Load(XMLMultistageReportFileName);
+
 		public string XMLMultistageReportFileName
 		{
 			get
diff --git a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
index 94a3bd18a1..508e37e40c 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/TempFileOutputWriter.cs
@@ -8,14 +8,15 @@ using TUGraz.VectoCommon.Models;
 
 namespace TUGraz.VectoCore.OutputData.FileIO
 {
-	public class TempFileOutputWriter : FileOutputWriter
-	{
+	public class TempFileOutputWriter : LoggingObject, IOutputDataWriter //: FileOutputWriter
+    {
 		private readonly Dictionary<ReportType, XDocument> _storedReports = new Dictionary<ReportType, XDocument>();
 		private readonly HashSet<ReportType> _reportsToWrite;
+		private IOutputDataWriter BaseWriter;
 
 		#region Overrides of FileOutputWriter
 
-		public override string XMLFullReportName => Path.ChangeExtension(_jobFile, "RSLT_MANUFACTURER_PRIMARY.xml");
+		public string XMLFullReportName => Path.ChangeExtension(BaseWriter.JobFile, "RSLT_MANUFACTURER_PRIMARY.xml");
 
 		#endregion
 
@@ -24,8 +25,9 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 		/// </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)
+		public TempFileOutputWriter(IOutputDataWriter baseWriter, params ReportType[] reportsToWrite)
 		{
+			BaseWriter = baseWriter;
 			_reportsToWrite = new HashSet<ReportType>();
 			if (!reportsToWrite.IsNullOrEmpty()) {
 				foreach (var reportType in reportsToWrite) {
@@ -36,34 +38,33 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 
 		#region Overrides of FileOutputWriter
 
-		public override IDictionary<ReportType, string> GetWrittenFiles()
+		public IDictionary<ReportType, string> GetWrittenFiles()
 		{
-			return base.GetWrittenFiles();
+			return BaseWriter.GetWrittenFiles();
 		}
 
+		public int NumberOfManufacturingStages { get; set; }
+		
+		public XDocument MultistageXmlReport { get; }
+
 		#endregion
 
-		protected TempFileOutputWriter(string jobFile, int numberOfManufacturingStages) : base(jobFile,
-			numberOfManufacturingStages)
-		{
-
-		}
 
 		#region Overrides of FileOutputWriter
-		public override void WriteReport(ReportType type, XDocument data)
+		public void WriteReport(ReportType type, XDocument data)
 		{
 			if (type == ReportType.DeclarationReportPdf) {
 				throw new ArgumentOutOfRangeException("PDF is not supported by TempFileOutputWriter");
 			}
 
 			if (_reportsToWrite.Contains(type)) {
-				base.WriteReport(type, data);
+				BaseWriter.WriteReport(type, data);
 			}
 
 			_storedReports.Add(type, data);
 		}
 
-		public override void WriteReport(ReportType type, Stream data)
+		public void WriteReport(ReportType type, Stream data)
 		{
 			throw new NotImplementedException("PDF is not supported by TempFileOutputWriter");
 		}
@@ -78,5 +79,29 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 			}
 			return report;
 		}
+
+		#region Implementation of IModalDataWriter
+
+		public void WriteModData(int jobRunId, string runName, string cycleName, string runSuffix, DataTable modData)
+		{
+			BaseWriter.WriteModData(jobRunId, runName, cycleName, runSuffix, modData);
+		}
+
+		#endregion
+
+		#region Implementation of ISummaryWriter
+
+		public void WriteSumData(DataTable sortedAndFilteredTable)
+		{
+			BaseWriter.WriteSumData(sortedAndFilteredTable);
+		}
+
+		#endregion
+
+		#region Implementation of IOutputDataWriter
+
+		public string JobFile => BaseWriter.JobFile;
+
+		#endregion
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/IDataWriter.cs b/VectoCore/VectoCore/OutputData/IDataWriter.cs
index 1ab43ecc30..4d60255003 100644
--- a/VectoCore/VectoCore/OutputData/IDataWriter.cs
+++ b/VectoCore/VectoCore/OutputData/IDataWriter.cs
@@ -39,7 +39,6 @@ namespace TUGraz.VectoCore.OutputData
 	public interface IOutputDataWriter : IModalDataWriter, IReportWriter, ISummaryWriter
 	{
 		string JobFile { get; }
-		
 	}
 
 	public interface IModalDataWriter
@@ -61,6 +60,9 @@ namespace TUGraz.VectoCore.OutputData
 
 		IDictionary<ReportType, string> GetWrittenFiles();
 		int NumberOfManufacturingStages { set; }
+
+		XDocument MultistageXmlReport { get; }
+
 	}
 
 
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs b/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
index 50a2fe0a41..c37a4affed 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/NaturalGasVehicles.cs
@@ -177,6 +177,8 @@ namespace TUGraz.VectoCore.Tests.Integration.Declaration
 			set => throw new NotImplementedException();
 		}
 
+		public XDocument MultistageXmlReport { get; }
+
 		#endregion
 
 		#region Implementation of ISummaryWriter
-- 
GitLab