diff --git a/VectoCommon/VectoCommon/Models/GearboxType.cs b/VectoCommon/VectoCommon/Models/GearboxType.cs
index 0bc52ce93732ad34707c7c988a750afac9d69fab..753c5b89187216f39f4bb227ff6366848df01c19 100644
--- a/VectoCommon/VectoCommon/Models/GearboxType.cs
+++ b/VectoCommon/VectoCommon/Models/GearboxType.cs
@@ -44,7 +44,8 @@ namespace TUGraz.VectoCommon.Models
 		ATSerial, // Automatic Transmission
 		ATPowerSplit,
 		//Custom,
-		DrivingCycle
+		DrivingCycle,
+		NoGeabox
 	}
 
 	public static class GearBoxTypeHelper
diff --git a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs
index 553964b2fb4420b37f3712f47c8d4b32315d1f0b..9937f64cb79325c45164ad4cfa589356c50d87a7 100644
--- a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs
+++ b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs
@@ -128,7 +128,13 @@ namespace TUGraz.VectoCommon.Utils
 			return value == null ? null : new ConvertedSI(value.Value() * Kilo * Kilo, "g/km");
 		}
 
-		public static ConvertedSI ConvertToGramPerKiloWattHour(this SpecificFuelConsumption value)
+		public static ConvertedSI ConvertToKiloWattHourPerKiloMeter(this JoulePerMeter value)
+		{
+			return new ConvertedSI(value.Value() / 3600, "kWh/km");
+		}
+
+
+        public static ConvertedSI ConvertToGramPerKiloWattHour(this SpecificFuelConsumption value)
 		{
 			return new ConvertedSI(value.Value() * 3600e6, "g/kWh");
 		}
diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
index a826bf8aedd7c74cb93b6a4138930ddfabbe230e..1196f6c3232019969ca024b7aeadce8bd89c22a8 100644
--- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
@@ -125,6 +125,12 @@ namespace TUGraz.VectoCore.OutputData
 		void AddElectricMotor(PowertrainPosition pos);
 		KilogramPerWattSecond VehicleLineSlope(IFuelProperties fuel);
 		bool HasCombustionEngine { get; }
+		WattSecond TotalElectricMotorWorkDrive(PowertrainPosition emPos);
+		WattSecond TotalElectricMotorWorkRecuperate(PowertrainPosition emPos);
+		PerSecond ElectricMotorAverageSpeed(PowertrainPosition emPos);
+		double BatteryStartSoC();
+		double BatteryEndSoC();
+		WattSecond BatteryLoss();
 	}
 
 	public static class ModalDataContainerExtensions
diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
index 1eb813683a7d916ed5a3566569162eed27deca0a..b70dec11062203bb7ce7fb0376695ac4724e14b4 100644
--- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
@@ -82,8 +82,11 @@ namespace TUGraz.VectoCore.OutputData
 		private readonly Dictionary<FuelType, KilogramPerWattSecond> _engLine = new Dictionary<FuelType, KilogramPerWattSecond>();
 		private readonly Dictionary<FuelType, KilogramPerWattSecond> _vehLine = new Dictionary<FuelType, KilogramPerWattSecond>();
 		private List<PowertrainPosition> ElectricMotors = new List<PowertrainPosition>();
+		private Dictionary<PowertrainPosition, WattSecond> _eEmDrive = new Dictionary<PowertrainPosition, WattSecond>();
+		private Dictionary<PowertrainPosition, WattSecond> _eEmRecuperate = new Dictionary<PowertrainPosition, WattSecond>();
+		//private Dictionary<PowertrainPosition, WattSecond> _eEmDrive = new Dictionary<PowertrainPosition, WattSecond>();
 
-		public int JobRunId { get; }
+        public int JobRunId { get; }
 		public string RunName { get; }
 		public string CycleName { get; }
 		public string RunSuffix { get; private set; }
@@ -234,6 +237,56 @@ namespace TUGraz.VectoCore.OutputData
 
 		public bool HasCombustionEngine { get; set; }
 
+		public WattSecond TotalElectricMotorWorkDrive(PowertrainPosition emPos)
+		{
+			if (!ElectricMotors.Contains(emPos)) {
+				return null;
+			}
+
+			if (!_eEmDrive.ContainsKey(emPos)) {
+				_eEmDrive[emPos] = TimeIntegral<WattSecond>(
+					string.Format(ModalResultField.P_electricMotor_mech_.GetCaption(), emPos.GetName()), x => x < 0);
+			}
+
+			return -_eEmDrive[emPos];
+		}
+
+		public WattSecond TotalElectricMotorWorkRecuperate(PowertrainPosition emPos)
+		{
+			if (!ElectricMotors.Contains(emPos)) {
+				return null;
+			}
+
+			if (!_eEmRecuperate.ContainsKey(emPos)) {
+				_eEmRecuperate[emPos] = TimeIntegral<WattSecond>(
+					string.Format(ModalResultField.P_electricMotor_mech_.GetCaption(), emPos.GetName()), x => x > 0); ;
+			}
+
+			return _eEmRecuperate[emPos];
+        }
+
+		public PerSecond ElectricMotorAverageSpeed(PowertrainPosition emPos)
+		{
+			var integral = GetValues(x => x.Field<PerSecond>(string.Format(ModalResultField.n_electricMotor_.GetCaption(), emPos.GetName())).Value() *
+												x.Field<Second>(ModalResultField.simulationInterval.GetName()).Value()).Sum();
+			return (integral / Duration.Value()).SI<PerSecond>();
+        }
+
+		public double BatteryStartSoC()
+		{
+			return Data.AsEnumerable().Cast<DataRow>().First().Field<SI>(ModalResultField.BatteryStateOfCharge.GetName()).Value() * 100;
+		}
+
+		public double BatteryEndSoC()
+		{
+			return Data.AsEnumerable().Cast<DataRow>().Last().Field<SI>(ModalResultField.BatteryStateOfCharge.GetName()).Value() * 100;
+        }
+
+		public WattSecond BatteryLoss()
+		{
+			return TimeIntegral<WattSecond>(ModalResultField.P_battery_loss);
+		}
+
 		public void CalculateAggregateValues()
 		{
 			var duration = Duration;
diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
index f899c7307eb83191d9368040fae8241f40ebf550..1cc92de1fd344a9e662301688c9b1f1ebd6964b3 100644
--- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
@@ -35,6 +35,7 @@ using System.Data;
 using System.Linq;
 using System.Runtime.CompilerServices;
 using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
@@ -270,7 +271,10 @@ namespace TUGraz.VectoCore.OutputData
 		[MethodImpl(MethodImplOptions.Synchronized)]
 		protected DataRow GetResultRow(IModalDataContainer modData, VectoRunData runData)
 		{
-			UpdateTableColumns(modData.FuelData, runData.EngineData.MultipleEngineFuelModes);
+			if (modData.HasCombustionEngine) {
+				UpdateTableColumns(modData.FuelData, runData.EngineData.MultipleEngineFuelModes);
+			}
+
 			var row = Table.NewRow();
 			Table.Rows.Add(row);
 			return row;
@@ -296,7 +300,7 @@ namespace TUGraz.VectoCore.OutputData
 
 				cargoVolume = runData.VehicleData.CargoVolume;
 				vehicleLoading = runData.VehicleData.Loading;
-				gearCount = (uint)runData.GearboxData.Gears.Count;
+				gearCount = (uint?)runData.GearboxData?.Gears.Count ?? 0u;
 				passengerCount = runData.VehicleData.PassengerCount;
 			}
 
@@ -319,7 +323,14 @@ namespace TUGraz.VectoCore.OutputData
 
 			if (modData.HasCombustionEngine) {
 				WriteFuelconsumptionEntries(modData, row, vehicleLoading, cargoVolume, passengerCount, runData);
-			}
+			} else {
+				if (runData.ElectricMachinesData.Count > 0) {
+					var col = Table.Columns.Add(Fields.ElectricEnergyConsumptionPerKm, typeof(ConvertedSI));
+					col.SetOrdinal(Table.Columns[Fields.CO2_KM].Ordinal);
+					row[Fields.ElectricEnergyConsumptionPerKm] =
+						(-modData.TimeIntegral<WattSecond>(ModalResultField.P_battery_terminal) / modData.Distance).Cast<JoulePerMeter>().ConvertToKiloWattHourPerKiloMeter();
+				}
+            }
 
 			if (runData.Mission?.MissionType == MissionType.VerificationTest) {
 				var fuelsWhtc = runData.EngineData.Fuels.Select(
@@ -347,8 +358,9 @@ namespace TUGraz.VectoCore.OutputData
 			row[Fields.COASTING_TIME_SHARE] = (ConvertedSI)modData.CoastingTimeShare();
 			row[Fields.BRAKING_TIME_SHARE] = (ConvertedSI)modData.BrakingTimeShare();
 
-			row[Fields.NUM_ICE_STARTS] = (ConvertedSI)modData.NumICEStarts().SI<Scalar>();
-
+			if (runData.EngineData != null) {
+				row[Fields.NUM_ICE_STARTS] = (ConvertedSI)modData.NumICEStarts().SI<Scalar>();
+			}
 
 			if (gearCount <= 0) {
 				return;
@@ -359,7 +371,7 @@ namespace TUGraz.VectoCore.OutputData
 
 		
 
-		private static void WriteFuelconsumptionEntries(
+		private void WriteFuelconsumptionEntries(
 			IModalDataContainer modData, DataRow row, Kilogram vehicleLoading, 
 			CubicMeter cargoVolume, double? passengers, VectoRunData runData)
 		{
@@ -596,8 +608,11 @@ namespace TUGraz.VectoCore.OutputData
 			row[Fields.MAX_SPEED] = (ConvertedSI)modData.MaxSpeed().AsKmph.SI<Scalar>();
 			row[Fields.MAX_ACCELERATION] = (ConvertedSI)modData.MaxAcceleration();
 			row[Fields.MAX_DECELERATION] = (ConvertedSI)modData.MaxDeceleration();
-			row[Fields.AVG_ENGINE_SPEED] = (ConvertedSI)modData.AvgEngineSpeed().AsRPM.SI<Scalar>();
-			row[Fields.MAX_ENGINE_SPEED] = (ConvertedSI)modData.MaxEngineSpeed().AsRPM.SI<Scalar>();
+			if (runData.EngineData != null) {
+				row[Fields.AVG_ENGINE_SPEED] = (ConvertedSI)modData.AvgEngineSpeed().AsRPM.SI<Scalar>();
+				row[Fields.MAX_ENGINE_SPEED] = (ConvertedSI)modData.MaxEngineSpeed().AsRPM.SI<Scalar>();
+			}
+
 			row[Fields.AVERAGE_POS_ACC] = (ConvertedSI)modData.AverageAccelerationBelowTargetSpeed();
 			if (accTimeShare != null && decTimeShare != null && cruiseTimeShare != null) {
 				var shareSum = accTimeShare + decTimeShare + cruiseTimeShare + stopTimeShare;
@@ -628,7 +643,7 @@ namespace TUGraz.VectoCore.OutputData
 			var eGbxOut = modData.TimeIntegral<WattSecond>(gbxOutSignal, x => x > 0);
 			row[Fields.AVERAGE_GEARBOX_EFFICIENCY] = eGbxIn.IsEqual(0, 1e-9) ? 0 : (eGbxOut / eGbxIn).Value();
 
-			if (runData.GearboxData.Type.AutomaticTransmission()) {
+			if (runData.GearboxData != null && runData.GearboxData.Type.AutomaticTransmission()) {
 				var eTcIn = modData.TimeIntegral<WattSecond>(ModalResultField.P_TC_in, x => x > 0);
 				var eTcOut = eGbxIn;
 				row[Fields.AVERAGE_TORQUE_CONVERTER_EFFICIENCY_WITHOUT_LOCKUP] = eTcIn.IsEqual(0, 1e-9) ? 0 : (eTcOut / eTcIn).Value();
@@ -662,7 +677,7 @@ namespace TUGraz.VectoCore.OutputData
 			row[Fields.AVERAGE_AXLEGEAR_EFFICIENCY] = eAxlIn.IsEqual(0, 1e-9) ? 0 : (eAxlOut / eAxlIn).Value();
 		}
 
-		private static void WriteWorkEntries(IModalDataContainer modData, DataRow row, VectoRunData runData)
+		private void WriteWorkEntries(IModalDataContainer modData, DataRow row, VectoRunData runData)
 		{
 			row[Fields.E_FCMAP_POS] = modData.TotalEngineWorkPositive().ConvertToKiloWattHour();
 			row[Fields.E_FCMAP_NEG] = (-modData.TotalEngineWorkNegative()).ConvertToKiloWattHour();
@@ -700,7 +715,35 @@ namespace TUGraz.VectoCore.OutputData
 
 			row[Fields.E_AUX_ESS_MECH] = modData.WorkAuxiliariesDuringEngineStop().ConvertToKiloWattHour();
 			row[Fields.E_ICE_START] = modData.WorkEngineStart().ConvertToKiloWattHour();
-		}
+
+			foreach (var em in runData.ElectricMachinesData) {
+				var emColumns = new List<Tuple<string, ConvertedSI>>() {
+					Tuple.Create(Fields.E_EM_DRIVE_FORMAT, modData.TotalElectricMotorWorkDrive(em.Item1).ConvertToKiloWattHour()), 
+					Tuple.Create(Fields.E_EM_RECUPERATE_FORMAT, modData.TotalElectricMotorWorkRecuperate(em.Item1).ConvertToKiloWattHour()),
+					Tuple.Create(Fields.E_EM_AVG_SPEED_FORMAT, modData.ElectricMotorAverageSpeed(em.Item1).ConvertToRoundsPerMinute()),
+				};
+				foreach (var entry in emColumns) {
+					var colName = string.Format(entry.Item1, em.Item1.GetName());
+					if (!Table.Columns.Contains(colName)) {
+						var col = Table.Columns.Add(colName, typeof(ConvertedSI));
+						col.SetOrdinal(Table.Columns[Fields.E_GRAD].Ordinal + 1);
+					}
+					row[colName] = entry.Item2;
+                }
+			}
+
+			if (runData.BatteryData != null) {
+				var col = Table.Columns.Add(Fields.BatteryEndSoC, typeof(double));
+				col.SetOrdinal(Table.Columns[Fields.P_WHEEL].Ordinal);
+				col = Table.Columns.Add(Fields.BatteryStartSoC, typeof(double));
+				col.SetOrdinal(Table.Columns[Fields.P_WHEEL].Ordinal);
+				col = Table.Columns.Add(Fields.E_BAT_LOSS, typeof(ConvertedSI));
+				col.SetOrdinal(Table.Columns[Fields.P_WHEEL].Ordinal);
+				row[Fields.BatteryStartSoC] = modData.BatteryStartSoC();
+				row[Fields.BatteryEndSoC] = modData.BatteryEndSoC();
+				row[Fields.E_BAT_LOSS] = modData.BatteryLoss().ConvertToKiloWattHour();
+			}
+        }
 
 		private void WriteFullPowertrain(VectoRunData runData, DataRow row)
 		{
@@ -735,7 +778,8 @@ namespace TUGraz.VectoCore.OutputData
 		private static void WriteVehicleData(VectoRunData runData, DataRow row)
 		{
 			var data = runData.VehicleData;
-			var gbxType = runData.GearboxData.Type;
+			//if (runData.VehicleData.b)
+			var gbxType = runData.GearboxData?.Type ?? GearboxType.NoGeabox;
 
 			row[Fields.VEHICLE_MANUFACTURER] = data.Manufacturer;
 			row[Fields.VIN_NUMBER] = data.VIN;
@@ -774,6 +818,9 @@ namespace TUGraz.VectoCore.OutputData
 
 		private static void WriteEngineData(CombustionEngineData data, DataRow row)
 		{
+			if (data == null) {
+				return;
+			}
 			row[Fields.ENGINE_MANUFACTURER] = data.Manufacturer;
 			row[Fields.ENGINE_MODEL] = data.ModelName;
 			row[Fields.ENGINE_CERTIFICATION_NUMBER] = data.CertificationNumber;
@@ -819,7 +866,10 @@ namespace TUGraz.VectoCore.OutputData
 
 		private static void WriteAxlegearData(AxleGearData data, DataRow row)
 		{
-			row[Fields.AXLE_MANUFACTURER] = data.Manufacturer;
+			if (data == null) {
+				return;
+			}
+            row[Fields.AXLE_MANUFACTURER] = data.Manufacturer;
 			row[Fields.AXLE_MODEL] = data.ModelName;
 			row[Fields.AXLE_RATIO] = (ConvertedSI)data.AxleGear.Ratio.SI<Scalar>();
 			row[Fields.AXLEGEAR_CERTIFICATION_METHOD] = data.CertificationMethod.GetName();
@@ -896,7 +946,10 @@ namespace TUGraz.VectoCore.OutputData
 
 		private static void WriteGearboxData(GearboxData data, DataRow row)
 		{
-			row[Fields.GEARBOX_MANUFACTURER] = data.Manufacturer;
+			if (data == null) {
+				return;
+			}
+            row[Fields.GEARBOX_MANUFACTURER] = data.Manufacturer;
 			row[Fields.GEARBOX_MODEL] = data.ModelName;
 			row[Fields.GEARBOX_TYPE] = data.Type;
 			row[Fields.GEARBOX_CERTIFICATION_NUMBER] = data.CertificationMethod == CertificationMethod.StandardValues
@@ -1059,7 +1112,9 @@ namespace TUGraz.VectoCore.OutputData
 			public const string FCFINAL_LiterPer100M3KM = "FC-Final{0} [l/100m³km]";
 			public const string FCFINAL_LiterPer100PassengerKM = "FC-Final{0} [l/100Pkm]";
 
-			public const string CO2_KM = "CO2 [g/km]";
+			public const string ElectricEnergyConsumptionPerKm = "E_el_tot [kWh/km]";
+			
+            public const string CO2_KM = "CO2 [g/km]";
 			public const string CO2_TKM = "CO2 [g/tkm]";
 			public const string CO2_M3KM = "CO2 [g/m³km]";
 			public const string CO2_PKM = "CO2 [g/Pkm]";
@@ -1187,6 +1242,15 @@ namespace TUGraz.VectoCore.OutputData
 			public const string AIRDRAG_CERTIFICATION_METHOD = "AirDrag certification option";
 
 			public const string AVERAGE_POS_ACC = "a_avg_acc";
+
+			public const string E_EM_DRIVE_FORMAT = "E_EM_{0}_propel [kWh]";
+			public const string E_EM_RECUPERATE_FORMAT = "E_EM_{0}_recuperation [kWh]";
+			public const string E_EM_AVG_SPEED_FORMAT = "n_EM_{0}_avg [rpm]";
+
+			public const string BatteryStartSoC = "Battery Start SoC [%]";
+			public const string BatteryEndSoC = "Battery end SoC [%]";
+			public const string E_BAT_LOSS = "E_Batt_loss [kWh]";
+
 		}
-	}
+    }
 }
diff --git a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs
index fa9f3f26b725c207d2ad632a427d7c5597692b75..5f77730eb2de32457353f7ef9c5eb2ad44cacf22 100644
--- a/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/BatteryElectric/BatteryElectricTest.cs
@@ -106,10 +106,10 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 
 			var modFilename = string.Format("SimpleBatteryElectric-B4_constant_{0}-{1}_{2}_{3}.vmod", vmax, initialSoC, slope, pAuxEl);
 			const PowertrainPosition pos = PowertrainPosition.BatteryElectricB4;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 2, 22.6, largeMotor: true, pAuxEl: pAuxEl);
-
-			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
+			var run = job.Runs.First().Run;
+            var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
 
 			var data = run.GetContainer().RunData;
 			//File.WriteAllText(
@@ -141,10 +141,10 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 
 			var modFilename = string.Format("SimpleBatteryElectric-B4_acc_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
 			const PowertrainPosition pos = PowertrainPosition.BatteryElectricB4;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 2, 22.6, largeMotor: true);
-
-			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
+			var run = job.Runs.First().Run;
+            var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
 
 			run.Run();
 			Assert.IsTrue(run.FinishedWithoutErrors);
@@ -175,23 +175,26 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 
             const bool largeMotor = true;
 
-            var modFilename = string.Format("SimpleParallelHybrid-B4_cycle_{0}-{1}_{2}_{3}.vmod", declarationMission, initialSoC, payload, pAuxEl);
+            var modFilename = string.Format("SimpleParallelHybrid-B4_cycle_{0}-{1}_{2}_{3}", declarationMission, initialSoC, payload, pAuxEl);
             const PowertrainPosition pos = PowertrainPosition.BatteryElectricB4;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 2, 22.6, largeMotor: true);
+			var run = job.Runs.First().Run;
+            var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
 
-			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
-
-            var data = run.GetContainer().RunData;
+            //var data = run.GetContainer().RunData;
             //File.WriteAllText(
             //	$"{modFilename}.json",
             //	JsonConvert.SerializeObject(data, Formatting.Indented));
 
-            run.Run();
+            //run.Run();
+			job.Execute();
+			job.WaitFinished();
             Assert.IsTrue(run.FinishedWithoutErrors);
+			Assert.IsTrue(modData.Rows.Count > 0);
 
-            Assert.IsTrue(modData.Rows.Count > 0);
-            GraphWriter.Write(modFilename);
+
+            GraphWriter.Write(modFilename + ".vmod");
         }
 
         // - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - -  - - - 
@@ -229,9 +232,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 
             var modFilename = string.Format("SimpleBatteryElectric-B3_constant_{0}-{1}_{2}_{3}.vmod", vmax, initialSoC, slope, pAuxEl);
             const PowertrainPosition pos = PowertrainPosition.BatteryElectricB3;
-            var run = CreateEngineeringRun(
+            var job = CreateEngineeringRun(
                 cycle, modFilename, initialSoC, pos, 2, 22.6, largeMotor: true, pAuxEl: pAuxEl);
-
+			var run = job.Runs.First().Run;
             var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
 
             var data = run.GetContainer().RunData;
@@ -264,9 +267,9 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 
             var modFilename = string.Format("SimpleBatteryElectric-B3_acc_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
             const PowertrainPosition pos = PowertrainPosition.BatteryElectricB3;
-            var run = CreateEngineeringRun(
+            var job = CreateEngineeringRun(
                 cycle, modFilename, initialSoC, pos, 2, 22.6, largeMotor: true);
-
+			var run = job.Runs.First().Run;
             var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
 
             run.Run();
@@ -298,11 +301,12 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 
             const bool largeMotor = true;
 
-            var modFilename = string.Format("SimpleParallelHybrid-B3_cycle_{0}-{1}_{2}_{3}.vmod", declarationMission, initialSoC, payload, pAuxEl);
+            var modFilename = string.Format("SimpleParallelHybrid-B3_cycle_{0}-{1}_{2}_{3}", declarationMission, initialSoC, payload, pAuxEl);
 			const PowertrainPosition pos = PowertrainPosition.BatteryElectricB3;
-            var run = CreateEngineeringRun(
+            var job = CreateEngineeringRun(
                 cycle, modFilename, initialSoC, pos, 2, 22.6, largeMotor: true);
 
+			var run = job.Runs.First().Run;
             var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
 
             var data = run.GetContainer().RunData;
@@ -312,7 +316,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 
             run.Run();
             Assert.IsTrue(run.FinishedWithoutErrors);
-
+			job.WaitFinished();
             Assert.IsTrue(modData.Rows.Count > 0);
             GraphWriter.Write(modFilename);
         }
@@ -321,19 +325,26 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
         // =================================================
 
 
-        public static VectoRun CreateEngineeringRun(
-			DrivingCycleData cycleData, string modFileName, double initialSoc, PowertrainPosition pos, int count, double ratio, bool largeMotor = false,
-			SummaryDataContainer sumData = null, double pAuxEl = 0, Kilogram payload = null)
+        public static JobContainer CreateEngineeringRun(
+			DrivingCycleData cycleData, string modFileName, double initialSoc, PowertrainPosition pos, int count, double ratio, bool largeMotor = false, double pAuxEl = 0, Kilogram payload = null)
 		{
+			var fileWriter = new FileOutputWriter(Path.GetFileNameWithoutExtension(modFileName));
+			var sumData = new SummaryDataContainer(fileWriter);
+            var jobContainer = new JobContainer(sumData);
 			var container = CreateBatteryElectricPowerTrain(
-				cycleData, Path.GetFileNameWithoutExtension(modFileName), initialSoc, count, ratio, largeMotor, sumData, pAuxEl, pos, payload);
-			return new DistanceRun(container);
+				cycleData, modFileName, fileWriter, sumData, initialSoc, count, ratio, largeMotor,  pAuxEl, pos, payload);
+			
+			var run = new DistanceRun(container);
+			jobContainer.AddRun(run);
+			return jobContainer;
 		}
 
-		public static VehicleContainer CreateBatteryElectricPowerTrain(DrivingCycleData cycleData, string modFileName,
-			double initialBatCharge, int count, double ratio, bool largeMotor, SummaryDataContainer sumData, double pAuxEl, PowertrainPosition pos, Kilogram payload = null)
+		public static VehicleContainer CreateBatteryElectricPowerTrain(DrivingCycleData cycleData,
+			string modFileName, FileOutputWriter fileWriter, SummaryDataContainer sumData,
+			double initialBatCharge, int count, double ratio, bool largeMotor, double pAuxEl, PowertrainPosition pos,
+			Kilogram payload = null)
 		{
-			var fileWriter = new FileOutputWriter(modFileName);
+			
 			var modDataFilter = new IModalDataFilter[] { }; //new IModalDataFilter[] { new ActualModalDataFilter(), };
 			var modData = new ModalDataContainer(
 				modFileName, new IFuelProperties[] { FuelData.Diesel }, fileWriter,
@@ -388,11 +399,13 @@ namespace TUGraz.VectoCore.Tests.Integration.BatteryElectric
 				runData.AxleGearData = axleGearData;
 				runData.GearboxData = gearboxData;
 			}
+			
 			var container = new VehicleContainer(
 				ExecutionMode.Engineering, modData, x => { sumData?.Write(x, 1, 1, runData); });
+			
 			container.RunData = runData;
-
-			var es = new ElectricSystem(container);
+			
+            var es = new ElectricSystem(container);
 			var battery = new Battery(container, batteryData);
 			battery.Initialize(initialBatCharge);
 
diff --git a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
index c9c19209bd39204ba3dc65ba2744471902bbe5e8..99c43ad99f277da0702b2efda609ec344875cafa 100644
--- a/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Hybrid/ParallelHybridTest.cs
@@ -85,21 +85,24 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			const bool largeMotor = true;
 
-			var modFilename = string.Format("SimpleParallelHybrid-P2_acc_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
+			var modFilename = string.Format("SimpleParallelHybrid-P2_acc_{0}-{1}_{2}", vmax, initialSoC, slope);
 			const PowertrainPosition pos = PowertrainPosition.HybridP2;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 			
 			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
 
-			run.Run();
-			Assert.IsTrue(run.FinishedWithoutErrors);
+            //run.Run();
+			job.Execute();
+			job.WaitFinished();
+            Assert.IsTrue(run.FinishedWithoutErrors);
 
 			Assert.IsTrue(modData.Rows.Count > 0);
-			GraphWriter.Write(modFilename);
+			GraphWriter.Write(modFilename + ".vmod");
 		}
 
 		[
@@ -135,10 +138,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P2_constant_{0}-{1}_{2}_{3}.vmod", vmax, initialSoC, slope, pAuxEl);
 			const PowertrainPosition pos = PowertrainPosition.HybridP2;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true, pAuxEl: pAuxEl);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 			
 			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
@@ -188,10 +192,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P2_cycle_{0}-{1}_{2}_{3}.vmod", declarationMission, initialSoC, payload, pAuxEl);
 			const PowertrainPosition pos = PowertrainPosition.HybridP2;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true, pAuxEl: pAuxEl, payload: payload.SI<Kilogram>());
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 
 			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
@@ -203,8 +208,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			run.Run();
 			Assert.IsTrue(run.FinishedWithoutErrors);
-
-			Assert.IsTrue(modData.Rows.Count > 0);
+			job.Execute();
+			job.WaitFinished();
+            Assert.IsTrue(modData.Rows.Count > 0);
 			GraphWriter.Write(modFilename);
 		}
 
@@ -256,10 +262,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P2_stop_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
 			const PowertrainPosition pos = PowertrainPosition.HybridP2;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 			//var strategy = (DelegateParallelHybridStrategy)hybridController.Strategy;
 			//Assert.NotNull(strategy);
@@ -309,10 +316,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P3_constant_{0}-{1}_{2}_{3}.vmod", vmax, initialSoC, slope, pAuxEl);
 			const PowertrainPosition pos = PowertrainPosition.HybridP3;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true, pAuxEl: pAuxEl);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 
 			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
@@ -347,10 +355,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P3_acc_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
 			const PowertrainPosition pos = PowertrainPosition.HybridP3;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 
 			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
@@ -380,10 +389,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P3_stop_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
 			const PowertrainPosition pos = PowertrainPosition.HybridP3;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 			//var strategy = (DelegateParallelHybridStrategy)hybridController.Strategy;
 			//Assert.NotNull(strategy);
@@ -422,8 +432,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
             var modFilename = string.Format("SimpleParallelHybrid-P3_cycle_{0}-{1}_{2}_{3}.vmod", declarationMission, initialSoC, payload, pAuxEl);
             const PowertrainPosition pos = PowertrainPosition.HybridP3;
-            var run = CreateEngineeringRun(
+            var job = CreateEngineeringRun(
                 cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true, pAuxEl: pAuxEl, payload: payload.SI<Kilogram>());
+			var run = job.Runs.First().Run;
 
             var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
             Assert.NotNull(hybridController);
@@ -477,10 +488,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P4_constant_{0}-{1}_{2}_{3}.vmod", vmax, initialSoC, slope, pAuxEl);
 			const PowertrainPosition pos = PowertrainPosition.HybridP4;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true, pAuxEl: pAuxEl);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 
 			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
@@ -515,10 +527,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P4_acc_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
 			const PowertrainPosition pos = PowertrainPosition.HybridP4;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 
 			var modData = ((ModalDataContainer)((VehicleContainer)run.GetContainer()).ModData).Data;
@@ -548,10 +561,11 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 			var modFilename = string.Format("SimpleParallelHybrid-P4_stop_{0}-{1}_{2}.vmod", vmax, initialSoC, slope);
 			const PowertrainPosition pos = PowertrainPosition.HybridP4;
-			var run = CreateEngineeringRun(
+			var job = CreateEngineeringRun(
 				cycle, modFilename, initialSoC, pos, 1.0, largeMotor: true);
+			var run = job.Runs.First().Run;
 
-			var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
+            var hybridController = (HybridController)((VehicleContainer)run.GetContainer()).HybridController;
 			Assert.NotNull(hybridController);
 			//var strategy = (DelegateParallelHybridStrategy)hybridController.Strategy;
 			//Assert.NotNull(strategy);
@@ -567,12 +581,16 @@ namespace TUGraz.VectoCore.Tests.Integration.Hybrid
 
 		// =================================================
 
-		public static VectoRun CreateEngineeringRun(DrivingCycleData cycleData, string modFileName, double initialSoc, PowertrainPosition pos, double ratio, bool largeMotor = false,
-			SummaryDataContainer sumData = null, double pAuxEl = 0, Kilogram payload = null)
+		public static JobContainer CreateEngineeringRun(DrivingCycleData cycleData, string modFileName, double initialSoc, PowertrainPosition pos, double ratio, bool largeMotor = false, double pAuxEl = 0, Kilogram payload = null)
 		{
-			var container = CreateParallelHybridPowerTrain(
+			var fileWriter = new FileOutputWriter(Path.GetFileNameWithoutExtension(modFileName));
+			var sumData = new SummaryDataContainer(fileWriter);
+			var jobContainer = new JobContainer(sumData);
+            var container = CreateParallelHybridPowerTrain(
 				cycleData, Path.GetFileNameWithoutExtension(modFileName), initialSoc, largeMotor, sumData, pAuxEl, pos, ratio, payload);
-			return new DistanceRun(container);
+			var run = new DistanceRun(container);
+			jobContainer.AddRun(run);
+			return jobContainer;
 		}
 
 		public static VectoRun CreateConventionalEngineeringRun(DrivingCycleData cycleData, string modFileName, 
diff --git a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
index a8c1d2980902cb3467ec7abcc60569b4bcba2099..8e0636dc002b0266839f87aebc2dd7122cdec113 100644
--- a/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockModalDataContainer.cs
@@ -271,6 +271,35 @@ namespace TUGraz.VectoCore.Tests.Utils
 		}
 
 		public bool HasCombustionEngine { get; set; }
+		public WattSecond TotalElectricMotorWorkDrive(PowertrainPosition emPos)
+		{
+			throw new NotImplementedException();
+		}
+
+		public WattSecond TotalElectricMotorWorkRecuperate(PowertrainPosition emPos)
+		{
+			throw new NotImplementedException();
+		}
+
+		public PerSecond ElectricMotorAverageSpeed(PowertrainPosition emPos)
+		{
+			throw new NotImplementedException();
+		}
+
+		public double BatteryStartSoC()
+		{
+			throw new NotImplementedException();
+		}
+
+		public double BatteryEndSoC()
+		{
+			throw new NotImplementedException();
+		}
+
+		public WattSecond BatteryLoss()
+		{
+			throw new NotImplementedException();
+		}
 
 		public string RunName { get; set; }
 		public string CycleName { get; set; }