diff --git a/VectoCore/FileIO/InputFileReader.cs b/VectoCore/FileIO/InputFileReader.cs
index 6b96dae09095a17ea6a5f378bf8adce36a00ea44..6c30603206d5b129cd81c9ce816c46f73362ecef 100644
--- a/VectoCore/FileIO/InputFileReader.cs
+++ b/VectoCore/FileIO/InputFileReader.cs
@@ -24,10 +24,5 @@ namespace TUGraz.VectoCore.FileIO
 			data = JsonConvert.DeserializeAnonymousType(jsonStr, data);
 			return new VersionInfo { SavedInDeclarationMode = data.Body.SavedInDeclMode, Version = data.Header.FileVersion };
 		}
-
-		protected T Deserialize<T>(string json)
-		{
-			return JsonConvert.DeserializeObject<T>(json);
-		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/FileIO/JsonDataHeader.cs b/VectoCore/FileIO/JsonDataHeader.cs
index d7c249d76cfb533569612d802cacf7bfe0d9d80d..36b5e9cb5862febdf93475b0d8598bbd1b29636c 100644
--- a/VectoCore/FileIO/JsonDataHeader.cs
+++ b/VectoCore/FileIO/JsonDataHeader.cs
@@ -7,7 +7,7 @@ namespace TUGraz.VectoCore.FileIO
 		[JsonProperty(Required = Required.Always)] public string AppVersion;
 		[JsonProperty(Required = Required.Always)] public string CreatedBy;
 		[JsonProperty(Required = Required.Always)] public string Date;
-		[JsonProperty(Required = Required.Always)] public double FileVersion;
+		[JsonProperty(Required = Required.Always)] public uint FileVersion;
 
 		#region Equality members
 
@@ -28,7 +28,7 @@ namespace TUGraz.VectoCore.FileIO
 			if (obj.GetType() != GetType()) {
 				return false;
 			}
-			return Equals((JsonDataHeader) obj);
+			return Equals((JsonDataHeader)obj);
 		}
 
 		public override int GetHashCode()
diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
index 5c62e1c80689dcb97db6fba328273d654c5f017f..aae5ad81002e61f6e0997685c3c3643462bf8637 100644
--- a/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
+++ b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
@@ -125,7 +125,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
 					TwinTyres = axleInput.TwinTyres,
 					RollResistanceCoefficient = axleInput.RollResistanceCoefficient,
 					TyreTestLoad = axleInput.TyreTestLoad.SI<Newton>(),
-					Inertia = DeclarationData.Wheels.Lookup(axleInput.WheelsStr).Inertia,
+					Inertia = DeclarationData.Wheels.Lookup(axleInput.WheelsStr.Replace(" ", "")).Inertia,
 				};
 				retVal.AxleData.Add(axle);
 			}
@@ -149,7 +149,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
 			retVal.Inertia = DeclarationData.Engine.EngineInertia(retVal.Displacement);
 			retVal.FullLoadCurve = EngineFullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, engine.Body.FullLoadCurve),
 				true);
-
+			retVal.FullLoadCurve.EngineData = retVal;
 			return retVal;
 		}
 
@@ -190,7 +190,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
 						TorqueConverterActive = false
 					};
 				} else {
-					var fullLoad = !String.IsNullOrEmpty(gearSettings.FullLoadCurve) && gearSettings.FullLoadCurve.Equals("<NOFILE>")
+					var fullLoad = !String.IsNullOrEmpty(gearSettings.FullLoadCurve) && !gearSettings.FullLoadCurve.Equals("<NOFILE>")
 						? GearFullLoadCurve.ReadFromFile(Path.Combine(gearbox.BasePath, gearSettings.FullLoadCurve))
 						: null;
 					var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(fullLoad, engine);
diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs
index 002aed5ccfc7588ee7ee574552dc64704cfadb76..249da4494c50ebb6e75e599819b173e6c68d4769 100644
--- a/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs
+++ b/VectoCore/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs
@@ -131,7 +131,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
 			retVal.Inertia = engine.Body.Inertia.SI<KilogramSquareMeter>();
 			retVal.FullLoadCurve = EngineFullLoadCurve.ReadFromFile(Path.Combine(engine.BasePath, engine.Body.FullLoadCurve),
 				false);
-
+			retVal.FullLoadCurve.EngineData = retVal;
 			return retVal;
 		}
 
diff --git a/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs b/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs
index 99275bae8fc638993619f8739f42e6a9d095452d..15a2c2f5fc9767efbfffa91c196f0abac55c9de3 100644
--- a/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs
+++ b/VectoCore/FileIO/Reader/Impl/DeclarationModeSimulationDataReader.cs
@@ -46,6 +46,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl
 						IsEngineOnly = IsEngineOnly,
 						JobFileName = Job.JobFile,
 					};
+					simulationRunData.VehicleData.VehicleClass = segment.VehicleClass;
 					yield return simulationRunData;
 				}
 			}
@@ -140,7 +141,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.Impl
 					ID = aux.ID,
 					Type = aux.Type,
 					Technology = aux.Technology,
-					TechList = aux.TechList.ToArray()
+					TechList = aux.TechList == null ? null : aux.TechList.ToArray()
 				}).ToArray();
 		}
 
diff --git a/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/Models/Declaration/DeclarationData.cs
index 045ef0dc62f0240a7bbbeda2da4bd4a35937c9b7..2258c3ea52d38cbf51fb98983e7e0f0376556904 100644
--- a/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/Models/Declaration/DeclarationData.cs
@@ -48,10 +48,10 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 		public static Meter DynamicTyreRadius(string wheels, string rims)
 		{
-			var wheelsEntry = Wheels.Lookup(wheels);
+			var wheelsEntry = Wheels.Lookup(wheels.Replace(" ", ""));
 			var rimsEntry = Rims.Lookup(rims);
 
-			var correction = wheelsEntry.SizeClass != "a" ? rimsEntry.F_a : rimsEntry.F_b;
+			var correction = wheelsEntry.SizeClass != "a" ? rimsEntry.F_b : rimsEntry.F_a;
 
 			return wheelsEntry.DynamicTyreRadius * correction / (2 * Math.PI);
 		}
diff --git a/VectoCore/Models/Declaration/Wheels.cs b/VectoCore/Models/Declaration/Wheels.cs
index 61c5d3c5877017f2a2a6576e18f4e50a96fd1565..e2678773e5b8c1f3bef3d560d330966f91af5cae 100644
--- a/VectoCore/Models/Declaration/Wheels.cs
+++ b/VectoCore/Models/Declaration/Wheels.cs
@@ -17,7 +17,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 		{
 			Data = (from DataRow row in table.Rows
 				select new WheelsEntry {
-					WheelType = row.Field<string>(0),
+					WheelType = row.Field<string>(0).Replace(" ", ""),
 					Inertia = row.ParseDouble(1).SI<KilogramSquareMeter>(),
 					DynamicTyreRadius = row.ParseDouble(2).SI().Milli.Meter.Cast<Meter>(),
 					SizeClass = row.Field<string>(3)
diff --git a/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
index c50a3175cfea4b908ecbdf6c249dee19d75604e2..cdd890b2b325302352f7899822a663b43b094987 100644
--- a/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
+++ b/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
@@ -15,6 +15,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 
 		public VehicleCategory VehicleCategory { get; internal set; }
 
+		public string VehicleClass { get; internal set; }
+
 		public CrossWindCorrectionMode CrossWindCorrectionMode { get; internal set; }
 
 		public RetarderData Retarder { get; internal set; }
diff --git a/VectoCoreTest/FileIO/JsonTest.cs b/VectoCoreTest/FileIO/JsonTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7c40c6b9fb84746284491394cbb9e7829443877e
--- /dev/null
+++ b/VectoCoreTest/FileIO/JsonTest.cs
@@ -0,0 +1,30 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using TUGraz.VectoCore.FileIO;
+
+namespace TUGraz.VectoCore.Tests.FileIO
+{
+	[TestClass]
+	public class JsonTest
+	{
+		[TestMethod]
+		public void TestJsonHeaderEquality()
+		{
+			var h1 = new JsonDataHeader {
+				AppVersion = "MyVecto3",
+				CreatedBy = "UnitTest",
+				Date = "1.1.1970",
+				FileVersion = 3
+			};
+			var h2 = new JsonDataHeader {
+				AppVersion = "MyVecto3",
+				CreatedBy = "UnitTest",
+				Date = "1.1.1970",
+				FileVersion = 3
+			};
+			Assert.AreEqual(h1, h1);
+			Assert.AreEqual(h1, h2);
+			Assert.AreNotEqual(h1, null);
+			Assert.AreNotEqual(h1, "hello world");
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCoreTest/FileIO/SimulationDataReaderTest.cs b/VectoCoreTest/FileIO/SimulationDataReaderTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e1474aab93d618d46552888441e2e600bbdc5757
--- /dev/null
+++ b/VectoCoreTest/FileIO/SimulationDataReaderTest.cs
@@ -0,0 +1,87 @@
+using System;
+using System.IO;
+using System.Linq;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using TUGraz.VectoCore.FileIO.Reader.Impl;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Tests.FileIO
+{
+	[TestClass]
+	public class SimulationDataReaderTest
+	{
+		protected const string DeclarationJob = @"TestData\Jobs\12t Delivery Truck.vecto";
+		protected const double Tolerance = 0.0001;
+
+		[TestMethod]
+		public void ReadDeclarationJobFile()
+		{
+			var reader = new DeclarationModeSimulationDataReader();
+			reader.SetJobFile(DeclarationJob);
+
+			var runData = reader.NextRun().First();
+
+			Assert.AreEqual(false, runData.IsEngineOnly);
+
+			Assert.AreEqual(Path.GetFileName(DeclarationJob), runData.JobFileName);
+			Assert.AreEqual(5850, runData.VehicleData.CurbWeight.Value());
+			Assert.AreEqual(1900, runData.VehicleData.CurbWeigthExtra.Value()); // taken from segmentation table
+			Assert.AreEqual(11900, runData.VehicleData.GrossVehicleMassRating.Value());
+			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, runData.VehicleData.AxleConfiguration);
+			Assert.AreEqual(0.4069297458, runData.VehicleData.DynamicTyreRadius.Value(), Tolerance);
+
+			Assert.AreEqual("2", runData.VehicleData.VehicleClass);
+			Assert.AreEqual(2, runData.VehicleData.AxleData.Count);
+			Assert.AreEqual(6, runData.VehicleData.AxleData[0].Inertia.Value(), Tolerance);
+
+			Assert.AreEqual(true, runData.DriverData.LookAheadCoasting.Enabled);
+			Assert.AreEqual(DeclarationData.Driver.LookAhead.MinimumSpeed.Value(),
+				runData.DriverData.LookAheadCoasting.MinSpeed.Value(), Tolerance);
+			Assert.AreEqual(DeclarationData.Driver.LookAhead.Deceleration.Value(),
+				runData.DriverData.LookAheadCoasting.Deceleration.Value(), Tolerance);
+
+			Assert.AreNotEqual(DriverData.DriverMode.Off, runData.DriverData.OverSpeedEcoRoll.Mode);
+			Assert.AreEqual(DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed.Value(),
+				runData.DriverData.OverSpeedEcoRoll.MinSpeed.Value(), Tolerance);
+			Assert.AreEqual(DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed.Value(),
+				runData.DriverData.OverSpeedEcoRoll.OverSpeed.Value(), Tolerance);
+			Assert.AreEqual(DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed.Value(),
+				runData.DriverData.OverSpeedEcoRoll.UnderSpeed.Value(), Tolerance);
+
+			//Assert.AreEqual(false, runData.DriverData.StartStop.Enabled);
+			Assert.AreEqual(DeclarationData.Driver.StartStop.Delay.Value(), runData.DriverData.StartStop.Delay.Value(), Tolerance);
+			Assert.AreEqual(DeclarationData.Driver.StartStop.MaxSpeed.Value(), runData.DriverData.StartStop.MaxSpeed.Value(),
+				Tolerance);
+			Assert.AreEqual(DeclarationData.Driver.StartStop.MinTime.Value(), runData.DriverData.StartStop.MinTime.Value(),
+				Tolerance);
+
+			Assert.AreEqual(3.7890, runData.EngineData.Inertia.Value());
+
+			var downshiftSpeeds = new double[] { 600, 600, 1310.6673 };
+			var downshiftTorque = new double[] { 0, 266.85346, 899 };
+
+			Assert.AreEqual(downshiftSpeeds.Length, runData.GearboxData[1].ShiftPolygon.Downshift.Count);
+			for (var i = 0; i < downshiftSpeeds.Length; i++) {
+				Assert.AreEqual(downshiftSpeeds[i].RPMtoRad().Value(),
+					runData.GearboxData[1].ShiftPolygon.Downshift[i].AngularSpeed.Value(), Tolerance);
+				Assert.AreEqual(downshiftTorque[i], runData.GearboxData[1].ShiftPolygon.Downshift[i].Torque.Value(), Tolerance);
+			}
+
+			var upshiftSpeed = new double[] { 1531.230044, 1531.230044, 2420.505793661 };
+			var upshiftTorque = new double[] { 0, 459.8588, 899 };
+
+			Assert.AreEqual(upshiftSpeed.Length, runData.GearboxData[1].ShiftPolygon.Downshift.Count);
+			for (var i = 0; i < downshiftSpeeds.Length; i++) {
+				Assert.AreEqual(upshiftSpeed[i].RPMtoRad().Value(),
+					runData.GearboxData[1].ShiftPolygon.Upshift[i].AngularSpeed.Value(), Tolerance);
+				Assert.AreEqual(upshiftTorque[i], runData.GearboxData[1].ShiftPolygon.Upshift[i].Torque.Value(), Tolerance);
+			}
+			//Assert.AreEqual();
+
+
+			//Assert.AreEqual(, runData.DriverData.LookAheadCoasting.);
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs b/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs
index 375b8d8e7c88ed8eb10f5800a342a981fe5e1cb4..59bb858274e7faabff9f9037b7941cd14496887a 100644
--- a/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs
+++ b/VectoCoreTest/Models/SimulationComponentData/DistanceCycleDataTest.cs
@@ -15,7 +15,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		private const string ResourceNamespace = "TUGraz.VectoCore.Resources.Declaration.";
 
 
-		[TestMethod]
+		[TestMethod, Ignore]
 		public void CycleAltitudeTest()
 		{
 			var missionType = "LongHaul";
diff --git a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
index a8adffc819764af8149c82ff74b773d2136ad443..013eb36ec3d57812aefa081ffd0d495625c281c1 100644
--- a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
+++ b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
@@ -1,5 +1,6 @@
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using TUGraz.VectoCore.Exceptions;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Tests.Utils;
 using TUGraz.VectoCore.Utils;
@@ -71,6 +72,19 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			Assert.AreEqual(0.37, fldCurve.PT1(1700.RPMtoRad()).Value(), Tolerance);
 		}
 
+		[TestMethod]
+		public void TestPreferredSpeed()
+		{
+			var fldCurve = EngineFullLoadCurve.ReadFromFile(CoachEngineFLD);
+			fldCurve.EngineData = new CombustionEngineData() { IdleSpeed = 560.RPMtoRad() };
+			Assert.AreEqual(130.691151551712, fldCurve.PreferredSpeed.Value(), Tolerance);
+			Assert.AreEqual(194.515816596908, fldCurve.N95hSpeed.Value(), Tolerance);
+			Assert.AreEqual(94.2463966015023, fldCurve.LoSpeed.Value(), Tolerance);
+			Assert.AreEqual(219.084329211505, fldCurve.HiSpeed.Value(), Tolerance);
+			Assert.AreEqual(2300, fldCurve.MaxLoadTorque.Value(), Tolerance);
+			Assert.AreEqual(-320, fldCurve.MaxDragTorque.Value(), Tolerance);
+		}
+
 		/// <summary>
 		///     [VECTO-78]
 		/// </summary>
diff --git a/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh b/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh
index 7e48eda364dafced678cd2d6f6ec778d42cd7f43..9fb75c9c25d2e26e5218073a3898be687f826c33 100644
--- a/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh	
+++ b/VectoCoreTest/TestData/Components/12t Delivery Truck.vveh	
@@ -28,7 +28,7 @@
       "Axles": [
         {
           "Inertia": 6.0,
-          "Wheels": "245/70 R 19.5",
+          "Wheels": "245/70 R19.5",
           "AxleWeightShare": 0.0,
           "TwinTyres": false,
           "RRCISO": 0.008343465,
@@ -36,7 +36,7 @@
         },
         {
           "Inertia": 6.0,
-          "Wheels": "245/70 R 19.5",
+          "Wheels": "245/70 R19.5",
           "AxleWeightShare": 0.0,
           "TwinTyres": true,
           "RRCISO": 0.00943769,
diff --git a/VectoCoreTest/Utils/SITest.cs b/VectoCoreTest/Utils/SITest.cs
index 0d816f0fcff956079d097df0d16cfdb2fdb1e682..64c15c7e5dd82f6f35fefdcb7fd9814a2dd18af4 100644
--- a/VectoCoreTest/Utils/SITest.cs
+++ b/VectoCoreTest/Utils/SITest.cs
@@ -52,6 +52,10 @@ namespace TUGraz.VectoCore.Tests.Utils
 			Assert.IsTrue(siStandardDiv.HasEqualUnit(new SI()));
 			Assert.AreEqual(600.0 / 60 * 2 * Math.PI * 1500 * 1500, siStandardMult.Value());
 
+			var force = torque / 100.SI<Meter>();
+			Assert.IsInstanceOfType(force, typeof(Newton));
+			Assert.AreEqual(15, force.Value());
+
 
 			//add
 			var angularVelocity2 = 400.SI<RoundsPerMinute>().Cast<PerSecond>();
diff --git a/VectoCoreTest/VectoCoreTest.csproj b/VectoCoreTest/VectoCoreTest.csproj
index 192df8b2c540a0a55c1ab6084617f365f4ec60ba..3b7fd62023bcc2697fb80b31e94bc65a68f92d76 100644
--- a/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCoreTest/VectoCoreTest.csproj
@@ -70,6 +70,8 @@
   </Choose>
   <ItemGroup>
     <Compile Include="Exceptions\ExceptionTests.cs" />
+    <Compile Include="FileIO\JsonTest.cs" />
+    <Compile Include="FileIO\SimulationDataReaderTest.cs" />
     <Compile Include="Integration\EngineOnlyCycle\EngineOnlyCycleTest.cs" />
     <Compile Include="Integration\SimulationRuns\MinimalPowertrain.cs" />
     <Compile Include="Models\Declaration\DeclarationDataTest.cs" />