diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
index 5585fae24faf9b12697fcbf7e674efb636f43d79..4c2a5c9b1e36c6e7dd0b8453e29ae134e57d1f69 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
@@ -20,7 +20,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 {
 	public class ElectricMachinesDataAdapter : IElectricMachinesDataAdapter
 	{
-		public IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
+		public virtual IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(
 			IElectricMachinesDeclarationInputData electricMachines,
 			IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits, Volt averageVoltage, GearList gearlist = null)
 		{
@@ -255,7 +255,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		}
 
 
-		public List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
+		public virtual List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
 		{
 			if (iepc == null) {
 				return null;
@@ -331,7 +331,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			return new List<Tuple<PowertrainPosition, ElectricMotorData>>() { Tuple.Create<PowertrainPosition, ElectricMotorData>(pos, retVal) };
 		}
 
-		private OverloadData CalculateOverloadData(IIEPCDeclarationInputData iepc, int count,
+		protected OverloadData CalculateOverloadData(IIEPCDeclarationInputData iepc, int count,
 			VoltageLevelData voltageLevel, Volt averageVoltage, Tuple<uint, double> gearRatioUsedForMeasurement)
 		{
 
@@ -356,7 +356,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 		}
 
 
-		private OverloadData CalculateOverloadData(IElectricMotorDeclarationInputData motorData, int count, VoltageLevelData voltageLevel, Volt averageVoltage)
+		protected OverloadData CalculateOverloadData(IElectricMotorDeclarationInputData motorData, int count, VoltageLevelData voltageLevel, Volt averageVoltage)
 		{
 
 			// if average voltage is outside of the voltage-level range, do not extrapolate but take the min voltage entry, or max voltage entry
@@ -415,13 +415,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 
 	
 
-	public class GenericElectricMachinesDataAdapter : IElectricMachinesDataAdapter
+	public class GenericElectricMachinesDataAdapter : ElectricMachinesDataAdapter
 	{
-		private GenericBusElectricMotorData GenercicEMotorData = new GenericBusElectricMotorData();
+		private readonly GenericBusElectricMotorData _genericEMotorData = new GenericBusElectricMotorData();
+		private GenericBusIEPCData _genericIepcData = new GenericBusIEPCData();
 
 		#region Implementation of IElectricMachinesDataAdapter
 
-		public IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
+		public override IList<Tuple<PowertrainPosition, ElectricMotorData>> CreateElectricMachines(IElectricMachinesDeclarationInputData electricMachines, IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits,
 			Volt averageVoltage, GearList gearlist = null)
 		{
 			if (electricMachines == null) {
@@ -436,20 +437,43 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			CheckTorqueLimitVoltageLevels(electricMachines, torqueLimits);
 
 			return electricMachines.Entries.Select(m =>
-				Tuple.Create(m.Position, GenercicEMotorData.CreateGenericElectricMotorData(m, torqueLimits?.FirstOrDefault(t => t.Key == m.Position).Value,
+				Tuple.Create(m.Position, _genericEMotorData.CreateGenericElectricMotorData(m, torqueLimits?.FirstOrDefault(t => t.Key == m.Position).Value,
 					averageVoltage))).ToList();
 
 		}
 
-		public List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
+		public override List<Tuple<PowertrainPosition, ElectricMotorData>> CreateIEPCElectricMachines(IIEPCDeclarationInputData iepc, Volt averageVoltage)
 		{
-			throw new NotImplementedException();
+			if (iepc == null) {
+				return null;
+			}
+
+			var pos = PowertrainPosition.IEPC;
+			var count = iepc.DesignTypeWheelMotor && iepc.NrOfDesignTypeWheelMotorMeasured == 1 ? 2 : 1;
+            var gearRatioUsedForMeasurement = iepc.Gears
+				.Select(x => new { x.GearNumber, x.Ratio, Diff = Math.Round(Math.Abs(x.Ratio - 1), 6) }).GroupBy(x => x.Diff)
+				.OrderBy(x => x.Key).First().OrderBy(x => x.Ratio).Reverse().First();
+			var voltageLevels = new List<ElectricMotorVoltageLevelData>();
+			var genericIEPCData = _genericIepcData.CreateIEPCElectricMotorData(iepc);
+			genericIEPCData.OverloadRecoveryFactor = DeclarationData.OverloadRecoveryFactor;
+			genericIEPCData.TransmissionLossMap =
+				TransmissionLossMapReader.CreateEmADCLossMap(1.0, 1.0, "EM ADC LossMap Eff");
+			genericIEPCData.RatioADC = 1;
+			genericIEPCData.Overload = CalculateOverloadData(iepc, count, genericIEPCData.EfficiencyData, averageVoltage,
+				Tuple.Create((uint)gearRatioUsedForMeasurement.GearNumber, gearRatioUsedForMeasurement.Ratio));
+
+
+            return new List<Tuple<PowertrainPosition, ElectricMotorData>>() {
+				Tuple.Create<PowertrainPosition, ElectricMotorData>(pos, genericIEPCData)
+			};
 
-		}
+
+
+        }
 
         #endregion
 
-		private void CheckTorqueLimitVoltageLevels(IElectricMachinesDeclarationInputData electricMachines,
+        private void CheckTorqueLimitVoltageLevels(IElectricMachinesDeclarationInputData electricMachines,
 			IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> torqueLimits)
 		{
 			if (torqueLimits == null) {
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
index 91c78a71f646d9d4dab0b2f82d51814cd8f93338..83060c2f52b9f3cb9b22ba43fd566a0fc6092e32 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationMode/CompletedBusRunDataFactory/DeclarationModeCompletedBusRunDataFactory.cs
@@ -435,15 +435,15 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 					(bs) => rd.BatteryData = bs,
 					(sc) => rd.SuperCapData = sc);
 
+				rd.ElectricMachinesData = DataAdapterGeneric.CreateElectricMachines(PrimaryVehicle.Components.ElectricMachines,
+					PrimaryVehicle.ElectricMotorTorqueLimits, rd.BatteryData.CalculateAverageVoltage(), null);
+
+
 				if (PrimaryVehicle.VehicleType == VectoSimulationJobType.IEPC_S)
 				{
-					rd.ElectricMachinesData = DataAdapterGeneric.CreateIEPCElectricMachines(PrimaryVehicle.Components.IEPC,
+					var iepcData = DataAdapterGeneric.CreateIEPCElectricMachines(PrimaryVehicle.Components.IEPC,
 						rd.BatteryData.CalculateAverageVoltage());
-				}
-				else
-				{
-					rd.ElectricMachinesData = DataAdapterGeneric.CreateElectricMachines(PrimaryVehicle.Components.ElectricMachines,
-						PrimaryVehicle.ElectricMotorTorqueLimits, rd.BatteryData.CalculateAverageVoltage(), null);
+					iepcData.ForEach(iepc => rd.ElectricMachinesData.Add(iepc));
 				}
 
 
@@ -498,15 +498,16 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.CompletedBusRun
 					(sc) => rd.SuperCapData = sc);
 
 
+				
+				rd.ElectricMachinesData = DataAdapterGeneric.CreateElectricMachines(PrimaryVehicle.Components.ElectricMachines,
+						PrimaryVehicle.ElectricMotorTorqueLimits, rd.BatteryData.CalculateAverageVoltage(), null);
+				
+
 				if (PrimaryVehicle.VehicleType == VectoSimulationJobType.IEPC_S)
 				{
-					rd.ElectricMachinesData = DataAdapterGeneric.CreateIEPCElectricMachines(PrimaryVehicle.Components.IEPC,
+					var iepcData = DataAdapterGeneric.CreateIEPCElectricMachines(PrimaryVehicle.Components.IEPC,
 						rd.BatteryData.CalculateAverageVoltage());
-				}
-				else
-				{
-					rd.ElectricMachinesData = DataAdapterGeneric.CreateElectricMachines(PrimaryVehicle.Components.ElectricMachines,
-						PrimaryVehicle.ElectricMotorTorqueLimits, rd.BatteryData.CalculateAverageVoltage(), null);
+					iepcData.ForEach(iepc => rd.ElectricMachinesData.Add(iepc));
 				}
 
                 rd.VehicleData = DataAdapterSpecific.CreateVehicleData(PrimaryVehicle,
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 2fee0513ca2b664ce3b14829b8ef85ef1bec64db..03c598a1d83b04cbb08a33a7ecdb7d92ac96c668 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -51,6 +51,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.Utils;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
+using TUGraz.VectoCore.Models.GenericModelData;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
@@ -60,7 +61,8 @@ using TUGraz.VectoCore.OutputData.XML;
 
 namespace TUGraz.VectoCore.Models.Declaration
 {
-	public static class DeclarationData
+	public static class 
+		DeclarationData
 	{
 		/// <summary>
 		/// The standard acceleration for gravity on earth.
@@ -88,6 +90,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 		public static readonly HeatingVentilationAirConditioning HeatingVentilationAirConditioning =
 			new HeatingVentilationAirConditioning();
 
+
 		public static readonly PneumaticSystem PneumaticSystem = new PneumaticSystem();
 		public static readonly SteeringPump SteeringPump = new SteeringPump();
 		public static readonly SteeringPumpBus SteeringPumpBus = new SteeringPumpBus();
diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs
index e670179fab5f9507bdb2ee445c1225f28f6e29b1..53f0bd859caeb01096af5b03c98e14539dd82048 100644
--- a/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs
+++ b/VectoCore/VectoCore/Models/GenericModelData/GenericBusElectricMotorData.cs
@@ -63,55 +63,13 @@ namespace TUGraz.VectoCore.Models.GenericModelData
             VoltageLevelData voltageLevel, Volt averageVoltage, Tuple<uint, double> gearRatioUsedForMeasurement)
 		{
 			return CalculateOverloadData(count, voltageLevel, averageVoltage, iepc.VoltageLevels, gearRatioUsedForMeasurement);
-            //// if average voltage is outside of the voltage-level range, do not extrapolate but take the min voltage entry, or max voltage entry
-            //if (averageVoltage < iepc.VoltageLevels.Min(x => x.VoltageLevel))
-            //{
-            //    return CalculateOverloadBuffer(iepc.VoltageLevels.First(), count, voltageLevel, gearRatioUsedForMeasurement);
-            //}
-            //if (averageVoltage > iepc.VoltageLevels.Max(x => x.VoltageLevel))
-            //{
-            //    return CalculateOverloadBuffer(iepc.VoltageLevels.Last(), count, voltageLevel, gearRatioUsedForMeasurement);
-            //}
-
-            //var (vLow, vHigh) = iepc.VoltageLevels.OrderBy(x => x.VoltageLevel).GetSection(x => x.VoltageLevel < averageVoltage);
-            //var ovlLo = CalculateOverloadBuffer(vLow, count, voltageLevel, gearRatioUsedForMeasurement);
-            //var ovlHi = CalculateOverloadBuffer(vHigh, count, voltageLevel, gearRatioUsedForMeasurement);
-
-            //var retVal = new OverloadData()
-            //{
-            //    OverloadBuffer = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.OverloadBuffer, ovlHi.OverloadBuffer, averageVoltage),
-            //    ContinuousTorque = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousTorque, ovlHi.ContinuousTorque, averageVoltage),
-            //    ContinuousPowerLoss = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousPowerLoss, ovlHi.ContinuousPowerLoss, averageVoltage)
-            //};
-            //return retVal;
-        }
+		}
 
 
         private OverloadData CalculateOverloadData(IElectricMotorDeclarationInputData motorData, int count, VoltageLevelData voltageLevel, Volt averageVoltage)
 		{
 			return CalculateOverloadData(count, voltageLevel, averageVoltage, motorData.VoltageLevels);
-            //// if average voltage is outside of the voltage-level range, do not extrapolate but take the min voltage entry, or max voltage entry
-            //if (averageVoltage < motorData.VoltageLevels.Min(x => x.VoltageLevel))
-            //{
-            //    return CalculateOverloadBuffer(motorData.VoltageLevels.First(), count, voltageLevel);
-            //}
-            //if (averageVoltage > motorData.VoltageLevels.Max(x => x.VoltageLevel))
-            //{
-            //    return CalculateOverloadBuffer(motorData.VoltageLevels.Last(), count, voltageLevel);
-            //}
-
-            //var (vLow, vHigh) = motorData.VoltageLevels.OrderBy(x => x.VoltageLevel).GetSection(x => x.VoltageLevel < averageVoltage);
-            //var ovlLo = CalculateOverloadBuffer(vLow, count, voltageLevel);
-            //var ovlHi = CalculateOverloadBuffer(vHigh, count, voltageLevel);
-
-            //var retVal = new OverloadData()
-            //{
-            //    OverloadBuffer = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.OverloadBuffer, ovlHi.OverloadBuffer, averageVoltage),
-            //    ContinuousTorque = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousTorque, ovlHi.ContinuousTorque, averageVoltage),
-            //    ContinuousPowerLoss = VectoMath.Interpolate(vLow.VoltageLevel, vHigh.VoltageLevel, ovlLo.ContinuousPowerLoss, ovlHi.ContinuousPowerLoss, averageVoltage)
-            //};
-            //return retVal;
-        }
+		}
 		private OverloadData CalculateOverloadData(int count, VoltageLevelData voltageLevel, Volt averageVoltage, IList<IElectricMotorVoltageLevel> electricMotorVoltageLevels, Tuple<uint, double> gearUsedForMeasurement = null)
 		{
 
diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericBusIHPCData.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericBusIHPCData.cs
index 126d5735836fe981929d8d3c85f8eafa1f5ff4c1..87b62dd823e20000be1be890e4a5c30b5d188527 100644
--- a/VectoCore/VectoCore/Models/GenericModelData/GenericBusIHPCData.cs
+++ b/VectoCore/VectoCore/Models/GenericModelData/GenericBusIHPCData.cs
@@ -14,6 +14,8 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 {
 	public class GenericBusIHPCData : GenericBusEMBase
 	{
+		public const double GenericGearEfficiency = 0.925;
+
 		public GenericBusIHPCData()
 		{
 			GenericEfficiencyMap_ASM =
@@ -113,7 +115,7 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 			result.Columns.Add(ElectricMotorMapReader.Fields.MotorSpeed);
 			result.Columns.Add(ElectricMotorMapReader.Fields.Torque);
 			result.Columns.Add(ElectricMotorMapReader.Fields.PowerElectrical);
-
+			throw new Exception("Consider IHPC GenericGearEfficiency");
 			foreach (DataRow row in normalizedMap.Rows)
 			{
 				var motorSpeed = row.ParseDouble(MotorSpeedNorm) * ratedPoint.NRated;
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs b/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs
index 05ee026bb285ce18a1a5a1340d83060bf9252c9d..60cacc3b04c615492689f5bcc800d7b9d60245ac 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/TestGenericBusEMotorData.cs
@@ -133,7 +133,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 			var axleGear = multistepBusInputData.JobInputData.PrimaryVehicle.Vehicle.Components.AxleGearInputData;
 
 			var genericIEPCData = new GenericBusIEPCData();
-			var iepcMotorData = genericIEPCData.CreateIEPCElectricMotorData(iepcData, axleGear);
+			var iepcMotorData = genericIEPCData.CreateIEPCElectricMotorData(iepcData);
 
 			Assert.AreEqual(1, iepcMotorData.EfficiencyData.VoltageLevels.Count);
 		}