diff --git a/VECTO/GUI/F_MAINForm.vb b/VECTO/GUI/F_MAINForm.vb
index fd3cb1091f760e5eb044e9c6c7322e88cc028ade..98e7a7f43aaa9c2096dffde4ab75811249e8e711 100644
--- a/VECTO/GUI/F_MAINForm.vb
+++ b/VECTO/GUI/F_MAINForm.vb
@@ -1555,12 +1555,12 @@ Imports System.Text
 		Dim sumWriter As SummaryFileWriter = New SummaryFileWriter(sumFileName)
 		Dim jobContainer As JobContainer = New JobContainer(sumWriter)
 
-		Dim mode As SimulatorFactory.FactoryMode
+		Dim mode As ExecutionMode
 
 		If Cfg.DeclMode Then
-			mode = SimulatorFactory.FactoryMode.DeclarationMode
+			mode = ExecutionMode.Declaration
 		Else
-			mode = SimulatorFactory.FactoryMode.EngineeringMode
+			mode = ExecutionMode.Engineering
 		End If
 
 		Dim doneProcesses As List(Of String) = New List(Of String)
diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs
index 4aebaf9c7c89c3873816a90e447fa4819b6b3062..f57b2aca732a8693bcc8ecce04b6016d0e211bef 100644
--- a/VectoConsole/Program.cs
+++ b/VectoConsole/Program.cs
@@ -20,7 +20,6 @@ using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Reflection;
-using System.Runtime.Remoting.Channels;
 using System.Threading;
 using NLog;
 using NLog.Config;
@@ -129,9 +128,9 @@ Examples:
                 var sumWriter = new SummaryFileWriter(sumFileName);
                 jobContainer = new JobContainer(sumWriter);
 
-                var mode = SimulatorFactory.FactoryMode.DeclarationMode;
+                var mode = ExecutionMode.Declaration;
                 if (args.Contains("-eng")) {
-                    mode = SimulatorFactory.FactoryMode.EngineeringMode;
+                    mode = ExecutionMode.Engineering;
                     Console.ForegroundColor = ConsoleColor.White;
                     Console.WriteLine(
                         "Switching to Engineering Mode. Make sure the job-file is saved in engineering mode!");
diff --git a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs
index 7c5bef2458a04d1b0c683fe84a3ae3194d87495a..88e8d97be910d2d6d9b433edc5530e72aced0b56 100644
--- a/VectoCore/Models/Simulation/Data/ModalDataWriter.cs
+++ b/VectoCore/Models/Simulation/Data/ModalDataWriter.cs
@@ -25,7 +25,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 {
 	public class ModalDataWriter : IModalDataWriter
 	{
-		private readonly SimulatorFactory.FactoryMode _mode;
+		private readonly ExecutionMode _mode;
 		private readonly Action<ModalDataWriter> _addReportResult;
 		private ModalResults Data { get; set; }
 		private DataRow CurrentRow { get; set; }
@@ -36,10 +36,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		public VectoRun.Status RunStatus { get; protected set; }
 
 		public ModalDataWriter(string modFileName,
-			SimulatorFactory.FactoryMode mode = SimulatorFactory.FactoryMode.EngineeringMode) : this(modFileName, _ => {}, mode) {}
+			ExecutionMode mode = ExecutionMode.Engineering) : this(modFileName, _ => {}, mode) {}
 
 		public ModalDataWriter(string modFileName, Action<ModalDataWriter> addReportResult,
-			SimulatorFactory.FactoryMode mode = SimulatorFactory.FactoryMode.EngineeringMode)
+			ExecutionMode mode = ExecutionMode.Engineering)
 		{
 			HasTorqueConverter = false;
 			ModFileName = modFileName;
@@ -64,7 +64,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 
 			RunStatus = runStatus;
 
-			if (_mode != SimulatorFactory.FactoryMode.EngineOnlyMode) {
+			if (_mode != ExecutionMode.EngineOnly) {
 				dataColumns.AddRange(new[] {
 					ModalResultField.simulationInterval,
 					ModalResultField.dist,
@@ -89,7 +89,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 				ModalResultField.Paux
 			});
 
-			if (_mode != SimulatorFactory.FactoryMode.EngineOnlyMode) {
+			if (_mode != ExecutionMode.EngineOnly) {
 				dataColumns.AddRange(new[] {
 					ModalResultField.Gear,
 					ModalResultField.PlossGB,
@@ -118,11 +118,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 				.Concat((Auxiliaries.Values.Select(c => c.ColumnName)))
 				.Concat(new[] { ModalResultField.FCMap, ModalResultField.FCAUXc, ModalResultField.FCWHTCc }.Select(x => x.GetName()));
 
-			if (_mode != SimulatorFactory.FactoryMode.DeclarationMode || WriteModalResults) {
+			if (_mode != ExecutionMode.Declaration || WriteModalResults) {
 				VectoCSVFile.Write(ModFileName, new DataView(Data).ToTable(false, strCols.ToArray()));
 			}
 
-			if (_mode == SimulatorFactory.FactoryMode.DeclarationMode) {
+			if (_mode == ExecutionMode.Declaration) {
 				_addReportResult(this);
 			}
 		}
diff --git a/VectoCore/Models/Simulation/DataBus/IDataBus.cs b/VectoCore/Models/Simulation/DataBus/IDataBus.cs
index b012afa72bff5f364d1db688adf612131a1b932f..60850eb1eaf16d2a8eb8a7ff13ea205e200386aa 100644
--- a/VectoCore/Models/Simulation/DataBus/IDataBus.cs
+++ b/VectoCore/Models/Simulation/DataBus/IDataBus.cs
@@ -14,8 +14,8 @@
 * limitations under the Licence.
 */
 
+using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Models.SimulationComponent;
-using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.Simulation.DataBus
 {
@@ -23,5 +23,8 @@ namespace TUGraz.VectoCore.Models.Simulation.DataBus
 	/// Defines interfaces for all different cockpits to access shared data of the powertrain.
 	/// </summary>
 	public interface IDataBus : IGearboxInfo, IEngineInfo, IVehicleInfo, IMileageCounter, IClutchInfo, IBrakes,
-		IRoadLookAhead, IDriverInfo {}
+		IRoadLookAhead, IDriverInfo
+	{
+		ExecutionMode ExecutionMode { get; set; }
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index 212144642a433f7f74087f0e9214da221661127a..a6a28b60492231d1e3678682ab484c1d83dee121 100644
--- a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -28,32 +28,32 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.Simulation.Impl
 {
+	public enum ExecutionMode
+	{
+		Engineering,
+		Declaration,
+		EngineOnly,
+	}
+
 	public class SimulatorFactory : LoggingObject
 	{
 		private static int _jobNumberCounter;
 
-		public enum FactoryMode
-		{
-			EngineeringMode,
-			DeclarationMode,
-			EngineOnlyMode,
-		};
-
-		private FactoryMode _mode;
+		private readonly ExecutionMode _mode;
 
-		public SimulatorFactory(FactoryMode mode, string jobFile)
+		public SimulatorFactory(ExecutionMode mode, string jobFile)
 		{
 			Log.Fatal("########## VectoCore Version {0} ##########", Assembly.GetExecutingAssembly().GetName().Version);
 			JobNumber = Interlocked.Increment(ref _jobNumberCounter);
 			_mode = mode;
 			switch (mode) {
-				case FactoryMode.DeclarationMode:
+				case ExecutionMode.Declaration:
 					DataReader = new DeclarationModeSimulationDataReader();
 					break;
-				case FactoryMode.EngineeringMode:
+				case ExecutionMode.Engineering:
 					DataReader = new EngineeringModeSimulationDataReader();
 					break;
-				case FactoryMode.EngineOnlyMode:
+				case ExecutionMode.EngineOnly:
 					DataReader = new EngineOnlySimulationDataReader();
 					break;
 				default:
@@ -62,7 +62,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			DataReader.SetJobFile(jobFile);
 		}
 
-		public ISimulationDataReader DataReader { get; private set; }
+		public ISimulationDataReader DataReader { get; }
 
 		public SummaryFileWriter SumWriter { get; set; }
 
diff --git a/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
index a5fe6a442f06e6ef30ca8737dc637b82cefee43a..31ec72675520e73c67b8a3d93e1210a252edd1bc 100644
--- a/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
+++ b/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
@@ -150,10 +150,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		#endregion
 
-		public VehicleContainer(IModalDataWriter dataWriter = null, WriteSumData writeSumData = null)
+		public VehicleContainer(IModalDataWriter dataWriter = null, WriteSumData writeSumData = null,
+			ExecutionMode executionMode = ExecutionMode.Declaration)
 		{
 			DataWriter = dataWriter;
 			WriteSumData = writeSumData ?? delegate {};
+			ExecutionMode = executionMode;
 		}
 
 		#region IVehicleContainer
@@ -296,5 +298,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		{
 			get { return Road == null ? 0.SI<Meter>() : Road.CycleStartDistance; }
 		}
+
+		public ExecutionMode ExecutionMode { get; set; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs b/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs
index 81c55a421e4f8ea03c400dec81b973398dba029e..e3ab0d5710cb6ea6ea3155a3050dd0cb3ed00f0d 100644
--- a/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs
+++ b/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs
@@ -45,6 +45,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 		private readonly PerSecond _maxSpeed = double.NegativeInfinity.SI<PerSecond>();
 		private readonly PerSecond _minSpeed = double.PositiveInfinity.SI<PerSecond>();
 
+		/// <summary>
+		/// True if the last access to GetInTorque was an extrapolation.
+		/// </summary>
+		public bool Extrapolated
+		{
+			get { return _lossMap.Extrapolated; }
+		}
 
 		public string GearName { get; protected set; }
 
@@ -145,20 +152,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 		/// <returns>Torque needed at input side (towards the engine).</returns>
 		public NewtonMeter GetInTorque(PerSecond inAngularVelocity, NewtonMeter outTorque)
 		{
-			try {
-				var inTorque = _lossMap.Interpolate(inAngularVelocity.Value(), outTorque.Value()).SI<NewtonMeter>();
-				Log.Debug("GearboxLoss {0}: {1}", GearName, inTorque - outTorque);
-
-				// todo (MK, 2015-12-07): extrapolate?
+			var inTorque = _lossMap.Interpolate(inAngularVelocity.Value(), outTorque.Value(), true).SI<NewtonMeter>();
 
-				// Limit input torque to a maximum value without losses (just torque/ratio)
-				return VectoMath.Max(inTorque, outTorque / _ratio);
-			} catch (VectoException) {
-				Log.Error("{0} - Failed to interpolate in TransmissionLossMap. angularVelocity: {1}, torque: {2}", GearName,
-					inAngularVelocity, outTorque);
+			// Limit input torque to a maximum value without losses (just torque/ratio)
+			inTorque = VectoMath.Max(inTorque, outTorque / _ratio);
 
-				return outTorque / _ratio;
-			}
+			Log.Debug("GearboxLoss {0}: {1}, inAngularVelocity: {2}, outTorque: {3}", GearName, inTorque - outTorque,
+				inAngularVelocity, outTorque);
+			return inTorque;
 		}
 
 		/// <summary>
diff --git a/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs b/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
index afc1ab8c0c930f151641e82fb7aa2c5eb729f8a8..adbea03ff4114bbb5c761f93830bc801a472c569 100644
--- a/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
@@ -14,6 +14,7 @@
 * limitations under the Licence.
 */
 
+using TUGraz.VectoCore.Exceptions;
 using TUGraz.VectoCore.Models.Connector.Ports;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
@@ -82,8 +83,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		protected override void DoCommitSimulationStep()
 		{
+			if (_gearData.LossMap.Extrapolated) {
+				// todo (MK, 2015-12-14): should we throw an interpolation error in EngineOnly Mode also?
+				if (DataBus.ExecutionMode == ExecutionMode.Declaration) {
+					throw new VectoException("AxleGear LossMap data was extrapolated: range for loss map is not sufficient.");
+				} else {
+					Log.Warn("AxleGear LossMap data was extrapolated.");
+				}
+			}
 			Loss = null;
-			// nothing to commit
 		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
index 35ae89a43c8aaa2f8f026c28e896e03bb522c0b2..b230e1343350ca4d8204db09cdcc43d1534a127f 100644
--- a/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
@@ -22,6 +22,7 @@ using TUGraz.VectoCore.Models.Connector.Ports.Impl;
 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.SimulationComponent.Data;
 using TUGraz.VectoCore.Utils;
 
@@ -383,6 +384,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		protected override void DoCommitSimulationStep()
 		{
+			if (!_disengaged) {
+				if (Data.Gears[Gear].LossMap.Extrapolated) {
+					// todo (MK, 2015-12-14): should we throw an interpolation error in EngineOnly Mode also?
+					if (DataBus.ExecutionMode == ExecutionMode.Declaration) {
+						throw new VectoException("Gear {0} LossMap data was extrapolated: range for loss map is not sufficient.", Gear);
+					} else {
+						Log.Warn("Gear {0} LossMap data was extrapolated: range for loss map is not sufficient.", Gear);
+					}
+				}
+			}
+
 			_powerLoss = null;
 			_powerLossInertia = null;
 		}
diff --git a/VectoCore/Utils/DelauneyMap.cs b/VectoCore/Utils/DelauneyMap.cs
index 1dbd4624b61a0b199e345f3d34679c826eb90a01..e8b7186c986a8a2c44eff2192c86a40a8183cc33 100644
--- a/VectoCore/Utils/DelauneyMap.cs
+++ b/VectoCore/Utils/DelauneyMap.cs
@@ -70,21 +70,30 @@ namespace TUGraz.VectoCore.Utils
 			_triangles = triangles.FindAll(t => !t.SharesVertexWith(superTriangle));
 		}
 
-		public double Interpolate(double x, double y)
+		public double Interpolate(double x, double y, bool allowExtrapolation = false)
 		{
-			var tr = _triangles.Find(triangle => triangle.IsInside(x, y, exact: true));
-			if (tr == null) {
-				Log.Info("Exact search found no fitting triangle. Approximation will be used.");
-				tr = _triangles.Find(triangle => triangle.IsInside(x, y, exact: false));
-				if (tr == null) {
-					throw new VectoException("Interpolation failed. x: {0}, y: {1}", x, y);
-				}
+			var tr = _triangles.Find(triangle => triangle.IsInside(x, y, exact: true)) ??
+					_triangles.Find(triangle => triangle.IsInside(x, y, exact: false));
+
+			if (tr != null) {
+				Extrapolated = false;
+				var plane = new Plane(tr);
+				return (plane.W - plane.X * x - plane.Y * y) / plane.Z;
+			}
+
+			if (!allowExtrapolation) {
+				throw new VectoException("Interpolation failed. x: {0}, y: {1}", x, y);
 			}
 
-			var plane = new Plane(tr);
-			return (plane.W - plane.X * x - plane.Y * y) / plane.Z;
+			// todo: extrapolate
+			Extrapolated = true;
+
+
+			return y;
 		}
 
+		public bool Extrapolated { get; set; }
+
 		public DelauneyMap CreateInvertedMap()
 		{
 			var reverted = new DelauneyMap();
diff --git a/VectoCore/Utils/VectoMath.cs b/VectoCore/Utils/VectoMath.cs
index 56e72de52e0029cee02f920beb2371fb74495f05..bb643114899d1e05efa543e8f336b295981d4701 100644
--- a/VectoCore/Utils/VectoMath.cs
+++ b/VectoCore/Utils/VectoMath.cs
@@ -232,9 +232,15 @@ namespace TUGraz.VectoCore.Utils
 			P3 = p3;
 		}
 
+		/// <summary>
+		/// Barycentric Technique: http://www.blackpawn.com/texts/pointinpoly/default.html
+		/// </summary>
+		/// <param name="x"></param>
+		/// <param name="y"></param>
+		/// <param name="exact"></param>
+		/// <returns></returns>
 		public bool IsInside(double x, double y, bool exact)
 		{
-			//Barycentric Technique: http://www.blackpawn.com/texts/pointinpoly/default.html
 			var v0X = P3.X - P1.X;
 			var v0Y = P3.Y - P1.Y;
 			var v1X = P2.X - P1.X;
diff --git a/VectoCoreTest/Integration/DeclarationReportTest.cs b/VectoCoreTest/Integration/DeclarationReportTest.cs
index f13988905e3f26843a887b7ef5830630d523b875..d515658dcd55dbcc006a57855f10798f11a2f0b0 100644
--- a/VectoCoreTest/Integration/DeclarationReportTest.cs
+++ b/VectoCoreTest/Integration/DeclarationReportTest.cs
@@ -38,7 +38,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var sumWriter = new SummaryFileWriter(@"job-report.vsum");
 			var jobContainer = new JobContainer(sumWriter);
-			var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode, @"TestData\Jobs\job-report.vecto");
+			var factory = new SimulatorFactory(ExecutionMode.Declaration, @"TestData\Jobs\job-report.vecto");
 
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
diff --git a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs
index cd26e4ce82c119758f25dec81b6db179689685d4..a6359ad725c0b45208adeafd6fd28c6210b996e7 100644
--- a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs
+++ b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs
@@ -14,9 +14,7 @@
 * limitations under the Licence.
 */
 
-using System.Data;
 using System.IO;
-using System.Linq;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using TUGraz.VectoCore.FileIO.Reader;
 using TUGraz.VectoCore.FileIO.Reader.Impl;
@@ -61,7 +59,7 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle
 			var dt = 1.SI<Second>();
 
 			var modFile = Path.GetRandomFileName() + ".vmod";
-			var dataWriter = new ModalDataWriter(modFile, SimulatorFactory.FactoryMode.EngineOnlyMode);
+			var dataWriter = new ModalDataWriter(modFile, ExecutionMode.EngineOnly);
 
 			foreach (var cycleEntry in data.Entries) {
 				var response = port.Request(absTime, dt, cycleEntry.EngineTorque, cycleEntry.EngineSpeed);
diff --git a/VectoCoreTest/Integration/FullCycleDeclarationTest.cs b/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
index 9544f12171c658c9ef0b4e32de7c3a4826c257dd..cda51e3e839aade55c6d9545cb577d3bd71832d0 100644
--- a/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
+++ b/VectoCoreTest/Integration/FullCycleDeclarationTest.cs
@@ -33,7 +33,7 @@ namespace TUGraz.VectoCore.Tests.Integration
     public class FullCycleDeclarationTest
     {
         public const string TruckDeclarationJob =
-            @"TestData\Integration\DeclarationMode\40t Truck\40t_Long_Haul_Truck.vecto";
+            @"TestData\Integration\Declaration\40t Truck\40t_Long_Haul_Truck.vecto";
 
 
         [TestMethod]
@@ -141,7 +141,7 @@ namespace TUGraz.VectoCore.Tests.Integration
         {
             LogManager.DisableLogging();
 
-            var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode, TruckDeclarationJob);
+            var factory = new SimulatorFactory(ExecutionMode.Declaration, TruckDeclarationJob);
             factory.WriteModalResults = true;
             var sumFileName = Path.GetFileNameWithoutExtension(TruckDeclarationJob) + Constants.FileExtensions.SumFile;
             var sumWriter = new SummaryFileWriter(sumFileName);
@@ -159,7 +159,7 @@ namespace TUGraz.VectoCore.Tests.Integration
         [TestMethod, Ignore]
         public void Truck40t_RegionalDeliveryCycle_RefLoad_Declaration()
         {
-            var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode,
+            var factory = new SimulatorFactory(ExecutionMode.Declaration,
                 @"c:\Users\Technik\Downloads\40t Long Haul Truck\40t_Long_Haul_Truck.vecto");
             factory.WriteModalResults = true;
             factory.SumWriter = new SummaryFileWriter("Test.vsum");
@@ -175,7 +175,7 @@ namespace TUGraz.VectoCore.Tests.Integration
         public void Truck12t_LongHaulCycle_RefLoad_Declaration()
         {
             // TODO: fails due to interpolaion failure in Gear 4
-            var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode,
+            var factory = new SimulatorFactory(ExecutionMode.Declaration,
                 @"c:\Users\Technik\Downloads\12t Delivery Truck\12t Delivery Truck.vecto") {
                     WriteModalResults = true,
                     SumWriter = new SummaryFileWriter("Test.vsum")
@@ -192,7 +192,7 @@ namespace TUGraz.VectoCore.Tests.Integration
         public void Truck12t_UrbanDeliveryCycle_RefLoad_Declaration()
         {
             // TODO: fails due to interpolaion failure in Gear 4
-            var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode,
+            var factory = new SimulatorFactory(ExecutionMode.Declaration,
                 @"c:\Users\Technik\Downloads\12t Delivery Truck\12t Delivery Truck.vecto") {
                     WriteModalResults = true,
                     SumWriter = new SummaryFileWriter("Test.vsum")
diff --git a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
index 9025fae8f5188f42f918a2c02df717810672028d..0add9b27262c6e4422ad9d5ce0e1722d91599009 100644
--- a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
+++ b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
@@ -260,7 +260,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			var sumWriter = new SummaryFileWriter(@"job.vsum");
 			var jobContainer = new JobContainer(sumWriter);
 
-			var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.EngineeringMode, @"TestData\job.vecto");
+			var factory = new SimulatorFactory(ExecutionMode.Engineering, @"TestData\job.vecto");
 
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
diff --git a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
index 173aa9d64bb0087a5bd89eb98516ec69dda84d3d..7d6e073f2f31ed6176e5fb5969458fa3f0a0df88 100644
--- a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
+++ b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
@@ -1,4 +1,4 @@
-/*
+/*
 * Copyright 2015 European Union
 *
 * Licensed under the EUPL (the "Licence");
@@ -142,7 +142,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 				response = cyclePort.Request(absTime, ds);
 				response.Switch().
 					Case<ResponseDrivingCycleDistanceExceeded>(r => ds = r.MaxDistance).
-					Case<ResponseCycleFinished>(r => { }).
+					Case<ResponseCycleFinished>(r => {}).
 					Case<ResponseSuccess>(r => {
 						vehicleContainer.CommitSimulationStep(absTime, r.SimulationInterval);
 						absTime += r.SimulationInterval;
@@ -176,8 +176,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 
 			var driverData = CreateDriverData(AccelerationFile2);
 
-			var modalWriter = new ModalDataWriter("Coach_MinimalPowertrainOverload.vmod",
-				SimulatorFactory.FactoryMode.EngineeringMode);
+			var modalWriter = new ModalDataWriter("Coach_MinimalPowertrainOverload.vmod", ExecutionMode.Engineering);
 			var vehicleContainer = new VehicleContainer(modalWriter);
 
 			var cycle = new DistanceBasedDrivingCycle(vehicleContainer, cycleData);
diff --git a/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCoreTest/Models/Simulation/AuxTests.cs
index bfa5c511e4e5106581d2920544003a61b105ec19..3d2ff309510f7c3f90e05345cf8256a4b8c0054e 100644
--- a/VectoCoreTest/Models/Simulation/AuxTests.cs
+++ b/VectoCoreTest/Models/Simulation/AuxTests.cs
@@ -27,313 +27,313 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 
 namespace TUGraz.VectoCore.Tests.Models.Simulation
 {
-    [TestClass]
-    public class AuxTests
-    {
-        [TestMethod]
-        public void AuxWriteModFileSumFile()
-        {
-            var dataWriter = new ModalDataWriter(@"AuxWriteModFileSumFile.vmod");
-            dataWriter.AddAuxiliary("FAN");
-            dataWriter.AddAuxiliary("PS");
-            dataWriter.AddAuxiliary("STP");
-            dataWriter.AddAuxiliary("ES");
-            dataWriter.AddAuxiliary("AC");
-
-            var sumWriter = new SummaryFileWriter(@"AuxWriteModFileSumFile.vsum");
-            var container = new VehicleContainer(dataWriter,
-                (writer, mass, loading) => sumWriter.WriteFullPowertrain(dataWriter, "", "", "", null, null));
-            var data = DrivingCycleDataReader.ReadFromFileDistanceBased(@"TestData\Cycles\LongHaul_short.vdri");
-            var mockcycle = new MockDrivingCycle(container, data);
-            var port = new MockTnOutPort();
-
-            var aux = new Auxiliary(container);
-            aux.InPort().Connect(port);
-
-            var hdvClass = VehicleClass.Class5;
-            var mission = MissionType.LongHaul;
-
-            aux.AddConstant("FAN",
-                DeclarationData.Fan.Lookup(MissionType.LongHaul, "Hydraulic driven - Constant displacement pump"));
-            aux.AddConstant("PS", DeclarationData.PneumaticSystem.Lookup(mission, hdvClass));
-            aux.AddConstant("STP",
-                DeclarationData.SteeringPump.Lookup(MissionType.LongHaul, hdvClass, "Variable displacement"));
-            aux.AddConstant("ES", DeclarationData.ElectricSystem.Lookup(mission, null));
-            aux.AddConstant("AC",
-                DeclarationData.HeatingVentilationAirConditioning.Lookup(mission, hdvClass));
-
-            var speed = 1400.RPMtoRad();
-            var torque = 500.SI<NewtonMeter>();
-            var t = 0.SI<Second>();
-            var dt = 1.SI<Second>();
-
-            for (var i = 0; i < 11; i++) {
-                aux.OutPort().Request(t, dt, torque, speed);
-                dataWriter[ModalResultField.dist] = i.SI<Meter>();
-                dataWriter[ModalResultField.Pe_eng] = 0.SI<Watt>();
-                dataWriter[ModalResultField.acc] = 0.SI<MeterPerSquareSecond>();
-                container.CommitSimulationStep(t, dt);
-                t += dt;
-            }
-
-            container.FinishSimulation();
-            sumWriter.Finish();
-
-            //todo: add aux columns to test
-            var testColumns = new[] { "Paux_FAN", "Paux_STP", "Paux_AC", "Paux_ES", "Paux_PS", "Paux" };
-
-            ResultFileHelper.TestModFile(
-                @"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck_Long_Haul_Empty Loading.vmod",
-                @"AuxWriteModFileSumFile.vmod", testColumns, testRowCount: false);
-            ResultFileHelper.TestSumFile(@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck.vsum",
-                @"AuxWriteModFileSumFile.vsum");
-        }
-
-        [TestMethod]
-        public void AuxConstant()
-        {
-            var dataWriter = new MockModalDataWriter();
-            var container = new VehicleContainer(dataWriter);
-            var port = new MockTnOutPort();
-            var aux = new Auxiliary(container);
-            aux.InPort().Connect(port);
-
-            var constPower = 1200.SI<Watt>();
-            aux.AddConstant("CONSTANT", constPower);
-
-            var speed = 2358.RPMtoRad();
-            var torque = 500.SI<NewtonMeter>();
-            var t = 0.SI<Second>();
-            aux.OutPort().Request(t, t, torque, speed);
-            Assert.AreEqual(speed, port.AngularVelocity);
-            var newTorque = torque + constPower / speed;
-            AssertHelper.AreRelativeEqual(port.Torque, newTorque);
-
-            speed = 2358.RPMtoRad();
-            torque = 1500.SI<NewtonMeter>();
-            aux.OutPort().Request(t, t, torque, speed);
-            Assert.AreEqual(speed, port.AngularVelocity);
-            newTorque = torque + constPower / speed;
-            AssertHelper.AreRelativeEqual(port.Torque, newTorque);
-
-            speed = 1500.RPMtoRad();
-            torque = 1500.SI<NewtonMeter>();
-            aux.OutPort().Request(t, t, torque, speed);
-            Assert.AreEqual(speed, port.AngularVelocity);
-            newTorque = torque + constPower / speed;
-            AssertHelper.AreRelativeEqual(port.Torque, newTorque);
-        }
-
-        [TestMethod]
-        public void AuxDirect()
-        {
-            var dataWriter = new MockModalDataWriter();
-            var container = new VehicleContainer(dataWriter);
-            var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
-            var cycle = new MockDrivingCycle(container, data);
-            var port = new MockTnOutPort();
-            var aux = new Auxiliary(container);
-            aux.InPort().Connect(port);
-
-            aux.AddDirect(cycle);
-
-            var speed = 2358.RPMtoRad();
-            var torque = 500.SI<NewtonMeter>();
-
-            var t = 0.SI<Second>();
-
-            var expected = new[] { 6100, 3100, 2300, 4500, 6100 };
-            foreach (var e in expected) {
-                aux.OutPort().Request(t, t, torque, speed);
-                Assert.AreEqual(speed, port.AngularVelocity);
-                var newTorque = torque + e.SI<Watt>() / speed;
-                AssertHelper.AreRelativeEqual(port.Torque, newTorque);
-
-                cycle.CommitSimulationStep(null);
-            }
-        }
-
-        [TestMethod]
-        public void AuxAllCombined()
-        {
-            var dataWriter = new MockModalDataWriter();
-            dataWriter.AddAuxiliary("ALT1");
-            dataWriter.AddAuxiliary("CONSTANT");
-
-            var container = new VehicleContainer(dataWriter);
-            var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
-            // cycle ALT1 is set to values to equal the first few fixed points in the auxiliary file.
-            // ALT1.aux file: nAuxiliary speed 2358: 0, 0.38, 0.49, 0.64, ...
-            // ALT1 in cycle file: 0, 0.3724 (=0.38*0.96), 0.4802 (=0.49*0.96), 0.6272 (0.64*0.96), ...
-
-            var cycle = new MockDrivingCycle(container, data);
-            var port = new MockTnOutPort();
-
-            var aux = new Auxiliary(container);
-            aux.InPort().Connect(port);
-
-            var auxData = AuxiliaryData.ReadFromFile(@"TestData\Components\24t_Coach_ALT.vaux");
-            // ratio = 4.078
-            // efficiency_engine = 0.96
-            // efficiency_supply = 0.98
-
-            aux.AddMapping("ALT1", cycle, auxData);
-            aux.AddDirect(cycle);
-            var constPower = 1200.SI<Watt>();
-            aux.AddConstant("CONSTANT", constPower);
-
-            var speed = 578.22461991.RPMtoRad(); // = 2358 (nAuxiliary) * ratio
-            var torque = 500.SI<NewtonMeter>();
-            var t = 0.SI<Second>();
-            var expected = new[] {
-                1200 + 6100 + 72.9166666666667,
-                // = 1000 * 0.07 (nAuxiliary=2358 and psupply=0) / 0.98 (efficiency_supply)
-                1200 + 3100 + 677.083333333333,
-                // = 1000 * 0.65 (nAuxiliary=2358 and psupply=0.38) / 0.98 (efficiency_supply)
-                1200 + 2300 + 822.916666666667,
-                // = 1000 * 0.79 (nAuxiliary=2358 and psupply=0.49) / 0.98 (efficiency_supply)
-                1200 + 4500 + 1031.25, // = ...
-                1200 + 6100 + 1166.66666666667,
-                1200 + 6100 + 1656.25,
-                1200 + 6100 + 2072.91666666667,
-                1200 + 6100 + 2510.41666666667,
-                1200 + 6100 + 2979.16666666667,
-                1200 + 6100 + 3322.91666666667,
-                1200 + 6100 + 3656.25
-            };
-
-            foreach (var e in expected) {
-                aux.OutPort().Request(t, t, torque, speed);
-                Assert.AreEqual(speed, port.AngularVelocity);
-
-                AssertHelper.AreRelativeEqual(port.Torque, torque + e.SI<Watt>() / speed);
-
-                cycle.CommitSimulationStep(null);
-            }
-        }
-
-        [TestMethod]
-        public void AuxMapping()
-        {
-            var auxId = "ALT1";
-            var dataWriter = new MockModalDataWriter();
-            dataWriter.AddAuxiliary(auxId);
-
-            var container = new VehicleContainer(dataWriter);
-            var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
-            // cycle ALT1 is set to values to equal the first few fixed points in the auxiliary file.
-            // ALT1.aux file: nAuxiliary speed 2358: 0, 0.38, 0.49, 0.64, ...
-            // ALT1 in cycle file: 0, 0.3724 (=0.38*0.96), 0.4802 (=0.49*0.96), 0.6272 (0.64*0.96), ...
-
-            var cycle = new MockDrivingCycle(container, data);
-            var port = new MockTnOutPort();
-
-            var aux = new Auxiliary(container);
-            aux.InPort().Connect(port);
-
-            var auxData = AuxiliaryData.ReadFromFile(@"TestData\Components\24t_Coach_ALT.vaux");
-            // ratio = 4.078
-            // efficiency_engine = 0.96
-            // efficiency_supply = 0.98
-
-            aux.AddMapping(auxId, cycle, auxData);
-
-            var speed = 578.22461991.RPMtoRad(); // = 2358 (nAuxiliary) * ratio
-            var torque = 500.SI<NewtonMeter>();
-            var t = 0.SI<Second>();
-            var expected = new[] {
-                72.9166666666667,
-                // = 1000 * 0.07 (pmech from aux file at nAuxiliary=2358 and psupply=0) / 0.98 (efficiency_supply)
-                677.083333333333, // = 1000 * 0.65 (nAuxiliary=2358 and psupply=0.38) / 0.98
-                822.916666666667, // = 1000 * 0.79 (nAuxiliary=2358 and psupply=0.49) / 0.98
-                1031.25, // = ...
-                1166.66666666667,
-                1656.25,
-                2072.91666666667,
-                2510.41666666667,
-                2979.16666666667,
-                3322.91666666667,
-                3656.25
-            };
-
-            foreach (var e in expected) {
-                aux.OutPort().Request(t, t, torque, speed);
-                Assert.AreEqual(speed, port.AngularVelocity);
-
-                AssertHelper.AreRelativeEqual(port.Torque, torque + e.SI<Watt>() / speed);
-
-                cycle.CommitSimulationStep(null);
-            }
-        }
-
-        [TestMethod]
-        public void AuxColumnMissing()
-        {
-            var container = new VehicleContainer();
-            var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
-            var cycle = new MockDrivingCycle(container, data);
-
-            var aux = new Auxiliary(container);
-            AssertHelper.Exception<VectoException>(() => aux.AddMapping("NONEXISTING_AUX", cycle, null),
-                "driving cycle does not contain column for auxiliary: NONEXISTING_AUX");
-        }
-
-        [TestMethod]
-        public void AuxFileMissing()
-        {
-            AssertHelper.Exception<VectoException>(() => AuxiliaryData.ReadFromFile(@"NOT_EXISTING_AUX_FILE.vaux"),
-                "Auxiliary file not found: NOT_EXISTING_AUX_FILE.vaux");
-        }
-
-        [TestMethod, Ignore]
-        public void AuxReadJobFileDeclarationMode()
-        {
-            var sumWriter = new SummaryFileWriter(@"AuxReadJobFileDeclarationMode.vsum");
-            var jobContainer = new JobContainer(sumWriter);
-
-            var runsFactory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode,
-                @"TestData\Jobs\40t_Long_Haul_Truck.vecto");
-
-            jobContainer.AddRuns(runsFactory);
-            jobContainer.Execute();
-
-            ResultFileHelper.TestSumFile(@"TestData\Results\Declaration\40t_Long_Haul_Truck.vsum",
-                @"AuxReadJobFileDeclarationMode.vsum");
-        }
-
-        [TestMethod, Ignore]
-        public void AuxReadJobFileEngineeringMode()
-        {
-            var sumWriter = new SummaryFileWriter(@"AuxReadJobFileEngineeringMode.vsum");
-            var jobContainer = new JobContainer(sumWriter);
-
-            var runsFactory = new SimulatorFactory(SimulatorFactory.FactoryMode.EngineeringMode,
-                @"TestData\Jobs\24t Coach.vecto");
-
-            jobContainer.AddRuns(runsFactory);
-            jobContainer.Execute();
-
-            ResultFileHelper.TestSumFile(@"TestData\Results\Engineering\24t Coach.vsum",
-                @"AuxReadJobFileEngineeringMode.vsum");
-
-            ResultFileHelper.TestModFile(
-                @"TestData\Results\Engineering\24t Coach_Coach_24t_xshort.vmod",
-                @"TestData\Jobs\24t Coach_Coach_24t_xshort.vmod");
-            Assert.Inconclusive();
-        }
-
-        [TestMethod]
-        public void AuxDeclarationWrongConfiguration()
-        {
-            // test what happens if there was a wrong auxiliary configuration in declaration mode
-            Assert.Inconclusive();
-        }
-
-        [TestMethod]
-        public void AuxCycleAdditionalFieldMissing()
-        {
-            // test the case when the Padd field is missing (no direct auxiliary)
-            Assert.Inconclusive();
-        }
-    }
+	[TestClass]
+	public class AuxTests
+	{
+		[TestMethod]
+		public void AuxWriteModFileSumFile()
+		{
+			var dataWriter = new ModalDataWriter(@"AuxWriteModFileSumFile.vmod");
+			dataWriter.AddAuxiliary("FAN");
+			dataWriter.AddAuxiliary("PS");
+			dataWriter.AddAuxiliary("STP");
+			dataWriter.AddAuxiliary("ES");
+			dataWriter.AddAuxiliary("AC");
+
+			var sumWriter = new SummaryFileWriter(@"AuxWriteModFileSumFile.vsum");
+			var container = new VehicleContainer(dataWriter,
+				(writer, mass, loading) => sumWriter.WriteFullPowertrain(dataWriter, "", "", "", null, null));
+			var data = DrivingCycleDataReader.ReadFromFileDistanceBased(@"TestData\Cycles\LongHaul_short.vdri");
+			var mockcycle = new MockDrivingCycle(container, data);
+			var port = new MockTnOutPort();
+
+			var aux = new Auxiliary(container);
+			aux.InPort().Connect(port);
+
+			var hdvClass = VehicleClass.Class5;
+			var mission = MissionType.LongHaul;
+
+			aux.AddConstant("FAN",
+				DeclarationData.Fan.Lookup(MissionType.LongHaul, "Hydraulic driven - Constant displacement pump"));
+			aux.AddConstant("PS", DeclarationData.PneumaticSystem.Lookup(mission, hdvClass));
+			aux.AddConstant("STP",
+				DeclarationData.SteeringPump.Lookup(MissionType.LongHaul, hdvClass, "Variable displacement"));
+			aux.AddConstant("ES", DeclarationData.ElectricSystem.Lookup(mission, null));
+			aux.AddConstant("AC",
+				DeclarationData.HeatingVentilationAirConditioning.Lookup(mission, hdvClass));
+
+			var speed = 1400.RPMtoRad();
+			var torque = 500.SI<NewtonMeter>();
+			var t = 0.SI<Second>();
+			var dt = 1.SI<Second>();
+
+			for (var i = 0; i < 11; i++) {
+				aux.OutPort().Request(t, dt, torque, speed);
+				dataWriter[ModalResultField.dist] = i.SI<Meter>();
+				dataWriter[ModalResultField.Pe_eng] = 0.SI<Watt>();
+				dataWriter[ModalResultField.acc] = 0.SI<MeterPerSquareSecond>();
+				container.CommitSimulationStep(t, dt);
+				t += dt;
+			}
+
+			container.FinishSimulation();
+			sumWriter.Finish();
+
+			//todo: add aux columns to test
+			var testColumns = new[] { "Paux_FAN", "Paux_STP", "Paux_AC", "Paux_ES", "Paux_PS", "Paux" };
+
+			ResultFileHelper.TestModFile(
+				@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck_Long_Haul_Empty Loading.vmod",
+				@"AuxWriteModFileSumFile.vmod", testColumns, testRowCount: false);
+			ResultFileHelper.TestSumFile(@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck.vsum",
+				@"AuxWriteModFileSumFile.vsum");
+		}
+
+		[TestMethod]
+		public void AuxConstant()
+		{
+			var dataWriter = new MockModalDataWriter();
+			var container = new VehicleContainer(dataWriter);
+			var port = new MockTnOutPort();
+			var aux = new Auxiliary(container);
+			aux.InPort().Connect(port);
+
+			var constPower = 1200.SI<Watt>();
+			aux.AddConstant("CONSTANT", constPower);
+
+			var speed = 2358.RPMtoRad();
+			var torque = 500.SI<NewtonMeter>();
+			var t = 0.SI<Second>();
+			aux.OutPort().Request(t, t, torque, speed);
+			Assert.AreEqual(speed, port.AngularVelocity);
+			var newTorque = torque + constPower / speed;
+			AssertHelper.AreRelativeEqual(port.Torque, newTorque);
+
+			speed = 2358.RPMtoRad();
+			torque = 1500.SI<NewtonMeter>();
+			aux.OutPort().Request(t, t, torque, speed);
+			Assert.AreEqual(speed, port.AngularVelocity);
+			newTorque = torque + constPower / speed;
+			AssertHelper.AreRelativeEqual(port.Torque, newTorque);
+
+			speed = 1500.RPMtoRad();
+			torque = 1500.SI<NewtonMeter>();
+			aux.OutPort().Request(t, t, torque, speed);
+			Assert.AreEqual(speed, port.AngularVelocity);
+			newTorque = torque + constPower / speed;
+			AssertHelper.AreRelativeEqual(port.Torque, newTorque);
+		}
+
+		[TestMethod]
+		public void AuxDirect()
+		{
+			var dataWriter = new MockModalDataWriter();
+			var container = new VehicleContainer(dataWriter);
+			var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
+			var cycle = new MockDrivingCycle(container, data);
+			var port = new MockTnOutPort();
+			var aux = new Auxiliary(container);
+			aux.InPort().Connect(port);
+
+			aux.AddDirect(cycle);
+
+			var speed = 2358.RPMtoRad();
+			var torque = 500.SI<NewtonMeter>();
+
+			var t = 0.SI<Second>();
+
+			var expected = new[] { 6100, 3100, 2300, 4500, 6100 };
+			foreach (var e in expected) {
+				aux.OutPort().Request(t, t, torque, speed);
+				Assert.AreEqual(speed, port.AngularVelocity);
+				var newTorque = torque + e.SI<Watt>() / speed;
+				AssertHelper.AreRelativeEqual(port.Torque, newTorque);
+
+				cycle.CommitSimulationStep(null);
+			}
+		}
+
+		[TestMethod]
+		public void AuxAllCombined()
+		{
+			var dataWriter = new MockModalDataWriter();
+			dataWriter.AddAuxiliary("ALT1");
+			dataWriter.AddAuxiliary("CONSTANT");
+
+			var container = new VehicleContainer(dataWriter);
+			var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
+			// cycle ALT1 is set to values to equal the first few fixed points in the auxiliary file.
+			// ALT1.aux file: nAuxiliary speed 2358: 0, 0.38, 0.49, 0.64, ...
+			// ALT1 in cycle file: 0, 0.3724 (=0.38*0.96), 0.4802 (=0.49*0.96), 0.6272 (0.64*0.96), ...
+
+			var cycle = new MockDrivingCycle(container, data);
+			var port = new MockTnOutPort();
+
+			var aux = new Auxiliary(container);
+			aux.InPort().Connect(port);
+
+			var auxData = AuxiliaryData.ReadFromFile(@"TestData\Components\24t_Coach_ALT.vaux");
+			// ratio = 4.078
+			// efficiency_engine = 0.96
+			// efficiency_supply = 0.98
+
+			aux.AddMapping("ALT1", cycle, auxData);
+			aux.AddDirect(cycle);
+			var constPower = 1200.SI<Watt>();
+			aux.AddConstant("CONSTANT", constPower);
+
+			var speed = 578.22461991.RPMtoRad(); // = 2358 (nAuxiliary) * ratio
+			var torque = 500.SI<NewtonMeter>();
+			var t = 0.SI<Second>();
+			var expected = new[] {
+				1200 + 6100 + 72.9166666666667,
+				// = 1000 * 0.07 (nAuxiliary=2358 and psupply=0) / 0.98 (efficiency_supply)
+				1200 + 3100 + 677.083333333333,
+				// = 1000 * 0.65 (nAuxiliary=2358 and psupply=0.38) / 0.98 (efficiency_supply)
+				1200 + 2300 + 822.916666666667,
+				// = 1000 * 0.79 (nAuxiliary=2358 and psupply=0.49) / 0.98 (efficiency_supply)
+				1200 + 4500 + 1031.25, // = ...
+				1200 + 6100 + 1166.66666666667,
+				1200 + 6100 + 1656.25,
+				1200 + 6100 + 2072.91666666667,
+				1200 + 6100 + 2510.41666666667,
+				1200 + 6100 + 2979.16666666667,
+				1200 + 6100 + 3322.91666666667,
+				1200 + 6100 + 3656.25
+			};
+
+			foreach (var e in expected) {
+				aux.OutPort().Request(t, t, torque, speed);
+				Assert.AreEqual(speed, port.AngularVelocity);
+
+				AssertHelper.AreRelativeEqual(port.Torque, torque + e.SI<Watt>() / speed);
+
+				cycle.CommitSimulationStep(null);
+			}
+		}
+
+		[TestMethod]
+		public void AuxMapping()
+		{
+			var auxId = "ALT1";
+			var dataWriter = new MockModalDataWriter();
+			dataWriter.AddAuxiliary(auxId);
+
+			var container = new VehicleContainer(dataWriter);
+			var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
+			// cycle ALT1 is set to values to equal the first few fixed points in the auxiliary file.
+			// ALT1.aux file: nAuxiliary speed 2358: 0, 0.38, 0.49, 0.64, ...
+			// ALT1 in cycle file: 0, 0.3724 (=0.38*0.96), 0.4802 (=0.49*0.96), 0.6272 (0.64*0.96), ...
+
+			var cycle = new MockDrivingCycle(container, data);
+			var port = new MockTnOutPort();
+
+			var aux = new Auxiliary(container);
+			aux.InPort().Connect(port);
+
+			var auxData = AuxiliaryData.ReadFromFile(@"TestData\Components\24t_Coach_ALT.vaux");
+			// ratio = 4.078
+			// efficiency_engine = 0.96
+			// efficiency_supply = 0.98
+
+			aux.AddMapping(auxId, cycle, auxData);
+
+			var speed = 578.22461991.RPMtoRad(); // = 2358 (nAuxiliary) * ratio
+			var torque = 500.SI<NewtonMeter>();
+			var t = 0.SI<Second>();
+			var expected = new[] {
+				72.9166666666667,
+				// = 1000 * 0.07 (pmech from aux file at nAuxiliary=2358 and psupply=0) / 0.98 (efficiency_supply)
+				677.083333333333, // = 1000 * 0.65 (nAuxiliary=2358 and psupply=0.38) / 0.98
+				822.916666666667, // = 1000 * 0.79 (nAuxiliary=2358 and psupply=0.49) / 0.98
+				1031.25, // = ...
+				1166.66666666667,
+				1656.25,
+				2072.91666666667,
+				2510.41666666667,
+				2979.16666666667,
+				3322.91666666667,
+				3656.25
+			};
+
+			foreach (var e in expected) {
+				aux.OutPort().Request(t, t, torque, speed);
+				Assert.AreEqual(speed, port.AngularVelocity);
+
+				AssertHelper.AreRelativeEqual(port.Torque, torque + e.SI<Watt>() / speed);
+
+				cycle.CommitSimulationStep(null);
+			}
+		}
+
+		[TestMethod]
+		public void AuxColumnMissing()
+		{
+			var container = new VehicleContainer();
+			var data = DrivingCycleDataReader.ReadFromFileTimeBased(@"TestData\Cycles\Coach time based short.vdri");
+			var cycle = new MockDrivingCycle(container, data);
+
+			var aux = new Auxiliary(container);
+			AssertHelper.Exception<VectoException>(() => aux.AddMapping("NONEXISTING_AUX", cycle, null),
+				"driving cycle does not contain column for auxiliary: NONEXISTING_AUX");
+		}
+
+		[TestMethod]
+		public void AuxFileMissing()
+		{
+			AssertHelper.Exception<VectoException>(() => AuxiliaryData.ReadFromFile(@"NOT_EXISTING_AUX_FILE.vaux"),
+				"Auxiliary file not found: NOT_EXISTING_AUX_FILE.vaux");
+		}
+
+		[TestMethod, Ignore]
+		public void AuxReadJobFileDeclarationMode()
+		{
+			var sumWriter = new SummaryFileWriter(@"AuxReadJobFileDeclarationMode.vsum");
+			var jobContainer = new JobContainer(sumWriter);
+
+			var runsFactory = new SimulatorFactory(ExecutionMode.Declaration,
+				@"TestData\Jobs\40t_Long_Haul_Truck.vecto");
+
+			jobContainer.AddRuns(runsFactory);
+			jobContainer.Execute();
+
+			ResultFileHelper.TestSumFile(@"TestData\Results\Declaration\40t_Long_Haul_Truck.vsum",
+				@"AuxReadJobFileDeclarationMode.vsum");
+		}
+
+		[TestMethod, Ignore]
+		public void AuxReadJobFileEngineeringMode()
+		{
+			var sumWriter = new SummaryFileWriter(@"AuxReadJobFileEngineeringMode.vsum");
+			var jobContainer = new JobContainer(sumWriter);
+
+			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering,
+				@"TestData\Jobs\24t Coach.vecto");
+
+			jobContainer.AddRuns(runsFactory);
+			jobContainer.Execute();
+
+			ResultFileHelper.TestSumFile(@"TestData\Results\Engineering\24t Coach.vsum",
+				@"AuxReadJobFileEngineeringMode.vsum");
+
+			ResultFileHelper.TestModFile(
+				@"TestData\Results\Engineering\24t Coach_Coach_24t_xshort.vmod",
+				@"TestData\Jobs\24t Coach_Coach_24t_xshort.vmod");
+			Assert.Inconclusive();
+		}
+
+		[TestMethod]
+		public void AuxDeclarationWrongConfiguration()
+		{
+			// test what happens if there was a wrong auxiliary configuration in declaration mode
+			Assert.Inconclusive();
+		}
+
+		[TestMethod]
+		public void AuxCycleAdditionalFieldMissing()
+		{
+			// test the case when the Padd field is missing (no direct auxiliary)
+			Assert.Inconclusive();
+		}
+	}
 }
\ No newline at end of file
diff --git a/VectoCoreTest/Models/Simulation/SimulationTests.cs b/VectoCoreTest/Models/Simulation/SimulationTests.cs
index aaad3c987ed758163a130ce9fb58d8e7a971334f..bd7dfccc153e41dca38f411b343a1cc530401656 100644
--- a/VectoCoreTest/Models/Simulation/SimulationTests.cs
+++ b/VectoCoreTest/Models/Simulation/SimulationTests.cs
@@ -87,10 +87,10 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		{
 			var sumFileName = resultFileName.Substring(0, resultFileName.Length - 5) + Constants.FileExtensions.SumFile;
 
-			var dataWriter = new ModalDataWriter(resultFileName, SimulatorFactory.FactoryMode.EngineOnlyMode);
+			var dataWriter = new ModalDataWriter(resultFileName, ExecutionMode.EngineOnly);
 			var sumWriter = new SummaryFileWriter(sumFileName);
 
-			var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.EngineOnlyMode, EngineOnlyJob) {
+			var factory = new SimulatorFactory(ExecutionMode.EngineOnly, EngineOnlyJob) {
 				SumWriter = sumWriter
 			};
 
@@ -103,7 +103,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			var sumWriter = new SummaryFileWriter(@"24t Coach.vsum");
 			var jobContainer = new JobContainer(sumWriter);
 
-			var runsFactory = new SimulatorFactory(SimulatorFactory.FactoryMode.EngineOnlyMode,
+			var runsFactory = new SimulatorFactory(ExecutionMode.EngineOnly,
 				@"TestData\Jobs\24t Coach EngineOnly.vecto");
 
 			jobContainer.AddRuns(runsFactory);
diff --git a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
index e195014e530d63bb5c73adf2f0611d6a96aa5546..6f6006b202e708a880f89094f50901b738fcce25 100644
--- a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
+++ b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
@@ -51,7 +51,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var driverData = CreateDriverData();
 
 			var modalWriter = new ModalDataWriter("Coach_MinimalPowertrain_Coasting.vmod",
-				SimulatorFactory.FactoryMode.EngineeringMode); //new TestModalDataWriter();
+				ExecutionMode.Engineering); //new TestModalDataWriter();
 			var vehicleContainer = new VehicleContainer(modalWriter);
 
 			var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy());
@@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var driverData = CreateDriverData();
 
 			var modalWriter = new ModalDataWriter("Coach_MinimalPowertrain.vmod",
-				SimulatorFactory.FactoryMode.EngineeringMode);
+				ExecutionMode.Engineering);
 			var vehicleContainer = new VehicleContainer(modalWriter);
 
 			var cycle = new MockDrivingCycle(vehicleContainer, null);