diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/ExemptedRun.cs b/VectoCore/VectoCore/Models/Simulation/Impl/ExemptedRun.cs
index f91c48b7f25c66d3086c19fe2184d1b3d92d4f71..9e7a01a5038be7fd3f91be6313e5613da6330921 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/ExemptedRun.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/ExemptedRun.cs
@@ -1,4 +1,5 @@
 using System;
+using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.Models.Connector.Ports.Impl;
 using TUGraz.VectoCore.Models.Simulation.Data;
@@ -24,11 +25,28 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl {
 
 		protected override IResponse DoSimulationStep()
 		{
+			CheckValidInput();
 			FinishedWithoutErrors = true;
 			_writeSumData(null);
 			return new ResponseCycleFinished();
 		}
 
+		private void CheckValidInput()
+		{
+			var vehicleData = Container.RunData.VehicleData;
+			if (vehicleData.ZeroEmissionVehicle && vehicleData.DualFuelVehicle) {
+				throw new VectoException("Invalid input: ZE-HDV and DualFuelVehicle are mutually exclusive!");
+			}
+
+			if (!vehicleData.ZeroEmissionVehicle && !vehicleData.HybridElectricHDV && !vehicleData.DualFuelVehicle) {
+				throw new VectoException("Invalid input: at least one option of ZE-HDV, He-HDV, and DualFuelVehicle has to be set for an exempted vehicle!");
+			}
+
+			if (vehicleData.HybridElectricHDV && (vehicleData.MaxNetPower1 == null || vehicleData.MaxNetPower2 == null)) {
+				throw new VectoException("For He-HDV both MaxNetPower1 and MaxNetPower2 have to be provided!");
+			}
+		}
+
 		protected override IResponse Initialize()
 		{
 			return new ResponseSuccess();
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
index bdd2d7e118053c5c1a97fb5d42d0e511f34f1440..f5a4dcee084b13822b7dc3c0cd20ad38f69cf7f6 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs
@@ -2,13 +2,19 @@
 using System.IO;
 using System.Linq;
 using System.Xml;
+using System.Xml.XPath;
 using NUnit.Framework;
 using NUnit.Framework.Internal;
+using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Models.Simulation;
+using TUGraz.VectoCore.Tests.Utils;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Tests.Integration
@@ -31,12 +37,16 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var customerFile = writer.XMLCustomerReportName;
 			var manufactuerFile = writer.XMLFullReportName;
+			var monitoringFile = writer.XMLMonitoringReportName;
 			if (File.Exists(customerFile)) {
 				File.Delete(customerFile);
 			}
 			if (File.Exists(manufactuerFile)) {
 				File.Delete(manufactuerFile);
 			}
+			if (File.Exists(monitoringFile)) {
+				File.Delete(monitoringFile);
+			}
 
 			var inputData = new XMLDeclarationInputDataProvider(filename, true); //.ReadJsonJob(relativeJobPath);
 			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
@@ -65,6 +75,175 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var val2 = new XMLValidator(XmlReader.Create(customerFile));
 			Assert.IsTrue(val2.ValidateXML(XMLValidator.XmlDocumentType.CustomerReport));
+
+			var val3 = new XMLValidator(XmlReader.Create(customerFile));
+			Assert.IsTrue(val3.ValidateXML(XMLValidator.XmlDocumentType.MonitoringReport));
+
+		}
+
+		[TestCase(ExemptedVehicle, true, true, true, "Invalid input: ZE-HDV and DualFuelVehicle are mutually exclusive!"),
+			TestCase(ExemptedVehicle, true, false, true, "Invalid input: ZE-HDV and DualFuelVehicle are mutually exclusive!"),
+			TestCase(ExemptedVehicle, false, false, false, "Invalid input: at least one option of ZE-HDV, He-HDV, and DualFuelVehicle has to be set for an exempted vehicle!")]
+		public void TestInvalidExemptedCombination(string filename, bool zeroEmission, bool hybrid, bool dualFuel, string exMsg)
+		{
+			var writer = new FileOutputWriter(filename);
+
+			var customerFile = writer.XMLCustomerReportName;
+			var manufactuerFile = writer.XMLFullReportName;
+			var monitoringFile = writer.XMLMonitoringReportName;
+			if (File.Exists(customerFile)) {
+				File.Delete(customerFile);
+			}
+			if (File.Exists(manufactuerFile)) {
+				File.Delete(manufactuerFile);
+			}
+			if (File.Exists(monitoringFile)) {
+				File.Delete(monitoringFile);
+			}
+
+			var reader = XmlReader.Create(filename);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+
+			SetExemptedParameters(nav, zeroEmission, hybrid, dualFuel);
+
+			var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+
+			var inputData = new XMLDeclarationInputDataProvider(modified, true);
+
+			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
+				WriteModalResults = true,
+				ActualModalData = true
+			};
+			var jobContainer = new JobContainer(new MockSumWriter());
+
+			jobContainer.AddRuns(factory);
+
+			AssertHelper.Exception<VectoException>(
+				() => {
+					jobContainer.Runs[0].Run.Run();
+				},
+				messageContains: exMsg);
+			Assert.IsFalse(File.Exists(customerFile));
+			Assert.IsFalse(File.Exists(manufactuerFile));
+			Assert.IsFalse(File.Exists(monitoringFile));
+		}
+
+
+
+		[TestCase(ExemptedVehicle, null, 10000),
+		TestCase(ExemptedVehicle, 100000, null),
+		TestCase(ExemptedVehicle, null, null)]
+		public void TestHybridExemptedRequiresMaxNetPower(string filename, double? maxNetPower1, double? maxNetPower2)
+		{
+			var writer = new FileOutputWriter(filename);
+
+			var customerFile = writer.XMLCustomerReportName;
+			var manufactuerFile = writer.XMLFullReportName;
+			var monitoringFile = writer.XMLMonitoringReportName;
+			if (File.Exists(customerFile)) {
+				File.Delete(customerFile);
+			}
+			if (File.Exists(manufactuerFile)) {
+				File.Delete(manufactuerFile);
+			}
+			if (File.Exists(monitoringFile)) {
+				File.Delete(monitoringFile);
+			}
+
+			var reader = XmlReader.Create(filename);
+
+			var doc = new XmlDocument();
+			doc.Load(reader);
+			var nav = doc.CreateNavigator();
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Declaration);
+			helper.AddNamespaces(manager);
+
+			SetExemptedParameters(nav, false, true, false);
+			var maxPower1 = nav.SelectSingleNode(helper.QueryAbs(
+													helper.NSPrefix(XMLNames.VectoInputDeclaration,
+																	Constants.XML.RootNSPrefix),
+													XMLNames.Component_Vehicle,
+													XMLNames.Vehicle_MaxNetPower1),
+												manager);
+			if (maxNetPower1.HasValue) {
+				maxPower1.SetValue(maxNetPower1.Value.ToXMLFormat(0));
+			} else {
+				maxPower1.DeleteSelf();
+			}
+			var maxPower2 = nav.SelectSingleNode(helper.QueryAbs(
+													helper.NSPrefix(XMLNames.VectoInputDeclaration,
+																	Constants.XML.RootNSPrefix),
+													XMLNames.Component_Vehicle,
+													XMLNames.Vehicle_MaxNetPower2),
+												manager);
+			if (maxNetPower2.HasValue) {
+				maxPower2.SetValue(maxNetPower2.Value.ToXMLFormat(0));
+			} else {
+				maxPower2.DeleteSelf();
+			}
+
+			var modified = XmlReader.Create(new StringReader(nav.OuterXml));
+
+			var inputData = new XMLDeclarationInputDataProvider(modified, true);
+
+			var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
+				WriteModalResults = true,
+				ActualModalData = true
+			};
+			var jobContainer = new JobContainer(new MockSumWriter());
+
+			jobContainer.AddRuns(factory);
+
+			AssertHelper.Exception<VectoException>(
+				() => {
+					jobContainer.Runs[0].Run.Run();
+				},
+				messageContains: "For He-HDV both MaxNetPower1 and MaxNetPower2 have to be provided!");
+			Assert.IsFalse(File.Exists(customerFile));
+			Assert.IsFalse(File.Exists(manufactuerFile));
+			Assert.IsFalse(File.Exists(monitoringFile));
+		}
+
+
+		private static void SetExemptedParameters(XPathNavigator nav, bool zeroEmission, bool hybrid, bool dualFuel)
+		{
+			var manager = new XmlNamespaceManager(nav.NameTable);
+			var helper = new XPathHelper(ExecutionMode.Declaration);
+			helper.AddNamespaces(manager);
+
+			var zeNode = nav.SelectSingleNode(
+				helper.QueryAbs(
+					helper.NSPrefix(
+						XMLNames.VectoInputDeclaration,
+						Constants.XML.RootNSPrefix),
+					XMLNames.Component_Vehicle,
+					XMLNames.Vehicle_ZeroEmissionVehicle),
+				manager);
+			zeNode.SetValue(zeroEmission.ToString().ToLowerInvariant());
+
+			var dualfuelNode = nav.SelectSingleNode(
+				helper.QueryAbs(
+					helper.NSPrefix(
+						XMLNames.VectoInputDeclaration,
+						Constants.XML.RootNSPrefix),
+					XMLNames.Component_Vehicle,
+					XMLNames.Vehicle_DualFuelVehicle),
+				manager);
+			dualfuelNode.SetValue(dualFuel.ToString().ToLowerInvariant());
+
+			var hybridNode = nav.SelectSingleNode(
+				helper.QueryAbs(
+					helper.NSPrefix(
+						XMLNames.VectoInputDeclaration,
+						Constants.XML.RootNSPrefix),
+					XMLNames.Component_Vehicle,
+					XMLNames.Vehicle_HybridElectricHDV),
+				manager);
+			hybridNode.SetValue(hybrid.ToString().ToLowerInvariant());
 		}
 	}
 }
diff --git a/VectoCore/VectoCoreTest/Utils/AssertHelper.cs b/VectoCore/VectoCoreTest/Utils/AssertHelper.cs
index ff45cf7277ab7d3c6c7d80d9c9e9ef046c49cef7..99a01e9f9fe937b9011e3c5cd1b051245d5dab69 100644
--- a/VectoCore/VectoCoreTest/Utils/AssertHelper.cs
+++ b/VectoCore/VectoCoreTest/Utils/AssertHelper.cs
@@ -49,7 +49,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 		/// Assert an expected Exception.
 		/// </summary>
 		[DebuggerHidden]
-		public static void Exception<T>(this Action func, string message = null) where T : Exception
+		public static void Exception<T>(this Action func, string message = null, string messageContains = null) where T : Exception
 		{
 			try {
 				func();
@@ -58,6 +58,9 @@ namespace TUGraz.VectoCore.Tests.Utils
 				if (message != null) {
 					Assert.AreEqual(message, ex.Message);
 				}
+				if (messageContains != null) {
+					Assert.IsTrue(ex.Message.Contains(messageContains));
+				}
 			}
 		}