diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericRatedPointHelper.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericRatedPointHelper.cs
index df96a1fed9b62245679708e26d940795d0ebcdb9..158d5d0411679432f67914740ab45f9bb895a3f4 100644
--- a/VectoCore/VectoCore/Models/GenericModelData/GenericRatedPointHelper.cs
+++ b/VectoCore/VectoCore/Models/GenericModelData/GenericRatedPointHelper.cs
@@ -1,8 +1,10 @@
 using System;
 using System.Collections.Generic;
-using Castle.Core.Internal;
+using System.Data;
+using System.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.ElectricMotor;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.GenericModelData
@@ -30,34 +32,34 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 
 	public static class GenericRatedPointHelper
 	{
-		struct FullLoadCurveEntry
-		{
-			public PerSecond MotorSpeed { get; }
-			public NewtonMeter TorqueDrive { get; }
-			public NewtonMeter TorqueDrag { get; }
-			public Watt PowerDrive { get; }
-
-			public FullLoadCurveEntry(PerSecond motorSpeed, NewtonMeter torqueDrive, NewtonMeter torqueDrag)
-			{
-				MotorSpeed = motorSpeed;
-				TorqueDrive = torqueDrive;
-				TorqueDrag = torqueDrag;
-				PowerDrive = motorSpeed * torqueDrive * Math.PI / 30000;
-			}
-		}
-
-
-		struct SlopeValueEntry
-		{
-			public double Slope { get; }
-			public double Delta { get; }
-
-			public SlopeValueEntry(double slope, double delta)
-			{
-				Slope = slope;
-				Delta = delta;
-			}
-		}
+		//struct FullLoadCurveEntry
+		//{
+		//	public PerSecond MotorSpeed { get; }
+		//	public NewtonMeter TorqueDrive { get; }
+		//	public NewtonMeter TorqueDrag { get; }
+		//	public Watt PowerDrive { get; }
+
+		//	public FullLoadCurveEntry(PerSecond motorSpeed, NewtonMeter torqueDrive, NewtonMeter torqueDrag)
+		//	{
+		//		MotorSpeed = motorSpeed;
+		//		TorqueDrive = torqueDrive;
+		//		TorqueDrag = torqueDrag;
+		//		PowerDrive = motorSpeed * torqueDrive * Math.PI / 30000;
+		//	}
+		//}
+
+
+		//struct SlopeValueEntry
+		//{
+		//	public double Slope { get; }
+		//	public double Delta { get; }
+
+		//	public SlopeValueEntry(double slope, double delta)
+		//	{
+		//		Slope = slope;
+		//		Delta = delta;
+		//	}
+		//}
 
 
 		#region Constants
@@ -68,29 +70,40 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 
 		#endregion
 
-		private static List<FullLoadCurveEntry> fullLoadCurveEntries;
-		private static List<SlopeValueEntry> slopeValueEntries;
+		//private static List<FullLoadCurveEntry> fullLoadCurveEntries;
+		//private static List<SlopeValueEntry> slopeValueEntries;
 		
 
 		public static RatedPoint GetRatedPointOfFullLoadCurveAtEM(TableData fullLoadCurve)
 		{
-			SetCurveValues(fullLoadCurve);
-			var ratedIndex = FindRowOfRatedPoint();
-			var n = fullLoadCurveEntries[ratedIndex].MotorSpeed;
-			var tDrive = GetHighestTorque();
+            var n = ElectricMotorRatedSpeedHelper.GetRatedSpeed(fullLoadCurve.AsEnumerable(),
+                row => row.ParseDouble(MotorSpeedColumn).SI<PerSecond>(), row => row.ParseDouble(TorqueDriveColumn).SI<NewtonMeter>());
 
-			return new RatedPoint (n, tDrive);
-		}
+            var tDrive = fullLoadCurve.AsEnumerable()
+                .Max(row => row.ParseDouble(TorqueDriveColumn).SI<NewtonMeter>());
+
+            return new RatedPoint(n, tDrive);
+
+            //SetCurveValues(fullLoadCurve);
+            //var ratedIndex = FindRowOfRatedPoint();
+            //var n = fullLoadCurveEntries[ratedIndex].MotorSpeed;
+            //var tDrive = GetHighestTorque();
+
+            //return new RatedPoint(n, tDrive);
+        }
 
 		public static RatedPoint GetRatedPointOfFullLoadCurveAtIEPC(TableData fullLoadCurve,
 			double axleRatio, double gearRatio,
 			double gearEfficiency, double axleEfficiency)
 		{
 
-			SetCurveValues(fullLoadCurve);
-			var ratedIndex = FindRowOfRatedPoint();
-			var n = fullLoadCurveEntries[ratedIndex].MotorSpeed;
-			var tDrive = GetHighestTorque();
+			var n = ElectricMotorRatedSpeedHelper.GetRatedSpeed(fullLoadCurve.AsEnumerable(),
+				row => row.ParseDouble(MotorSpeedColumn).SI<PerSecond>(), row => row.ParseDouble(TorqueDriveColumn).SI<NewtonMeter>());
+			var tDrive = fullLoadCurve.AsEnumerable().Max(row => row.ParseDouble(TorqueDriveColumn).SI<NewtonMeter>());
+			//SetCurveValues(fullLoadCurve);
+			//var ratedIndex = FindRowOfRatedPoint();
+			
+
 
 			var nRated = GetNRatedAtIEPC(n, axleRatio, gearRatio);
 			var tRated = GetTRatedAtIEPC(tDrive, gearRatio, gearEfficiency, axleRatio, axleEfficiency);
@@ -98,59 +111,59 @@ namespace TUGraz.VectoCore.Models.GenericModelData
 			return new RatedPoint(nRated, tRated);
 		}
 
-		private static void SetCurveValues(TableData fullLoadCurve)
-		{
-			fullLoadCurveEntries = new List<FullLoadCurveEntry>();
-			slopeValueEntries = new List<SlopeValueEntry>();
+		//private static void SetCurveValues(TableData fullLoadCurve)
+		//{
+		//	fullLoadCurveEntries = new List<FullLoadCurveEntry>();
+		//	slopeValueEntries = new List<SlopeValueEntry>();
 
-			for (int r = 0; r < fullLoadCurve.Rows.Count; r++) {
+		//	for (int r = 0; r < fullLoadCurve.Rows.Count; r++) {
 
-				var motorSpeed = fullLoadCurve.Rows[r].ParseDouble(MotorSpeedColumn).SI<PerSecond>();
-				var torqueDrive = fullLoadCurve.Rows[r].ParseDouble(TorqueDriveColumn).SI<NewtonMeter>();
-				var torqueDrag = fullLoadCurve.Rows[r].ParseDouble(TorqueDragColumn).SI<NewtonMeter>();
+		//		var motorSpeed = fullLoadCurve.Rows[r].ParseDouble(MotorSpeedColumn).SI<PerSecond>();
+		//		var torqueDrive = fullLoadCurve.Rows[r].ParseDouble(TorqueDriveColumn).SI<NewtonMeter>();
+		//		var torqueDrag = fullLoadCurve.Rows[r].ParseDouble(TorqueDragColumn).SI<NewtonMeter>();
 
-				fullLoadCurveEntries.Add(new FullLoadCurveEntry(motorSpeed, torqueDrive, torqueDrag));
+		//		fullLoadCurveEntries.Add(new FullLoadCurveEntry(motorSpeed, torqueDrive, torqueDrag));
 
-				if (r == 0)
-					continue;
+		//		if (r == 0)
+		//			continue;
 				
-				var slopeValue = (fullLoadCurveEntries[r].PowerDrive.Value() - fullLoadCurveEntries[r - 1].PowerDrive.Value()) /
-								 (fullLoadCurveEntries[r].MotorSpeed.Value() - fullLoadCurveEntries[r - 1].MotorSpeed.Value());
+		//		var slopeValue = (fullLoadCurveEntries[r].PowerDrive.Value() - fullLoadCurveEntries[r - 1].PowerDrive.Value()) /
+		//						 (fullLoadCurveEntries[r].MotorSpeed.Value() - fullLoadCurveEntries[r - 1].MotorSpeed.Value());
 
-				var deltaValue = slopeValue / (slopeValueEntries.IsNullOrEmpty() ? slopeValue  : slopeValueEntries[0].Slope ) -1;
+		//		var deltaValue = slopeValue / ((slopeValueEntries.Count == 0) ? slopeValue  : slopeValueEntries[0].Slope ) -1;
 
-				slopeValueEntries.Add(new SlopeValueEntry(slopeValue, deltaValue));
-			}
-		}
+		//		slopeValueEntries.Add(new SlopeValueEntry(slopeValue, deltaValue));
+		//	}
+		//}
 		
 
-		private static NewtonMeter GetHighestTorque()
-		{
-			var value = double.MinValue;
+		//private static NewtonMeter GetHighestTorque()
+		//{
+		//	var value = double.MinValue;
 
-			foreach (var entry in fullLoadCurveEntries)
-			{
-				var currentValue = entry.TorqueDrive.Value();
-				if (value < currentValue)
-					value = currentValue;
-			}
+		//	foreach (var entry in fullLoadCurveEntries)
+		//	{
+		//		var currentValue = entry.TorqueDrive.Value();
+		//		if (value < currentValue)
+		//			value = currentValue;
+		//	}
 
-			return value.SI<NewtonMeter>();
-		}
+		//	return value.SI<NewtonMeter>();
+		//}
 
 
-		private static int FindRowOfRatedPoint()
-		{
-			for (int i = 0; i < slopeValueEntries.Count; i++)
-			{
-				var deltaValue = slopeValueEntries[i].Delta;
+		//private static int FindRowOfRatedPoint()
+		//{
+		//	for (int i = 0; i < slopeValueEntries.Count; i++)
+		//	{
+		//		var deltaValue = slopeValueEntries[i].Delta;
 
-				if (Math.Abs(deltaValue) > 0.2)
-					return i;
-			}
+		//		if (Math.Abs(deltaValue) > 0.2)
+		//			return i;
+		//	}
 
-			return -1;
-		}
+		//	return -1;
+		//}
 
 
 		private static PerSecond GetNRatedAtIEPC(PerSecond n, double axleRatio, double gearRatio)