diff --git a/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs b/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs
index 96f980beb78ebbbf2f05a6c47506e205972bddb5..74f498f61de9c563e7feca58de6c78bd0baf7546 100644
--- a/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs
+++ b/VectoCore/Models/SimulationComponent/Data/Engine/EngineFullLoadCurve.cs
@@ -152,10 +152,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 				return p1.EngineSpeed + area / d;
 			}
 
-			// non-constant torque, M(n_eng_avg) = k * n_eng_avg + d
-			// area = M(n1) * (n2 - n1) + (M(n1) + M(n2))/2 * (n2 - n1) => solve for n2
+			// non-constant torque, M(n) = k * n + d
+			// area = (M(n1) + M(n2))/2 * (n2 - n1) => solve for n2
 			var retVal = VectoMath.QuadraticEquationSolver(k.Value() / 2.0, d.Value(),
-				(k * p1.EngineSpeed * p1.EngineSpeed + 2 * p1.EngineSpeed * d).Value());
+				(-k * p1.EngineSpeed * p1.EngineSpeed / 2 - p1.EngineSpeed * d - area).Value());
 			if (retVal.Count == 0) {
 				Log.Info("No real solution found for requested area: P: {0}, p1: {1}, p2: {2}", area, p1, p2);
 			}
@@ -195,7 +195,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 			return retVal;
 		}
 
-		private Watt ComputeArea(PerSecond lowEngineSpeed, PerSecond highEngineSpeed)
+		protected internal Watt ComputeArea(PerSecond lowEngineSpeed, PerSecond highEngineSpeed)
 		{
 			var startSegment = FindIndex(lowEngineSpeed);
 			var endSegment = FindIndex(highEngineSpeed);
diff --git a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
index 26b0b545f8cdd976dc52fff8bbf3bb13efc95765..ab1b139af2de374d1ef2523c14b99882c5363761 100644
--- a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
+++ b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
@@ -115,6 +115,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			var fldCurve = EngineFullLoadCurve.ReadFromFile(CoachEngineFLD);
 			fldCurve.EngineData = new CombustionEngineData { IdleSpeed = 560.RPMtoRad() };
 			AssertHelper.AreRelativeEqual(130.691151551712.SI<PerSecond>(), fldCurve.PreferredSpeed);
+			var totalArea = fldCurve.ComputeArea(fldCurve.EngineData.IdleSpeed, fldCurve.N95hSpeed);
+			Assert.AreEqual((0.51 * totalArea).Value(),
+				fldCurve.ComputeArea(fldCurve.EngineData.IdleSpeed, fldCurve.PreferredSpeed).Value(), 1E-3);
 			AssertHelper.AreRelativeEqual(194.515816596908.SI<PerSecond>(), fldCurve.N95hSpeed);
 			AssertHelper.AreRelativeEqual(94.2463966015023.SI<PerSecond>(), fldCurve.LoSpeed);
 			AssertHelper.AreRelativeEqual(219.084329211505.SI<PerSecond>(), fldCurve.HiSpeed);
@@ -122,6 +125,31 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			AssertHelper.AreRelativeEqual(-320.SI<NewtonMeter>(), fldCurve.MaxDragTorque);
 		}
 
+		[TestMethod]
+		public void TestPreferredSpeed2()
+		{
+			var fldData = new[] {
+				"560,1180,-149,0.6",
+				"600,1282,-148,0.6",
+				"800,1791,-149,0.6",
+				"1000,2300,-160,0.6",
+				"1200,2400,-179,0.6",
+				"1400,2300,-203,0.6",
+				"1600,2079,-235,0.49",
+				"1800,1857,-264,0.25",
+				"2000,1352,-301,0.25",
+				"2100,1100,-320,0.25",
+			};
+			var fldEntries = InputDataHelper.InputDataAsStream("n [U/min],Mfull [Nm],Mdrag [Nm],<PT1> [s] ", fldData);
+			var fldCurve = EngineFullLoadCurve.Create(VectoCSVFile.ReadStream(fldEntries));
+			fldCurve.EngineData = new CombustionEngineData { IdleSpeed = 560.RPMtoRad() };
+
+			var totalArea = fldCurve.ComputeArea(fldCurve.EngineData.IdleSpeed, fldCurve.N95hSpeed);
+			Assert.AreEqual((0.51 * totalArea).Value(),
+				fldCurve.ComputeArea(fldCurve.EngineData.IdleSpeed, fldCurve.PreferredSpeed).Value(), 1E-3);
+			//AssertHelper.AreRelativeEqual(130.691151551712.SI<PerSecond>(), fldCurve.PreferredSpeed);
+		}
+
 		/// <summary>
 		///     [VECTO-78]
 		/// </summary>