diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb
index 38eec343d112e0b63a281b9d3ba102112262d0db..9e3a4519dd52c23e702d5c0a92027884275ac481 100644
--- a/VECTO/Input Files/Gearbox.vb	
+++ b/VECTO/Input Files/Gearbox.vb	
@@ -74,7 +74,7 @@ Public Class Gearbox
 	Public PSShiftTime As Double
 
 
-	Public Sub New()
+    Public Sub New()
 		_myPath = ""
 		_filePath = ""
 		SetDefault()
@@ -595,6 +595,18 @@ Public Class Gearbox
     End Get
     End Property
 
+    Public ReadOnly Property VeloictyDropFactor As Double? Implements IGearshiftEngineeringInputData.VeloictyDropFactor
+        Get
+            Return Nothing
+        End Get
+    End Property
+
+    Public ReadOnly Property AccelerationFactor As Double? Implements IGearshiftEngineeringInputData.AccelerationFactor
+        Get
+            Return Nothing
+        End Get
+    End Property
+
     Public Overridable ReadOnly Property LoadStageShiftLines As TableData Implements IGearshiftEngineeringInputData.LoadStageShiftLines
 		Get
 			Return Nothing
diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
index 904adaed184ffc4c9ba5834521cda50c338d6dd6..1531d28d0661cae80a7369e0e29fa360325d4db4 100644
--- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
@@ -277,6 +277,9 @@ namespace TUGraz.VectoCommon.InputData
 
 		int? AllowedGearRangeFC { get; }
 
+		double? VeloictyDropFactor { get; }
+
+		double? AccelerationFactor { get; }
 
 		// Voith GS Parameters
 		TableData LoadStageShiftLines { get; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
index ed8f182f2fbad9bfbe52ca022d82800a9eec354b..84c37a92970674c80f12ccee6abd3e835f35cce6 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
@@ -118,6 +118,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	public class JSONGearboxDataV5 : JSONFile, IGearboxEngineeringInputData, IAxleGearInputData,
 		ITorqueConverterEngineeringInputData, IGearshiftEngineeringInputData
 	{
+
 		public JSONGearboxDataV5(JObject data, string filename, bool tolerateMissing = false)
 			: base(data, filename, tolerateMissing) {}
 
@@ -403,6 +404,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		public double? RatioEarlyUpshiftFC { get { return null; } }
 		public double? RatioEarlyDownshiftFC { get { return null; } }
 		public int? AllowedGearRangeFC { get { return null; } }
+
+		public double? VeloictyDropFactor
+		{
+			get { return null; }
+		}
+
+		public double? AccelerationFactor
+		{
+			get { return null; }
+		}
+
 		public TableData LoadStageShiftLines { get { return null; } }
 		public IList<double> LoadStageThresoldsUp { get { return null; } }
 		public IList<double> LoadStageThresoldsDown { get { return null; } }
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs
index 6cda1e9b0ff76f36d91b3df5bbf2fbfcc365a133..14fad26e2114a029fc90793671ae6b48ccc4ac11 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONTCUData.cs
@@ -268,6 +268,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
+		public double? VeloictyDropFactor
+		{
+			get {
+				if (Body["VelocityDropFactor"] == null) {
+					return null;
+				}
+
+				return Body.GetEx<double>("VelocityDropFactor");
+			}
+		}
+
+		public double? AccelerationFactor
+		{
+			get {
+				if (Body["AccelerationFactorNP98h"] == null) {
+					return null;
+				}
+
+				return Body.GetEx<double>("AccelerationFactorNP98h");
+			}
+		}
+
 		public TableData LoadStageShiftLines
 		{
 			get {
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
index 4ef9f27622e00ef4707902d38ec64fb22624ba7a..38265ec2784688a4228ba80a5d388ff9a0288677 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
@@ -115,6 +115,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
 		public virtual double? RatioEarlyUpshiftFC { get { return null; } }
 		public virtual double? RatioEarlyDownshiftFC { get { return null; } }
 		public int? AllowedGearRangeFC { get { return null; } }
+
+		public double? VeloictyDropFactor { get { return null; } }
+
+		public double? AccelerationFactor
+		{
+			get { return null; }
+		}
+
 		public virtual TableData LoadStageShiftLines { get { return null; } }
 		public virtual IList<double> LoadStageThresoldsUp { get { return null; } }
 		public virtual IList<double> LoadStageThresoldsDown { get { return null; } }
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
index 1b65f8f0b05de1c77e176e08d64a5f2640335065..afbe13ca47c2511bed52b3cacdee84fc294d5adc 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
@@ -599,6 +599,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				RatioEarlyUpshiftFC = DeclarationData.GearboxTCU.RatioEarlyUpshiftFC / axleRatio,
 				RatioEarlyDownshiftFC = DeclarationData.GearboxTCU.RatioEarlyDownshiftFC / axleRatio,
 				AllowedGearRangeFC = gbxType.AutomaticTransmission() ? DeclarationData.GearboxTCU.AllowedGearRangeFCAT : DeclarationData.GearboxTCU.AllowedGearRangeFCAMT,
+				VelocityDropFactor = DeclarationData.GearboxTCU.VelocityDropFactor,
+				AccelerationFactor = DeclarationData.GearboxTCU.AccelerationFactor,
 			};
 
 			return retVal;
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
index 72c1cf2bdb831c8e1a43f1556780106ce0b9ae93..db9761b38d8cb9b3cb0f234019d2bceb5d96004c 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
@@ -458,6 +458,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				RatioEarlyUpshiftFC = (gsInputData.RatioEarlyUpshiftFC ?? DeclarationData.GearboxTCU.RatioEarlyUpshiftFC) / axleRatio,
 				RatioEarlyDownshiftFC = (gsInputData.RatioEarlyDownshiftFC ?? DeclarationData.GearboxTCU.RatioEarlyDownshiftFC) / axleRatio,
 				AllowedGearRangeFC = gsInputData.AllowedGearRangeFC ?? (gbxType.AutomaticTransmission() ? DeclarationData.GearboxTCU.AllowedGearRangeFCAT : DeclarationData.GearboxTCU.AllowedGearRangeFCAMT),
+				VelocityDropFactor = gsInputData.VeloictyDropFactor ?? DeclarationData.GearboxTCU.VelocityDropFactor,
+				AccelerationFactor = gsInputData.AccelerationFactor ?? DeclarationData.GearboxTCU.AccelerationFactor,
 
 				// voith gs parameters
 
diff --git a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs
index ca3cd73032f5309c11a5cc58a61613fd0dd71fe3..bb0eae80650c446287bca09f265e5810ccf4c1fb 100644
--- a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs
+++ b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs
@@ -52,6 +52,9 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl
 		public Watt DragPower { get; set; }
 		public NewtonMeter EngineTorqueDemand { get; set; }
 		public NewtonMeter EngineTorqueDemandTotal { get; set; }
+
+		public NewtonMeter EngineStationaryFullLoadTorque { get; set; }
+
 		public NewtonMeter EngineDynamicFullLoadTorque { get; set; }
 		public MeterPerSecond VehicleSpeed { get; set; }
 
@@ -127,10 +130,11 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl
 
 	public class ResponseDryRun : AbstractResponse
 	{
+		
 		public Watt DeltaFullLoad { get; set; }
 		public Watt DeltaDragLoad { get; set; }
 		public PerSecond DeltaEngineSpeed { get; set; }
-		
+
 	}
 
 	internal class ResponseGearShift : AbstractResponse
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 3e13cbb2f89527883b4439764abd05dcd66aac88..f4257b66f2b9fd7208079e1c095d646dc4b53ad3 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -202,6 +202,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 			public const double RatingFactorCurrentGearAT = 0.95;
 
 			public static readonly MeterPerSquareSecond DriverAccelerationThresholdLow = 0.1.SI<MeterPerSquareSecond>();
+			public static double VelocityDropFactor = 0.0;
+			public static double AccelerationFactor = 0.5;
 
 			public const double RatioEarlyUpshiftFC = 24;
 			public const double RatioEarlyDownshiftFC = 24;
@@ -272,7 +274,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 				var p2 = new Point(engine.IdleSpeed.Value() * 1.1, 0);
 				var p3 = new Point(fullLoadCurve.NTq99lSpeed.Value(), 0);
-				var p5 = new Point(fullLoadCurve.RatedSpeed.Value(), fullLoadCurve.MaxTorque.Value() * 1.1);
+				var p5 = new Point(fullLoadCurve.NP98hSpeed.Value(), fullLoadCurve.MaxTorque.Value() * 1.1);
 
 				var downShift = new List<ShiftPolygon.ShiftPolygonEntry>();
 
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs b/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs
index 86ce5e14db9f8da5379222b95381518580eb9ef5..6ce35c267c254d623e95a8bbc4ddb0c5cf22e30d 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/ShiftStrategyParameters.cs
@@ -54,11 +54,17 @@ namespace TUGraz.VectoCore.Models.Simulation.Data {
 		public double RatioEarlyDownshiftFC { get; set; }
 		public double RatioEarlyUpshiftFC { get; set; }
 
+		public int AllowedGearRangeFC { get; set; }
+
+		public double AccelerationFactor { get; set; }
+
+		public double VelocityDropFactor { get; internal set; }
+
 		// Shift Lines for Voith proposed shift strategy
 		public TableData GearshiftLines { get; set; }
 
 		public IEnumerable<Tuple<double, double>> LoadstageThresholds { get; set; }
 		
-		public int AllowedGearRangeFC { get; set; }
+		
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs
index fc360d838318ebc7ff3986dbc6c4a5a30f1f0bed..86d6ee681daaa7baa6f13e2d4678f90b6613f0c8 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs
@@ -62,6 +62,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 		private PerSecond _nTq99lSpeed; // 99% of max Torque below rated speed
 		private PerSecond _nP99hSpeed; // 99% of Pmax above rated speed
 
+		private PerSecond _nTq98hSpeed; // 99% of max Torque above rated
+		private PerSecond _nP98hSpeed; // 99% of Pmax above rated speed
+
+
 		[Required, ValidateObject] internal readonly List<FullLoadCurveEntry> FullLoadEntries;
 
 		private SortedList<PerSecond, int> _quickLookup;
@@ -281,6 +285,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 			get { return _nP99hSpeed ?? (_nP99hSpeed = ComputeNP99HSpeed()); }
 		}
 
+		public PerSecond NTq98hSpeed
+		{
+			get { return _nTq98hSpeed ?? (_nTq98hSpeed = FindEnginSpeedForTorque(0.98 * MaxTorque).Last()); }
+		}
+
+		public PerSecond NP98hSpeed
+		{
+			get { return _nP98hSpeed ?? (_nP98hSpeed = ComputeNP98HSpeed()); }
+		}
+
 		private PerSecond ComputeNP99HSpeed()
 		{
 			var retVal = FindEngineSpeedForPower(0.99 * MaxPower).Last();
@@ -291,6 +305,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 			return retVal;
 		}
 
+		private PerSecond ComputeNP98HSpeed()
+		{
+			var retVal = FindEngineSpeedForPower(0.98 * MaxPower).Last();
+			if (retVal <= RatedSpeed) {
+				throw new VectoException(
+					"failed to compute n_P99H - must be higher than rated speed. rated speed: {0}, n_tq99h: {1}", RatedSpeed, retVal);
+			}
+			return retVal;
+		}
+
 		public PerSecond LoSpeed
 		{
 			get { return _engineSpeedLo ?? (_engineSpeedLo = FindEngineSpeedForPower(0.55 * MaxPower).First()); }
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs
index 7580c17593acc60bee7aa45efe7180777e3b53c8..31c60806d35a4d46f7cfe446f49473e955009b3f 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategyOptimized.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
 using System.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
@@ -6,6 +7,7 @@ using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.Connector.Ports.Impl;
 using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.DataBus;
 using TUGraz.VectoCore.Models.Simulation.Impl;
@@ -24,7 +26,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		private SimplePowertrainContainer TestContainer;
 		private Gearbox TestContainerGbx;
 
-		public AMTShiftStrategyOptimized(VectoRunData runData, IDataBus dataBus) : base(runData, dataBus)
+		protected readonly VelocityRollingLookup VelocityDropData;
+		private AccelerationCurveData accCurve;
+
+		public AMTShiftStrategyOptimized(VectoRunData runData, IVehicleContainer dataBus) : base(runData, dataBus)
 		{
 			if (runData.EngineData == null) {
 				return;
@@ -32,6 +37,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			fcMap = runData.EngineData.ConsumptionMap;
 			fld = runData.EngineData.FullLoadCurves;
 			shiftStrategyParameters = runData.GearshiftParameters;
+			accCurve = runData.DriverData.AccelerationCurve;
 			if (shiftStrategyParameters == null) {
 				throw new VectoException("Parameters for shift strategy missing!");
 			}
@@ -45,6 +51,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				throw new VectoException("Unknown gearboxtype: {0}", TestContainer.GearboxCtl.GetType().FullName);
 			}
 
+			// register pre-processors
+			var maxG = runData.Cycle.Entries.Max(x => Math.Abs(x.RoadGradientPercent.Value())) + 1;
+			var grad = Convert.ToInt32(maxG / 2) * 2;
+
+			VelocityDropData = new VelocityRollingLookup();
+			dataBus.AddPreprocessor(
+				new VelocitySpeedGearshiftPreprocessor(VelocityDropData, runData.GearboxData.TractionInterruption, TestContainer, -grad, grad, 2));
+
+
 			if (shiftStrategyParameters.AllowedGearRangeFC > 2 || shiftStrategyParameters.AllowedGearRangeFC < 1) {
 				Log.Warn("Gear-range for FC-based gearshift must be either 1 or 2!");
 				shiftStrategyParameters.AllowedGearRangeFC = shiftStrategyParameters.AllowedGearRangeFC.LimitTo(1, 2);
@@ -62,6 +77,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			var fcUpshiftPossible = true;
 
+			var estimatedVelocityPostShift = VelocityDropData.Interpolate(DataBus.VehicleSpeed, DataBus.RoadGradient);
+			var vDrop = DataBus.VehicleSpeed - estimatedVelocityPostShift;
+			var vehicleSpeedForGearRating = DataBus.VehicleSpeed - vDrop * shiftStrategyParameters.VelocityDropFactor;
+
+			var totalTransmissionRatio = DataBus.EngineSpeed / DataBus.VehicleSpeed;
+
 			for (var i = 1; i <= shiftStrategyParameters.AllowedGearRangeFC; i++) {
 				var tryNextGear = (uint)(currentGear + i);
 
@@ -70,7 +91,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				}
 
 				fcUpshiftPossible = true;
-				var response = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, tryNextGear);
+
+				var response = RequestDryRunWithGear(absTime, dt, vehicleSpeedForGearRating, DataBus.DriverAcceleration, tryNextGear);
+				//var response = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, tryNextGear);
 
 				var inAngularVelocity = ModelData.Gears[tryNextGear].Ratio * outAngularVelocity;
 				var inTorque = response.ClutchPowerRequest / inAngularVelocity;
@@ -83,19 +106,48 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 				var fullLoadPower = response.EnginePowerRequest - response.DeltaFullLoad;
 				var reserve = 1 - response.EnginePowerRequest / fullLoadPower;
+				//var reserve = 1 - response.EngineTorqueDemandTotal / response.EngineStationaryFullLoadTorque;
+
+				if (reserve < ModelData.TorqueReserve && reserve > -0.1) {
+					//var acc = EstimateAcceleration(outAngularVelocity, outTorque);
+
+					//var estimatedEngineSpeed = vehicleSpeedForGearRating * (totalTransmissionRatio / ModelData.Gears[currentGear].Ratio * ModelData.Gears[tryNextGear].Ratio);
+					var accelerationFactor = outAngularVelocity * ModelData.Gears[currentGear].Ratio < fld[0].NTq98hSpeed ?
+						1.0 :
+						VectoMath.Interpolate(fld[0].NTq98hSpeed, fld[0].NP98hSpeed, 1.0, shiftStrategyParameters.AccelerationFactor, outAngularVelocity * ModelData.Gears[currentGear].Ratio);
+					var minAcc = VectoMath.Min(DataBus.DriverAcceleration, accCurve.Lookup(vehicleSpeedForGearRating).Acceleration * accelerationFactor);
+					//var minAcc = DataBus.DriverAcceleration * accelerationFactor;
+					response = RequestDryRunWithGear(absTime, dt, vehicleSpeedForGearRating, minAcc, tryNextGear);
+					//response = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, tryNextGear);
+					fullLoadPower = response.EnginePowerRequest - response.DeltaFullLoad;
+					reserve = 1 - response.EnginePowerRequest / fullLoadPower;
+					if (reserve < ModelData.TorqueReserve) {
+						continue;
+					} else {
+						Log.Error("foo");
+					}
+				}
 
 				if (fcCurrent == null) {
-					var responseCurrent = RequestDryRunWithGear(absTime, dt, outTorque, outAngularVelocity, currentGear);
-					fcCurrent = fcMap.GetFuelConsumption(
-						responseCurrent.EngineTorqueDemandTotal.LimitTo(
-							fld[currentGear].DragLoadStationaryTorque(responseCurrent.EngineSpeed),
-							fld[currentGear].FullLoadStationaryTorque(responseCurrent.EngineSpeed))
-						, responseCurrent.EngineSpeed).Value;
+					var responseCurrent = RequestDryRunWithGear(absTime, dt, DataBus.VehicleSpeed, DataBus.DriverAcceleration, currentGear);
+					//var responseCurrent = RequestDryRunWithGear(absTime, dt,outTorque, outAngularVelocity, currentGear);
+					var tqCurrent = responseCurrent.EngineTorqueDemandTotal.LimitTo(
+						fld[currentGear].DragLoadStationaryTorque(responseCurrent.EngineSpeed),
+						fld[currentGear].FullLoadStationaryTorque(responseCurrent.EngineSpeed));
+					var fcCurRes = fcMap.GetFuelConsumption(tqCurrent, responseCurrent.EngineSpeed, true);
+					if (fcCurRes.Extrapolated) {
+						Log.Warn("EffShift Strategy: Extrapolation of fuel consumption for current gear!n: {1}, Tq: {2}", responseCurrent.EngineSpeed, tqCurrent);
+					}
+					fcCurrent = fcCurRes.Value;
 				}
-				var fcNext = fcMap.GetFuelConsumption(
-					response.EngineTorqueDemandTotal.LimitTo(
-						fld[tryNextGear].DragLoadStationaryTorque(response.EngineSpeed),
-						fld[tryNextGear].FullLoadStationaryTorque(response.EngineSpeed)), response.EngineSpeed).Value;
+				var tqNext = response.EngineTorqueDemandTotal.LimitTo(
+					fld[tryNextGear].DragLoadStationaryTorque(response.EngineSpeed),
+					fld[tryNextGear].FullLoadStationaryTorque(response.EngineSpeed));
+				var fcNextRes = fcMap.GetFuelConsumption(tqNext, response.EngineSpeed, true);
+				if (fcNextRes.Extrapolated) {
+					Log.Warn("EffShift Strategy: Extrapolation of fuel consumption for gear {0}! n: {1}, Tq: {2}", tryNextGear, response.EngineSpeed, tqNext);
+				}
+				var fcNext = fcNextRes.Value;
 
 				if (reserve < ModelData.TorqueReserve ||
 					!fcNext.IsSmaller(fcCurrent * shiftStrategyParameters.RatingFactorCurrentGear) || !fcNext.IsSmaller(minFc)) {
@@ -212,6 +264,24 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		#endregion
 
+		protected  ResponseDryRun RequestDryRunWithGear(
+			Second absTime, Second dt, MeterPerSecond vehicleSpeed, MeterPerSquareSecond acceleration, uint tryNextGear)
+		{
+			LogEnabled = false;
+			TestContainerGbx.Disengaged = false;
+			TestContainerGbx.Gear = tryNextGear;
+
+			//TestContainer.GearboxOutPort.Initialize(outTorque, outAngularVelocity);
+			TestContainer.VehiclePort.Initialize(vehicleSpeed, DataBus.RoadGradient);
+			var response = (ResponseDryRun)TestContainer.VehiclePort.Request(
+				0.SI<Second>(), dt, acceleration, DataBus.RoadGradient, true);
+
+			//var response = (ResponseDryRun)TestContainer.GearboxOutPort.Request(
+			//	0.SI<Second>(), dt, outTorque, outAngularVelocity, true);
+			LogEnabled = true;
+			return response;
+		}
+
 		protected override ResponseDryRun RequestDryRunWithGear(
 			Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, uint tryNextGear)
 		{
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
index 09652250f3bce782c0bb2297cb3f7432ee718c00..bc75d01d0e693e33cf83eab2ec560342eb443b69 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
@@ -193,7 +193,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 
 			var fullDragTorque = ModelData.FullLoadCurves[DataBus.Gear].DragLoadStationaryTorque(avgEngineSpeed);
-			var dynamicFullLoadPower = ComputeFullLoadPower(avgEngineSpeed, dt, dryRun);
+			var stationaryFullLoadTorque = ModelData.FullLoadCurves[DataBus.Gear].FullLoadStationaryTorque(avgEngineSpeed);
+			var dynamicFullLoadPower = ComputeFullLoadPower(avgEngineSpeed, stationaryFullLoadTorque, dt, dryRun);
 
 			var dynamicFullLoadTorque = dynamicFullLoadPower / avgEngineSpeed;
 			var inertiaTorqueLoss =
@@ -231,6 +232,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					EngineTorqueDemand = torqueOut,
 					EngineTorqueDemandTotal = totalTorqueDemand,
 					EngineDynamicFullLoadTorque = dynamicFullLoadTorque,
+					EngineStationaryFullLoadTorque = stationaryFullLoadTorque,
 					DragPower = fullDragTorque * avgEngineSpeed,
 					AuxiliariesPowerDemand = auxTorqueDemand * avgEngineSpeed,
 					EngineSpeed = angularVelocity,
@@ -243,6 +245,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			CurrentState.FullDragTorque = fullDragTorque;
 			CurrentState.DynamicFullLoadTorque = dynamicFullLoadTorque;
 			CurrentState.InertiaTorqueLoss = inertiaTorqueLoss;
+			CurrentState.StationaryFullLoadTorque = stationaryFullLoadTorque;
 
 			if ((deltaFull * avgEngineSpeed).IsGreater(0.SI<Watt>(), Constants.SimulationSettings.LineSearchTolerance) &&
 				(deltaDrag * avgEngineSpeed).IsSmaller(0.SI<Watt>(), Constants.SimulationSettings.LineSearchTolerance)) {
@@ -274,6 +277,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					DynamicFullLoadPower = dynamicFullLoadPower,
 					EngineTorqueDemand = torqueOut,
 					EngineTorqueDemandTotal = totalTorqueDemand,
+					EngineStationaryFullLoadTorque = stationaryFullLoadTorque,
 					EngineDynamicFullLoadTorque = dynamicFullLoadTorque,
 					DragPower = CurrentState.FullDragTorque * avgEngineSpeed,
 					Source = this,
@@ -292,6 +296,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					DynamicFullLoadPower = dynamicFullLoadPower,
 					EngineTorqueDemand = torqueOut,
 					EngineTorqueDemandTotal = totalTorqueDemand,
+					EngineStationaryFullLoadTorque = stationaryFullLoadTorque,
 					EngineDynamicFullLoadTorque = dynamicFullLoadTorque,
 					DragPower = CurrentState.FullDragTorque * avgEngineSpeed,
 					Source = this,
@@ -306,6 +311,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				EnginePowerRequest = totalTorqueDemand * avgEngineSpeed,
 				EngineTorqueDemand = torqueOut,
 				EngineTorqueDemandTotal = totalTorqueDemand,
+				EngineStationaryFullLoadTorque = stationaryFullLoadTorque,
 				EngineDynamicFullLoadTorque = dynamicFullLoadTorque,
 				DynamicFullLoadPower = dynamicFullLoadPower,
 				DragPower = CurrentState.FullDragTorque * avgEngineSpeed,
@@ -451,15 +457,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		/// <summary>
 		///     computes full load power from gear [-], angularVelocity [rad/s] and dt [s].
 		/// </summary>
-		protected Watt ComputeFullLoadPower(PerSecond avgAngularVelocity, Second dt, bool dryRun)
+		protected Watt ComputeFullLoadPower(PerSecond avgAngularVelocity, NewtonMeter stationaryFullLoadTorque, Second dt, bool dryRun)
 		{
 			if (dt <= 0) {
 				throw new VectoException("ComputeFullLoadPower cannot compute for simulation interval length 0.");
 			}
 
-			CurrentState.StationaryFullLoadTorque =
-				ModelData.FullLoadCurves[DataBus.Gear].FullLoadStationaryTorque(avgAngularVelocity);
-			var stationaryFullLoadPower = CurrentState.StationaryFullLoadTorque * avgAngularVelocity;
+			
+			var stationaryFullLoadPower = stationaryFullLoadTorque * avgAngularVelocity;
 			Watt dynFullPowerCalculated;
 
 			
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineOnlyCombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineOnlyCombustionEngine.cs
index cfc757149d1181ab1fbf561d6f1d876ae2362b09..77252b159d64e2e9c1b11a7c7bd02b9e6228a29e 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineOnlyCombustionEngine.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineOnlyCombustionEngine.cs
@@ -68,7 +68,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			CurrentState.EngineTorque = totalTorqueDemand;
 
 			CurrentState.FullDragTorque = ModelData.FullLoadCurves[0].DragLoadStationaryTorque(avgEngineSpeed);
-			var dynamicFullLoadPower = ComputeFullLoadPower(avgEngineSpeed, dt, dryRun);
+			var stationaryFullLoadTorque = ModelData.FullLoadCurves[DataBus.Gear].FullLoadStationaryTorque(avgEngineSpeed);
+			var dynamicFullLoadPower = ComputeFullLoadPower(avgEngineSpeed, stationaryFullLoadTorque, dt, dryRun);
+			CurrentState.StationaryFullLoadTorque = stationaryFullLoadTorque;
 			CurrentState.DynamicFullLoadTorque = dynamicFullLoadPower / avgEngineSpeed;
 
 			ValidatePowerDemand(totalTorqueDemand, CurrentState.DynamicFullLoadTorque, CurrentState.FullDragTorque);