diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs
index ef2e843c343d63b9d4548377517c69ba3ac56e48..7df4c4ad66a80c30ee482655a0673ac17e5cbbe5 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs
@@ -39,7 +39,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				throw new VectoException("PTO Idle LossMap must contain at least 2 entries.");
 			}
 
-			if (!data.Columns.Contains(Fields.EngineSpeed) || !data.Columns.Contains(Fields.PTOTorque)) {
+			if (!(data.Columns.Contains(Fields.EngineSpeed) && data.Columns.Contains(Fields.PTOTorque))) {
 				data.Columns[0].ColumnName = Fields.EngineSpeed;
 				data.Columns[1].ColumnName = Fields.PTOTorque;
 				LoggingObject.Logger<RetarderLossMap>().Warn(
diff --git a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
index 3b8c7eedc9062c08f6c967825db663885a420adc..e588cee7a07a5ec4bfb68fa7bee7887da1da2eb6 100644
--- a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
@@ -53,7 +53,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		/// <exception cref="VectoException">CycleFile Format is unknown.</exception>
 		public static CycleType DetectCycleType(DataTable cycleData)
 		{
-			var cols = cycleData.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToArray();
+			var cols = cycleData.Columns;
 
 			if (PTOCycleDataParser.ValidateHeader(cols, false)) {
 				return CycleType.PTO;
@@ -336,10 +336,12 @@ namespace TUGraz.VectoCore.InputData.Reader
 
 		private abstract class AbstractCycleDataParser : LoggingObject, ICycleDataParser
 		{
-			protected static bool CheckColumns(string[] header, IEnumerable<string> allowedCols, IEnumerable<string> requiredCols,
-				bool throwExceptions, bool allowAux)
+			protected static bool CheckColumns(DataColumnCollection header, IEnumerable<string> allowedCols,
+				IEnumerable<string> requiredCols, bool throwExceptions, bool allowAux)
 			{
-				var diff = header.GroupBy(c => c).Where(g => g.Count() > 2).SelectMany(g => g).ToList();
+				var headerStr = header.Cast<DataColumn>().Select(col => col.ColumnName.ToLowerInvariant()).ToArray();
+
+				var diff = headerStr.GroupBy(c => c).Where(g => g.Count() > 2).SelectMany(g => g).ToList();
 				if (diff.Any()) {
 					if (throwExceptions) {
 						throw new VectoException("Column(s) defined more than once: " + string.Join(", ", diff.OrderBy(x => x)));
@@ -348,10 +350,10 @@ namespace TUGraz.VectoCore.InputData.Reader
 				}
 
 				if (allowAux) {
-					header = header.Where(c => !c.ToUpper().StartsWith(Constants.Auxiliaries.Prefix)).ToArray();
+					headerStr = headerStr.Where(c => !c.ToUpper().StartsWith(Constants.Auxiliaries.Prefix)).ToArray();
 				}
 
-				diff = header.Except(allowedCols).ToList();
+				diff = headerStr.Except(allowedCols.Select(x => x.ToLowerInvariant())).ToList();
 				if (diff.Any()) {
 					if (throwExceptions) {
 						throw new VectoException("Column(s) not allowed: " + string.Join(", ", diff));
@@ -359,7 +361,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 					return false;
 				}
 
-				diff = requiredCols.Except(header).ToList();
+				diff = requiredCols.Select(x => x.ToLowerInvariant()).Except(headerStr).ToList();
 				if (diff.Any()) {
 					if (throwExceptions) {
 						throw new VectoException("Column(s) required: " + string.Join(", ", diff));
@@ -369,9 +371,12 @@ namespace TUGraz.VectoCore.InputData.Reader
 				return true;
 			}
 
-			protected static bool CheckComboColumns(string[] header, string[] cols, bool throwExceptions)
+			protected static bool CheckComboColumns(DataColumnCollection header, string[] cols, bool throwExceptions)
 			{
-				var colCount = header.Intersect(cols).Count();
+				var colCount = header.Cast<DataColumn>()
+					.Select(col => col.ColumnName.ToLowerInvariant())
+					.Intersect(cols.Select(x => x.ToLowerInvariant())).Count();
+
 				if (colCount != 0 && colCount != cols.Length) {
 					if (throwExceptions) {
 						throw new VectoException("Either all columns have to be defined or none of them: {0}", string.Join(", ", cols));
@@ -389,7 +394,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		{
 			public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
 			{
-				ValidateHeader(table.Columns.Cast<DataColumn>().Select(col => col.ColumnName).ToArray());
+				ValidateHeader(table.Columns);
 
 				return table.Rows.Cast<DataRow>().Select(row => new DrivingCycleData.DrivingCycleEntry {
 					Distance = row.ParseDouble(Fields.Distance).SI<Meter>(),
@@ -407,7 +412,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 				});
 			}
 
-			public static bool ValidateHeader(string[] header, bool throwExceptions = true)
+			public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true)
 			{
 				var requiredCols = new[] {
 					Fields.Distance,
@@ -441,7 +446,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		{
 			public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
 			{
-				ValidateHeader(table.Columns.Cast<DataColumn>().Select(col => col.ColumnName).ToArray());
+				ValidateHeader(table.Columns);
 
 				var absTime = 0;
 				foreach (DataRow row in table.Rows) {
@@ -472,7 +477,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 				}
 			}
 
-			public static bool ValidateHeader(string[] header, bool throwExceptions = true)
+			public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true)
 			{
 				var requiredCols = new[] {
 					//Fields.Time not needed --> if missing 1 second resolution is assumed
@@ -520,7 +525,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		{
 			public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
 			{
-				ValidateHeader(table.Columns.Cast<DataColumn>().Select(col => col.ColumnName).ToArray());
+				ValidateHeader(table.Columns);
 
 				var entries = table.Rows.Cast<DataRow>().Select(row => new DrivingCycleData.DrivingCycleEntry {
 					Time = row.ParseDouble(Fields.Time).SI<Second>(),
@@ -533,7 +538,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 				return entries;
 			}
 
-			public static bool ValidateHeader(string[] header, bool throwExceptions = true)
+			public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true)
 			{
 				var requiredCols = new[] {
 					Fields.Time,
@@ -561,7 +566,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		{
 			public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
 			{
-				ValidateHeader(table.Columns.Cast<DataColumn>().Select(col => col.ColumnName).ToArray());
+				ValidateHeader(table.Columns);
 
 				var entries = table.Rows.Cast<DataRow>().Select(row => new DrivingCycleData.DrivingCycleEntry {
 					Time = row.ParseDouble(Fields.Time).SI<Second>(),
@@ -577,7 +582,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 				return entries;
 			}
 
-			public static bool ValidateHeader(string[] header, bool throwExceptions = true)
+			public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true)
 			{
 				var requiredCols = new[] {
 					Fields.Time,
@@ -608,7 +613,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		{
 			public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
 			{
-				ValidateHeader(table.Columns.Cast<DataColumn>().Select(col => col.ColumnName).ToArray());
+				ValidateHeader(table.Columns);
 
 				var entries = table.Rows.Cast<DataRow>().Select(row => new DrivingCycleData.DrivingCycleEntry {
 					Time = row.ParseDouble(Fields.Time).SI<Second>(),
@@ -630,7 +635,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 				return entries;
 			}
 
-			public static bool ValidateHeader(string[] header, bool throwExceptions = true)
+			public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true)
 			{
 				var requiredCols = new[] {
 					Fields.Time,
@@ -664,7 +669,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		{
 			public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
 			{
-				ValidateHeader(table.Columns.Cast<DataColumn>().Select(col => col.ColumnName).ToArray());
+				ValidateHeader(table.Columns);
 
 				var entries = table.Rows.Cast<DataRow>().Select(row => new DrivingCycleData.DrivingCycleEntry {
 					Time = row.ParseDouble(Fields.Time).SI<Second>(),
@@ -675,7 +680,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 				return entries;
 			}
 
-			public static bool ValidateHeader(string[] header, bool throwExceptions = true)
+			public static bool ValidateHeader(DataColumnCollection header, bool throwExceptions = true)
 			{
 				var requiredCols = new[] {
 					Fields.Time,
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs b/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs
index b16fabc724a236dbf597ef4ce28f794878ef719c..5c61430a62ce97e9655982ddace47fd7f31e4459 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/DrivingCycleTests.cs
@@ -31,6 +31,7 @@
 
 using System.IO;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using NUnit.Framework;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
@@ -41,13 +42,14 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.Tests.Utils;
 using TUGraz.VectoCore.Utils;
+using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
 
 namespace TUGraz.VectoCore.Tests.Models.Simulation
 {
-	[TestClass]
+	[TestFixture]
 	public class DrivingCycleTests
 	{
-		[TestMethod]
+		[TestCase()]
 		public void TestEngineOnly()
 		{
 			var dataWriter = new MockModalDataContainer();
@@ -79,7 +81,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			Assert.AreEqual(0.SI<NewtonMeter>(), outPort.Torque);
 		}
 
-		[TestMethod]
+		[TestCase()]
 		public void TestEngineOnlyWithTimestamps()
 		{
 			var container = new VehicleContainer(ExecutionMode.Engineering);
@@ -151,176 +153,227 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			}
 		}
 
-		[TestMethod]
-		public void DrivingCycle_AutoDetect()
-		{
+		[
 			// declaration mode - distance based
-			TestCycleDetect("<s>,<v>,<grad>,<stop>", CycleType.DistanceBased);
-			TestCycleDetect("<s>,<<v>,>grad>,<stop>", CycleType.DistanceBased);
+			TestCase("<s>,<v>,<grad>,<stop>", CycleType.DistanceBased),
+			TestCase("<s>,<<v>,>grad>,<stop>", CycleType.DistanceBased),
 
 			// engineering mode - distance based
-			TestCycleDetect("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>", CycleType.DistanceBased);
-			TestCycleDetect("<s>,<v>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>", CycleType.DistanceBased);
-			TestCycleDetect("<s>,<v>,<grad>,<stop>,<Padd>,<Aux_ELE>,<Aux_SP>", CycleType.DistanceBased);
-			TestCycleDetect("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>", CycleType.DistanceBased);
-			TestCycleDetect("<s>,<v>,<stop>,<Padd>", CycleType.DistanceBased);
-			TestCycleDetect("s,v,stop,Padd", CycleType.DistanceBased);
-			TestCycleDetect("s,v,stop", CycleType.DistanceBased);
+			TestCase("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>", CycleType.DistanceBased),
+			TestCase("<s>,<v>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>", CycleType.DistanceBased),
+			TestCase("<s>,<v>,<grad>,<stop>,<Padd>,<Aux_ELE>,<Aux_SP>", CycleType.DistanceBased),
+			TestCase("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>", CycleType.DistanceBased),
+			TestCase("<s>,<v>,<stop>,<Padd>", CycleType.DistanceBased),
+			TestCase("s,v,stop,Padd", CycleType.DistanceBased),
+			TestCase("s,v,stop", CycleType.DistanceBased),
 
 			// engineering mode - time based
 			// mk 2016-03-01: plain time based cycle does not exist anymore. replaced by measuredspeed, measuredspeed gear, engineonly and pwheel
 
 			// engine only
-			TestCycleDetect("<t>,<n>,<Me>,<Padd>", CycleType.EngineOnly);
-			TestCycleDetect("<t>,<n>,<Me>", CycleType.EngineOnly);
-			TestCycleDetect("<t>,<n>,<Me>,<Pe>,<Padd>", CycleType.EngineOnly);
-			TestCycleDetect("<t>,<n>,<Pe>,<Padd>", CycleType.EngineOnly);
-			TestCycleDetect("<t>,<n>,<Pe>", CycleType.EngineOnly);
-			TestCycleDetect("<Me>,<n>,<Padd>,<t>", CycleType.EngineOnly);
-			TestCycleDetect("t,n,Me,Padd", CycleType.EngineOnly);
+			TestCase("<t>,<n>,<Me>,<Padd>", CycleType.EngineOnly),
+			TestCase("<t>,<n>,<Me>", CycleType.EngineOnly),
+			TestCase("<t>,<n>,<Me>,<Pe>,<Padd>", CycleType.EngineOnly),
+			TestCase("<t>,<n>,<Pe>,<Padd>", CycleType.EngineOnly),
+			TestCase("<t>,<n>,<Pe>", CycleType.EngineOnly),
+			TestCase("<Me>,<n>,<Padd>,<t>", CycleType.EngineOnly),
+			TestCase("t,n,Me,Padd", CycleType.EngineOnly),
 
 			// p_wheel
-			TestCycleDetect("<t>,<Pwheel>,<gear>,<n>,<Padd>", CycleType.PWheel);
-			TestCycleDetect("<gear>,<t>,<n>,<Padd>,<Pwheel>", CycleType.PWheel);
-			TestCycleDetect("<t>,<Pwheel>,<gear>,<n>", CycleType.PWheel);
-			TestCycleDetect("t,Pwheel,gear,n,Padd", CycleType.PWheel);
-			TestCycleDetect("Pwheel,t,gear,n,Padd", CycleType.PWheel);
+			TestCase("<t>,<Pwheel>,<gear>,<n>,<Padd>", CycleType.PWheel),
+			TestCase("<gear>,<t>,<n>,<Padd>,<Pwheel>", CycleType.PWheel),
+			TestCase("<t>,<Pwheel>,<gear>,<n>", CycleType.PWheel),
+			TestCase("t,Pwheel,gear,n,Padd", CycleType.PWheel),
+			TestCase("Pwheel,t,gear,n,Padd", CycleType.PWheel),
 
 			// measured speed
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>", CycleType.MeasuredSpeed);
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>", CycleType.MeasuredSpeed);
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>", CycleType.MeasuredSpeed);
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>,<Aux_ALT>,<Aux_ES>", CycleType.MeasuredSpeed);
-			TestCycleDetect("<t>,<v>,<grad>", CycleType.MeasuredSpeed);
-			TestCycleDetect("<t>,<Padd>,<grad>,<v>", CycleType.MeasuredSpeed);
-			TestCycleDetect("t,v,grad,Padd", CycleType.MeasuredSpeed);
-			TestCycleDetect("t,v,grad", CycleType.MeasuredSpeed);
+			TestCase("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>", CycleType.MeasuredSpeed),
+			TestCase("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>", CycleType.MeasuredSpeed),
+			TestCase("<t>,<v>,<grad>,<Padd>", CycleType.MeasuredSpeed),
+			TestCase("<t>,<v>,<grad>,<Padd>,<Aux_ALT>,<Aux_ES>", CycleType.MeasuredSpeed),
+			TestCase("<t>,<v>,<grad>", CycleType.MeasuredSpeed),
+			TestCase("<t>,<Padd>,<grad>,<v>", CycleType.MeasuredSpeed),
+			TestCase("t,v,grad,Padd", CycleType.MeasuredSpeed),
+			TestCase("t,v,grad", CycleType.MeasuredSpeed),
 
 			// measured speed with gear
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>,<Aux_HVAC>,<Aux_HP>",
-				CycleType.MeasuredSpeedGear);
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>", CycleType.MeasuredSpeedGear);
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<Aux_HVAC>,<Aux_HP>", CycleType.MeasuredSpeedGear);
-			TestCycleDetect("<t>,<v>,<grad>,<Padd>,<n>,<gear>", CycleType.MeasuredSpeedGear);
-			TestCycleDetect("<t>,<v>,<grad>,<n>,<gear>", CycleType.MeasuredSpeedGear);
-			TestCycleDetect("<n>,<Padd>,<gear>,<v>,<grad>,<t>", CycleType.MeasuredSpeedGear);
-			TestCycleDetect("t,v,grad,Padd,n,gear", CycleType.MeasuredSpeedGear);
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>,<Aux_HVAC>,<Aux_HP>",
+				CycleType.MeasuredSpeedGear),
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>", CycleType.MeasuredSpeedGear),
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<Aux_HVAC>,<Aux_HP>", CycleType.MeasuredSpeedGear),
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>", CycleType.MeasuredSpeedGear),
+			TestCase("<t>,<v>,<grad>,<n>,<gear>", CycleType.MeasuredSpeedGear),
+			TestCase("<n>,<Padd>,<gear>,<v>,<grad>,<t>", CycleType.MeasuredSpeedGear),
+			TestCase("t,v,grad,Padd,n,gear", CycleType.MeasuredSpeedGear),
+		]
+		public void DrivingCycle_AutoDetect(string cycle, CycleType type)
+		{
+			TestCycleDetect(cycle, type);
+		}
 
+		[
 			// wrong cycles
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("v,grad,Padd,n,gear", CycleType.MeasuredSpeedGear));
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("<t>,<grad>", CycleType.MeasuredSpeed));
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("<t>,<Pwheel>,<n>,<Padd>", CycleType.PWheel));
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("<t>,<Pwheel>,<Pwheel>,<n>,<Padd>", CycleType.PWheel));
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("<t>,<n>,<torque>,<>,<Padd>", CycleType.EngineOnly));
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("x,y,z", CycleType.EngineOnly));
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("x", CycleType.EngineOnly));
-			AssertHelper.Exception<VectoException>(() => TestCycleDetect("", CycleType.MeasuredSpeed));
-			AssertHelper.Exception<VectoException>(
-				() =>
-					TestCycleDetect("<t>,<v>,<gear>,<Pwheel>,<s>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>,<Aux_HVAC>,<Aux_HP>",
-						CycleType.MeasuredSpeedGear));
+			TestCase("v,grad,Padd,n,gear", CycleType.MeasuredSpeedGear),
+			TestCase("<t>,<grad>", CycleType.MeasuredSpeed),
+			TestCase("<t>,<Pwheel>,<n>,<Padd>", CycleType.PWheel),
+			TestCase("<t>,<Pwheel>,<Pwheel>,<n>,<Padd>", CycleType.PWheel),
+			TestCase("<t>,<n>,<torque>,<>,<Padd>", CycleType.EngineOnly),
+			TestCase("x,y,z", CycleType.EngineOnly),
+			TestCase("x", CycleType.EngineOnly),
+			TestCase("", CycleType.MeasuredSpeed),
+			TestCase("<t>,<v>,<gear>,<Pwheel>,<s>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>,<Aux_HVAC>,<Aux_HP>",
+				CycleType.MeasuredSpeedGear),]
+		public void DrivingCycle_AutoDetect_Exception(string cycle, CycleType type)
+		{
+			AssertHelper.Exception<VectoException>(() => TestCycleDetect(cycle, type));
 		}
 
-		[TestMethod]
-		public void DrivingCycle_Read()
-		{
+		[
 			// declaration mode - distance based
-			TestCycleRead("<s>,<v>,<grad>,<stop>\n1,1,1,0", CycleType.DistanceBased, 2);
-			TestCycleRead("<s>,<v>,<grad>,<stop>\n1,0,1,1", CycleType.DistanceBased, 3);
-			AssertHelper.Exception<VectoException>(() => TestCycleRead("<s>,<v>,<grad>,<stop>\n1,1,1,1", CycleType.DistanceBased));
-			TestCycleRead("<s>,<<v>,>grad>,<stop>\n1,1,1,0", CycleType.DistanceBased, 2);
+			TestCase("<s>,<v>,<grad>,<stop>\n1,1,1,0", CycleType.DistanceBased, 2),
+			TestCase("<s>,<v>,<grad>,<stop>\n1,0,1,1", CycleType.DistanceBased, 3),
+			TestCase("<s>,<<v>,>grad>,<stop>\n1,1,1,0", CycleType.DistanceBased, 2),
 
 			// engineering mode - distance based
-			TestCycleRead("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>\n1,1,1,0,1,1,1,1,1",
-				CycleType.DistanceBased, 2);
-			TestCycleRead("<s>,<v>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>\n1,1,0,1,1,1,1,1",
-				CycleType.DistanceBased, 2);
-			TestCycleRead("<s>,<v>,<grad>,<stop>,<Padd>,<Aux_ELE>,<Aux_SP>\n1,1,1,0,1,1,1", CycleType.DistanceBased, 2);
-			TestCycleRead("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>\n1,1,1,0,1,1,1", CycleType.DistanceBased, 2);
-			TestCycleRead("<s>,<v>,<stop>,<Padd>\n1,1,0,1", CycleType.DistanceBased, 2);
-			TestCycleRead("s,v,stop,Padd\n1,1,0,1", CycleType.DistanceBased, 2);
-			TestCycleRead("s,v,stop\n1,1,0", CycleType.DistanceBased, 2);
+			TestCase("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>\n1,1,1,0,1,1,1,1,1",
+				CycleType.DistanceBased, 2),
+			TestCase("<s>,<v>,<stop>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>\n1,1,0,1,1,1,1,1",
+				CycleType.DistanceBased, 2),
+			TestCase("<s>,<v>,<grad>,<stop>,<Padd>,<Aux_ELE>,<Aux_SP>\n1,1,1,0,1,1,1", CycleType.DistanceBased, 2),
+			TestCase("<s>,<v>,<grad>,<stop>,<Padd>,<vair_res>,<vair_beta>\n1,1,1,0,1,1,1", CycleType.DistanceBased, 2),
+			TestCase("<s>,<v>,<stop>,<Padd>\n1,1,0,1", CycleType.DistanceBased, 2),
+			TestCase("s,v,stop,Padd\n1,1,0,1", CycleType.DistanceBased, 2),
+			TestCase("s,v,stop\n1,1,0", CycleType.DistanceBased, 2),
 
 			// engineering mode - time based
 			// mk 2016-03-01: plain time based cycle does not exist anymore. replaced by measuredspeed, measuredspeed gear, engineonly and pwheel
 
 			// engine only
-			TestCycleRead("<t>,<n>,<Me>,<Padd>\n1,1,1,1", CycleType.EngineOnly);
-			TestCycleRead("<t>,<n>,<Me>\n1,1,1", CycleType.EngineOnly);
-			TestCycleRead("<t>,<n>,<Me>,<Pe>,<Padd>\n1,1,1,1,1", CycleType.EngineOnly);
-			TestCycleRead("<t>,<n>,<Pe>,<Padd>\n1,1,1,1", CycleType.EngineOnly);
-			TestCycleRead("<t>,<n>,<Pe>\n1,1,1", CycleType.EngineOnly);
-			TestCycleRead("<Me>,<n>,<Padd>,<t>\n1,1,1,1", CycleType.EngineOnly);
-			TestCycleRead("t,n,Me,Padd\n1,1,1,1", CycleType.EngineOnly);
+			TestCase("<t>,<n>,<Me>,<Padd>\n1,1,1,1", CycleType.EngineOnly, 1),
+			TestCase("<t>,<n>,<Me>\n1,1,1", CycleType.EngineOnly, 1),
+			TestCase("<t>,<n>,<Me>,<Pe>,<Padd>\n1,1,1,1,1", CycleType.EngineOnly, 1),
+			TestCase("<t>,<n>,<Pe>,<Padd>\n1,1,1,1", CycleType.EngineOnly, 1),
+			TestCase("<t>,<n>,<Pe>\n1,1,1", CycleType.EngineOnly, 1),
+			TestCase("<Me>,<n>,<Padd>,<t>\n1,1,1,1", CycleType.EngineOnly, 1),
+			TestCase("t,n,Me,Padd\n1,1,1,1", CycleType.EngineOnly, 1),
 
 			// p_wheel
-			TestCycleRead("<t>,<Pwheel>,<gear>,<n>,<Padd>\n1,1,1,1,1", CycleType.PWheel);
-			TestCycleRead("<gear>,<t>,<n>,<Padd>,<Pwheel>\n1,1,1,1,1", CycleType.PWheel);
-			TestCycleRead("<t>,<Pwheel>,<gear>,<n>\n1,1,1,1", CycleType.PWheel);
-			TestCycleRead("t,Pwheel,gear,n,Padd\n1,1,1,1,1", CycleType.PWheel);
-			TestCycleRead("Pwheel,t,gear,n,Padd\n1,1,1,1,1", CycleType.PWheel);
+			TestCase("<t>,<Pwheel>,<gear>,<n>,<Padd>\n1,1,1,1,1", CycleType.PWheel, 1),
+			TestCase("<gear>,<t>,<n>,<Padd>,<Pwheel>\n1,1,1,1,1", CycleType.PWheel, 1),
+			TestCase("<t>,<Pwheel>,<gear>,<n>\n1,1,1,1", CycleType.PWheel, 1),
+			TestCase("t,Pwheel,gear,n,Padd\n1,1,1,1,1", CycleType.PWheel, 1),
+			TestCase("Pwheel,t,gear,n,Padd\n1,1,1,1,1", CycleType.PWheel, 1),
 
 			// measured speed
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>\n1,1,1,1,1,1,1,1",
-				CycleType.MeasuredSpeed);
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_ALT>,<Aux_ES>\n1,1,1,1,1,1,1,1",
-				CycleType.MeasuredSpeed);
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>\n1,1,1,1,1,1", CycleType.MeasuredSpeed);
-			TestCycleRead("<t>,<v>,<grad>,<Padd>\n1,1,1,1", CycleType.MeasuredSpeed);
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<Aux_ALT>,<Aux_ES>\n1,1,1,1,1,1", CycleType.MeasuredSpeed);
-			TestCycleRead("<t>,<v>,<grad>\n1,1,1", CycleType.MeasuredSpeed);
-			TestCycleRead("<t>,<Padd>,<grad>,<v>\n1,1,1,1", CycleType.MeasuredSpeed);
-			TestCycleRead("t,v,grad,Padd\n1,1,1,1", CycleType.MeasuredSpeed);
-			TestCycleRead("t,v,grad\n1,1,1", CycleType.MeasuredSpeed);
+			TestCase("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_ELE>,<Aux_SP>\n1,1,1,1,1,1,1,1",
+				CycleType.MeasuredSpeed, 1),
+			TestCase("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>,<Aux_ALT>,<Aux_ES>\n1,1,1,1,1,1,1,1",
+				CycleType.MeasuredSpeed, 1),
+			TestCase("<t>,<v>,<grad>,<Padd>,<vair_res>,<vair_beta>\n1,1,1,1,1,1", CycleType.MeasuredSpeed, 1),
+			TestCase("<t>,<v>,<grad>,<Padd>\n1,1,1,1", CycleType.MeasuredSpeed, 1),
+			TestCase("<t>,<v>,<grad>,<Padd>,<Aux_ALT>,<Aux_ES>\n1,1,1,1,1,1", CycleType.MeasuredSpeed, 1),
+			TestCase("<t>,<v>,<grad>\n1,1,1", CycleType.MeasuredSpeed, 1),
+			TestCase("<t>,<Padd>,<grad>,<v>\n1,1,1,1", CycleType.MeasuredSpeed, 1),
+			TestCase("t,v,grad,Padd\n1,1,1,1", CycleType.MeasuredSpeed, 1),
+			TestCase("t,v,grad\n1,1,1", CycleType.MeasuredSpeed, 1),
 
 			// measured speed with gear
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>,<Aux_HVAC>,<Aux_HP>\n1,1,1,1,1,1,1,1,1,1",
-				CycleType.MeasuredSpeedGear);
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>\n1,1,1,1,1,1,1,1",
-				CycleType.MeasuredSpeedGear);
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<Aux_HVAC>,<Aux_HP>\n1,1,1,1,1,1,1,1", CycleType.MeasuredSpeedGear);
-			TestCycleRead("<t>,<v>,<grad>,<Padd>,<n>,<gear>\n1,1,1,1,1,1", CycleType.MeasuredSpeedGear);
-			TestCycleRead("<t>,<v>,<grad>,<n>,<gear>\n1,1,1,1,1", CycleType.MeasuredSpeedGear);
-			TestCycleRead("<n>,<Padd>,<gear>,<v>,<grad>,<t>\n1,1,1,1,1,1", CycleType.MeasuredSpeedGear);
-			TestCycleRead("t,v,grad,Padd,n,gear\n1,1,1,1,1,1", CycleType.MeasuredSpeedGear);
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>,<Aux_HVAC>,<Aux_HP>\n1,1,1,1,1,1,1,1,1,1",
+				CycleType.MeasuredSpeedGear, 1),
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>\n1,1,1,1,1,1,1,1",
+				CycleType.MeasuredSpeedGear, 1),
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>,<Aux_HVAC>,<Aux_HP>\n1,1,1,1,1,1,1,1", CycleType.MeasuredSpeedGear, 1),
+			TestCase("<t>,<v>,<grad>,<Padd>,<n>,<gear>\n1,1,1,1,1,1", CycleType.MeasuredSpeedGear, 1),
+			TestCase("<t>,<v>,<grad>,<n>,<gear>\n1,1,1,1,1", CycleType.MeasuredSpeedGear, 1),
+			TestCase("<n>,<Padd>,<gear>,<v>,<grad>,<t>\n1,1,1,1,1,1", CycleType.MeasuredSpeedGear, 1),
+			TestCase("t,v,grad,Padd,n,gear\n1,1,1,1,1,1", CycleType.MeasuredSpeedGear, 1),
+		]
+		public void DrivingCycle_Read(string cycle, CycleType type, int entryCount)
+		{
+			TestCycleRead(cycle, type, entryCount);
+		}
+
 
+		[
 			// wrong cycles
-			AssertHelper.Exception<VectoException>(
-				() => TestCycleRead("v,grad,Padd,n,gear\n1,1,1,1,1", CycleType.MeasuredSpeedGear));
-			AssertHelper.Exception<VectoException>(() => TestCycleRead("<t>,<grad>\n1,1,1,1,1,1,1,1,1", CycleType.MeasuredSpeed));
-			AssertHelper.Exception<VectoException>(
-				() => TestCycleRead("<t>,<Pwheel>,<n>,<Padd>\n1,1,1,1,1,1,1,1,1", CycleType.PWheel));
-			AssertHelper.Exception<VectoException>(
-				() => TestCycleRead("<t>,<Pwheel>,<Pwheel>,<n>,<Padd>\n1,1,1,1,1,1,1,1,1", CycleType.PWheel));
-			AssertHelper.Exception<VectoException>(
-				() => TestCycleRead("<t>,<n>,<torque>,<>,<Padd>\n1,1,1,1,1,1,1,1,1", CycleType.EngineOnly));
-			AssertHelper.Exception<VectoException>(() => TestCycleRead("x,y,z\n1,1,1,1,1,1,1,1,1", CycleType.EngineOnly));
-			AssertHelper.Exception<VectoException>(() => TestCycleRead("x\n1,1,1,1,1,1,1,1,1", CycleType.EngineOnly));
-			AssertHelper.Exception<VectoException>(() => TestCycleRead("\n1,1,1,1,1,1,1,1,1", CycleType.MeasuredSpeed));
-			AssertHelper.Exception<VectoException>(() => TestCycleRead(
+			TestCase("<s>,<v>,<grad>,<stop>\n1,1,1,1", CycleType.DistanceBased),
+			TestCase("v,grad,Padd,n,gear\n1,1,1,1,1", CycleType.MeasuredSpeedGear),
+			TestCase("<t>,<grad>\n1,1,1,1,1,1,1,1,1", CycleType.MeasuredSpeed),
+			TestCase("<t>,<Pwheel>,<n>,<Padd>\n1,1,1,1,1,1,1,1,1", CycleType.PWheel),
+			TestCase("<t>,<Pwheel>,<Pwheel>,<n>,<Padd>\n1,1,1,1,1,1,1,1,1", CycleType.PWheel),
+			TestCase("<t>,<n>,<torque>,<>,<Padd>\n1,1,1,1,1,1,1,1,1", CycleType.EngineOnly),
+			TestCase("x,y,z\n1,1,1,1,1,1,1,1,1", CycleType.EngineOnly),
+			TestCase("x\n1,1,1,1,1,1,1,1,1", CycleType.EngineOnly),
+			TestCase("\n1,1,1,1,1,1,1,1,1", CycleType.MeasuredSpeed),
+			TestCase(
 				"<t>,<v>,<gear>,<Pwheel>,<s>,<grad>,<Padd>,<n>,<gear>,<vair_res>,<vair_beta>,<Aux_HVAC>,<Aux_HP>\n1,1,1,1,1,1,1,1,1",
-				CycleType.MeasuredSpeedGear));
+				CycleType.MeasuredSpeedGear),
+		]
+		public void DrivingCycle_Read_Exception(string cycle, CycleType type)
+		{
+			AssertHelper.Exception<VectoException>(() => TestCycleRead(cycle, type));
 		}
 
-		[TestMethod]
-		public void DrivingCycle_Read_File()
+		[TestCase(@"TestData\Cycles\Coach.vdri", CycleType.DistanceBased),
+		TestCase(@"TestData\Cycles\Engine Only1.vdri", CycleType.EngineOnly),
+		TestCase(@"TestData\Pwheel\RD_#1_Pwheel_AuxStd.vdri", CycleType.PWheel),
+		TestCase(@"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vdri", CycleType.MeasuredSpeed),
+		TestCase(@"TestData\MeasuredSpeed\MeasuredSpeed_Gear_Rural_VairAux.vdri",
+			CycleType.MeasuredSpeedGear),
+		]
+		public void DrivingCycle_Detect_File(string filename, CycleType type)
 		{
-			TestCycleDetect(File.ReadAllText(@"TestData\Cycles\Coach.vdri"), CycleType.DistanceBased);
-			TestCycleRead(File.ReadAllText(@"TestData\Cycles\Coach.vdri"), CycleType.DistanceBased, 6116);
-
-			TestCycleDetect(File.ReadAllText(@"TestData\Cycles\Engine Only1.vdri"), CycleType.EngineOnly);
-			TestCycleRead(File.ReadAllText(@"TestData\Cycles\Engine Only1.vdri"), CycleType.EngineOnly, 696);
+			TestCycleDetect(File.ReadAllText(filename), type);
+		}
 
-			TestCycleDetect(File.ReadAllText(@"TestData\Pwheel\RD_#1_Pwheel_AuxStd.vdri"), CycleType.PWheel);
-			TestCycleRead(File.ReadAllText(@"TestData\Pwheel\RD_#1_Pwheel_AuxStd.vdri"), CycleType.PWheel, 3917);
+		[TestCase(@"TestData\Cycles\Coach.vdri", CycleType.DistanceBased, 6116),
+		TestCase(@"TestData\Cycles\Engine Only1.vdri", CycleType.EngineOnly, 696),
+		TestCase(@"TestData\Pwheel\RD_#1_Pwheel_AuxStd.vdri", CycleType.PWheel, 3917),
+		TestCase(@"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vdri", CycleType.MeasuredSpeed, 1300),
+		TestCase(@"TestData\MeasuredSpeed\MeasuredSpeed_Gear_Rural_VairAux.vdri",
+			CycleType.MeasuredSpeedGear, 1300),
+		]
+		public void DrivingCycle_Read_File(string filename, CycleType type, int entryCount)
+		{
+			TestCycleRead(File.ReadAllText(filename), type, entryCount);
+		}
 
-			TestCycleDetect(File.ReadAllText(@"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vdri"), CycleType.MeasuredSpeed);
-			TestCycleRead(File.ReadAllText(@"TestData\MeasuredSpeed\MeasuredSpeedVairAux.vdri"), CycleType.MeasuredSpeed, 1300);
+		[
+			TestCase("t, Engine Speed, PTO Torque\n1,2,3", CycleType.PTO),
+			TestCase("t, engine speed, PTO Torque\n1,2,3", CycleType.PTO),
+			TestCase("t, Engine Speed, pto torque\n1,2,3", CycleType.PTO),
+			TestCase("t, engine speed, pto torque\n1,2,3", CycleType.PTO),
+			TestCase("T, ENGINE SPEED, PTO TORQUE\n1,2,3", CycleType.PTO),
+			TestCase("<Me>,<n>,<Padd>,<t>\n1,1,1,1", CycleType.EngineOnly),
+			TestCase("t,n,Me,Padd\n1,1,1,1", CycleType.EngineOnly),
+			TestCase("<s>,<v>,<Grad>,<STOP>\n1,0,1,1", CycleType.DistanceBased),
+			TestCase("<s>,<V>,<grad>,<stop>,<PADD>,<vAir_res>,<vAir_Beta>,<Aux_ELE>,<Aux_SP>\n1,1,1,0,1,1,1,1,1",
+				CycleType.DistanceBased),
+			TestCase("<S>,<v>,<stop>,<pAdd>,<Vair_res>,<vair_BETA>,<Aux_ELE>,<Aux_SP>\n1,1,0,1,1,1,1,1",
+				CycleType.DistanceBased)
+		]
+		public void DrivingCycleDetect_CaseInsensitive(string cycle, CycleType type)
+		{
+			TestCycleDetect(cycle, type);
+		}
 
-			TestCycleDetect(File.ReadAllText(@"TestData\MeasuredSpeed\MeasuredSpeed_Gear_Rural_VairAux.vdri"),
-				CycleType.MeasuredSpeedGear);
-			TestCycleRead(File.ReadAllText(@"TestData\MeasuredSpeed\MeasuredSpeed_Gear_Rural_VairAux.vdri"),
-				CycleType.MeasuredSpeedGear, 1300);
+		[
+			TestCase("t, Engine Speed, PTO Torque\n1,2,3", CycleType.PTO, 1),
+			TestCase("t, engine speed, PTO Torque\n1,2,3", CycleType.PTO, 1),
+			TestCase("t, Engine Speed, pto torque\n1,2,3", CycleType.PTO, 1),
+			TestCase("t, engine speed, pto torque\n1,2,3", CycleType.PTO, 1),
+			TestCase("T, ENGINE SPEED, PTO TORQUE\n1,2,3", CycleType.PTO, 1),
+			TestCase("<Me>,<n>,<Padd>,<t>\n1,1,1,1", CycleType.EngineOnly, 1),
+			TestCase("t,n,Me,Padd\n1,1,1,1", CycleType.EngineOnly, 1),
+			TestCase("<s>,<v>,<Grad>,<STOP>\n1,0,1,1", CycleType.DistanceBased, 3),
+			TestCase("<s>,<V>,<grad>,<stop>,<PADD>,<vAir_res>,<vAir_Beta>,<Aux_ELE>,<Aux_SP>\n1,1,1,0,1,1,1,1,1",
+				CycleType.DistanceBased, 2),
+			TestCase("<S>,<v>,<stop>,<pAdd>,<Vair_res>,<vair_BETA>,<Aux_ELE>,<Aux_SP>\n1,1,0,1,1,1,1,1",
+				CycleType.DistanceBased, 2)
+		]
+		public void DrivingCycleRead_CaseInsensitive(string cycle, CycleType type, int entryCount)
+		{
+			TestCycleRead(cycle, type, entryCount);
 		}
 
 		private static void TestCycleDetect(string inputData, CycleType cycleType)
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/PTOIdleLossTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/PTOIdleLossTest.cs
index 3f95338fbd232c3f3c0f6a88c16a8e32ff04f065..9ba9231b9f15ce9d7878abf4b9f3dc75346d48e4 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/PTOIdleLossTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/PTOIdleLossTest.cs
@@ -33,14 +33,32 @@ using System;
 using System.Collections.Generic;
 using NUnit.Framework;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Tests.Utils;
+using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Tests.Models.Simulation
 {
 	[TestFixture]
 	public class PTOIdleLossTest
 	{
+		[TestCase]
+		public void PTOLossMapCaseSensitiveTest()
+		{
+			var data = new[] {
+				"0, 0",
+				"10, 100"
+			};
+			var tbl = VectoCSVFile.ReadStream(InputDataHelper.InputDataAsStream("pto torque, engine speed", data));
+
+			var pto = PTOIdleLossMapReader.Create(tbl);
+
+			var loss = pto.GetTorqueLoss(100.RPMtoRad());
+			Assert.AreEqual(10, loss.Value());
+		}
+
+
 		[TestCase]
 		public void PTOIdleLosses_FixPoints()
 		{