diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricFullLoadCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricFullLoadCurveReader.cs
index 222f26ef5a2e828a8b9b0150bdef4f268583c0c4..6a2af4a643cf18866833899ee902630f45b2f1ae 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricFullLoadCurveReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricFullLoadCurveReader.cs
@@ -30,13 +30,21 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				data.Columns[2].ColumnName = Fields.GenerationTorque;
 			}
 
-			return new ElectricMotorFullLoadCurve(
-				(from DataRow row in data.Rows
+			var entries = (from DataRow row in data.Rows
 				select new ElectricMotorFullLoadCurve.FullLoadEntry {
 					MotorSpeed = row.ParseDouble(Fields.MotorSpeed).RPMtoRad(), // / ratio,
-					FullDriveTorque = -row.ParseDouble(Fields.DrivingTorque).SI<NewtonMeter>() * count, // * ratio * efficiency,
-					FullGenerationTorque = -row.ParseDouble(Fields.GenerationTorque).SI<NewtonMeter>() * count, //* ratio / efficiency
-				}).ToList());
+					FullDriveTorque =
+						-row.ParseDouble(Fields.DrivingTorque).SI<NewtonMeter>() * count, // * ratio * efficiency,
+					FullGenerationTorque =
+						-row.ParseDouble(Fields.GenerationTorque).SI<NewtonMeter>() * count, //* ratio / efficiency
+				}).OrderBy(x => x.MotorSpeed).ToList();
+
+            var duplicates = entries.GroupBy(x => x.MotorSpeed).Where(g => g.Count() > 1).Select(x => x.Key.AsRPM).ToList();
+			if (duplicates.Any()) {
+				throw new VectoException(
+					$"EM full-load curve contains multiple entries for a single motor speed: {duplicates.Join()}");
+			}
+            return new ElectricMotorFullLoadCurve(entries);
 		}
 
 		private static bool HeaderIsValid(DataColumnCollection dataColumns)
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorDragCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorDragCurveReader.cs
index 0714cd6cbb899cd1e319951d64013d985ad82994..434444abfacfff5f6ddc2de20fbdaa6993a0ecbe 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorDragCurveReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorDragCurveReader.cs
@@ -23,10 +23,18 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				data.Columns[0].ColumnName = Fields.MotorSpeed;
 				data.Columns[1].ColumnName = Fields.DragTorque;
 			}
-			return new DragCurve(data.AsEnumerable().Cast<DataRow>().Select(x => new DragCurve.DragLoadEntry() {
+
+			var entries = data.AsEnumerable().Cast<DataRow>().Select(x => new DragCurve.DragLoadEntry() {
 				MotorSpeed = x.ParseDouble(Fields.MotorSpeed).RPMtoRad(), // / ratio,
 				DragTorque = -x.ParseDouble(Fields.DragTorque).SI<NewtonMeter>() * count, // * ratio / efficiency
-			}).ToList());
+			}).OrderBy(x => x.MotorSpeed).ToList();
+
+            var duplicates = entries.GroupBy(x => x.MotorSpeed).Where(g => g.Count() > 1).Select(x => x.Key.AsRPM).ToList();
+			if (duplicates.Any()) {
+				throw new VectoException(
+					$"Drag curve contains multiple entries for a single motor speed: {duplicates.Join()}");
+			}
+            return new DragCurve(entries);
 		}
 
 		private static bool HeaderIsValid(DataColumnCollection columns)
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCDragCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCDragCurveReader.cs
index 06ab1f11507a639579c9e96aeb4d640f717da2fd..1abcc226de27ab11c0a10d78b5fd9ccf92d93808 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCDragCurveReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCDragCurveReader.cs
@@ -23,10 +23,17 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				data.Columns[0].ColumnName = Fields.MotorSpeed;
 				data.Columns[1].ColumnName = Fields.DragTorque;
 			}
-			return new DragCurve(data.AsEnumerable().Cast<DataRow>().Select(x => new DragCurve.DragLoadEntry() {
+
+			var entries = data.AsEnumerable().Cast<DataRow>().Select(x => new DragCurve.DragLoadEntry() {
 				MotorSpeed = x.ParseDouble(Fields.MotorSpeed).RPMtoRad() * ratio,
 				DragTorque = -x.ParseDouble(Fields.DragTorque).SI<NewtonMeter>() * count / ratio // / efficiency
-			}).ToList());
+			}).OrderBy(x => x.MotorSpeed).ToList();
+			var duplicates = entries.GroupBy(x => x.MotorSpeed).Where(g => g.Count() > 1).Select(x => x.Key.AsRPM / ratio).ToList();
+			if (duplicates.Any()) {
+				throw new VectoException(
+					$"Drag curve contains multiple entries for a single output speed: {duplicates.Join()}");
+			}
+            return new DragCurve(entries);
 		}
 
 		private static bool HeaderIsValid(DataColumnCollection columns)
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCFullLoadCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCFullLoadCurveReader.cs
index 0d89f874d44a2ce98811893ba8ce20bab1a1a322..9316f8ce01a61b79af3666471c8b8db3fcaa7140 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCFullLoadCurveReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCFullLoadCurveReader.cs
@@ -30,13 +30,20 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				data.Columns[2].ColumnName = Fields.GenerationTorque;
 			}
 
-			return new ElectricMotorFullLoadCurve(
-				(from DataRow row in data.Rows
-					select new ElectricMotorFullLoadCurve.FullLoadEntry {
-						MotorSpeed = row.ParseDouble(Fields.MotorSpeed).RPMtoRad() * ratio,
-						FullDriveTorque = -row.ParseDouble(Fields.DrivingTorque).SI<NewtonMeter>() * count / ratio,  // * efficiency,
-						FullGenerationTorque = -row.ParseDouble(Fields.GenerationTorque).SI<NewtonMeter>() * count / ratio // / efficiency
-					}).ToList());
+			var entries = (from DataRow row in data.Rows
+				select new ElectricMotorFullLoadCurve.FullLoadEntry {
+					MotorSpeed = row.ParseDouble(Fields.MotorSpeed).RPMtoRad() * ratio,
+					FullDriveTorque =
+						-row.ParseDouble(Fields.DrivingTorque).SI<NewtonMeter>() * count / ratio, // * efficiency,
+					FullGenerationTorque =
+						-row.ParseDouble(Fields.GenerationTorque).SI<NewtonMeter>() * count / ratio // / efficiency
+				}).OrderBy(x => x.MotorSpeed).ToList();
+			var duplicates = entries.GroupBy(x => x.MotorSpeed).Where(g => g.Count() > 1).Select(x => x.Key.AsRPM / ratio).ToList();
+			if (duplicates.Any()) {
+				throw new VectoException(
+					$"IEPC full-load curve contains multiple entries for a single output speed: {duplicates.Join()}");
+			}
+            return new ElectricMotorFullLoadCurve(entries);
 		}
 
 		private static bool HeaderIsValid(DataColumnCollection dataColumns)
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
index c5f337663dc1f98aaba94f925da5d5dd18b29a50..86c3cdaf5de7e4811343e61b776bc7af3c74d9c8 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory.cs
@@ -449,7 +449,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
 
 			protected override void AngleDriveAllowed(IVehicleDeclarationInputData inputData)
 			{
-				if (inputData.Components.AngledriveInputData != null)
+				if (inputData.Components.AngledriveInputData != null && inputData.Components.AngledriveInputData.Type == AngledriveType.SeparateAngledrive)
 				{
 					throw new VectoException("Angledrive not allowed in pure electric vehicles");
 				}
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs
index 52db56dd89e8204f6264e309441d0f32cd02e525..150d3e33388e1b1f9b177edba63a08d1013bdc5d 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/HeavyLorryRunDataFactory/DeclarationModeHeavyLorryRunDataFactory_Hybrid.cs
@@ -187,7 +187,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
             #endregion
 			protected override void AngleDriveAllowed(IVehicleDeclarationInputData inputData)
 			{
-				if (inputData.Components.AngledriveInputData != null)
+				if (inputData.Components.AngledriveInputData != null && inputData.Components.AngledriveInputData.Type == AngledriveType.SeparateAngledrive)
 				{
 					throw new VectoException("Angledrive not allowed in pure electric vehicles");
 				}
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
index 19e5661026cafc498de2f125b0545e45971e8f13..65db8368992926b54f960cd7f93604bfa9498633 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/PrimaryBusRunDataFactory/DeclarationModePrimaryBusRunDataFactory.cs
@@ -356,7 +356,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 
 			protected override void AngleDriveAllowed(IVehicleDeclarationInputData inputData)
 			{
-				if (inputData.Components.AngledriveInputData != null)
+				if (inputData.Components.AngledriveInputData != null && inputData.Components.AngledriveInputData.Type != AngledriveType.None)
 				{
 					throw new VectoException("Angledrive not allowed in serial hybrid vehicles");
 				}
@@ -694,7 +694,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.PrimaryBusRunDa
 
 			protected override void AngleDriveAllowed(IVehicleDeclarationInputData inputData)
 			{
-				if (inputData.Components.AngledriveInputData != null)
+				if (inputData.Components.AngledriveInputData != null && inputData.Components.AngledriveInputData.Type != AngledriveType.None)
 				{
 					throw new VectoException("Angledrive not allowed in pure electric vehicles");
 				}
diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs
index bc21149a29eda70a440f33b1cde99344bd10fea3..e55e2d6c0c4f376e8fd357b1dcbebbbc03d5df0f 100644
--- a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs
+++ b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs
@@ -162,9 +162,12 @@ public class PrimaryBusSimulation
     TestCase(@"FactorMethod/S-HEV/S2-HEV/P31_32_S2_HEV_nonSmartES_elecSP_mechFan.xml", 4, TestName = "2nd Amendment PrimaryBus FM S-HEV S2 nonSmartES_elecSP_mechFan 4"),
 	]
 
-
+	// Testcase Stefan Present
+	[TestCase(@"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\P32_IEPC_Base.xml", -1, TestName = "PrimaryBus IEPC StefanP")]
+	[TestCase(@"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\P1_HEV_P32_NonOVC_ICE-I_Base.xml", -1, TestName = "PrimaryBus EffFactor StefanP")]
     public void PrimaryBusSimulationTest(string jobFile, int runIdx)
 	{
+		TestMissionFilter()?.SetMissions((MissionType.Interurban, LoadingType.ReferenceLoad));
 		RunSimulationPrimary(jobFile, runIdx);
 	}
 	
@@ -192,6 +195,10 @@ public class PrimaryBusSimulation
 		TestName = "2nd Amendment CompletedBus Conventional SmartES_mechFan_mechSteer 32e_spez_Dim_HVAC"),
 
     ]
+
+	[TestCase(@"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\P32_IEPC_Base.RSLT_VIF.xml", @"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\IEPC_32c_Base.xml", -1, true, TestName = "CompletedBus IEPC StefanP")]
+	[TestCase(@"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\P1_HEV_P32_NonOVC_ICE-I_Base.RSLT_VIF.xml", @"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\P1_HEV_32c_NonOVC_ICE-I_Base.xml", -1, true, TestName = "CompletedBus EffFactor StefanP")]
+
     public void CompletedBusSimulationTest(string vifFile, string completed, int runIdx, bool full_sim = false)
 	{
 		if (full_sim) {
@@ -249,7 +256,10 @@ public class PrimaryBusSimulation
 		//TestCase(@"PrimaryBus/Exempted/exempted_primary_heavyBus.xml", @"exempted_completedBus_input_full.xml", 0, TestName = "2nd Amendment SingleBus Exempted"), // exempted single run not supported!
 
 	]
-	public void SingleBusSimulationTest(string jobFile, string completed, int runIdx)
+
+	[TestCase(@"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\P32_IEPC_Base.xml", @"E:\QUAM\Downloads\HybridEquivFactor_IEPCAxle\IEPC_32c_Base.xml", -1, TestName = "SingleBus IEPC StefanP")]
+
+    public void SingleBusSimulationTest(string jobFile, string completed, int runIdx)
 	{
 		RunSimulationSingle(jobFile, completed, runIdx);
 	}
@@ -394,11 +404,13 @@ public class PrimaryBusSimulation
 		var dataProvider = JSONInputDataFactory.ReadJsonJob(singleJob);
 		var fileWriter = new FileOutputWriter(singleJob);
 		var simFactory = Kernel.Get<ISimulatorFactoryFactory>();
+		var sumData = new SummaryDataContainer(fileWriter);
 
-		var runsFactory = simFactory.Factory(ExecutionMode.Declaration, dataProvider, fileWriter, null, null);
+        var runsFactory = simFactory.Factory(ExecutionMode.Declaration, dataProvider, fileWriter, null, null);
 		//runsFactory.WriteModalResults = true;
 		runsFactory.SerializeVectoRunData = true;
-		var jobContainer = new JobContainer(new SummaryDataContainer(fileWriter)) { };
+		runsFactory.SumData = sumData;
+		var jobContainer = new JobContainer(sumData) { };
 
 		if (runIdx < 0) {
 			jobContainer.AddRuns(runsFactory);
@@ -486,11 +498,13 @@ public class PrimaryBusSimulation
 		var filePath = Path.Combine(BASE_DIR, jobFile);
 		var dataProvider = _xmlReader.CreateDeclaration(filePath);
 		var fileWriter = new FileOutputWriter(filePath);
+		var sumData = new SummaryDataContainer(fileWriter);
 		var simFactory = Kernel.Get<ISimulatorFactoryFactory>();
 		var runsFactory = simFactory.Factory(ExecutionMode.Declaration, dataProvider, fileWriter, null, null);
 		runsFactory.WriteModalResults = true;
 		runsFactory.SerializeVectoRunData = true;
-		var jobContainer = new JobContainer(new SummaryDataContainer(fileWriter)) { };
+		runsFactory.SumData = sumData;
+		var jobContainer = new JobContainer(sumData) { };
 		//var jobContainer = new JobContainer(new MockSumWriter()) { };
 		var runs = runsFactory.SimulationRuns().ToList();
 		foreach (var vectoRun in runs) {