diff --git a/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj b/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj
index 7426ce847c7e001cb3da56e82a9a73293b69b435..fcef676f339aef78819dcf2a0f0a61305c78a88c 100644
--- a/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj
+++ b/Tools/DeclarationCycleZip/DeclarationCycleZip.csproj
@@ -3,7 +3,7 @@
     <OutputType>Exe</OutputType>
     <RootNamespace>DeclarationCycleZip</RootNamespace>
     <AssemblyName>DeclarationCycleZip</AssemblyName>
-    <TargetFrameworks>net6.0</TargetFrameworks>
+    <TargetFrameworks>net5.0</TargetFrameworks>
     <DefineConstants />
   </PropertyGroup>
 
diff --git a/Tools/GraphDrawer/GraphDrawer.csproj b/Tools/GraphDrawer/GraphDrawer.csproj
index fedd980a65886e9f4df4de0c3dce29bc8467ec3d..e26fef0a461607748f47be4df98184b65178c292 100644
--- a/Tools/GraphDrawer/GraphDrawer.csproj
+++ b/Tools/GraphDrawer/GraphDrawer.csproj
@@ -3,7 +3,7 @@
     <OutputType>Exe</OutputType>
     <RootNamespace>GraphDrawer</RootNamespace>
     <AssemblyName>GraphDrawer</AssemblyName>
-    <TargetFrameworks>net6.0-windows</TargetFrameworks>
+    <TargetFrameworks>net5.0-windows</TargetFrameworks>
     <DefineConstants />
   </PropertyGroup>
 
diff --git a/Tools/LicenceHeader/LicenceHeader.csproj b/Tools/LicenceHeader/LicenceHeader.csproj
index 832dd4037d1ee0285597297ff630353f748a7c8f..daf6950908b73103d7f79dd9511f5a551e3313ab 100644
--- a/Tools/LicenceHeader/LicenceHeader.csproj
+++ b/Tools/LicenceHeader/LicenceHeader.csproj
@@ -3,7 +3,7 @@
     <OutputType>Exe</OutputType>
     <RootNamespace>LicenceHeader</RootNamespace>
     <AssemblyName>LicenceHeader</AssemblyName>
-    <TargetFrameworks>net6.0</TargetFrameworks>
+    <TargetFrameworks>net5.0</TargetFrameworks>
     <DefineConstants />
   </PropertyGroup>
   <ItemGroup>
diff --git a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
index 709802e110259afb2ea612c12eeab84f033a3b2e..28d399122f5e3c47736429da2b291d609a39c775 100644
--- a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
+++ b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj
@@ -7,7 +7,7 @@
     <OptionCompare>Binary</OptionCompare>
     <OptionStrict>On</OptionStrict>
     <OptionInfer>On</OptionInfer>
-    <TargetFrameworks>net6.0</TargetFrameworks>
+    <TargetFrameworks>net5.0</TargetFrameworks>
     <DefineConstants />
   </PropertyGroup>
 
diff --git a/VectoConsole/VectoConsole.csproj b/VectoConsole/VectoConsole.csproj
index cf2935dcb40b6f82b1d797fb0bf8e72cf50e96cf..7f48f347ae5be890cb3fa022303fcee68cdca42b 100644
--- a/VectoConsole/VectoConsole.csproj
+++ b/VectoConsole/VectoConsole.csproj
@@ -4,7 +4,7 @@
     <RootNamespace>VectoConsole</RootNamespace>
     <AssemblyName>vectocmd</AssemblyName>
     <ApplicationIcon>VECTO.ico</ApplicationIcon>
-    <TargetFrameworks>net45;net48;net6.0</TargetFrameworks>
+    <TargetFrameworks>net45;net48;net5.0</TargetFrameworks>
     <DefineConstants />
   </PropertyGroup>
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
index f9798274940804902cf76b7757f5e0db53520941..a3e0ab5d7f37683db512aa38bf9e6cc2b21e59cf 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
@@ -985,15 +985,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			var overloadTestSpeed = voltageEntry.OverloadTestSpeed ?? 0.RPMtoRad();
 
 
-			var peakElPwr = voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, overloadTestSpeed, -overloadTorque, true)
+			var peakElPwr = voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, overloadTestSpeed, -overloadTorque, 0, true)
 				.ElectricalPower;
 			var peakPwrLoss = -peakElPwr - overloadTorque * overloadTestSpeed; // losses need to be positive
 			
 			var contElPwr = voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, continuousTorqueSpeed,
-								-continuousTorque).ElectricalPower ??
+								-continuousTorque, 0).ElectricalPower ??
 							voltageLevels.LookupElectricPower(voltageEntry.VoltageLevel, continuousTorqueSpeed,
 								voltageLevels.FullLoadDriveTorque(voltageEntry.VoltageLevel, continuousTorqueSpeed),
-								true).ElectricalPower;
+								0, true).ElectricalPower;
 			var continuousPowerLoss = -contElPwr - continuousTorque * continuousTorqueSpeed; // loss needs to be positive
 			var overloadBuffer = (peakPwrLoss - continuousPowerLoss) * voltageEntry.OverloadTime;
 			return new OverloadData() {
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
index 14e0216082301ea06f305e2be208d0d3813f34c9..3d2659fe3bca7ee6fb56456af1ec7d3415c28e1e 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
@@ -200,9 +200,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 			}
 
 			if (runData.Cycle != null && runData.Cycle.Entries.Any(e => e.PTOActive == PTOActivity.PTOActivityDuringStop)) {
-			if (jobType == VectoSimulationJobType.BatteryElectricVehicle) {
-				// TODO: MQ 20201020 - validate depending on EM position!?
-			}
+				if (jobType == VectoSimulationJobType.BatteryElectricVehicle) {
+					// TODO: MQ 20201020 - validate depending on EM position!?
+				}
 
 				if (runData.PTO == null || runData.PTO.PTOCycle == null) {
 					return new ValidationResult("PTOCycle is used in DrivingCycle, but is not defined in Vehicle-Data.");
diff --git a/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs b/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs
index 9c65c7585e9c48cee154e80b36d6d46c8d9b00dc..12cc6ed0875877f1c341d000f7d3fa5446033e08 100644
--- a/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs
+++ b/VectoCore/VectoCore/Models/Simulation/DataBus/IElectricMotorInfo.cs
@@ -12,7 +12,7 @@ namespace TUGraz.VectoCore.Models.Simulation.DataBus
 		PerSecond MaxSpeed { get; }
 		Watt DragPower(Volt volt, PerSecond electricMotorSpeed);
 		Watt MaxPowerDrive(Volt volt, PerSecond inAngularVelocity);
-		NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt);
+		NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt, uint gear);
 
 		bool DeRatingActive { get; }
 	}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs
index f81e5e977d5077fb6ac407b2c8647eb1ac103182..601d6e04cfe4af77582d888d18129beb1d7a5004 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricMotor/ElectricMotorData.cs
@@ -41,17 +41,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 
 		public PerSecond MaxSpeed =>
 			_maxSpeed ?? (_maxSpeed = VoltageLevels
-				.Min(v => VectoMath.Min(v.EfficiencyMap.MaxSpeed, v.FullLoadCurve.MaxSpeed)));
+				.Min(v => VectoMath.Min(v.MaxSpeed, v.FullLoadCurve.MaxSpeed)));
 
 		
-		public NewtonMeter EfficiencyMapLookupTorque(Volt voltage, Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque)
+		public NewtonMeter EfficiencyMapLookupTorque(Volt voltage, Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque, uint gear)
 		{
 			if (avgSpeed.IsEqual(0.RPMtoRad()) || avgSpeed.IsGreater(MaxSpeed)) {
 				return 0.SI<NewtonMeter>();
 			}
 			var (vLow, vHigh) = GetSection(voltage);
-			var r1 = vLow.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque);
-			var r2 = vHigh.EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque);
+			var r1 = vLow.LookupTorque(electricPower, avgSpeed, maxEmTorque, gear);
+			var r2 = vHigh.LookupTorque(electricPower, avgSpeed, maxEmTorque, gear);
 
 			if (r1 is null && r2 is null) {
 				return null;
@@ -69,7 +69,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 				? r1
 				: VectoMath.Interpolate(vLow.Voltage, vHigh.Voltage,
 					r1, r2, voltage);
-			var elPwr = LookupElectricPower(voltage, avgSpeed, retVal, true);
+			var elPwr = LookupElectricPower(voltage, avgSpeed, retVal, gear, true);
 			if (elPwr.ElectricalPower != null && electricPower.IsEqual(elPwr.ElectricalPower, 1e-3.SI<Watt>())) {
 				return retVal;
 			}
@@ -77,7 +77,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			var searchResult = SearchAlgorithm.Search(retVal, electricPower - elPwr.ElectricalPower,
 				interval: 10.SI<NewtonMeter>(),
 				getYValue: x => (Watt)x - electricPower,
-				evaluateFunction: x => LookupElectricPower(voltage, avgSpeed, x, true).ElectricalPower,
+				evaluateFunction: x => LookupElectricPower(voltage, avgSpeed, x, gear, true).ElectricalPower,
 				criterion: x => ((Watt)x - electricPower).Value(),
 				searcher: this
 			);
@@ -87,12 +87,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			//throw new NotImplementedException("EfficientyMapLookupTorque");
 		}
 
-		public EfficiencyMap.EfficiencyResult LookupElectricPower(Volt voltage, PerSecond avgSpeed, NewtonMeter torque, bool allowExtrapolation = false)
+		public EfficiencyMap.EfficiencyResult LookupElectricPower(Volt voltage, PerSecond avgSpeed, NewtonMeter torque, uint gear, bool allowExtrapolation = false)
 		{
 			var (vLow, vHigh) = GetSection(voltage);
 
-			var r1 = vLow.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation);
-			var r2 = vHigh.EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation);
+			var r1 = vLow.LookupElectricPower(avgSpeed, torque, gear, allowExtrapolation);
+			var r2 = vHigh.LookupElectricPower(avgSpeed, torque, gear, allowExtrapolation);
 
 			if (r1 == null || r2 == null || r1.ElectricalPower == null || r2.ElectricalPower == null) {
 				return new EfficiencyMap.EfficiencyResult() {
@@ -163,9 +163,37 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		public ElectricMotorFullLoadCurve FullLoadCurve { get; internal set; }
 
 		[ValidateObject]
-		public EfficiencyMap EfficiencyMap { get; internal set; }
+		protected internal EfficiencyMap EfficiencyMap { protected get; set; }
 
+		public virtual PerSecond MaxSpeed => EfficiencyMap.MaxSpeed;
 
+		public virtual EfficiencyMap.EfficiencyResult LookupElectricPower(PerSecond avgSpeed, NewtonMeter torque, uint gear, bool allowExtrapolation)
+		{
+			return EfficiencyMap.LookupElectricPower(avgSpeed, torque, allowExtrapolation);
+		}
+
+		public virtual NewtonMeter LookupTorque(Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque, uint gear)
+		{
+			return EfficiencyMap.LookupTorque(electricPower, avgSpeed, maxEmTorque);
+		}
+	}
+
+	public class IEPCVoltageLEvelData : ElectricMotorVoltageLevelData
+	{
+		[ValidateObject]
+		protected internal Dictionary<uint, EfficiencyMap> IEPCEfficiencyMap { protected get; set; }
+
+		public override PerSecond MaxSpeed => IEPCEfficiencyMap.Values.Min(x => x.MaxSpeed);
+
+		public override EfficiencyMap.EfficiencyResult LookupElectricPower(PerSecond avgSpeed, NewtonMeter torque, uint gear, bool allowExtrapolation)
+		{
+			return IEPCEfficiencyMap[gear].LookupElectricPower(avgSpeed, torque, allowExtrapolation);
+		}
+
+		public override NewtonMeter LookupTorque(Watt electricPower, PerSecond avgSpeed, NewtonMeter maxEmTorque, uint gear)
+		{
+			return IEPCEfficiencyMap[gear].LookupTorque(electricPower, avgSpeed, maxEmTorque);
+		}
 	}
 
 	public class OverloadData
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
index 8ef923828af37da0c9bc0a5704a39d2b8658f64d..ace92cb4be72704f46691e6c5772c8c404825dd9 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
@@ -65,12 +65,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return ModelData.EfficiencyData.FullLoadDriveTorque(volt, electricMotorSpeed) * electricMotorSpeed;
 		}
 
-		public NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt)
+		public NewtonMeter GetTorqueForElectricPower(Volt volt, Watt electricPower, PerSecond avgEmSpeed, Second dt, uint gear)
 		{
 			var maxTorque = electricPower > 0
-				? GetMaxRecuperationTorque(volt, dt, avgEmSpeed)
-				: GetMaxDriveTorque(volt, dt, avgEmSpeed);
-			var tqEmMap = ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, electricPower, avgEmSpeed, maxTorque);
+				? GetMaxRecuperationTorque(volt, dt, avgEmSpeed, gear)
+				: GetMaxDriveTorque(volt, dt, avgEmSpeed, gear);
+			var tqEmMap = ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, electricPower, avgEmSpeed, maxTorque, gear);
 			if (tqEmMap == null) {
 				return null;
 			}
@@ -144,6 +144,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		public IResponse DoHandleRequest(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
 			bool dryRun, double ratio)
 		{
+			var gear = DataBus.GearboxInfo.Gear;
 			var voltage = DataBus.BatteryInfo.InternalVoltage;
 
 			var iceOn =  Position == PowertrainPosition.HybridP1 &&
@@ -159,8 +160,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				? 0.SI<NewtonMeter>()
 				: Formulas.InertiaPower(avgEmSpeed, PreviousState.EMSpeed, ModelData.Inertia, dt) / avgEmSpeed;
 
-			var maxDriveTorqueEmMap = GetMaxDriveTorque(voltage, dt, avgEmSpeed);
-			var maxRecuperationTorqueEmMap = GetMaxRecuperationTorque(voltage, dt, avgEmSpeed);
+			var maxDriveTorqueEmMap = GetMaxDriveTorque(voltage, dt, avgEmSpeed, gear.Gear);
+			var maxRecuperationTorqueEmMap = GetMaxRecuperationTorque(voltage, dt, avgEmSpeed, gear.Gear);
 
 			// inertia has to be added here. drive torque is negative, when accelerating inertia is positive and thus 'reduces' drive torque, i.e 'less negative'
 			var maxDriveTorqueEm = maxDriveTorqueEmMap == null ? null : maxDriveTorqueEmMap + inertiaTorqueEm;
@@ -254,10 +255,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				emTorqueMap = null;
 			}
 
+			
 			var electricPower = emOff || (ModelData.DragCurve.Lookup(avgEmSpeed) + inertiaTorqueEm).IsEqual(emTorque, 1e-3.SI<NewtonMeter>())
 				? 0.SI<Watt>()
 				: ModelData.EfficiencyData
-					.LookupElectricPower(voltage, avgEmSpeed, emTorqueMap, DataBus.ExecutionMode != ExecutionMode.Declaration)
+					.LookupElectricPower(voltage, avgEmSpeed, emTorqueMap, gear.Gear, DataBus.ExecutionMode != ExecutionMode.Declaration)
 					.ElectricalPower;
 
 			var electricSupplyResponse =
@@ -379,7 +381,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return retVal;
 		}
 
-		private NewtonMeter GetMaxRecuperationTorque(Volt volt, Second dt, PerSecond avgSpeed)
+		private NewtonMeter GetMaxRecuperationTorque(Volt volt, Second dt, PerSecond avgSpeed, uint gear)
 		{
 			var tqContinuousPwr = DeRatingActive ? ModelData.Overload.ContinuousTorque : null;
 			
@@ -394,20 +396,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			var maxBatRecuperationTorque = maxBatPower.IsEqual(0, 1e-3)
 				? ModelData.DragCurve.Lookup(avgSpeed)
-				: ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque);
+				: ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque, gear);
 			var maxTorqueRecuperate = VectoMath.Min(maxEmTorque, maxBatRecuperationTorque);
 			if (maxTorqueRecuperate < 0) {
 				return null;
 			}
 
-			var elPower = ModelData.EfficiencyData.LookupElectricPower(volt, avgSpeed, maxTorqueRecuperate);
+			var elPower = ModelData.EfficiencyData.LookupElectricPower(volt, avgSpeed, maxTorqueRecuperate, gear);
 			if (elPower.ElectricalPower?.IsSmallerOrEqual(0) ?? true) {
 				return null;
 			}
 			return maxTorqueRecuperate;
 		}
 
-		private NewtonMeter GetMaxDriveTorque(Volt volt, Second dt, PerSecond avgSpeed)
+		private NewtonMeter GetMaxDriveTorque(Volt volt, Second dt, PerSecond avgSpeed, uint gear)
 		{
 			var tqContinuousPwr = DeRatingActive ? -ModelData.Overload.ContinuousTorque : null;
 			
@@ -422,7 +424,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			var maxBatDriveTorque = maxBatPower.IsEqual(0, 1e-3)
 				? ModelData.DragCurve.Lookup(avgSpeed)
-				: ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque);
+				: ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque, gear);
 			
 			var maxTorqueDrive = VectoMath.Max(maxEmTorque, maxBatDriveTorque);
 			return maxTorqueDrive > 0 ? null : maxTorqueDrive;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs
index 10c099c6556a4eacc0f7857ea50f570c915088d3..661c1c83aafabc8bad0a7d4919b822013c138ead 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVAMTShiftStrategy.cs
@@ -561,7 +561,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var engineSpeed = response.ElectricMotor.AngularVelocity;
 
 
-			var fcCurRes = VoltageLevels.LookupElectricPower(DataBus.BatteryInfo.InternalVoltage, engineSpeed, tqCurrent / EMRatio, true);
+			var fcCurRes = VoltageLevels.LookupElectricPower(DataBus.BatteryInfo.InternalVoltage, engineSpeed, tqCurrent / EMRatio, currentGear.Gear, true);
 			if (fcCurRes.Extrapolated) {
 				Log.Warn(
 					"EffShift Strategy: Extrapolation of power consumption for current gear! n: {0}, Tq: {1}",
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs
index dce109a26ab15efe8b83981c4c0838a3bb92cdc0..ec5fa606aa5fdb24df1b96d6dec122f8af4d3dc4 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/GensetPreprocessor.cs
@@ -154,7 +154,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 
 					try {
 						Genset.ElectricMotor.Initialize(0.SI<NewtonMeter>(), speed);
-						var tq = Genset.ElectricMotor.GetTorqueForElectricPower(voltage, pwr, speed * EmData.RatioADC, dt);
+						var tq = Genset.ElectricMotor.GetTorqueForElectricPower(voltage, pwr, speed * EmData.RatioADC, dt, 0);
 
 						if (tq == null || tq.IsSmallerOrEqual(0)) {
 							continue;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
index 627b76836238251d1788b9801e01521bed48afdc..c76db1c435316428ccbddc124f18d84fa67a5b1e 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
@@ -1975,7 +1975,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 					//var emDriveTorque = ModelData.ElectricMachinesData.Where(x => x.Item1 == emPos).First().Item2.EfficiencyMap
 					//							.LookupTorque(emDrivePower, firstResponse.ElectricMotor.AngularVelocity, maxEmTorque);
 
-					var emDriveTorque = DataBus.ElectricMotorInfo(emPos).GetTorqueForElectricPower(voltage, emDrivePower, firstResponse.ElectricMotor.AngularVelocity, dt);
+					var emDriveTorque = DataBus.ElectricMotorInfo(emPos).GetTorqueForElectricPower(voltage, emDrivePower, firstResponse.ElectricMotor.AngularVelocity, dt, 0);
 					var emDragTorque = ModelData.ElectricMachinesData.First(x => x.Item1 == emPos).Item2
 												.DragCurve.Lookup(firstResponse.ElectricMotor.AngularVelocity);
 					if (emDriveTorque != null &&
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
index da5d0c02532ae9f635d672d65fc8538f98eab1cb..311160ee353bdeb50456b605a1a79e5c589c1562 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/SerialHybridStrategy.cs
@@ -419,7 +419,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 					genSetOperatingPoint = MaxGensetPower(absTime, dt, drivetrainDemand, maxPowerGenset, gensetState);
 					emTorque = TestPowertrain.ElectricMotor.GetTorqueForElectricPower(
 						DataBus.BatteryInfo.InternalVoltage, drivetrainDemand.Response.ElectricSystem.MaxPowerDrive,
-						drivetrainDemand.Response.ElectricMotor.AngularVelocity, dt);
+						drivetrainDemand.Response.ElectricMotor.AngularVelocity, dt, DataBus.GearboxInfo?.Gear.Gear ?? 0);
 					if (emTorque == null) {
 						emTorque = -emResponse.MaxDriveTorque;
 					} else {
diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs
index 09a94a6622c2ba3aa597b866a8bf2a1ba38dbe59..14e5839242ba69f8363415bd5be1bf5daa3a4798 100644
--- a/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs
+++ b/VectoCore/VectoCoreTest/FileIO/JsonReadHybridTest.cs
@@ -162,17 +162,17 @@ namespace TUGraz.VectoCore.Tests.FileIO
 			Assert.AreEqual(370.153, em.FullGenerationTorque(500.SI<Volt>(), 2000.RPMtoRad()).Value());
 			Assert.AreEqual(388.1145, em.FullGenerationTorque(550.SI<Volt>(), 2000.RPMtoRad()).Value());
 
-            Assert.AreEqual(-101.70072, em.EfficiencyMapLookupTorque(400.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3);
-			Assert.AreEqual(-25000, em.LookupElectricPower(400.SI<Volt>(), 2000.RPMtoRad(), -101.70072.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1);
+            Assert.AreEqual(-101.70072, em.EfficiencyMapLookupTorque(400.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3);
+			Assert.AreEqual(-25000, em.LookupElectricPower(400.SI<Volt>(), 2000.RPMtoRad(), -101.70072.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1);
 
-			Assert.AreEqual(-114.51788, em.EfficiencyMapLookupTorque(600.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3);
-			Assert.AreEqual(-25000, em.LookupElectricPower(600.SI<Volt>(), 2000.RPMtoRad(), -114.51788.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1);
+			Assert.AreEqual(-114.51788, em.EfficiencyMapLookupTorque(600.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3);
+			Assert.AreEqual(-25000, em.LookupElectricPower(600.SI<Volt>(), 2000.RPMtoRad(), -114.51788.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1);
 
-			Assert.AreEqual(-107.772009, em.EfficiencyMapLookupTorque(500.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3);
-			Assert.AreEqual(-25000, em.LookupElectricPower(500.SI<Volt>(), 2000.RPMtoRad(), -107.772009.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1);
+			Assert.AreEqual(-107.772009, em.EfficiencyMapLookupTorque(500.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3);
+			Assert.AreEqual(-25000, em.LookupElectricPower(500.SI<Volt>(), 2000.RPMtoRad(), -107.772009.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1);
 
-			Assert.AreEqual(-111.053784, em.EfficiencyMapLookupTorque(550.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>()).Value(), 1e-3);
-			Assert.AreEqual(-25000, em.LookupElectricPower(550.SI<Volt>(), 2000.RPMtoRad(), -111.053784.SI<NewtonMeter>()).ElectricalPower.Value(), 1e-1);
+			Assert.AreEqual(-111.053784, em.EfficiencyMapLookupTorque(550.SI<Volt>(), -25000.SI<Watt>(), 2000.RPMtoRad(), -300.SI<NewtonMeter>(), 0).Value(), 1e-3);
+			Assert.AreEqual(-25000, em.LookupElectricPower(550.SI<Volt>(), 2000.RPMtoRad(), -111.053784.SI<NewtonMeter>(), 0).ElectricalPower.Value(), 1e-1);
 
 		}
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs
index 25c891c1ed8069b4ed71593edbace5cce9ad0924..c1995654882dc0adca8ad6ebc651b87b19a4abeb 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/ElectricMotorTest.cs
@@ -69,8 +69,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			Assert.AreEqual(30 * count, emModelData.DragCurve.Lookup(2500.RPMtoRad()).Value(), 1e-3);
 
 			Assert.AreEqual(-14579 * count,
-				emModelData.EfficiencyData.VoltageLevels.First().EfficiencyMap
-					.LookupElectricPower(190.99.RPMtoRad(), (-500 * count).SI<NewtonMeter>(), false).ElectricalPower.Value(),
+				emModelData.EfficiencyData.VoltageLevels.First()
+					.LookupElectricPower(190.99.RPMtoRad(), (-500 * count).SI<NewtonMeter>(), 0, false).ElectricalPower.Value(),
 				1e-3);