From cca7f282abdf5f95038e00b7bf985fb54de54887 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 15 Nov 2017 13:57:05 +0100
Subject: [PATCH] renaming ETPT to VTP, refactoring: new cycle format, aux
 handling (speed dependent), correction of engine fan equation

---
 Documentation/VectoHashingTool/convert.bat    |    2 +-
 VECTO.sln                                     |   47 +-
 VECTO.sln.DotSettings                         |    1 +
 VECTO/GUI/MainForm.Designer.vb                |    2 +-
 VECTO/GUI/MainForm.vb                         |   20 +-
 ...esigner.vb => VectoVTPJobForm.Designer.vb} |  256 ++--
 ...oEPTPJobForm.resx => VectoVTPJobForm.resx} |  258 ----
 ...VectoEPTPJobForm.vb => VectoVTPJobForm.vb} |   14 +-
 VECTO/Input Files/VectoEPTPJob.vb             |   30 +-
 VECTO/OutputData/JSONFileWriter.vb            |    5 +-
 VECTO/Resources/P_fan_eqn.png                 |  Bin 8590 -> 9516 bytes
 VECTO/VECTO.vbproj                            |   12 +-
 .../InputData/EngineeringInputData.cs         |    2 +-
 .../InputData/IInputDataProvider.cs           |   10 +-
 .../OutputData/IOutputFileWriter.cs           |    2 +-
 VectoCommon/VectoHashing/IVectoHash.cs        |    2 +-
 .../InputData/FileIO/JSON/JSONInputData.cs    | 1245 +++++++++--------
 .../FileIO/JSON/JSONInputDataFactory.cs       |    2 +-
 .../Reader/DrivingCycleDataReader.cs          |   64 +-
 ... EngineeringVTPModeVectoRunDataFactory.cs} |   34 +-
 .../Models/Simulation/Data/VectoRunData.cs    |   11 +-
 .../Simulation/Impl/PowertrainBuilder.cs      |   66 +-
 .../Simulation/Impl/SimulatorFactory.cs       |    8 +-
 .../Simulation/Impl/VehicleContainer.cs       |    2 +-
 .../SimulationComponent/Data/AuxiliaryData.cs |  174 +--
 .../Data/DrivingCycleData.cs                  |    4 +-
 .../Impl/EPTPCombustionEngine.cs              |   78 --
 .../Impl/EngineFanAuxiliary.cs                |   27 +
 .../Impl/VTPCombustionEngine.cs               |   21 +
 .../Impl/{EPTPCycle.cs => VTPCycle.cs}        |   20 +-
 .../Resources/Declaration/VAUX/HVAC-Table.csv |    8 +-
 .../Resources/Declaration/VAUX/SP-Table.csv   |    6 +-
 VectoCore/VectoCore/VectoCore.csproj          |    7 +-
 .../SimulationComponent/EngineFanAuxTest.cs   |   23 +
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |    1 +
 35 files changed, 1162 insertions(+), 1302 deletions(-)
 rename VECTO/GUI/{VectoEPTPJobForm.Designer.vb => VectoVTPJobForm.Designer.vb} (77%)
 rename VECTO/GUI/{VectoEPTPJobForm.resx => VectoVTPJobForm.resx} (55%)
 rename VECTO/GUI/{VectoEPTPJobForm.vb => VectoVTPJobForm.vb} (98%)
 rename VectoCore/VectoCore/InputData/Reader/Impl/{EngineeringEPTPModeVectoRunDataFactory.cs => EngineeringVTPModeVectoRunDataFactory.cs} (73%)
 delete mode 100644 VectoCore/VectoCore/Models/SimulationComponent/Impl/EPTPCombustionEngine.cs
 create mode 100644 VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineFanAuxiliary.cs
 create mode 100644 VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs
 rename VectoCore/VectoCore/Models/SimulationComponent/Impl/{EPTPCycle.cs => VTPCycle.cs} (90%)
 create mode 100644 VectoCore/VectoCoreTest/Models/SimulationComponent/EngineFanAuxTest.cs

diff --git a/Documentation/VectoHashingTool/convert.bat b/Documentation/VectoHashingTool/convert.bat
index bcd246ff86..70a31cd5a9 100644
--- a/Documentation/VectoHashingTool/convert.bat
+++ b/Documentation/VectoHashingTool/convert.bat
@@ -8,7 +8,7 @@ set LIST=
 for /f %%f in (files.txt) do set LIST=!LIST! "%%f"
 
 
-REM pandoc --verbose  -f markdown+raw_html %LIST% -s -S --toc --toc-depth=2 --self-contained --email-obfuscation=none --section-divs --mathjax=includes/mathjax.js -c includes/style.css -c includes/print.css -B includes/header.html -A includes/footer.html -o help.html  -H includes/jquery.js -H includes/jquery-ui.js -H includes/include.js
+REM pandoc --verbose  -f markdown+raw_html %LIST% -s --toc --toc-depth=2 --self-contained --email-obfuscation=none --section-divs --mathjax=includes/mathjax.js -c includes/style.css -c includes/print.css -B includes/header.html -A includes/footer.html -o help.html  -H includes/jquery.js -H includes/jquery-ui.js -H includes/include.js
 %LOCALAPPDATA%\Pandoc\pandoc --verbose  -f markdown+raw_html %LIST% -s -S --toc --toc-depth=2 --self-contained --email-obfuscation=none --section-divs --webtex -c includes/style.css -c includes/print.css -B includes/header.html -A includes/footer.html -o HashingToolHelp.html  -H includes/jquery.js -H includes/jquery-ui.js -H includes/include.js
 
 REM pandoc %LIST% -s -S --toc --toc-depth=2 --self-contained --email-obfuscation=none --section-divs --webtex  -c includes/style.css -B includes/header.html -A includes/footer.html -o help.html  -H includes/jquery.js -H includes/jquery-ui.js -H includes/include.js
diff --git a/VECTO.sln b/VECTO.sln
index d3fe7288cf..9f48ecc4f6 100644
--- a/VECTO.sln
+++ b/VECTO.sln
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.31101.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VECTO", "VECTO\VECTO.vbproj", "{AAC0F132-0A9F-45B3-B682-77AC9B24B352}"
 	ProjectSection(ProjectDependencies) = postProject
@@ -144,8 +144,8 @@ Global
 		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{FDEEE460-0B8A-4EF6-8D9E-72F203A50F65}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -172,8 +172,8 @@ Global
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -199,7 +199,6 @@ Global
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -227,7 +226,6 @@ Global
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -273,8 +271,8 @@ Global
 		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -301,8 +299,8 @@ Global
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -330,7 +328,6 @@ Global
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -358,7 +355,6 @@ Global
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -386,7 +382,6 @@ Global
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -411,8 +406,8 @@ Global
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -437,7 +432,6 @@ Global
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -485,7 +479,6 @@ Global
 		{D959CB7C-F514-4F5E-9C33-684D0012474B}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{D959CB7C-F514-4F5E-9C33-684D0012474B}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{D959CB7C-F514-4F5E-9C33-684D0012474B}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -509,7 +502,6 @@ Global
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{41314A40-AB3E-4F43-B1A4-58443F4014F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -556,7 +548,6 @@ Global
 		{2C58BA97-2954-4D19-920F-A24B78FC80A4}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{2C58BA97-2954-4D19-920F-A24B78FC80A4}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{2C58BA97-2954-4D19-920F-A24B78FC80A4}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{2C58BA97-2954-4D19-920F-A24B78FC80A4}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{2C58BA97-2954-4D19-920F-A24B78FC80A4}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{2C58BA97-2954-4D19-920F-A24B78FC80A4}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{2C58BA97-2954-4D19-920F-A24B78FC80A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -580,7 +571,6 @@ Global
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -604,8 +594,8 @@ Global
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -631,7 +621,6 @@ Global
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Deploy|Any CPU.Build.0 = Debug|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -656,8 +645,8 @@ Global
 		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Deploy|Any CPU.ActiveCfg = Deploy|Any CPU
+		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Deploy|Any CPU.Build.0 = Deploy|Any CPU
 		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -682,8 +671,8 @@ Global
 		{33F9848E-9257-4BE2-915F-68E748AEB204}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU
 		{33F9848E-9257-4BE2-915F-68E748AEB204}.DebugTUG|x64.ActiveCfg = Debug|Any CPU
 		{33F9848E-9257-4BE2-915F-68E748AEB204}.DebugTUG|x86.ActiveCfg = Debug|Any CPU
-		{33F9848E-9257-4BE2-915F-68E748AEB204}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{33F9848E-9257-4BE2-915F-68E748AEB204}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{33F9848E-9257-4BE2-915F-68E748AEB204}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{33F9848E-9257-4BE2-915F-68E748AEB204}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{33F9848E-9257-4BE2-915F-68E748AEB204}.Deploy|x64.ActiveCfg = Debug|Any CPU
 		{33F9848E-9257-4BE2-915F-68E748AEB204}.Deploy|x86.ActiveCfg = Debug|Any CPU
 		{33F9848E-9257-4BE2-915F-68E748AEB204}.Release|Any CPU.ActiveCfg = Release|Any CPU
diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings
index 34ea44b952..a8f645b18f 100644
--- a/VECTO.sln.DotSettings
+++ b/VECTO.sln.DotSettings
@@ -35,6 +35,7 @@
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PTO/@EntryIndexedValue">PTO</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RP/@EntryIndexedValue">RP</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SI/@EntryIndexedValue">SI</s:String>
+	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VTP/@EntryIndexedValue">VTP</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=WHTC/@EntryIndexedValue">WHTC</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=XML/@EntryIndexedValue">XML</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=XSD/@EntryIndexedValue">XSD</s:String>
diff --git a/VECTO/GUI/MainForm.Designer.vb b/VECTO/GUI/MainForm.Designer.vb
index f54f394102..dff52a9b7b 100644
--- a/VECTO/GUI/MainForm.Designer.vb
+++ b/VECTO/GUI/MainForm.Designer.vb
@@ -700,7 +700,7 @@ Partial Class MainForm
         Me.EPTPJobEditorToolStripMenuItem.Image = Global.TUGraz.VECTO.My.Resources.Resources.F_VECTO
         Me.EPTPJobEditorToolStripMenuItem.Name = "EPTPJobEditorToolStripMenuItem"
         Me.EPTPJobEditorToolStripMenuItem.Size = New System.Drawing.Size(156, 22)
-        Me.EPTPJobEditorToolStripMenuItem.Text = "EPTP Job Editor"
+        Me.EPTPJobEditorToolStripMenuItem.Text = "VTP Job Editor"
         '
         'VEHEditorToolStripMenuItem
         '
diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb
index d8802473ae..36bf080410 100644
--- a/VECTO/GUI/MainForm.vb
+++ b/VECTO/GUI/MainForm.vb
@@ -1271,18 +1271,18 @@ lbFound:
 		If x = "<New>" Then
 			ShowVectoJobForm()
 			VectoJobForm.VectoNew()
-		ElseIf x = "<EPTP>" Then
+		ElseIf x = "<VTP>" Then
 			ShowVectoEPTPJobForm()
-			VectoEPTPJobForm.VectoNew()
+			VectoVTPJobForm.VectoNew()
 		Else
 			Try
-				Dim job As IEPTPInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(x), IEPTPInputDataProvider)
+				Dim job As IVTPInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(x), IVTPInputDataProvider)
 				If job Is Nothing Then
 					ShowVectoJobForm()
 					VectoJobForm.VECTOload2Form(x)
 				Else
 					ShowVectoEPTPJobForm()
-					VectoEPTPJobForm.VECTOload2Form(x)
+					VectoVTPJobForm.VECTOload2Form(x)
 				End If
 			Catch ex As Exception
 				MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Vecto Job File")
@@ -1302,12 +1302,12 @@ lbFound:
 	End Sub
 
 	Private Sub ShowVectoEPTPJobForm()
-		If Not VectoEPTPJobForm.Visible Then
-			VectoEPTPJobForm.Show()
+		If Not VectoVTPJobForm.Visible Then
+			VectoVTPJobForm.Show()
 		Else
-			If VectoEPTPJobForm.WindowState = FormWindowState.Minimized Then _
-				VectoEPTPJobForm.WindowState = FormWindowState.Normal
-			VectoEPTPJobForm.BringToFront()
+			If VectoVTPJobForm.WindowState = FormWindowState.Minimized Then _
+				VectoVTPJobForm.WindowState = FormWindowState.Normal
+			VectoVTPJobForm.BringToFront()
 		End If
 	End Sub
 
@@ -2030,7 +2030,7 @@ Lb1:
 
 	Private Sub EPTPJobEditorToolStripMenuItem_Click(sender As Object, e As EventArgs) _
 		Handles EPTPJobEditorToolStripMenuItem.Click
-		OpenVECTOeditor("<EPTP>")
+		OpenVECTOeditor("<VTP>")
 	End Sub
 End Class
 
diff --git a/VECTO/GUI/VectoEPTPJobForm.Designer.vb b/VECTO/GUI/VectoVTPJobForm.Designer.vb
similarity index 77%
rename from VECTO/GUI/VectoEPTPJobForm.Designer.vb
rename to VECTO/GUI/VectoVTPJobForm.Designer.vb
index 4aa60fd6d3..3f8c030922 100644
--- a/VECTO/GUI/VectoEPTPJobForm.Designer.vb
+++ b/VECTO/GUI/VectoVTPJobForm.Designer.vb
@@ -2,7 +2,7 @@
 Imports Microsoft.VisualBasic.CompilerServices
 
 <DesignerGenerated()> _
-Partial Class VectoEPTPJobForm
+Partial Class VectoVTPJobForm
 	Inherits Form
 
 	'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
@@ -26,18 +26,18 @@ Partial Class VectoEPTPJobForm
 	<DebuggerStepThrough()> _
 	Private Sub InitializeComponent()
         Me.components = New System.ComponentModel.Container()
-        Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(VectoEPTPJobForm))
+        Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(VectoVTPJobForm))
         Me.GrCycles = New System.Windows.Forms.GroupBox()
         Me.Label2 = New System.Windows.Forms.Label()
         Me.LvCycles = New System.Windows.Forms.ListView()
-        Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+        Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
         Me.BtDRIrem = New System.Windows.Forms.Button()
         Me.BtDRIadd = New System.Windows.Forms.Button()
         Me.GrAux = New System.Windows.Forms.GroupBox()
         Me.LvAux = New System.Windows.Forms.ListView()
-        Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
-        Me.ColumnHeader5 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
-        Me.ColumnHeader6 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+        Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
+        Me.ColumnHeader5 = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
+        Me.ColumnHeader6 = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader)
         Me.TbVEH = New System.Windows.Forms.TextBox()
         Me.ButtonVEH = New System.Windows.Forms.Button()
         Me.StatusStrip1 = New System.Windows.Forms.StatusStrip()
@@ -69,6 +69,8 @@ Partial Class VectoEPTPJobForm
         Me.lblEngineCharacteristics = New System.Windows.Forms.Label()
         Me.PictureBox2 = New System.Windows.Forms.PictureBox()
         Me.GroupBox1 = New System.Windows.Forms.GroupBox()
+        Me.tbFanDiameter = New System.Windows.Forms.TextBox()
+        Me.Label6 = New System.Windows.Forms.Label()
         Me.tbC3 = New System.Windows.Forms.TextBox()
         Me.Label4 = New System.Windows.Forms.Label()
         Me.tbC2 = New System.Windows.Forms.TextBox()
@@ -76,22 +78,23 @@ Partial Class VectoEPTPJobForm
         Me.tbC1 = New System.Windows.Forms.TextBox()
         Me.Label1 = New System.Windows.Forms.Label()
         Me.Label5 = New System.Windows.Forms.Label()
-        Me.GrCycles.SuspendLayout()
-        Me.GrAux.SuspendLayout()
-        Me.StatusStrip1.SuspendLayout()
-        Me.ToolStrip1.SuspendLayout()
-        CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
-        Me.CmOpenFile.SuspendLayout()
-        CType(Me.PicVehicle, System.ComponentModel.ISupportInitialize).BeginInit()
-        CType(Me.PicBox, System.ComponentModel.ISupportInitialize).BeginInit()
-        CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit()
-        Me.GroupBox1.SuspendLayout()
-        Me.SuspendLayout()
+        Me.Label7 = New System.Windows.Forms.Label()
+        Me.GrCycles.SuspendLayout
+        Me.GrAux.SuspendLayout
+        Me.StatusStrip1.SuspendLayout
+        Me.ToolStrip1.SuspendLayout
+        CType(Me.PictureBox1,System.ComponentModel.ISupportInitialize).BeginInit
+        Me.CmOpenFile.SuspendLayout
+        CType(Me.PicVehicle,System.ComponentModel.ISupportInitialize).BeginInit
+        CType(Me.PicBox,System.ComponentModel.ISupportInitialize).BeginInit
+        CType(Me.PictureBox2,System.ComponentModel.ISupportInitialize).BeginInit
+        Me.GroupBox1.SuspendLayout
+        Me.SuspendLayout
         '
         'GrCycles
         '
-        Me.GrCycles.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.GrCycles.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.GrCycles.Controls.Add(Me.Label2)
         Me.GrCycles.Controls.Add(Me.LvCycles)
         Me.GrCycles.Controls.Add(Me.BtDRIrem)
@@ -100,14 +103,14 @@ Partial Class VectoEPTPJobForm
         Me.GrCycles.Name = "GrCycles"
         Me.GrCycles.Size = New System.Drawing.Size(515, 138)
         Me.GrCycles.TabIndex = 10
-        Me.GrCycles.TabStop = False
+        Me.GrCycles.TabStop = false
         Me.GrCycles.Text = "Cycles"
         '
         'Label2
         '
-        Me.Label2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
-        Me.Label2.AutoSize = True
+        Me.Label2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+        Me.Label2.AutoSize = true
         Me.Label2.Location = New System.Drawing.Point(391, 109)
         Me.Label2.Name = "Label2"
         Me.Label2.Size = New System.Drawing.Size(118, 13)
@@ -116,22 +119,22 @@ Partial Class VectoEPTPJobForm
         '
         'LvCycles
         '
-        Me.LvCycles.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
-            Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.LvCycles.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom)  _
+            Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.LvCycles.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1})
-        Me.LvCycles.FullRowSelect = True
-        Me.LvCycles.GridLines = True
+        Me.LvCycles.FullRowSelect = true
+        Me.LvCycles.GridLines = true
         Me.LvCycles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None
-        Me.LvCycles.HideSelection = False
-        Me.LvCycles.LabelEdit = True
+        Me.LvCycles.HideSelection = false
+        Me.LvCycles.LabelEdit = true
         Me.LvCycles.Location = New System.Drawing.Point(6, 19)
-        Me.LvCycles.MultiSelect = False
+        Me.LvCycles.MultiSelect = false
         Me.LvCycles.Name = "LvCycles"
         Me.LvCycles.Size = New System.Drawing.Size(503, 89)
         Me.LvCycles.TabIndex = 0
-        Me.LvCycles.TabStop = False
-        Me.LvCycles.UseCompatibleStateImageBehavior = False
+        Me.LvCycles.TabStop = false
+        Me.LvCycles.UseCompatibleStateImageBehavior = false
         Me.LvCycles.View = System.Windows.Forms.View.Details
         '
         'ColumnHeader1
@@ -141,54 +144,54 @@ Partial Class VectoEPTPJobForm
         '
         'BtDRIrem
         '
-        Me.BtDRIrem.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.BtDRIrem.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.BtDRIrem.Image = Global.TUGraz.VECTO.My.Resources.Resources.minus_circle_icon
         Me.BtDRIrem.Location = New System.Drawing.Point(29, 109)
         Me.BtDRIrem.Name = "BtDRIrem"
         Me.BtDRIrem.Size = New System.Drawing.Size(24, 24)
         Me.BtDRIrem.TabIndex = 2
-        Me.BtDRIrem.UseVisualStyleBackColor = True
+        Me.BtDRIrem.UseVisualStyleBackColor = true
         '
         'BtDRIadd
         '
-        Me.BtDRIadd.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.BtDRIadd.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.BtDRIadd.Image = Global.TUGraz.VECTO.My.Resources.Resources.plus_circle_icon
         Me.BtDRIadd.Location = New System.Drawing.Point(5, 109)
         Me.BtDRIadd.Name = "BtDRIadd"
         Me.BtDRIadd.Size = New System.Drawing.Size(24, 24)
         Me.BtDRIadd.TabIndex = 1
-        Me.BtDRIadd.UseVisualStyleBackColor = True
+        Me.BtDRIadd.UseVisualStyleBackColor = true
         '
         'GrAux
         '
-        Me.GrAux.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.GrAux.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.GrAux.Controls.Add(Me.LvAux)
         Me.GrAux.Location = New System.Drawing.Point(12, 114)
         Me.GrAux.Name = "GrAux"
         Me.GrAux.Size = New System.Drawing.Size(515, 140)
         Me.GrAux.TabIndex = 9
-        Me.GrAux.TabStop = False
+        Me.GrAux.TabStop = false
         Me.GrAux.Text = "Auxiliaries"
         '
         'LvAux
         '
-        Me.LvAux.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
-            Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.LvAux.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom)  _
+            Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.LvAux.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader4, Me.ColumnHeader5, Me.ColumnHeader6})
-        Me.LvAux.FullRowSelect = True
-        Me.LvAux.GridLines = True
-        Me.LvAux.HideSelection = False
+        Me.LvAux.FullRowSelect = true
+        Me.LvAux.GridLines = true
+        Me.LvAux.HideSelection = false
         Me.LvAux.Location = New System.Drawing.Point(4, 19)
-        Me.LvAux.MultiSelect = False
+        Me.LvAux.MultiSelect = false
         Me.LvAux.Name = "LvAux"
         Me.LvAux.Size = New System.Drawing.Size(503, 115)
         Me.LvAux.TabIndex = 0
-        Me.LvAux.TabStop = False
-        Me.LvAux.UseCompatibleStateImageBehavior = False
+        Me.LvAux.TabStop = false
+        Me.LvAux.UseCompatibleStateImageBehavior = false
         Me.LvAux.View = System.Windows.Forms.View.Details
         '
         'ColumnHeader4
@@ -208,8 +211,8 @@ Partial Class VectoEPTPJobForm
         '
         'TbVEH
         '
-        Me.TbVEH.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.TbVEH.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.TbVEH.Location = New System.Drawing.Point(90, 86)
         Me.TbVEH.Name = "TbVEH"
         Me.TbVEH.Size = New System.Drawing.Size(411, 20)
@@ -217,14 +220,14 @@ Partial Class VectoEPTPJobForm
         '
         'ButtonVEH
         '
-        Me.ButtonVEH.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
-        Me.ButtonVEH.Image = CType(resources.GetObject("ButtonVEH.Image"), System.Drawing.Image)
+        Me.ButtonVEH.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+        Me.ButtonVEH.Image = CType(resources.GetObject("ButtonVEH.Image"),System.Drawing.Image)
         Me.ButtonVEH.Location = New System.Drawing.Point(502, 84)
         Me.ButtonVEH.Name = "ButtonVEH"
         Me.ButtonVEH.Size = New System.Drawing.Size(24, 24)
         Me.ButtonVEH.TabIndex = 2
-        Me.ButtonVEH.TabStop = False
-        Me.ButtonVEH.UseVisualStyleBackColor = True
+        Me.ButtonVEH.TabStop = false
+        Me.ButtonVEH.UseVisualStyleBackColor = true
         '
         'StatusStrip1
         '
@@ -232,7 +235,7 @@ Partial Class VectoEPTPJobForm
         Me.StatusStrip1.Location = New System.Drawing.Point(0, 568)
         Me.StatusStrip1.Name = "StatusStrip1"
         Me.StatusStrip1.Size = New System.Drawing.Size(944, 22)
-        Me.StatusStrip1.SizingGrip = False
+        Me.StatusStrip1.SizingGrip = false
         Me.StatusStrip1.TabIndex = 6
         Me.StatusStrip1.Text = "StatusStrip1"
         '
@@ -244,24 +247,24 @@ Partial Class VectoEPTPJobForm
         '
         'ButOK
         '
-        Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.ButOK.Location = New System.Drawing.Point(778, 541)
         Me.ButOK.Name = "ButOK"
         Me.ButOK.Size = New System.Drawing.Size(75, 23)
         Me.ButOK.TabIndex = 0
         Me.ButOK.Text = "Save"
-        Me.ButOK.UseVisualStyleBackColor = True
+        Me.ButOK.UseVisualStyleBackColor = true
         '
         'ButCancel
         '
-        Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.ButCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
         Me.ButCancel.Location = New System.Drawing.Point(859, 541)
         Me.ButCancel.Name = "ButCancel"
         Me.ButCancel.Size = New System.Drawing.Size(75, 23)
         Me.ButCancel.TabIndex = 1
         Me.ButCancel.Text = "Cancel"
-        Me.ButCancel.UseVisualStyleBackColor = True
+        Me.ButCancel.UseVisualStyleBackColor = true
         '
         'ToolStrip1
         '
@@ -344,21 +347,21 @@ Partial Class VectoEPTPJobForm
         '
         'PictureBox1
         '
-        Me.PictureBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
-            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.PictureBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.PictureBox1.BackColor = System.Drawing.Color.White
         Me.PictureBox1.Image = Global.TUGraz.VECTO.My.Resources.Resources.VECTO_VECTO
         Me.PictureBox1.Location = New System.Drawing.Point(0, 28)
         Me.PictureBox1.Name = "PictureBox1"
         Me.PictureBox1.Size = New System.Drawing.Size(944, 40)
         Me.PictureBox1.TabIndex = 21
-        Me.PictureBox1.TabStop = False
+        Me.PictureBox1.TabStop = false
         '
         'CmOpenFile
         '
         Me.CmOpenFile.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenWithToolStripMenuItem, Me.ShowInFolderToolStripMenuItem})
         Me.CmOpenFile.Name = "CmOpenFile"
-        Me.CmOpenFile.ShowImageMargin = False
+        Me.CmOpenFile.ShowImageMargin = false
         Me.CmOpenFile.Size = New System.Drawing.Size(128, 48)
         '
         'OpenWithToolStripMenuItem
@@ -382,7 +385,7 @@ Partial Class VectoEPTPJobForm
         Me.PicVehicle.Size = New System.Drawing.Size(300, 88)
         Me.PicVehicle.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage
         Me.PicVehicle.TabIndex = 36
-        Me.PicVehicle.TabStop = False
+        Me.PicVehicle.TabStop = false
         '
         'PicBox
         '
@@ -392,13 +395,13 @@ Partial Class VectoEPTPJobForm
         Me.PicBox.Name = "PicBox"
         Me.PicBox.Size = New System.Drawing.Size(390, 296)
         Me.PicBox.TabIndex = 36
-        Me.PicBox.TabStop = False
+        Me.PicBox.TabStop = false
         '
         'TbEngTxt
         '
         Me.TbEngTxt.Location = New System.Drawing.Point(542, 171)
         Me.TbEngTxt.Name = "TbEngTxt"
-        Me.TbEngTxt.ReadOnly = True
+        Me.TbEngTxt.ReadOnly = true
         Me.TbEngTxt.Size = New System.Drawing.Size(390, 20)
         Me.TbEngTxt.TabIndex = 6
         '
@@ -406,7 +409,7 @@ Partial Class VectoEPTPJobForm
         '
         Me.TbVehCat.Location = New System.Drawing.Point(848, 84)
         Me.TbVehCat.Name = "TbVehCat"
-        Me.TbVehCat.ReadOnly = True
+        Me.TbVehCat.ReadOnly = true
         Me.TbVehCat.Size = New System.Drawing.Size(87, 20)
         Me.TbVehCat.TabIndex = 2
         '
@@ -414,7 +417,7 @@ Partial Class VectoEPTPJobForm
         '
         Me.TbAxleConf.Location = New System.Drawing.Point(904, 113)
         Me.TbAxleConf.Name = "TbAxleConf"
-        Me.TbAxleConf.ReadOnly = True
+        Me.TbAxleConf.ReadOnly = true
         Me.TbAxleConf.Size = New System.Drawing.Size(31, 20)
         Me.TbAxleConf.TabIndex = 4
         '
@@ -422,7 +425,7 @@ Partial Class VectoEPTPJobForm
         '
         Me.TbHVCclass.Location = New System.Drawing.Point(848, 142)
         Me.TbHVCclass.Name = "TbHVCclass"
-        Me.TbHVCclass.ReadOnly = True
+        Me.TbHVCclass.ReadOnly = true
         Me.TbHVCclass.Size = New System.Drawing.Size(87, 20)
         Me.TbHVCclass.TabIndex = 5
         '
@@ -430,7 +433,7 @@ Partial Class VectoEPTPJobForm
         '
         Me.TbGbxTxt.Location = New System.Drawing.Point(542, 194)
         Me.TbGbxTxt.Name = "TbGbxTxt"
-        Me.TbGbxTxt.ReadOnly = True
+        Me.TbGbxTxt.ReadOnly = true
         Me.TbGbxTxt.Size = New System.Drawing.Size(390, 20)
         Me.TbGbxTxt.TabIndex = 7
         '
@@ -438,13 +441,13 @@ Partial Class VectoEPTPJobForm
         '
         Me.TbMass.Location = New System.Drawing.Point(848, 113)
         Me.TbMass.Name = "TbMass"
-        Me.TbMass.ReadOnly = True
+        Me.TbMass.ReadOnly = true
         Me.TbMass.Size = New System.Drawing.Size(50, 20)
         Me.TbMass.TabIndex = 3
         '
         'lblEngineCharacteristics
         '
-        Me.lblEngineCharacteristics.AutoSize = True
+        Me.lblEngineCharacteristics.AutoSize = true
         Me.lblEngineCharacteristics.Location = New System.Drawing.Point(542, 518)
         Me.lblEngineCharacteristics.Name = "lblEngineCharacteristics"
         Me.lblEngineCharacteristics.Size = New System.Drawing.Size(0, 13)
@@ -452,17 +455,20 @@ Partial Class VectoEPTPJobForm
         '
         'PictureBox2
         '
-        Me.PictureBox2.Image = CType(resources.GetObject("PictureBox2.Image"), System.Drawing.Image)
-        Me.PictureBox2.InitialImage = CType(resources.GetObject("PictureBox2.InitialImage"), System.Drawing.Image)
+        Me.PictureBox2.Image = Global.TUGraz.VECTO.My.Resources.Resources.P_fan_eqn
+        Me.PictureBox2.InitialImage = CType(resources.GetObject("PictureBox2.InitialImage"),System.Drawing.Image)
         Me.PictureBox2.Location = New System.Drawing.Point(7, 19)
         Me.PictureBox2.Name = "PictureBox2"
         Me.PictureBox2.Size = New System.Drawing.Size(277, 108)
         Me.PictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
         Me.PictureBox2.TabIndex = 38
-        Me.PictureBox2.TabStop = False
+        Me.PictureBox2.TabStop = false
         '
         'GroupBox1
         '
+        Me.GroupBox1.Controls.Add(Me.Label7)
+        Me.GroupBox1.Controls.Add(Me.tbFanDiameter)
+        Me.GroupBox1.Controls.Add(Me.Label6)
         Me.GroupBox1.Controls.Add(Me.tbC3)
         Me.GroupBox1.Controls.Add(Me.Label4)
         Me.GroupBox1.Controls.Add(Me.tbC2)
@@ -474,20 +480,36 @@ Partial Class VectoEPTPJobForm
         Me.GroupBox1.Name = "GroupBox1"
         Me.GroupBox1.Size = New System.Drawing.Size(515, 135)
         Me.GroupBox1.TabIndex = 39
-        Me.GroupBox1.TabStop = False
+        Me.GroupBox1.TabStop = false
         Me.GroupBox1.Text = "Fan Power"
         '
+        'tbFanDiameter
+        '
+        Me.tbFanDiameter.Location = New System.Drawing.Point(371, 29)
+        Me.tbFanDiameter.Name = "tbFanDiameter"
+        Me.tbFanDiameter.Size = New System.Drawing.Size(100, 20)
+        Me.tbFanDiameter.TabIndex = 46
+        '
+        'Label6
+        '
+        Me.Label6.AutoSize = true
+        Me.Label6.Location = New System.Drawing.Point(294, 32)
+        Me.Label6.Name = "Label6"
+        Me.Label6.Size = New System.Drawing.Size(71, 13)
+        Me.Label6.TabIndex = 45
+        Me.Label6.Text = "Fan diameter:"
+        '
         'tbC3
         '
-        Me.tbC3.Location = New System.Drawing.Point(363, 77)
+        Me.tbC3.Location = New System.Drawing.Point(371, 107)
         Me.tbC3.Name = "tbC3"
         Me.tbC3.Size = New System.Drawing.Size(100, 20)
         Me.tbC3.TabIndex = 44
         '
         'Label4
         '
-        Me.Label4.AutoSize = True
-        Me.Label4.Location = New System.Drawing.Point(316, 80)
+        Me.Label4.AutoSize = true
+        Me.Label4.Location = New System.Drawing.Point(342, 110)
         Me.Label4.Name = "Label4"
         Me.Label4.Size = New System.Drawing.Size(23, 13)
         Me.Label4.TabIndex = 43
@@ -495,15 +517,15 @@ Partial Class VectoEPTPJobForm
         '
         'tbC2
         '
-        Me.tbC2.Location = New System.Drawing.Point(363, 51)
+        Me.tbC2.Location = New System.Drawing.Point(371, 81)
         Me.tbC2.Name = "tbC2"
         Me.tbC2.Size = New System.Drawing.Size(100, 20)
         Me.tbC2.TabIndex = 42
         '
         'Label3
         '
-        Me.Label3.AutoSize = True
-        Me.Label3.Location = New System.Drawing.Point(316, 54)
+        Me.Label3.AutoSize = true
+        Me.Label3.Location = New System.Drawing.Point(342, 84)
         Me.Label3.Name = "Label3"
         Me.Label3.Size = New System.Drawing.Size(23, 13)
         Me.Label3.TabIndex = 41
@@ -511,15 +533,15 @@ Partial Class VectoEPTPJobForm
         '
         'tbC1
         '
-        Me.tbC1.Location = New System.Drawing.Point(363, 25)
+        Me.tbC1.Location = New System.Drawing.Point(371, 55)
         Me.tbC1.Name = "tbC1"
         Me.tbC1.Size = New System.Drawing.Size(100, 20)
         Me.tbC1.TabIndex = 40
         '
         'Label1
         '
-        Me.Label1.AutoSize = True
-        Me.Label1.Location = New System.Drawing.Point(316, 28)
+        Me.Label1.AutoSize = true
+        Me.Label1.Location = New System.Drawing.Point(342, 58)
         Me.Label1.Name = "Label1"
         Me.Label1.Size = New System.Drawing.Size(23, 13)
         Me.Label1.TabIndex = 39
@@ -527,17 +549,26 @@ Partial Class VectoEPTPJobForm
         '
         'Label5
         '
-        Me.Label5.AutoSize = True
+        Me.Label5.AutoSize = true
         Me.Label5.Location = New System.Drawing.Point(15, 89)
         Me.Label5.Name = "Label5"
         Me.Label5.Size = New System.Drawing.Size(70, 13)
         Me.Label5.TabIndex = 40
         Me.Label5.Text = "Vehicle XML:"
         '
-        'VectoEPTPJobForm
+        'Label7
+        '
+        Me.Label7.AutoSize = true
+        Me.Label7.Location = New System.Drawing.Point(477, 32)
+        Me.Label7.Name = "Label7"
+        Me.Label7.Size = New System.Drawing.Size(29, 13)
+        Me.Label7.TabIndex = 47
+        Me.Label7.Text = "[mm]"
+        '
+        'VectoVTPJobForm
         '
         Me.AcceptButton = Me.ButOK
-        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
         Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
         Me.CancelButton = Me.ButCancel
         Me.ClientSize = New System.Drawing.Size(944, 590)
@@ -562,29 +593,29 @@ Partial Class VectoEPTPJobForm
         Me.Controls.Add(Me.ButOK)
         Me.Controls.Add(Me.StatusStrip1)
         Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
-        Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
-        Me.MaximizeBox = False
-        Me.Name = "VectoEPTPJobForm"
+        Me.Icon = CType(resources.GetObject("$this.Icon"),System.Drawing.Icon)
+        Me.MaximizeBox = false
+        Me.Name = "VectoVTPJobForm"
         Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
         Me.Text = "Job Editor"
-        Me.GrCycles.ResumeLayout(False)
-        Me.GrCycles.PerformLayout()
-        Me.GrAux.ResumeLayout(False)
-        Me.StatusStrip1.ResumeLayout(False)
-        Me.StatusStrip1.PerformLayout()
-        Me.ToolStrip1.ResumeLayout(False)
-        Me.ToolStrip1.PerformLayout()
-        CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
-        Me.CmOpenFile.ResumeLayout(False)
-        CType(Me.PicVehicle, System.ComponentModel.ISupportInitialize).EndInit()
-        CType(Me.PicBox, System.ComponentModel.ISupportInitialize).EndInit()
-        CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit()
-        Me.GroupBox1.ResumeLayout(False)
-        Me.GroupBox1.PerformLayout()
-        Me.ResumeLayout(False)
-        Me.PerformLayout()
+        Me.GrCycles.ResumeLayout(false)
+        Me.GrCycles.PerformLayout
+        Me.GrAux.ResumeLayout(false)
+        Me.StatusStrip1.ResumeLayout(false)
+        Me.StatusStrip1.PerformLayout
+        Me.ToolStrip1.ResumeLayout(false)
+        Me.ToolStrip1.PerformLayout
+        CType(Me.PictureBox1,System.ComponentModel.ISupportInitialize).EndInit
+        Me.CmOpenFile.ResumeLayout(false)
+        CType(Me.PicVehicle,System.ComponentModel.ISupportInitialize).EndInit
+        CType(Me.PicBox,System.ComponentModel.ISupportInitialize).EndInit
+        CType(Me.PictureBox2,System.ComponentModel.ISupportInitialize).EndInit
+        Me.GroupBox1.ResumeLayout(false)
+        Me.GroupBox1.PerformLayout
+        Me.ResumeLayout(false)
+        Me.PerformLayout
 
-    End Sub
+End Sub
 	Friend WithEvents StatusStrip1 As StatusStrip
 	Friend WithEvents ButtonVEH As Button
 	Friend WithEvents ToolStripStatusLabelGEN As ToolStripStatusLabel
@@ -634,4 +665,7 @@ Partial Class VectoEPTPJobForm
 	Friend WithEvents tbC1 As System.Windows.Forms.TextBox
 	Friend WithEvents Label1 As System.Windows.Forms.Label
 	Friend WithEvents Label5 As System.Windows.Forms.Label
+    Friend WithEvents tbFanDiameter As TextBox
+    Friend WithEvents Label6 As Label
+    Friend WithEvents Label7 As Label
 End Class
diff --git a/VECTO/GUI/VectoEPTPJobForm.resx b/VECTO/GUI/VectoVTPJobForm.resx
similarity index 55%
rename from VECTO/GUI/VectoEPTPJobForm.resx
rename to VECTO/GUI/VectoVTPJobForm.resx
index 391e34605b..772cde37b8 100644
--- a/VECTO/GUI/VectoEPTPJobForm.resx
+++ b/VECTO/GUI/VectoVTPJobForm.resx
@@ -148,264 +148,6 @@
   <metadata name="ToolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>468, 15</value>
   </metadata>
-  <data name="PictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        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
-</value>
-  </data>
   <data name="PictureBox2.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAApMAAACBCAYAAACclzFEAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
diff --git a/VECTO/GUI/VectoEPTPJobForm.vb b/VECTO/GUI/VectoVTPJobForm.vb
similarity index 98%
rename from VECTO/GUI/VectoEPTPJobForm.vb
rename to VECTO/GUI/VectoVTPJobForm.vb
index 6f19957504..5831b3d04b 100644
--- a/VECTO/GUI/VectoEPTPJobForm.vb
+++ b/VECTO/GUI/VectoVTPJobForm.vb
@@ -34,7 +34,7 @@ Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 ''' Job Editor. Create/Edit VECTO job files (.vecto)
 ''' </summary>
 ''' <remarks></remarks>
-Public Class VectoEPTPJobForm
+Public Class VectoVTPJobForm
     Public VectoFile As String
     Private _changed As Boolean = False
 
@@ -167,11 +167,11 @@ Public Class VectoEPTPJobForm
         VectoNew()
 
         'Read GEN
-        Dim vectoJob As IEPTPJobInputData = Nothing
-        Dim inputData As IEPTPInputDataProvider = Nothing
+        Dim vectoJob As IVTPJobInputData = Nothing
+        Dim inputData As IVTPInputDataProvider = Nothing
         Try
             inputData = TryCast(JSONInputDataFactory.ReadComponentData(file),
-                                IEPTPInputDataProvider)
+                                IVTPInputDataProvider)
             vectoJob = inputData.JobInputData()
         Catch ex As Exception
             MsgBox("Failed to read Job-File" + Environment.NewLine + ex.Message)
@@ -212,6 +212,7 @@ Public Class VectoEPTPJobForm
         If (coefficients.Length >= 3) Then
             tbC3.Text = coefficients(2).ToGUIFormat()
         End If
+        tbFanDiameter.Text = (vectoJob.FanDiameter.Value() * 1000).ToGUIFormat()
         Try
             Dim sb As ICycleData
             For Each sb In vectoJob.Cycles
@@ -266,7 +267,7 @@ Public Class VectoEPTPJobForm
         Dim message As String = String.Empty
 
 
-        Dim vectoJob As VectoEPTPJob = New VectoEPTPJob
+        Dim vectoJob As VectoVTPJob = New VectoVTPJob
         vectoJob.FilePath = file
 
         'Files ------------------------------------------------- -----------------
@@ -284,6 +285,7 @@ Public Class VectoEPTPJobForm
             tbC2.Text.ToDouble(0),
             tbC3.Text.ToDouble(0)    
         }
+        vectoJob.FanDiameter = (tbFanDiameter.Text.ToDouble(0) / 1000).SI(of Meter)
 
         'SAVE
         If Not vectoJob.SaveFile Then
@@ -704,6 +706,8 @@ Public Class VectoEPTPJobForm
 
 	Private Sub LvAux_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LvAux.SelectedIndexChanged
 	End Sub
+
+   
 End Class
 
 
diff --git a/VECTO/Input Files/VectoEPTPJob.vb b/VECTO/Input Files/VectoEPTPJob.vb
index 8611f5bfb4..9028c62091 100644
--- a/VECTO/Input Files/VectoEPTPJob.vb	
+++ b/VECTO/Input Files/VectoEPTPJob.vb	
@@ -15,9 +15,9 @@ Imports TUGraz.VectoCore.InputData.Impl
 Imports TUGraz.VectoCore.Models.Declaration
 Imports TUGraz.VectoCore.Utils
 
-<CustomValidation(GetType(VectoEPTPJob), "ValidateJob")>
-Public Class VectoEPTPJob
-	Implements IEPTPInputDataProvider, IEPTPJobInputData
+<CustomValidation(GetType(VectoVTPJob), "ValidateJob")>
+Public Class VectoVTPJob
+	Implements IVTPInputDataProvider, IVTPJobInputData
 
 	Private _sFilePath As String
 	Private _myPath As String
@@ -26,6 +26,7 @@ Public Class VectoEPTPJob
 
     Public ReadOnly CycleFiles As List(Of SubPath)
     Public FanCoefficients As Double()
+    Private _fanDiameter As Meter
 
 
     Public Sub New()
@@ -85,7 +86,7 @@ Public Class VectoEPTPJob
 	End Function
 
 	' ReSharper disable once UnusedMember.Global -- used by Validation
-	Public Shared Function ValidateJob(vectoJob As VectoEPTPJob, validationContext As ValidationContext) As ValidationResult
+	Public Shared Function ValidateJob(vectoJob As VectoVTPJob, validationContext As ValidationContext) As ValidationResult
 		Dim modeService As VectoValidationModeServiceContainer =
 				TryCast(validationContext.GetService(GetType(VectoValidationModeServiceContainer)), 
 						VectoValidationModeServiceContainer)
@@ -94,13 +95,13 @@ Public Class VectoEPTPJob
 		Return ValidateVehicleJob(vectoJob, mode)
 	End Function
 
-	Private Shared Function ValidateVehicleJob(vectoJob As VectoEPTPJob, mode As ExecutionMode) As ValidationResult
+	Private Shared Function ValidateVehicleJob(vectoJob As VectoVTPJob, mode As ExecutionMode) As ValidationResult
 
         ' TODO!!
 
     End Function
 
-	Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IEPTPJobInputData.Vehicle
+	Public ReadOnly Property Vehicle As IVehicleDeclarationInputData Implements IVTPJobInputData.Vehicle
 		Get
 			If Not File.Exists(_vehicleFile.FullPath) Then Return Nothing
             'Return New JSONComponentInputData(_vehicleFile.FullPath).JobInputData.Vehicle
@@ -108,7 +109,7 @@ Public Class VectoEPTPJob
         End Get
 	End Property
 
-	Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IEPTPJobInputData.Cycles
+	Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IVTPJobInputData.Cycles
 		Get
 			Dim retVal As ICycleData() = New ICycleData(CycleFiles.Count - 1) {}
 			Dim i As Integer = 0
@@ -137,19 +138,28 @@ Public Class VectoEPTPJob
 		End Get
 	End Property
 
-    Public ReadOnly Property FanPowerCoefficents As IEnumerable(Of Double) Implements IEPTPJobInputData.FanPowerCoefficents
+    Public ReadOnly Property FanPowerCoefficents As IEnumerable(Of Double) Implements IVTPJobInputData.FanPowerCoefficents
         Get
             Return FanCoefficients
         End Get
     End Property
 
-    Public ReadOnly Property SavedInDeclarationMode As Boolean Implements IEPTPJobInputData.SavedInDeclarationMode
+    Public ReadOnly Property SavedInDeclarationMode As Boolean Implements IVTPJobInputData.SavedInDeclarationMode
         Get
             Return False
         End Get
     End Property
 
-    Public ReadOnly Property JobInputData As IEPTPJobInputData Implements IEPTPInputDataProvider.JobInputData
+    Public Property FanDiameter As Meter Implements IVTPJobInputData.FanDiameter
+        Get
+            Return _fanDiameter
+        End Get
+        Set
+            _fanDiameter = value
+        End Set
+    End Property
+
+    Public ReadOnly Property JobInputData As IVTPJobInputData Implements IVTPInputDataProvider.JobInputData
         Get
             Return Me
         End Get
diff --git a/VECTO/OutputData/JSONFileWriter.vb b/VECTO/OutputData/JSONFileWriter.vb
index 4e277f47ba..121574a0cd 100644
--- a/VECTO/OutputData/JSONFileWriter.vb
+++ b/VECTO/OutputData/JSONFileWriter.vb
@@ -352,17 +352,18 @@ Public Class JSONFileWriter
 		WriteFile(header, body, filename)
 	End Sub
 
-	Public Sub SaveJob(input As IEPTPInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob
+	Public Sub SaveJob(input As IVTPInputDataProvider, filename As String) Implements IOutputFileWriter.SaveJob
 		Dim basePath As String = Path.GetDirectoryName(filename)
 		'Header
 		Dim header As Dictionary(Of String, Object) = GetHeader(VectoJobFormatVersion)
 
 		'Body
 		Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object)
-        Dim job As IEPTPJobInputData = input.JobInputData
+        Dim job As IVTPJobInputData = input.JobInputData
         body.Add("SavedInDeclMode", False)
         body.Add("DeclarationVehicle", GetRelativePath(job.Vehicle.Source, Path.GetDirectoryName(filename)))
         body.Add("FanPowerCoefficients", job.FanPowerCoefficents)
+        body.Add("FanDiameter", job.FanDiameter.Value())
         body.Add("Cycles",
                  job.Cycles.Select(Function(x) GetRelativePath(x.CycleData.Source, Path.GetDirectoryName(filename))).ToArray())
 
diff --git a/VECTO/Resources/P_fan_eqn.png b/VECTO/Resources/P_fan_eqn.png
index 25ccb5e969f5254a29338a6ced69429aaf8cfc33..d188621db3bf03647d9e8a71cd3eee181c7b8ff2 100644
GIT binary patch
literal 9516
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

literal 8590
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
KNYzQ0hW-!9C26Vv

diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj
index c549ca0e9c..62f7c9c1f8 100644
--- a/VECTO/VECTO.vbproj
+++ b/VECTO/VECTO.vbproj
@@ -187,10 +187,10 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="ApplicationEvents.vb" />
-    <Compile Include="GUI\VectoEPTPJobForm.Designer.vb">
-      <DependentUpon>VectoEPTPJobForm.vb</DependentUpon>
+    <Compile Include="GUI\VectoVTPJobForm.Designer.vb">
+      <DependentUpon>VectoVTPJobForm.vb</DependentUpon>
     </Compile>
-    <Compile Include="GUI\VectoEPTPJobForm.vb">
+    <Compile Include="GUI\VectoVTPJobForm.vb">
       <SubType>Form</SubType>
     </Compile>
     <Compile Include="Input Files\BrowserUtils.vb" />
@@ -358,8 +358,8 @@
     <EmbeddedResource Include="GUI\JiraDialog.resx">
       <DependentUpon>JiraDialog.vb</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="GUI\VectoEPTPJobForm.resx">
-      <DependentUpon>VectoEPTPJobForm.vb</DependentUpon>
+    <EmbeddedResource Include="GUI\VectoVTPJobForm.resx">
+      <DependentUpon>VectoVTPJobForm.vb</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="GUI\VehicleTorqueLimitsDialog.resx">
@@ -540,8 +540,6 @@
     <Content Include="Resources\F_VECTO.ico" />
     <Content Include="Resources\F_VEH.ico" />
     <Content Include="Resources\Graph.ico" />
-    <None Include="Resources\P_fan_Equation.bmp" />
-    <None Include="Resources\P_fan_units.png" />
     <None Include="Resources\P_fan_eqn.png" />
     <Content Include="Resources\Status-dialog-password-icon.ico" />
     <EmbeddedResource Include="Resources\Undef.png" />
diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
index 40e0a9ebda..c0c5c370a0 100644
--- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
@@ -283,7 +283,7 @@ namespace TUGraz.VectoCommon.InputData
 	{
 		//new IStartStopEngineeringInputData StartStop { get; }
 
-		new IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll { get; }
+		IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll { get; }
 
 		/// <summary>
 		/// P009; P033, P034, P035
diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
index 54c8817629..eff5db7421 100644
--- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
+++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
@@ -31,6 +31,7 @@
 
 using System.Collections.Generic;
 using System.Xml.Linq;
+using TUGraz.VectoCommon.Utils;
 
 namespace TUGraz.VectoCommon.InputData
 {
@@ -50,12 +51,12 @@ namespace TUGraz.VectoCommon.InputData
 		IDriverEngineeringInputData DriverInputData { get; }
 	}
 
-	public interface IEPTPInputDataProvider : IInputDataProvider
+	public interface IVTPInputDataProvider : IInputDataProvider
 	{
-		IEPTPJobInputData JobInputData { get; }
+		IVTPJobInputData JobInputData { get; }
 	}
 
-	public interface IEPTPJobInputData
+	public interface IVTPJobInputData
 	{
 		IVehicleDeclarationInputData Vehicle { get; }
 
@@ -63,5 +64,6 @@ namespace TUGraz.VectoCommon.InputData
 
 		IEnumerable<double> FanPowerCoefficents { get; }
         bool SavedInDeclarationMode { get; }
-    }
+		Meter FanDiameter { get; }
+	}
 }
diff --git a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs
index 3787810749..b98e453798 100644
--- a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs
+++ b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs
@@ -45,7 +45,7 @@ namespace TUGraz.VectoCommon.OutputData
 
 		void SaveJob(IEngineeringInputDataProvider input, string filename);
 
-		void SaveJob(IEPTPInputDataProvider input, string filename);
+		void SaveJob(IVTPInputDataProvider input, string filename);
 
 		void ExportJob(IEngineeringInputDataProvider input, string filename, bool separateFiles);
 	}
diff --git a/VectoCommon/VectoHashing/IVectoHash.cs b/VectoCommon/VectoHashing/IVectoHash.cs
index 29bc90029b..e41eb4599a 100644
--- a/VectoCommon/VectoHashing/IVectoHash.cs
+++ b/VectoCommon/VectoHashing/IVectoHash.cs
@@ -106,7 +106,7 @@ namespace TUGraz.VectoHashing
 
 
 		/// <summary>
-		// Computes the hash-value of the top-level Data element (or vehicle)
+		/// Computes the hash-value of the top-level Data element (or vehicle)
 		/// If the canoonicalizationMethods is null the canonicalizationMethods from 
 		/// the signature element are read if available or the default canonicalization is applied
 		/// If the digestMethod is null the digestMethod from the signature element is read if 
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index cbe40440f2..349a5fc15f 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -50,625 +50,628 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.JSON
 {
-    public abstract class JSONFile : LoggingObject
-    {
-        public const string MissingFileSuffix = "   -- (MISSING!)";
-
-        private readonly string _sourceFile;
-
-        protected readonly JObject Body;
-
-        protected JSONFile(JObject data, string filename, bool tolerateMissing = false)
-        {
-            //var header = (JObject)data.GetEx(JsonKeys.JsonHeader);
-            Body = (JObject)data.GetEx(JsonKeys.JsonBody);
-            _sourceFile = Path.GetFullPath(filename);
-            TolerateMissing = tolerateMissing;
-        }
-
-        protected bool TolerateMissing { get; set; }
-
-        public DataSourceType SourceType
-        {
-            get { return DataSourceType.JSONFile; }
-        }
-
-        public string Source
-        {
-            get { return _sourceFile; }
-        }
-
-        public bool SavedInDeclarationMode
-        {
-            get { return Body.GetEx(JsonKeys.SavedInDeclMode).Value<bool>(); }
-        }
-
-        internal string BasePath
-        {
-            get { return Path.GetDirectoryName(_sourceFile); }
-        }
-
-        protected TableData ReadTableData(string filename, string tableType, bool required = true)
-        {
-            if (!EmptyOrInvalidFileName(filename) && File.Exists(Path.Combine(BasePath, filename))) {
-                try {
-                    return VectoCSVFile.Read(Path.Combine(BasePath, filename), true);
-                } catch (Exception e) {
-                    Log.Warn("Failed to read file {0} {1}", Path.Combine(BasePath, filename), tableType);
-                    throw new VectoException("Failed to read file for {0}: {1}", e, tableType, filename);
-                }
-            }
-            if (required) {
-                throw new VectoException("Invalid filename for {0}: {1}", tableType, filename);
-            }
-            return null;
-        }
-
-        internal static bool EmptyOrInvalidFileName(string filename)
-        {
-            return filename == null || !filename.Any() ||
-                   filename.Equals("<NOFILE>", StringComparison.InvariantCultureIgnoreCase)
-                   || filename.Equals("-");
-        }
-
-        public static JObject GetDummyJSONStructure()
-        {
-            return JObject.FromObject(new Dictionary<string, object>() {
-                { JsonKeys.JsonHeader, new object() },
-                { JsonKeys.JsonBody, new object() }
-            });
-        }
-    }
-
-    /// <summary>
-    /// Class for reading json data of vecto-job-file.
-    /// Fileformat: .vecto
-    /// </summary>
-    public class JSONInputDataV2 : JSONFile, IEngineeringInputDataProvider, IDeclarationInputDataProvider,
-        IEngineeringJobInputData, IDriverEngineeringInputData, IAuxiliariesEngineeringInputData,
-        IAuxiliariesDeclarationInputData, IJSONVehicleComponents
-    {
-        public JSONInputDataV2(JObject data, string filename, bool tolerateMissing = false)
-            : base(data, filename, tolerateMissing)
-        {
-            _jobname = Path.GetFileNameWithoutExtension(filename);
-
-            Engine = ReadEngine();
-
-            if (Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>()) {
-                return;
-            }
-
-            Gearbox = ReadGearbox();
-            AxleGear = Gearbox as IAxleGearInputData;
-            TorqueConverter = Gearbox as ITorqueConverterEngineeringInputData;
-
-            VehicleData = ReadVehicle();
-        }
-
-        public IGearboxEngineeringInputData Gearbox { get; internal set; }
-        public IAxleGearInputData AxleGear { get; internal set; }
-        public ITorqueConverterEngineeringInputData TorqueConverter { get; internal set; }
-        public IEngineEngineeringInputData Engine { get; internal set; }
-
-
-        protected readonly IVehicleEngineeringInputData VehicleData;
-
-        private readonly string _jobname;
-
-
-        public IAuxiliariesEngineeringInputData EngineeringAuxiliaries
-        {
-            get { return this; }
-        }
-
-        public IAuxiliariesDeclarationInputData DeclarationAuxiliaries
-        {
-            get { return this; }
-        }
-
-        private IVehicleEngineeringInputData ReadVehicle()
-        {
-            try {
-                var vehicleFile = Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>();
-                return JSONInputDataFactory.ReadJsonVehicle(
-                    Path.Combine(BasePath, vehicleFile), this);
-            } catch (Exception e) {
-                if (!TolerateMissing) {
-                    throw new VectoException("JobFile: Failed to read Vehicle file '{0}': {1}", e,
-                        Body[JsonKeys.Vehicle_VehicleFile],
-                        e.Message);
-                }
-                return new JSONVehicleDataV7(GetDummyJSONStructure(),
-                    Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>()) +
-                    MissingFileSuffix, this);
-            }
-        }
-
-        private IGearboxEngineeringInputData ReadGearbox()
-        {
-            try {
-                var gearboxFile = Body.GetEx(JsonKeys.Vehicle_GearboxFile).Value<string>();
-
-                return JSONInputDataFactory.ReadGearbox(Path.Combine(BasePath, gearboxFile));
-            } catch (Exception e) {
-                if (!TolerateMissing) {
-                    throw new VectoException("JobFile: Failed to read Gearbox file '{0}': {1}", e,
-                        Body[JsonKeys.Vehicle_GearboxFile],
-                        e.Message);
-                }
-                return new JSONGearboxDataV6(GetDummyJSONStructure(),
-                    Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_GearboxFile).Value<string>()) +
-                    MissingFileSuffix);
-            }
-        }
-
-        private IEngineEngineeringInputData ReadEngine()
-        {
-            try {
-                return JSONInputDataFactory.ReadEngine(
-                    Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()));
-            } catch (Exception e) {
-                if (!TolerateMissing) {
-                    throw new VectoException("JobFile: Failed to read Engine file '{0}': {1}", e,
-                        Body[JsonKeys.Vehicle_EngineFile],
-                        e.Message);
-                }
-
-                return
-                    new JSONEngineDataV3(GetDummyJSONStructure(),
-                        Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()) +
-                        MissingFileSuffix);
-            }
-        }
-
-        #region IInputDataProvider
-
-        IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
-        {
-            get { return VehicleInputData; }
-        }
-
-        public virtual IEngineeringJobInputData JobInputData
-        {
-            get { return this; }
-        }
-
-        public XElement XMLHash
-        {
-            get { return new XElement(XMLNames.DI_Signature); }
-        }
-
-        IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData
-        {
-            get { return this; }
-        }
-
-        public virtual IVehicleEngineeringInputData VehicleInputData
-        {
-            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
-                "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-            get
-            {
-                if (VehicleData == null) {
-                    throw new InvalidFileFormatException("VehicleData not found ");
-                }
-                return VehicleData;
-            }
-        }
-
-        public virtual IEngineEngineeringInputData EngineOnly
-        {
-            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
-                "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-            get
-            {
-                if (Engine == null) {
-                    throw new InvalidFileFormatException("EngineData not found");
-                }
-                return Engine;
-            }
-        }
-
-        IDriverEngineeringInputData IEngineeringInputDataProvider.DriverInputData
-        {
-            get { return this; }
-        }
-
-        #endregion
-
-        #region IJobInputData
-
-        public virtual IVehicleEngineeringInputData Vehicle
-        {
-            get { return VehicleData; }
-        }
-
-        public virtual IList<ICycleData> Cycles
-        {
-            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
-                "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-            get
-            {
-                var retVal = new List<ICycleData>();
-                if (Body[JsonKeys.Job_Cycles] == null) {
-                    return retVal;
-                }
-                foreach (var cycle in Body.GetEx(JsonKeys.Job_Cycles)) {
-                    //.Select(cycle => 
-                    var cycleFile = Path.Combine(BasePath, cycle.Value<string>());
-                    TableData cycleData;
-                    if (File.Exists(cycleFile)) {
-                        cycleData = VectoCSVFile.Read(cycleFile);
-                    } else {
-                        try {
-                            var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." +
-                                               cycle.Value<string>() + Constants.FileExtensions.CycleFile;
-                            cycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName),
-                                source: resourceName);
-                        } catch (Exception e) {
-                            Log.Debug("Driving Cycle could not be read: " + cycleFile);
-                            if (!TolerateMissing) {
-                                throw new VectoException("Driving Cycle could not be read: " + cycleFile, e);
-                            }
-                            cycleData = new TableData(cycleFile + MissingFileSuffix, DataSourceType.Missing);
-                        }
-                    }
-                    retVal.Add(new CycleInputData() {
-                        Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()),
-                        CycleData = cycleData
-                    });
-                }
-                return retVal;
-            }
-        }
-
-        public virtual bool EngineOnlyMode
-        {
-            get { return Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>(); }
-        }
-
-        public virtual string JobName
-        {
-            get { return _jobname; }
-        }
-
-        #endregion
-
-        #region DriverInputData
-
-        public virtual ILookaheadCoastingInputData Lookahead
-        {
-            get
-            {
-                if (Body[JsonKeys.DriverData_LookaheadCoasting] == null) {
-                    return null;
-                }
-
-                var lac = Body.GetEx(JsonKeys.DriverData_LookaheadCoasting);
-                var distanceScalingFactor = lac["PreviewDistanceFactor"] != null
-                    ? lac.GetEx<double>("PreviewDistanceFactor")
-                    : DeclarationData.Driver.LookAhead.LookAheadDistanceFactor;
-                var lacDfOffset = lac["DF_offset"] != null
-                    ? lac.GetEx<double>("DF_offset")
-                    : DeclarationData.Driver.LookAhead.DecisionFactorCoastingOffset;
-                var lacDfScaling = lac["DF_scaling"] != null
-                    ? lac.GetEx<double>("DF_scaling")
-                    : DeclarationData.Driver.LookAhead.DecisionFactorCoastingScaling;
-                var speedDependentLookup = GetSpeedDependentLookupTable(lac);
-                var velocityDropLookup = GetVelocityDropLookupTable(lac);
-                var minSpeed = lac["MinSpeed"] != null
-                    ? lac.GetEx<double>(JsonKeys.DriverData_Lookahead_MinSpeed).KMPHtoMeterPerSecond()
-                    : DeclarationData.Driver.LookAhead.MinimumSpeed;
-                return new LookAheadCoastingInputData() {
-                    Enabled = lac.GetEx<bool>(JsonKeys.DriverData_Lookahead_Enabled),
-                    //Deceleration = lac.GetEx<double>(JsonKeys.DriverData_Lookahead_Deceleration).SI<MeterPerSquareSecond>(),
-                    MinSpeed = minSpeed,
-                    LookaheadDistanceFactor = distanceScalingFactor,
-                    CoastingDecisionFactorOffset = lacDfOffset,
-                    CoastingDecisionFactorScaling = lacDfScaling,
-                    CoastingDecisionFactorTargetSpeedLookup = speedDependentLookup,
-                    CoastingDecisionFactorVelocityDropLookup = velocityDropLookup
-                };
-            }
-        }
-
-        private TableData GetVelocityDropLookupTable(JToken lac)
-        {
-            if (lac["Df_velocityDropLookup"] == null ||
-                string.IsNullOrWhiteSpace(lac["Df_velocityDropLookup"].Value<string>())) {
-                return null;
-            }
-            try {
-                return ReadTableData(lac.GetEx<string>("Df_velocityDropLookup"),
-                    "Lookahead Coasting Decisionfactor - Velocity drop");
-            } catch (Exception) {
-                if (TolerateMissing) {
-                    return
-                        new TableData(
-                            Path.Combine(BasePath, lac["Df_velocityDropLookup"].Value<string>()) + MissingFileSuffix,
-                            DataSourceType.Missing);
-                }
-            }
-            return null;
-        }
-
-        private TableData GetSpeedDependentLookupTable(JToken lac)
-        {
-            if (lac["DF_targetSpeedLookup"] == null ||
-                string.IsNullOrWhiteSpace(lac["DF_targetSpeedLookup"].Value<string>())) {
-                return null;
-            }
-            try {
-                return ReadTableData(lac.GetEx<string>("DF_targetSpeedLookup"),
-                    "Lookahead Coasting Decisionfactor - Target speed");
-            } catch (Exception) {
-                if (TolerateMissing) {
-                    return
-                        new TableData(
-                            Path.Combine(BasePath, lac["DF_targetSpeedLookup"].Value<string>()) + MissingFileSuffix,
-                            DataSourceType.Missing);
-                }
-            }
-            return null;
-        }
-
-        public virtual IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll
-        {
-            get
-            {
-                var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll);
-                return new OverSpeedEcoRollInputData() {
-                    Mode = DriverData.ParseDriverMode(
-                        overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode)),
-                    MinSpeed = overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_MinSpeed)
-                        .KMPHtoMeterPerSecond(),
-                    OverSpeed = overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_OverSpeed)
-                        .KMPHtoMeterPerSecond(),
-                    UnderSpeed =
-                        overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_UnderSpeed).KMPHtoMeterPerSecond()
-                };
-            }
-        }
-
-        public virtual TableData AccelerationCurve
-        {
-            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
-                "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
-            get
-            {
-                var acceleration = Body[JsonKeys.DriverData_AccelerationCurve];
-                if (acceleration == null || EmptyOrInvalidFileName(acceleration.Value<string>())) {
-                    return null;
-                    //					throw new VectoException("AccelerationCurve (VACC) required");
-                }
-                try {
-                    return ReadTableData(acceleration.Value<string>(), "DriverAccelerationCurve");
-                } catch (VectoException e) {
-                    Log.Warn("Could not find file for acceleration curve. Trying lookup in declaration data.");
-                    try {
-                        var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".VACC." +
-                                           acceleration.Value<string>() +
-                                           Constants.FileExtensions.DriverAccelerationCurve;
-                        return VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName);
-                    } catch (Exception) {
-                        if (!TolerateMissing) {
-                            throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e);
-                        }
-                        return new TableData(Path.Combine(BasePath, acceleration.Value<string>()) + MissingFileSuffix,
-                            DataSourceType.Missing);
-                    }
-                }
-            }
-        }
-
-        #endregion
-
-        #region IAuxiliariesEngineeringInputData
-
-        IList<IAuxiliaryEngineeringInputData> IAuxiliariesEngineeringInputData.Auxiliaries
-        {
-            get { return AuxData().Cast<IAuxiliaryEngineeringInputData>().ToList(); }
-        }
-
-        IList<IAuxiliaryDeclarationInputData> IAuxiliariesDeclarationInputData.Auxiliaries
-        {
-            get { return AuxData().Cast<IAuxiliaryDeclarationInputData>().ToList(); }
-        }
-
-        protected virtual IList<AuxiliaryDataInputData> AuxData()
-        {
-            var retVal = new List<AuxiliaryDataInputData>();
-            foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
-                var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
-
-                var auxData = new AuxiliaryDataInputData {
-                    ID = aux.GetEx<string>("ID"),
-                    Type = type,
-                    Technology = new List<string>(),
-                };
-                var tech = aux.GetEx<string>("Technology");
-
-                if (auxData.Type == AuxiliaryType.ElectricSystem) {
-                    if (aux["TechList"] == null || aux["TechList"].Any()) {
-                        auxData.Technology.Add("Standard technology");
-                    } else {
-                        auxData.Technology.Add("Standard technology - LED headlights, all");
-                    }
-                }
-
-                if (auxData.Type == AuxiliaryType.SteeringPump) {
-                    auxData.Technology.Add(tech);
-                }
-
-                if (auxData.Type == AuxiliaryType.Fan) {
-                    auxData.Technology.Add(MapLegacyFanTechnologies(tech));
-                }
-
-                var auxFile = aux["Path"];
-                retVal.Add(auxData);
-
-                if (auxFile == null || EmptyOrInvalidFileName(auxFile.Value<string>())) {
-                    continue;
-                }
-
-                AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData,
-                    Path.Combine(BasePath, auxFile.Value<string>()));
-            }
-            return retVal;
-        }
-
-        private static string MapLegacyFanTechnologies(string tech)
-        {
-            string newTech;
-            switch (tech) {
-                case "Crankshaft mounted - Electronically controlled visco clutch (Default)":
-                    newTech = "Crankshaft mounted - Electronically controlled visco clutch";
-                    break;
-                case "Crankshaft mounted - On/Off clutch":
-                    newTech = "Crankshaft mounted - On/off clutch";
-                    break;
-                case "Belt driven or driven via transm. - On/Off clutch":
-                    newTech = "Belt driven or driven via transm. - On/off clutch";
-                    break;
-                default:
-                    newTech = tech;
-                    break;
-            }
-            return newTech;
-        }
-
-        #endregion
-
-        #region AdvancedAuxiliaries
-
-        public AuxiliaryModel AuxiliaryAssembly
-        {
-            get
-            {
-                return AuxiliaryModelHelper.Parse(Body["AuxiliaryAssembly"] == null
-                    ? ""
-                    : Body["AuxiliaryAssembly"].ToString());
-            }
-        }
-
-        public string AuxiliaryVersion
-        {
-            get { return Body["AuxiliaryVersion"] != null ? Body["AuxiliaryVersion"].Value<string>() : "<CLASSIC>"; }
-        }
-
-        public string AdvancedAuxiliaryFilePath
-        {
-            get
-            {
-                return Body["AdvancedAuxiliaryFilePath"] != null
-                    ? Path.Combine(Path.GetFullPath(BasePath), Body["AdvancedAuxiliaryFilePath"].Value<string>())
-                    : "";
-            }
-        }
-
-        #endregion
-    }
-
-    public class JSONInputDataV3 : JSONInputDataV2
-    {
-        public JSONInputDataV3(JObject data, string filename, bool tolerateMissing = false)
-            : base(data, filename, tolerateMissing) { }
-
-        protected override IList<AuxiliaryDataInputData> AuxData()
-        {
-            var retVal = new List<AuxiliaryDataInputData>();
-            if (Body["Padd"] != null) {
-                retVal.Add(new AuxiliaryDataInputData() {
-                    ID = "ConstantAux",
-                    AuxiliaryType = AuxiliaryDemandType.Constant,
-                    ConstantPowerDemand = Body.GetEx<double>("Padd").SI<Watt>()
-                });
-            }
-            foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
-                try {
-                    aux.GetEx("Technology").ToObject<List<string>>();
-                } catch (Exception) {
-                    throw new VectoException(
-                        "Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?",
-                        aux.GetEx<string>("ID"));
-                }
-
-                var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
-
-                var auxData = new AuxiliaryDataInputData {
-                    ID = aux.GetEx<string>("ID"),
-                    Type = type,
-                    Technology = aux.GetEx("Technology").ToObject<List<string>>()
-                };
-
-                var auxFile = aux["Path"];
-                retVal.Add(auxData);
-
-                if (auxFile == null || EmptyOrInvalidFileName(auxFile.Value<string>())) {
-                    continue;
-                }
-                AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData,
-                    Path.Combine(BasePath, auxFile.Value<string>()));
-            }
-            return retVal;
-        }
-    }
-
-
-    public class JSONInputDataV4 : JSONInputDataV3
-    {
-        public JSONInputDataV4(JObject data, string filename, bool tolerateMissing = false)
-            : base(data, filename, tolerateMissing) { }
-    }
-
-    public class JSONEPTPInputDataV4 : JSONFile, IEPTPInputDataProvider, IEPTPJobInputData
-    {
-        public JSONEPTPInputDataV4(JObject data, string filename, bool tolerateMissing = false) : base(data, filename,
-            tolerateMissing) { }
-
-        public IEPTPJobInputData JobInputData
-        {
-            get { return this; }
-        }
-
-        public IVehicleDeclarationInputData Vehicle
-        {
-            get
-            {
-                return new XMLDeclarationInputDataProvider(Path.Combine(Path.GetFullPath(BasePath), Body["DeclarationVehicle"].Value<string>()),
-                    true).JobInputData.Vehicle;
-            }
-        }
-
-        public IList<ICycleData> Cycles
-        {
-            get
-            {
-                var retVal = new List<ICycleData>();
-                if (Body[JsonKeys.Job_Cycles] == null) {
-                    return retVal;
-                }
-                foreach (var cycle in Body.GetEx(JsonKeys.Job_Cycles)) {
-                    var cycleFile = Path.Combine(BasePath, cycle.Value<string>());
-                    if (File.Exists(cycleFile)) {
-                        var cycleData = VectoCSVFile.Read(cycleFile);
-                        retVal.Add(new CycleInputData() {
-                            Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()),
-                            CycleData = cycleData
-                        });
-                    }
-                }
-                return retVal;
-            }
-        }
-
-        public IEnumerable<double> FanPowerCoefficents
-        {
-            get
-            {
-                return Body.GetEx("FanPowerCoefficients").Select(entry => entry.ToString().ToDouble()).ToList();
-            }
-        }
-    }
+	public abstract class JSONFile : LoggingObject
+	{
+		public const string MissingFileSuffix = "   -- (MISSING!)";
+
+		private readonly string _sourceFile;
+
+		protected readonly JObject Body;
+
+		protected JSONFile(JObject data, string filename, bool tolerateMissing = false)
+		{
+			//var header = (JObject)data.GetEx(JsonKeys.JsonHeader);
+			Body = (JObject)data.GetEx(JsonKeys.JsonBody);
+			_sourceFile = Path.GetFullPath(filename);
+			TolerateMissing = tolerateMissing;
+		}
+
+		protected bool TolerateMissing { get; set; }
+
+		public DataSourceType SourceType
+		{
+			get { return DataSourceType.JSONFile; }
+		}
+
+		public string Source
+		{
+			get { return _sourceFile; }
+		}
+
+		public bool SavedInDeclarationMode
+		{
+			get { return Body.GetEx(JsonKeys.SavedInDeclMode).Value<bool>(); }
+		}
+
+		internal string BasePath
+		{
+			get { return Path.GetDirectoryName(_sourceFile); }
+		}
+
+		protected TableData ReadTableData(string filename, string tableType, bool required = true)
+		{
+			if (!EmptyOrInvalidFileName(filename) && File.Exists(Path.Combine(BasePath, filename))) {
+				try {
+					return VectoCSVFile.Read(Path.Combine(BasePath, filename), true);
+				} catch (Exception e) {
+					Log.Warn("Failed to read file {0} {1}", Path.Combine(BasePath, filename), tableType);
+					throw new VectoException("Failed to read file for {0}: {1}", e, tableType, filename);
+				}
+			}
+			if (required) {
+				throw new VectoException("Invalid filename for {0}: {1}", tableType, filename);
+			}
+			return null;
+		}
+
+		internal static bool EmptyOrInvalidFileName(string filename)
+		{
+			return filename == null || !filename.Any() ||
+					filename.Equals("<NOFILE>", StringComparison.InvariantCultureIgnoreCase)
+					|| filename.Equals("-");
+		}
+
+		public static JObject GetDummyJSONStructure()
+		{
+			return JObject.FromObject(new Dictionary<string, object>() {
+				{ JsonKeys.JsonHeader, new object() },
+				{ JsonKeys.JsonBody, new object() }
+			});
+		}
+	}
+
+	/// <summary>
+	/// Class for reading json data of vecto-job-file.
+	/// Fileformat: .vecto
+	/// </summary>
+	public class JSONInputDataV2 : JSONFile, IEngineeringInputDataProvider, IDeclarationInputDataProvider,
+		IEngineeringJobInputData, IDriverEngineeringInputData, IAuxiliariesEngineeringInputData,
+		IAuxiliariesDeclarationInputData, IJSONVehicleComponents
+	{
+		public JSONInputDataV2(JObject data, string filename, bool tolerateMissing = false)
+			: base(data, filename, tolerateMissing)
+		{
+			_jobname = Path.GetFileNameWithoutExtension(filename);
+
+			Engine = ReadEngine();
+
+			if (Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>()) {
+				return;
+			}
+
+			Gearbox = ReadGearbox();
+			AxleGear = Gearbox as IAxleGearInputData;
+			TorqueConverter = Gearbox as ITorqueConverterEngineeringInputData;
+
+			VehicleData = ReadVehicle();
+		}
+
+		public IGearboxEngineeringInputData Gearbox { get; internal set; }
+		public IAxleGearInputData AxleGear { get; internal set; }
+		public ITorqueConverterEngineeringInputData TorqueConverter { get; internal set; }
+		public IEngineEngineeringInputData Engine { get; internal set; }
+
+
+		protected readonly IVehicleEngineeringInputData VehicleData;
+
+		private readonly string _jobname;
+
+
+		public IAuxiliariesEngineeringInputData EngineeringAuxiliaries
+		{
+			get { return this; }
+		}
+
+		public IAuxiliariesDeclarationInputData DeclarationAuxiliaries
+		{
+			get { return this; }
+		}
+
+		private IVehicleEngineeringInputData ReadVehicle()
+		{
+			try {
+				var vehicleFile = Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>();
+				return JSONInputDataFactory.ReadJsonVehicle(
+					Path.Combine(BasePath, vehicleFile), this);
+			} catch (Exception e) {
+				if (!TolerateMissing) {
+					throw new VectoException("JobFile: Failed to read Vehicle file '{0}': {1}", e,
+						Body[JsonKeys.Vehicle_VehicleFile],
+						e.Message);
+				}
+				return new JSONVehicleDataV7(GetDummyJSONStructure(),
+					Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_VehicleFile).Value<string>()) +
+					MissingFileSuffix, this);
+			}
+		}
+
+		private IGearboxEngineeringInputData ReadGearbox()
+		{
+			try {
+				var gearboxFile = Body.GetEx(JsonKeys.Vehicle_GearboxFile).Value<string>();
+
+				return JSONInputDataFactory.ReadGearbox(Path.Combine(BasePath, gearboxFile));
+			} catch (Exception e) {
+				if (!TolerateMissing) {
+					throw new VectoException("JobFile: Failed to read Gearbox file '{0}': {1}", e,
+						Body[JsonKeys.Vehicle_GearboxFile],
+						e.Message);
+				}
+				return new JSONGearboxDataV6(GetDummyJSONStructure(),
+					Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_GearboxFile).Value<string>()) +
+					MissingFileSuffix);
+			}
+		}
+
+		private IEngineEngineeringInputData ReadEngine()
+		{
+			try {
+				return JSONInputDataFactory.ReadEngine(
+					Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()));
+			} catch (Exception e) {
+				if (!TolerateMissing) {
+					throw new VectoException("JobFile: Failed to read Engine file '{0}': {1}", e,
+						Body[JsonKeys.Vehicle_EngineFile],
+						e.Message);
+				}
+
+				return
+					new JSONEngineDataV3(GetDummyJSONStructure(),
+						Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()) +
+						MissingFileSuffix);
+			}
+		}
+
+		#region IInputDataProvider
+
+		IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
+		{
+			get { return VehicleInputData; }
+		}
+
+		public virtual IEngineeringJobInputData JobInputData
+		{
+			get { return this; }
+		}
+
+		public XElement XMLHash
+		{
+			get { return new XElement(XMLNames.DI_Signature); }
+		}
+
+		IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData
+		{
+			get { return this; }
+		}
+
+		public virtual IVehicleEngineeringInputData VehicleInputData
+		{
+			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
+				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
+			get
+			{
+				if (VehicleData == null) {
+					throw new InvalidFileFormatException("VehicleData not found ");
+				}
+				return VehicleData;
+			}
+		}
+
+		public virtual IEngineEngineeringInputData EngineOnly
+		{
+			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
+				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
+			get
+			{
+				if (Engine == null) {
+					throw new InvalidFileFormatException("EngineData not found");
+				}
+				return Engine;
+			}
+		}
+
+		IDriverEngineeringInputData IEngineeringInputDataProvider.DriverInputData
+		{
+			get { return this; }
+		}
+
+		#endregion
+
+		#region IJobInputData
+
+		public virtual IVehicleEngineeringInputData Vehicle
+		{
+			get { return VehicleData; }
+		}
+
+		public virtual IList<ICycleData> Cycles
+		{
+			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
+				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
+			get
+			{
+				var retVal = new List<ICycleData>();
+				if (Body[JsonKeys.Job_Cycles] == null) {
+					return retVal;
+				}
+				foreach (var cycle in Body.GetEx(JsonKeys.Job_Cycles)) {
+					//.Select(cycle => 
+					var cycleFile = Path.Combine(BasePath, cycle.Value<string>());
+					TableData cycleData;
+					if (File.Exists(cycleFile)) {
+						cycleData = VectoCSVFile.Read(cycleFile);
+					} else {
+						try {
+							var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." +
+												cycle.Value<string>() + Constants.FileExtensions.CycleFile;
+							cycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName),
+								source: resourceName);
+						} catch (Exception e) {
+							Log.Debug("Driving Cycle could not be read: " + cycleFile);
+							if (!TolerateMissing) {
+								throw new VectoException("Driving Cycle could not be read: " + cycleFile, e);
+							}
+							cycleData = new TableData(cycleFile + MissingFileSuffix, DataSourceType.Missing);
+						}
+					}
+					retVal.Add(new CycleInputData() {
+						Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()),
+						CycleData = cycleData
+					});
+				}
+				return retVal;
+			}
+		}
+
+		public virtual bool EngineOnlyMode
+		{
+			get { return Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>(); }
+		}
+
+		public virtual string JobName
+		{
+			get { return _jobname; }
+		}
+
+		#endregion
+
+		#region DriverInputData
+
+		public virtual ILookaheadCoastingInputData Lookahead
+		{
+			get
+			{
+				if (Body[JsonKeys.DriverData_LookaheadCoasting] == null) {
+					return null;
+				}
+
+				var lac = Body.GetEx(JsonKeys.DriverData_LookaheadCoasting);
+				var distanceScalingFactor = lac["PreviewDistanceFactor"] != null
+					? lac.GetEx<double>("PreviewDistanceFactor")
+					: DeclarationData.Driver.LookAhead.LookAheadDistanceFactor;
+				var lacDfOffset = lac["DF_offset"] != null
+					? lac.GetEx<double>("DF_offset")
+					: DeclarationData.Driver.LookAhead.DecisionFactorCoastingOffset;
+				var lacDfScaling = lac["DF_scaling"] != null
+					? lac.GetEx<double>("DF_scaling")
+					: DeclarationData.Driver.LookAhead.DecisionFactorCoastingScaling;
+				var speedDependentLookup = GetSpeedDependentLookupTable(lac);
+				var velocityDropLookup = GetVelocityDropLookupTable(lac);
+				var minSpeed = lac["MinSpeed"] != null
+					? lac.GetEx<double>(JsonKeys.DriverData_Lookahead_MinSpeed).KMPHtoMeterPerSecond()
+					: DeclarationData.Driver.LookAhead.MinimumSpeed;
+				return new LookAheadCoastingInputData() {
+					Enabled = lac.GetEx<bool>(JsonKeys.DriverData_Lookahead_Enabled),
+					//Deceleration = lac.GetEx<double>(JsonKeys.DriverData_Lookahead_Deceleration).SI<MeterPerSquareSecond>(),
+					MinSpeed = minSpeed,
+					LookaheadDistanceFactor = distanceScalingFactor,
+					CoastingDecisionFactorOffset = lacDfOffset,
+					CoastingDecisionFactorScaling = lacDfScaling,
+					CoastingDecisionFactorTargetSpeedLookup = speedDependentLookup,
+					CoastingDecisionFactorVelocityDropLookup = velocityDropLookup
+				};
+			}
+		}
+
+		private TableData GetVelocityDropLookupTable(JToken lac)
+		{
+			if (lac["Df_velocityDropLookup"] == null ||
+				string.IsNullOrWhiteSpace(lac["Df_velocityDropLookup"].Value<string>())) {
+				return null;
+			}
+			try {
+				return ReadTableData(lac.GetEx<string>("Df_velocityDropLookup"),
+					"Lookahead Coasting Decisionfactor - Velocity drop");
+			} catch (Exception) {
+				if (TolerateMissing) {
+					return
+						new TableData(
+							Path.Combine(BasePath, lac["Df_velocityDropLookup"].Value<string>()) + MissingFileSuffix,
+							DataSourceType.Missing);
+				}
+			}
+			return null;
+		}
+
+		private TableData GetSpeedDependentLookupTable(JToken lac)
+		{
+			if (lac["DF_targetSpeedLookup"] == null ||
+				string.IsNullOrWhiteSpace(lac["DF_targetSpeedLookup"].Value<string>())) {
+				return null;
+			}
+			try {
+				return ReadTableData(lac.GetEx<string>("DF_targetSpeedLookup"),
+					"Lookahead Coasting Decisionfactor - Target speed");
+			} catch (Exception) {
+				if (TolerateMissing) {
+					return
+						new TableData(
+							Path.Combine(BasePath, lac["DF_targetSpeedLookup"].Value<string>()) + MissingFileSuffix,
+							DataSourceType.Missing);
+				}
+			}
+			return null;
+		}
+
+		public virtual IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll
+		{
+			get
+			{
+				var overspeed = Body.GetEx(JsonKeys.DriverData_OverspeedEcoRoll);
+				return new OverSpeedEcoRollInputData() {
+					Mode = DriverData.ParseDriverMode(
+						overspeed.GetEx<string>(JsonKeys.DriverData_OverspeedEcoRoll_Mode)),
+					MinSpeed = overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_MinSpeed)
+						.KMPHtoMeterPerSecond(),
+					OverSpeed = overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_OverSpeed)
+						.KMPHtoMeterPerSecond(),
+					UnderSpeed =
+						overspeed.GetEx<double>(JsonKeys.DriverData_OverspeedEcoRoll_UnderSpeed).KMPHtoMeterPerSecond()
+				};
+			}
+		}
+
+		public virtual TableData AccelerationCurve
+		{
+			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
+				"CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
+			get
+			{
+				var acceleration = Body[JsonKeys.DriverData_AccelerationCurve];
+				if (acceleration == null || EmptyOrInvalidFileName(acceleration.Value<string>())) {
+					return null;
+					//					throw new VectoException("AccelerationCurve (VACC) required");
+				}
+				try {
+					return ReadTableData(acceleration.Value<string>(), "DriverAccelerationCurve");
+				} catch (VectoException e) {
+					Log.Warn("Could not find file for acceleration curve. Trying lookup in declaration data.");
+					try {
+						var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".VACC." +
+											acceleration.Value<string>() +
+											Constants.FileExtensions.DriverAccelerationCurve;
+						return VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName);
+					} catch (Exception) {
+						if (!TolerateMissing) {
+							throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e);
+						}
+						return new TableData(Path.Combine(BasePath, acceleration.Value<string>()) + MissingFileSuffix,
+							DataSourceType.Missing);
+					}
+				}
+			}
+		}
+
+		#endregion
+
+		#region IAuxiliariesEngineeringInputData
+
+		IList<IAuxiliaryEngineeringInputData> IAuxiliariesEngineeringInputData.Auxiliaries
+		{
+			get { return AuxData().Cast<IAuxiliaryEngineeringInputData>().ToList(); }
+		}
+
+		IList<IAuxiliaryDeclarationInputData> IAuxiliariesDeclarationInputData.Auxiliaries
+		{
+			get { return AuxData().Cast<IAuxiliaryDeclarationInputData>().ToList(); }
+		}
+
+		protected virtual IList<AuxiliaryDataInputData> AuxData()
+		{
+			var retVal = new List<AuxiliaryDataInputData>();
+			foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
+				var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
+
+				var auxData = new AuxiliaryDataInputData {
+					ID = aux.GetEx<string>("ID"),
+					Type = type,
+					Technology = new List<string>(),
+				};
+				var tech = aux.GetEx<string>("Technology");
+
+				if (auxData.Type == AuxiliaryType.ElectricSystem) {
+					if (aux["TechList"] == null || aux["TechList"].Any()) {
+						auxData.Technology.Add("Standard technology");
+					} else {
+						auxData.Technology.Add("Standard technology - LED headlights, all");
+					}
+				}
+
+				if (auxData.Type == AuxiliaryType.SteeringPump) {
+					auxData.Technology.Add(tech);
+				}
+
+				if (auxData.Type == AuxiliaryType.Fan) {
+					auxData.Technology.Add(MapLegacyFanTechnologies(tech));
+				}
+
+				var auxFile = aux["Path"];
+				retVal.Add(auxData);
+
+				if (auxFile == null || EmptyOrInvalidFileName(auxFile.Value<string>())) {
+					continue;
+				}
+
+				AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData,
+					Path.Combine(BasePath, auxFile.Value<string>()));
+			}
+			return retVal;
+		}
+
+		private static string MapLegacyFanTechnologies(string tech)
+		{
+			string newTech;
+			switch (tech) {
+				case "Crankshaft mounted - Electronically controlled visco clutch (Default)":
+					newTech = "Crankshaft mounted - Electronically controlled visco clutch";
+					break;
+				case "Crankshaft mounted - On/Off clutch":
+					newTech = "Crankshaft mounted - On/off clutch";
+					break;
+				case "Belt driven or driven via transm. - On/Off clutch":
+					newTech = "Belt driven or driven via transm. - On/off clutch";
+					break;
+				default:
+					newTech = tech;
+					break;
+			}
+			return newTech;
+		}
+
+		#endregion
+
+		#region AdvancedAuxiliaries
+
+		public AuxiliaryModel AuxiliaryAssembly
+		{
+			get
+			{
+				return AuxiliaryModelHelper.Parse(Body["AuxiliaryAssembly"] == null
+					? ""
+					: Body["AuxiliaryAssembly"].ToString());
+			}
+		}
+
+		public string AuxiliaryVersion
+		{
+			get { return Body["AuxiliaryVersion"] != null ? Body["AuxiliaryVersion"].Value<string>() : "<CLASSIC>"; }
+		}
+
+		public string AdvancedAuxiliaryFilePath
+		{
+			get
+			{
+				return Body["AdvancedAuxiliaryFilePath"] != null
+					? Path.Combine(Path.GetFullPath(BasePath), Body["AdvancedAuxiliaryFilePath"].Value<string>())
+					: "";
+			}
+		}
+
+		#endregion
+	}
+
+	public class JSONInputDataV3 : JSONInputDataV2
+	{
+		public JSONInputDataV3(JObject data, string filename, bool tolerateMissing = false)
+			: base(data, filename, tolerateMissing) { }
+
+		protected override IList<AuxiliaryDataInputData> AuxData()
+		{
+			var retVal = new List<AuxiliaryDataInputData>();
+			if (Body["Padd"] != null) {
+				retVal.Add(new AuxiliaryDataInputData() {
+					ID = "ConstantAux",
+					AuxiliaryType = AuxiliaryDemandType.Constant,
+					ConstantPowerDemand = Body.GetEx<double>("Padd").SI<Watt>()
+				});
+			}
+			foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
+				try {
+					aux.GetEx("Technology").ToObject<List<string>>();
+				} catch (Exception) {
+					throw new VectoException(
+						"Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?",
+						aux.GetEx<string>("ID"));
+				}
+
+				var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
+
+				var auxData = new AuxiliaryDataInputData {
+					ID = aux.GetEx<string>("ID"),
+					Type = type,
+					Technology = aux.GetEx("Technology").ToObject<List<string>>()
+				};
+
+				var auxFile = aux["Path"];
+				retVal.Add(auxData);
+
+				if (auxFile == null || EmptyOrInvalidFileName(auxFile.Value<string>())) {
+					continue;
+				}
+				AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData,
+					Path.Combine(BasePath, auxFile.Value<string>()));
+			}
+			return retVal;
+		}
+	}
+
+
+	public class JSONInputDataV4 : JSONInputDataV3
+	{
+		public JSONInputDataV4(JObject data, string filename, bool tolerateMissing = false)
+			: base(data, filename, tolerateMissing) { }
+	}
+
+	public class JSONVTPInputDataV4 : JSONFile, IVTPInputDataProvider, IVTPJobInputData
+	{
+		public JSONVTPInputDataV4(JObject data, string filename, bool tolerateMissing = false) : base(data, filename,
+			tolerateMissing) { }
+
+		public IVTPJobInputData JobInputData
+		{
+			get { return this; }
+		}
+
+		public IVehicleDeclarationInputData Vehicle
+		{
+			get
+			{
+				return new XMLDeclarationInputDataProvider(
+					Path.Combine(Path.GetFullPath(BasePath), Body["DeclarationVehicle"].Value<string>()),
+					true).JobInputData.Vehicle;
+			}
+		}
+
+		public IList<ICycleData> Cycles
+		{
+			get
+			{
+				var retVal = new List<ICycleData>();
+				if (Body[JsonKeys.Job_Cycles] == null) {
+					return retVal;
+				}
+				foreach (var cycle in Body.GetEx(JsonKeys.Job_Cycles)) {
+					var cycleFile = Path.Combine(BasePath, cycle.Value<string>());
+					if (File.Exists(cycleFile)) {
+						var cycleData = VectoCSVFile.Read(cycleFile);
+						retVal.Add(new CycleInputData() {
+							Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()),
+							CycleData = cycleData
+						});
+					}
+				}
+				return retVal;
+			}
+		}
+
+		public IEnumerable<double> FanPowerCoefficents
+		{
+			get { return Body.GetEx("FanPowerCoefficients").Select(entry => entry.ToString().ToDouble()).ToList(); }
+		}
+
+		public Meter FanDiameter
+		{
+			get { return Body.GetEx<double>("FanDiameter").SI<Meter>(); }
+		}
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
index 4091fafada..284edbe947 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputDataFactory.cs
@@ -72,7 +72,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 					return new JSONInputDataV3(json, filename, tolerateMissing);
 				case 4:
                     if (json["Body"]["DeclarationVehicle"] != null) {
-                        return new JSONEPTPInputDataV4(json, filename, tolerateMissing);
+                        return new JSONVTPInputDataV4(json, filename, tolerateMissing);
                     }
 					return new JSONInputDataV4(json, filename, tolerateMissing);
 				default:
diff --git a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
index a1722ff80c..df1ae6cbea 100644
--- a/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DrivingCycleDataReader.cs
@@ -74,8 +74,8 @@ namespace TUGraz.VectoCore.InputData.Reader
 			if (DistanceBasedCycleDataParser.ValidateHeader(cols, false)) {
 				return CycleType.DistanceBased;
 			}
-            if (EPTPCycleDataParser.ValidateHeader(cols, false)) {
-                return CycleType.EPTP;
+            if (VTPCycleDataParser.ValidateHeader(cols, false)) {
+                return CycleType.VTP;
             }
 			throw new VectoException("CycleFile format is unknown.");
 		}
@@ -95,8 +95,8 @@ namespace TUGraz.VectoCore.InputData.Reader
 					return new MeasuredSpeedDataParser();
 				case CycleType.PTO:
 					return new PTOCycleDataParser();
-                case CycleType.EPTP:
-                    return new EPTPCycleDataParser();
+                case CycleType.VTP:
+                    return new VTPCycleDataParser();
 
                 default:
 					throw new ArgumentOutOfRangeException("Cycle Type", type.ToString());
@@ -319,6 +319,11 @@ namespace TUGraz.VectoCore.InputData.Reader
 			public const string EngineSpeed = "n";
             public const string EngineSpeedSuffix = "n_eng";
             public const string FanSpeed = "n_fan";
+			public const string WheelTorqueLeft = "tq_left";
+			public const string WheelTorqueRight = "tq_right";
+			public const string WheelSpeedLeft = "n_wh_left";
+			public const string WheelSpeedRight = "n_wh_right";
+			public const string FuelConsumption = "fc";
 			public const string Gear = "gear";
 			public const string AdditionalAuxPowerDemand = "Padd";
 			public const string AirSpeedRelativeToVehicle = "vair_res";
@@ -711,20 +716,28 @@ namespace TUGraz.VectoCore.InputData.Reader
         /// Parser for PTO Cycles.
         /// </summary>
         // <t>,<v> [km/h],<Pwheel> [kW],<n_eng> [rpm],<n_fan> [rpm], <Padd> [kW]
-        private class EPTPCycleDataParser : AbstractCycleDataParser
+        private class VTPCycleDataParser : AbstractCycleDataParser
         {
             public override IEnumerable<DrivingCycleData.DrivingCycleEntry> Parse(DataTable table, bool crossWindRequired)
             {
                 ValidateHeader(table.Columns);
 
-                var entries = table.Rows.Cast<DataRow>().Select(row => new DrivingCycleData.DrivingCycleEntry {
-                    Time = row.ParseDouble(Fields.Time).SI<Second>(),
-                    VehicleTargetSpeed = row.ParseDouble(Fields.VehicleSpeed).KMPHtoMeterPerSecond(),
-                    AdditionalAuxPowerDemand = row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI().Kilo.Watt.Cast<Watt>(),
-                   PWheel = row.ParseDouble(Fields.PWheel).SI().Kilo.Watt.Cast<Watt>(),
-                   EngineSpeed = row.ParseDouble(Fields.EngineSpeedSuffix).RPMtoRad(),
-                   FanSpeed = row.ParseDouble(Fields.FanSpeed).RPMtoRad()
-                }).ToArray();
+                var entries = table.Rows.Cast<DataRow>().Select(row => {
+					var wheelSpeed =
+						((row.ParseDouble(Fields.WheelSpeedLeft) + row.ParseDouble(Fields.WheelSpeedRight)) / 2).RPMtoRad();
+					return new DrivingCycleData.DrivingCycleEntry {
+						Time = row.ParseDouble(Fields.Time).SI<Second>(),
+						VehicleTargetSpeed = row.ParseDouble(Fields.VehicleSpeed).KMPHtoMeterPerSecond(),
+						AdditionalAuxPowerDemand =
+							row.ParseDoubleOrGetDefault(Fields.AdditionalAuxPowerDemand).SI().Kilo.Watt.Cast<Watt>(),
+						EngineSpeed = row.ParseDouble(Fields.EngineSpeedSuffix).RPMtoRad(),
+						WheelAngularVelocity = wheelSpeed,
+						Torque = (row.ParseDouble(Fields.WheelTorqueLeft).SI<NewtonMeter>() * row.ParseDouble(Fields.WheelSpeedLeft).RPMtoRad() + row.ParseDouble(Fields.WheelTorqueRight).SI<NewtonMeter>() * row.ParseDouble(Fields.WheelSpeedRight).RPMtoRad()) / wheelSpeed, 
+						FanSpeed = row.ParseDouble(Fields.FanSpeed).RPMtoRad(),
+						Gear = (uint)row.ParseDoubleOrGetDefault(Fields.Gear),
+						Fuelconsumption = row.ParseDoubleOrGetDefault(Fields.FuelConsumption).SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Cast<KilogramPerSecond>(),
+					};
+				}).ToArray();
 
                 return entries;
             }
@@ -734,19 +747,26 @@ namespace TUGraz.VectoCore.InputData.Reader
                 var requiredCols = new[] {
                     Fields.Time,
                     Fields.VehicleSpeed,
-                    Fields.PWheel,
                     Fields.EngineSpeedSuffix,
-                    Fields.FanSpeed
+                    Fields.FanSpeed,
+					Fields.WheelSpeedLeft,
+					Fields.WheelSpeedRight,
+					Fields.WheelTorqueLeft,
+					Fields.WheelTorqueRight,
                 };
 
                 var allowedCols = new[] {
-                    Fields.Time,
-                    Fields.VehicleSpeed,
-                    Fields.AdditionalAuxPowerDemand,
-                    Fields.PWheel,
-                    Fields.EngineSpeedSuffix,
-                    Fields.FanSpeed
-                };
+					Fields.Time,
+					Fields.VehicleSpeed,
+					Fields.EngineSpeedSuffix,
+					Fields.FanSpeed,
+					Fields.WheelSpeedLeft,
+					Fields.WheelSpeedRight,
+					Fields.WheelTorqueLeft,
+					Fields.WheelTorqueRight,
+					Fields.Gear,
+					Fields.FuelConsumption
+				};
 
                 const bool allowAux = true;
 
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringEPTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactory.cs
similarity index 73%
rename from VectoCore/VectoCore/InputData/Reader/Impl/EngineeringEPTPModeVectoRunDataFactory.cs
rename to VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactory.cs
index c0821243ea..ec388ea536 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringEPTPModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringVTPModeVectoRunDataFactory.cs
@@ -11,13 +11,13 @@ using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 
 namespace TUGraz.VectoCore.InputData.Reader.Impl {
-    internal class EngineeringEPTPModeVectoRunDataFactory : IVectoRunDataFactory
+    internal class EngineeringVTPModeVectoRunDataFactory : IVectoRunDataFactory
     {
-        protected IEPTPInputDataProvider InputDataProvider;
+        protected IVTPInputDataProvider InputDataProvider;
 
-        public EngineeringEPTPModeVectoRunDataFactory(IEPTPInputDataProvider eptpProvider)
+        public EngineeringVTPModeVectoRunDataFactory(IVTPInputDataProvider ivtpProvider)
         {
-            InputDataProvider = eptpProvider;
+            InputDataProvider = ivtpProvider;
         }
 
         public IEnumerable<VectoRunData> NextRun()
@@ -46,8 +46,25 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
             var ptoTransmissionData = dao.CreatePTOTransmissionData(InputDataProvider.JobInputData.Vehicle.PTOTransmissionInputData);
 
 
-            var aux = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), MissionType.RegionalDelivery, segment.VehicleClass).ToList();
-            aux.RemoveAll(x => x.ID == Constants.Auxiliaries.IDs.Fan);
+            var auxRD = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), MissionType.RegionalDelivery, segment.VehicleClass).ToList();
+			foreach (var entry in auxRD) {
+				entry.MissionType = MissionType.RegionalDelivery;
+			}
+			var auxLH = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), MissionType.LongHaul, segment.VehicleClass).ToList();
+			foreach (var entry in auxLH) {
+				entry.MissionType = MissionType.LongHaul;
+			}
+			var auxUD = dao.CreateAuxiliaryData(InputDataProvider.JobInputData.Vehicle.AuxiliaryInputData(), MissionType.UrbanDelivery, segment.VehicleClass).ToList();
+			foreach (var entry in auxUD) {
+				entry.MissionType = MissionType.UrbanDelivery;
+			}
+
+			var aux = new List<VectoRunData.AuxData>();
+			aux.AddRange(auxRD);
+			aux.AddRange(auxLH);
+			aux.AddRange(auxUD);
+
+			aux.RemoveAll(x => x.ID == Constants.Auxiliaries.IDs.Fan);
             aux.Add(new VectoRunData.AuxData {
                 DemandType = AuxiliaryDemandType.Direct,
                 ID = DrivingCycleDataReader.Fields.AdditionalAuxPowerDemand
@@ -71,7 +88,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
                     PTO = ptoTransmissionData,
                     Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name),
                     ExecutionMode = ExecutionMode.Engineering,
-                    AuxFanParameters = InputDataProvider.JobInputData.FanPowerCoefficents.ToArray()
+                    FanData = new AuxFanData() {
+						FanCoefficients = InputDataProvider.JobInputData.FanPowerCoefficents.ToArray(),
+						FanDiameter = InputDataProvider.JobInputData.FanDiameter,
+						}
                 };
             });
         }
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
index 0232302186..a2c50d1397 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
@@ -103,7 +103,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 
 		public int JobRunId { get; internal set; }
 
-        public double[] AuxFanParameters { get; internal set; }
+        public AuxFanData FanData { get; internal set; }
 
         public class AuxData
 		{
@@ -117,6 +117,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 			[Required] public AuxiliaryDemandType DemandType;
 
 			[ValidateObject] public AuxiliaryData Data;
+
+			public MissionType? MissionType;
 		}
 
 		public static ValidationResult ValidateRunData(VectoRunData runData, ValidationContext validationContext)
@@ -229,4 +231,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 			return null;
 		}
 	}
+
+	public class AuxFanData
+	{
+		public double[] FanCoefficients;
+
+		public Meter FanDiameter;
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 019b7e49d1..134faae46a 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -30,6 +30,7 @@
 */
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
@@ -70,8 +71,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 					return BuildEngineOnly(data);
 				case CycleType.PWheel:
 					return BuildPWheel(data);
-                case CycleType.EPTP:
-                    return BuildEPTP(data);
+                case CycleType.VTP:
+                    return BuildVTP(data);
 				case CycleType.MeasuredSpeed:
 					return BuildMeasuredSpeed(data);
 				case CycleType.MeasuredSpeedGear:
@@ -126,32 +127,27 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			return container;
 		}
 
-        private VehicleContainer BuildEPTP(VectoRunData data)
+        private VehicleContainer BuildVTP(VectoRunData data)
         {
-            if (data.Cycle.CycleType != CycleType.EPTP) {
-                throw new VectoException("CycleType must be EPTP.");
+            if (data.Cycle.CycleType != CycleType.VTP) {
+                throw new VectoException("CycleType must be VTP.");
             }
 
             var container = new VehicleContainer(ExecutionMode.Engineering, _modData, _sumWriter) { RunData = data };
             var gearbox = new CycleGearbox(container, data);
 
-            // PWheelCycle --> AxleGear --> Clutch --> Engine <-- Aux
-            var powertrain = new EPTPCycle(container, data.Cycle, data.AxleGearData.AxleGear.Ratio, data.VehicleData,
+            // VTPCycle --> AxleGear --> Clutch --> Engine <-- Aux
+            var powertrain = new VTPCycle(container, data.Cycle, data.AxleGearData.AxleGear.Ratio, data.VehicleData,
                     gearbox.ModelData.Gears.ToDictionary(g => g.Key, g => g.Value.Ratio))
                 .AddComponent(new AxleGear(container, data.AxleGearData))
                 .AddComponent(data.AngledriveData != null ? new Angledrive(container, data.AngledriveData) : null)
                 .AddComponent(gearbox, data.Retarder, container)
                 .AddComponent(new Clutch(container, data.EngineData));
-            var engine = new EPTPCombustionEngine(container, data.EngineData, pt1Disabled: true);
-
-            var aux = CreateAuxiliaries(data, container);
-            aux.AddCycle(Constants.Auxiliaries.IDs.Fan, cycleEntry => {
-                var fanSpeed = cycleEntry.FanSpeed.AsRPM;
-                var c1 = data.AuxFanParameters.Length > 0 ? data.AuxFanParameters[0] : 0;
-                var c2 = data.AuxFanParameters.Length > 1 ? data.AuxFanParameters[1] : 1;
-                var c3 = data.AuxFanParameters.Length > 2 ? data.AuxFanParameters[2] : 1;
-                return (c1 * Math.Pow(fanSpeed / c2, 3) * Math.Pow(fanSpeed / c3, 5) * 1000).SI<Watt>();
-            });
+            var engine = new VTPCombustionEngine(container, data.EngineData, pt1Disabled: true);
+
+            var aux = CreateSpeedDependentAuxiliaries(data, container);
+			var engineFan = new EngineFanAuxiliary(data.FanData.FanCoefficients, data.FanData.FanDiameter);
+            aux.AddCycle(Constants.Auxiliaries.IDs.Fan, cycleEntry => engineFan.PowerDemand(cycleEntry.FanSpeed));
             container.ModalData.AddAuxiliary(Constants.Auxiliaries.IDs.Fan);
 
             engine.Connect(aux.Port());
@@ -168,7 +164,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
             return container;
         }
 
-        private VehicleContainer BuildMeasuredSpeed(VectoRunData data)
+
+
+		private VehicleContainer BuildMeasuredSpeed(VectoRunData data)
 		{
 			if (data.Cycle.CycleType != CycleType.MeasuredSpeed) {
 				throw new VectoException("CycleType must be MeasuredSpeed.");
@@ -319,6 +317,38 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			return aux;
 		}
 
+		private EngineAuxiliary CreateSpeedDependentAuxiliaries(VectoRunData data, IVehicleContainer container)
+		{
+			var aux = new EngineAuxiliary(container);
+ 
+			var auxData = data.Aux.ToArray();
+			AddSwitchingAux(aux,container.ModalData,Constants.Auxiliaries.IDs.HeatingVentilationAirCondition, auxData);
+			AddSwitchingAux(aux,container.ModalData,Constants.Auxiliaries.IDs.SteeringPump, auxData);
+			AddSwitchingAux(aux,container.ModalData,Constants.Auxiliaries.IDs.ElectricSystem, auxData);
+			AddSwitchingAux(aux, container.ModalData, Constants.Auxiliaries.IDs.PneumaticSystem, auxData);
+			
+			return aux;
+		}
+
+		private void AddSwitchingAux(EngineAuxiliary aux, IModalDataContainer modData, string auxId, VectoRunData.AuxData[] auxData)
+		{
+			var urban = auxData.First(x => x.ID == auxId && x.MissionType == MissionType.UrbanDelivery);
+			var rural = auxData.First(x => x.ID == auxId && x.MissionType == MissionType.RegionalDelivery);
+			var motorway = auxData.First(x => x.ID == auxId && x.MissionType == MissionType.LongHaul);
+
+			aux.AddCycle(auxId, entry => {
+				if (entry.VehicleTargetSpeed >= 70.KMPHtoMeterPerSecond()) {
+					return motorway.PowerDemand;
+				}
+				if (entry.VehicleTargetSpeed >= 50.KMPHtoMeterPerSecond()) {
+					return rural.PowerDemand;
+				}
+				return urban.PowerDemand;
+			});
+			modData.AddAuxiliary(auxId);
+		}
+
+
 		private static IGearbox GetGearbox(IVehicleContainer container, VectoRunData runData)
 		{
 			IShiftStrategy strategy;
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index be8a7420b9..28fb5fe629 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -89,9 +89,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		private void CreateEngineeringDataReader(IInputDataProvider dataProvider)
 		{
-            if (dataProvider is IEPTPInputDataProvider) {
-                var eptpProvider = dataProvider as IEPTPInputDataProvider;
-                DataReader = new EngineeringEPTPModeVectoRunDataFactory(eptpProvider);
+            if (dataProvider is IVTPInputDataProvider) {
+                var eptpProvider = dataProvider as IVTPInputDataProvider;
+                DataReader = new EngineeringVTPModeVectoRunDataFactory(eptpProvider);
                 return;
             }
             if (dataProvider is IEngineeringInputDataProvider) {
@@ -203,7 +203,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 					break;
 				case CycleType.EngineOnly:
 				case CycleType.PWheel:
-                case CycleType.EPTP:
+                case CycleType.VTP:
 				case CycleType.MeasuredSpeed:
 				case CycleType.MeasuredSpeedGear:
 					run = new TimeRun(builder.Build(data));
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
index bc70a64d85..84178bb810 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
@@ -299,7 +299,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 					commitPriority = 6;
 				})
 				.If<PTOCycleController>(c => { commitPriority = 99; })
-                .If<EPTPCycle>(_ => { commitPriority = 0; });
+                .If<VTPCycle>(_ => { commitPriority = 0; });
 
 			_components.Add(Tuple.Create(commitPriority, component));
 			_components = _components.OrderBy(x => x.Item1).Reverse().ToList();
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs
index c55ed0fd80..bc299d3abc 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/AuxiliaryData.cs
@@ -29,91 +29,91 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.Reader.ComponentData;
-using TUGraz.VectoCore.Utils;
-
-namespace TUGraz.VectoCore.Models.SimulationComponent.Data
-{
-	[CustomValidation(typeof(AuxiliaryData), "ValidateAuxMap")]
-	public sealed class AuxiliaryData
-	{
-		[Required, Range(double.Epsilon, 1)]
-		public double EfficiencyToSupply { get; private set; }
-
-		[Required, Range(double.Epsilon, double.MaxValue)]
-		public double TransmissionRatio { get; private set; }
-
-		[Required, Range(double.Epsilon, 1)]
-		public double EfficiencyToEngine { get; private set; }
-
-		[Required] private readonly DelaunayMap _map;
-
-		private string auxId;
-
-		public Watt GetPowerDemand(PerSecond nAuxiliary, Watt powerAuxOut)
-		{
-			var value = _map.Interpolate(nAuxiliary.Value(), powerAuxOut.Value());
-			if (value.HasValue) {
-				return value.Value.SI<Watt>();
-			}
-			value = _map.Extrapolate(nAuxiliary.Value(), powerAuxOut.Value());
-			return value.Value.SI<Watt>();
-		}
-
-		internal AuxiliaryData(string id, double transmissionRatio, double efficiencyToEngine, double efficiencyToSupply,
-			DelaunayMap map)
-		{
-			auxId = id;
-			_map = map;
-			TransmissionRatio = transmissionRatio;
-			EfficiencyToEngine = efficiencyToEngine;
-			EfficiencyToSupply = efficiencyToSupply;
-		}
-
-		/// <summary>
-		/// Validates the aux map.
-		/// </summary>
-		/// <param name="data">The data.</param>
-		/// <param name="context">The validation context.</param>
-		/// <returns></returns>
-		// ReSharper disable once UnusedMember.Global
-		public static ValidationResult ValidateAuxMap(AuxiliaryData data, ValidationContext context)
-		{
-			var xValidationRules = new[] { new RangeAttribute(0, double.MaxValue) };
-			var yValidationRules = new[] { new RangeAttribute(0, 100.SI().Kilo.Watt.Value()) };
-			var zValidationRules = new[] { new RangeAttribute(0, 100.SI().Kilo.Watt.Value()) };
-
-			var results = new List<ValidationResult>();
-			foreach (var entry in data._map.Entries) {
-				context.DisplayName = AuxiliaryDataReader.Fields.AuxSpeed;
-				if (!Validator.TryValidateValue(entry.X, context, results, xValidationRules)) {
-					return new ValidationResult(string.Concat(results));
-				}
-
-				context.DisplayName = AuxiliaryDataReader.Fields.SupplyPower;
-				if (!Validator.TryValidateValue(entry.Y, context, results, yValidationRules)) {
-					return new ValidationResult(string.Concat(results));
-				}
-
-				context.DisplayName = AuxiliaryDataReader.Fields.MechPower;
-				if (!Validator.TryValidateValue(entry.Z, context, results, zValidationRules)) {
-					return new ValidationResult(string.Concat(results));
-				}
-			}
-			return ValidationResult.Success;
-		}
-	}
-
-	public class AdvancedAuxData
-	{
-		public AuxiliaryModel AuxiliaryAssembly;
-
-		public string AdvancedAuxiliaryFilePath;
-
-		public string AuxiliaryVersion;
-	}
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Data
+{
+	[CustomValidation(typeof(AuxiliaryData), "ValidateAuxMap")]
+	public sealed class AuxiliaryData
+	{
+		[Required, Range(double.Epsilon, 1)]
+		public double EfficiencyToSupply { get; private set; }
+
+		[Required, Range(double.Epsilon, double.MaxValue)]
+		public double TransmissionRatio { get; private set; }
+
+		[Required, Range(double.Epsilon, 1)]
+		public double EfficiencyToEngine { get; private set; }
+
+		[Required] private readonly DelaunayMap _map;
+
+		private string auxId;
+
+		public Watt GetPowerDemand(PerSecond nAuxiliary, Watt powerAuxOut)
+		{
+			var value = _map.Interpolate(nAuxiliary.Value(), powerAuxOut.Value());
+			if (value.HasValue) {
+				return value.Value.SI<Watt>();
+			}
+			value = _map.Extrapolate(nAuxiliary.Value(), powerAuxOut.Value());
+			return value.Value.SI<Watt>();
+		}
+
+		internal AuxiliaryData(string id, double transmissionRatio, double efficiencyToEngine, double efficiencyToSupply,
+			DelaunayMap map)
+		{
+			auxId = id;
+			_map = map;
+			TransmissionRatio = transmissionRatio;
+			EfficiencyToEngine = efficiencyToEngine;
+			EfficiencyToSupply = efficiencyToSupply;
+		}
+
+		/// <summary>
+		/// Validates the aux map.
+		/// </summary>
+		/// <param name="data">The data.</param>
+		/// <param name="context">The validation context.</param>
+		/// <returns></returns>
+		// ReSharper disable once UnusedMember.Global
+		public static ValidationResult ValidateAuxMap(AuxiliaryData data, ValidationContext context)
+		{
+			var xValidationRules = new[] { new RangeAttribute(0, double.MaxValue) };
+			var yValidationRules = new[] { new RangeAttribute(0, 100.SI().Kilo.Watt.Value()) };
+			var zValidationRules = new[] { new RangeAttribute(0, 100.SI().Kilo.Watt.Value()) };
+
+			var results = new List<ValidationResult>();
+			foreach (var entry in data._map.Entries) {
+				context.DisplayName = AuxiliaryDataReader.Fields.AuxSpeed;
+				if (!Validator.TryValidateValue(entry.X, context, results, xValidationRules)) {
+					return new ValidationResult(string.Concat(results));
+				}
+
+				context.DisplayName = AuxiliaryDataReader.Fields.SupplyPower;
+				if (!Validator.TryValidateValue(entry.Y, context, results, yValidationRules)) {
+					return new ValidationResult(string.Concat(results));
+				}
+
+				context.DisplayName = AuxiliaryDataReader.Fields.MechPower;
+				if (!Validator.TryValidateValue(entry.Z, context, results, zValidationRules)) {
+					return new ValidationResult(string.Concat(results));
+				}
+			}
+			return ValidationResult.Success;
+		}
+	}
+
+	public class AdvancedAuxData
+	{
+		public AuxiliaryModel AuxiliaryAssembly;
+
+		public string AdvancedAuxiliaryFilePath;
+
+		public string AuxiliaryVersion;
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs
index e9ea12ac4d..13e3415b60 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/DrivingCycleData.cs
@@ -47,7 +47,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		MeasuredSpeed,
 		MeasuredSpeedGear,
 		PTO,
-        EPTP
+        VTP
 	}
 
 	public static class CycleTypeHelper
@@ -170,6 +170,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 				get { return (Math.Tan(RoadGradient.Value()) * 100).SI<Scalar>(); }
 			}
 
+			public KilogramPerSecond Fuelconsumption;
+
 			/// <summary>
 			/// relative altitude of the driving cycle over distance
 			/// </summary>
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EPTPCombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EPTPCombustionEngine.cs
deleted file mode 100644
index 0405652043..0000000000
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EPTPCombustionEngine.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Models.Simulation;
-using TUGraz.VectoCore.Models.Simulation.Data;
-using TUGraz.VectoCore.Models.SimulationComponent.Data;
-using TUGraz.VectoCore.OutputData;
-
-namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
-{
-    public class EPTPCombustionEngine : CombustionEngine
-    {
-        public EPTPCombustionEngine(IVehicleContainer container, CombustionEngineData modelData, bool pt1Disabled = false) : base(container, modelData, pt1Disabled) { }
-
-        //protected override void DoWriteModalResults(IModalDataContainer container)
-        //{
-        //    ValidatePowerDemand(CurrentState.EngineTorque, CurrentState.DynamicFullLoadTorque,
-        //        CurrentState.FullDragTorque);
-
-        //    //var avgEngineSpeed = (PreviousState.EngineSpeed + CurrentState.EngineSpeed) / 2.0;
-        //    var avgEngineSpeed = DataBus.CycleData.LeftSample.EngineSpeed;
-        //    if (avgEngineSpeed.IsSmaller(EngineIdleSpeed,
-        //        DataBus.ExecutionMode == ExecutionMode.Engineering ? 20.RPMtoRad() : 1e-3.RPMtoRad())) {
-        //        Log.Warn("EngineSpeed below idling speed! n_eng_avg: {0}, n_idle: {1}", avgEngineSpeed,
-        //            EngineIdleSpeed);
-        //    }
-        //    container[ModalResultField.P_eng_fcmap] = CurrentState.EngineTorque * avgEngineSpeed;
-        //    container[ModalResultField.P_eng_out] = container[ModalResultField.P_eng_out] is DBNull
-        //        ? CurrentState.EngineTorqueOut * avgEngineSpeed
-        //        : container[ModalResultField.P_eng_out];
-        //    container[ModalResultField.P_eng_inertia] = CurrentState.InertiaTorqueLoss * avgEngineSpeed;
-
-        //    container[ModalResultField.n_eng_avg] = avgEngineSpeed;
-        //    container[ModalResultField.T_eng_fcmap] = CurrentState.EngineTorque;
-
-        //    container[ModalResultField.P_eng_full] = CurrentState.DynamicFullLoadTorque * avgEngineSpeed;
-        //    container[ModalResultField.P_eng_full_stat] = CurrentState.StationaryFullLoadTorque * avgEngineSpeed;
-        //    container[ModalResultField.P_eng_drag] = CurrentState.FullDragTorque * avgEngineSpeed;
-        //    container[ModalResultField.Tq_full] = CurrentState.DynamicFullLoadTorque;
-        //    container[ModalResultField.Tq_drag] = CurrentState.FullDragTorque;
-
-        //    var result = ModelData.ConsumptionMap.GetFuelConsumption(CurrentState.EngineTorque, avgEngineSpeed,
-        //        DataBus.ExecutionMode != ExecutionMode.Declaration);
-        //    if (DataBus.ExecutionMode != ExecutionMode.Declaration && result.Extrapolated) {
-        //        Log.Warn("FuelConsumptionMap was extrapolated: range for FC-Map is not sufficient: n: {0}, torque: {1}",
-        //            avgEngineSpeed.Value(), CurrentState.EngineTorque.Value());
-        //    }
-        //    var pt1 = ModelData.FullLoadCurves[DataBus.Gear].PT1(avgEngineSpeed);
-        //    if (DataBus.ExecutionMode == ExecutionMode.Declaration && pt1.Extrapolated) {
-        //        Log.Error("requested rpm below minimum rpm in pt1 - extrapolating. n_eng_avg: {0}",
-        //            avgEngineSpeed);
-        //    }
-
-        //    var fc = result.Value;
-        //    var fcAux = fc;
-
-        //    var fcWHTC = fcAux * ModelData.FuelConsumptionCorrectionFactor;
-        //    var fcAAUX = fcWHTC;
-        //    var advancedAux = EngineAux as BusAuxiliariesAdapter;
-        //    if (advancedAux != null) {
-        //        advancedAux.DoWriteModalResults(container);
-        //        fcAAUX = advancedAux.AAuxFuelConsumption;
-        //    }
-        //    var fcFinal = fcAAUX;
-
-        //    container[ModalResultField.FCMap] = fc;
-        //    container[ModalResultField.FCAUXc] = fcAux;
-        //    container[ModalResultField.FCWHTCc] = fcWHTC;
-        //    container[ModalResultField.FCAAUX] = fcAAUX;
-        //    container[ModalResultField.FCFinal] = fcFinal;
-        //}
-
-        protected override PerSecond GetEngineSpeed(PerSecond angularSpeed)
-        {
-            return DataBus.CycleData.LeftSample.EngineSpeed;
-        }
-    }
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineFanAuxiliary.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineFanAuxiliary.cs
new file mode 100644
index 0000000000..d9c158fa36
--- /dev/null
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineFanAuxiliary.cs
@@ -0,0 +1,27 @@
+using System;
+using TUGraz.VectoCommon.Utils;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
+{
+	public class EngineFanAuxiliary
+	{
+		protected readonly double[] FanCoefficients;
+
+		protected readonly double FanDiameter;
+
+		public EngineFanAuxiliary(double[] fanParameters, Meter fanDiameter)
+		{
+			if (fanParameters.Length < 3) {
+				throw new ArgumentException("Three fan parameters are required!");
+			}
+			FanCoefficients = fanParameters;
+			FanDiameter = fanDiameter.ConvertTo().Milli.Meter.Value();
+		}
+
+		public Watt PowerDemand(PerSecond fanSpeed)
+		{
+
+			return (FanCoefficients[0] * Math.Pow(fanSpeed.AsRPM / FanCoefficients[1], 3) * Math.Pow(FanDiameter / FanCoefficients[2], 5) * 1000).SI<Watt>();
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs
new file mode 100644
index 0000000000..ea93e1afa1
--- /dev/null
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCombustionEngine.cs
@@ -0,0 +1,21 @@
+using System;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
+{
+    public class VTPCombustionEngine : CombustionEngine
+    {
+        public VTPCombustionEngine(IVehicleContainer container, CombustionEngineData modelData, bool pt1Disabled = false) : base(container, modelData, pt1Disabled) { }
+
+
+        protected override PerSecond GetEngineSpeed(PerSecond angularSpeed)
+        {
+            return DataBus.CycleData.LeftSample.EngineSpeed;
+        }
+    }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EPTPCycle.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs
similarity index 90%
rename from VectoCore/VectoCore/Models/SimulationComponent/Impl/EPTPCycle.cs
rename to VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs
index 93521a6144..957d0479aa 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EPTPCycle.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/VTPCycle.cs
@@ -13,11 +13,11 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 {
-    internal class EPTPCycle : PWheelCycle
+    internal class VTPCycle : PWheelCycle
     {
         private uint StartGear;
 
-        public EPTPCycle(VehicleContainer container, IDrivingCycleData cycle, double axleGearRatio,
+        public VTPCycle(VehicleContainer container, IDrivingCycleData cycle, double axleGearRatio,
             VehicleData vehicleData, Dictionary<uint, double> gearRatios) : base(container, cycle) { }
 
         public override IResponse Initialize()
@@ -97,22 +97,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
         protected override void InitializeCycleData()
         {
             FirstRun = false;
-            var gearRatios = RunData.GearboxData.Gears.ToDictionary(g => g.Key, g => g.Value.Ratio);
+			var minEngineSpeed = (RunData.EngineData.FullLoadCurves[0].RatedSpeed - RunData.EngineData.IdleSpeed) *
+								Constants.SimulationSettings.ClutchClosingSpeedNorm + RunData.EngineData.IdleSpeed;
+
+			var gearRatios = RunData.GearboxData.Gears.ToDictionary(g => g.Key, g => g.Value.Ratio);
 
             var stopped = false;
            
             foreach (var entry in Data.Entries) {
                 stopped = stopped || entry.VehicleTargetSpeed.IsEqual(0.KMPHtoMeterPerSecond(),
                               0.3.KMPHtoMeterPerSecond());
-                entry.WheelAngularVelocity =
+                entry.AngularVelocity =
                     entry.VehicleTargetSpeed.IsEqual(0.KMPHtoMeterPerSecond(), 0.3.KMPHtoMeterPerSecond())
                         ? 0.RPMtoRad()
-                        : entry.VehicleTargetSpeed / RunData.VehicleData.DynamicTyreRadius;
-                entry.Torque = entry.VehicleTargetSpeed.IsEqual(0, 0.1)
-                    ? 0.SI<NewtonMeter>()
-                    : entry.PWheel / entry.WheelAngularVelocity;
+                        : entry.WheelAngularVelocity;
 
-                var cardanSpeed = entry.VehicleTargetSpeed / RunData.VehicleData.DynamicTyreRadius *
+				var cardanSpeed = entry.WheelAngularVelocity *
                                   RunData.AxleGearData.AxleGear.Ratio * (RunData.AngledriveData?.Angledrive.Ratio ?? 1);
                 if (cardanSpeed.IsEqual(0, 1)) {
                     entry.Gear = 0;
@@ -127,7 +127,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
                 if (stopped && gear < StartGear)
                     entry.Gear = StartGear;
                 else
-                    entry.Gear = gear == 1 && cardanSpeed * gearRatios[1] < RunData.EngineData.IdleSpeed ? 0 : gear;
+                    entry.Gear = gear == 1 && cardanSpeed * gearRatios[1] <= minEngineSpeed ? 0 : gear;
                 if (gear > StartGear)
                     stopped = false;
             }
diff --git a/VectoCore/VectoCore/Resources/Declaration/VAUX/HVAC-Table.csv b/VectoCore/VectoCore/Resources/Declaration/VAUX/HVAC-Table.csv
index 5cb1fa8f1f..091638a7c0 100644
--- a/VectoCore/VectoCore/Resources/Declaration/VAUX/HVAC-Table.csv
+++ b/VectoCore/VectoCore/Resources/Declaration/VAUX/HVAC-Table.csv
@@ -13,10 +13,10 @@ None       , 16        , 0         , 0                 , 0              , 0
 Default    , 1         ,           , 150               , 150            ,                   ,
 Default    , 2         , 200       , 200               , 150            ,                   ,
 Default    , 3         ,           , 200               , 150            ,                   ,
-Default    , 4         , 350       , 200               ,                , 300               ,
-Default    , 5         , 350       , 200               ,                ,                   ,
-Default    , 9         , 350       , 200               ,                , 300               ,
-Default    , 10        , 350       , 200               ,                ,                   ,
+Default    , 4         , 350       , 200               , 200            , 300               ,
+Default    , 5         , 350       , 200               , 200            ,                   ,
+Default    , 9         , 350       , 200               , 200            , 300               ,
+Default    , 10        , 350       , 200               , 200            ,                   ,
 Default    , 11        , 350       , 200               ,                , 300               , 200
 Default    , 12        , 350       , 200               ,                ,                   , 200
 Default    , 16        ,           ,                   ,                ,                   , 200
diff --git a/VectoCore/VectoCore/Resources/Declaration/VAUX/SP-Table.csv b/VectoCore/VectoCore/Resources/Declaration/VAUX/SP-Table.csv
index ec4bf35e34..ca1eda4f91 100644
--- a/VectoCore/VectoCore/Resources/Declaration/VAUX/SP-Table.csv
+++ b/VectoCore/VectoCore/Resources/Declaration/VAUX/SP-Table.csv
@@ -2,13 +2,13 @@ HDV Class , Long haul , Regional delivery , Urban delivery , Municipal utility ,
 1         ,           , 240/20/20         , 220/20/30      ,                   ,
 2         , 340/30/0  , 290/30/20         , 260/20/30      ,                   ,
 3         ,           , 310/30/30         , 280/30/40      ,                   ,
-4         , 510/100/0 , 490/40/40         ,                , 430/30/50         ,
+4         , 510/100/0 , 490/40/40         , 480/80/60      , 430/30/50         ,
 5         , 600/120/0 , 540/90/40         , 480/80/60      ,                   ,
 6         ,           ,                   ,                ,                   ,
 7         ,           ,                   ,                ,                   ,
 8         ,           ,                   ,                ,                   ,
-9         , 600/120/0 , 490/60/40         ,                , 430/30/50         ,
-10        , 450/120/0 , 440/90/40         ,                ,                   ,
+9         , 600/120/0 , 490/60/40         , 480/80/60      , 430/30/50         ,
+10        , 450/120/0 , 440/90/40         , 480/80/60      ,                   ,
 11        , 600/120/0 , 490/60/40         ,                , 430/30/50         , 640/50/80
 12        , 450/120/0 , 440/90/40         ,                ,                   , 640/50/80
 16        ,           ,                   ,                ,                   , 640/50/80
\ No newline at end of file
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 7d4ae9baea..858f6ac925 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -181,15 +181,16 @@
     <Compile Include="Models\SimulationComponent\Impl\ATShiftStrategy.cs" />
     <Compile Include="Models\SimulationComponent\Impl\BaseShiftStrategy.cs" />
     <Compile Include="Models\SimulationComponent\Impl\DrivingCycleEnumerator.cs" />
-    <Compile Include="Models\SimulationComponent\Impl\EPTPCombustionEngine.cs" />
+    <Compile Include="Models\SimulationComponent\Impl\EngineFanAuxiliary.cs" />
+    <Compile Include="Models\SimulationComponent\Impl\VTPCombustionEngine.cs" />
     <Compile Include="Models\SimulationComponent\Impl\MeasuredSpeedDrivingCycle.cs" />
     <Compile Include="Models\SimulationComponent\Impl\PTOCycleController.cs" />
     <Compile Include="Models\SimulationComponent\Impl\PWheelCycle.cs" />
     <Compile Include="Models\SimulationComponent\Impl\TorqueConverter.cs" />
     <Compile Include="Models\SimulationComponent\Impl\IdleControllerSwitcher.cs" />
     <Compile Include="Models\Simulation\Data\ModalResultField.cs" />
-    <Compile Include="InputData\Reader\Impl\EngineeringEPTPModeVectoRunDataFactory.cs" />
-    <Compile Include="Models\SimulationComponent\Impl\EPTPCycle.cs" />
+    <Compile Include="InputData\Reader\Impl\EngineeringVTPModeVectoRunDataFactory.cs" />
+    <Compile Include="Models\SimulationComponent\Impl\VTPCycle.cs" />
     <Compile Include="OutputData\ModFilter\ActualModalDataFilter.cs" />
     <Compile Include="OutputData\ModFilter\ModalData1HzFilter.cs" />
     <Compile Include="OutputData\XML\AbstractXMLWriter.cs" />
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/EngineFanAuxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/EngineFanAuxTest.cs
new file mode 100644
index 0000000000..47cb92aeec
--- /dev/null
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/EngineFanAuxTest.cs
@@ -0,0 +1,23 @@
+using NUnit.Framework;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.SimulationComponent.Impl;
+
+namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
+{
+	[TestFixture]
+	public class EngineFanAuxTest
+	{
+
+		[TestCase(200 ,  53.998),
+			TestCase(500,    843.713),
+			TestCase(1000,   6749.700),
+			TestCase(1300,   14829.091),
+			TestCase(1500,   22780.238)]
+		public void TestEngineFanPowerDemand(double fanSpeedRPM, double expectedPowerDemand)
+		{
+			var engineFan = new EngineFanAuxiliary(new[] { 5.5e-7, 14.62, 108.5 }, 0.225.SI<Meter>());
+
+			Assert.AreEqual(expectedPowerDemand, engineFan.PowerDemand(fanSpeedRPM.RPMtoRad()).Value(), 1e-3);
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 06dec001cf..de45436c96 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -101,6 +101,7 @@
     <Compile Include="Models\SimulationComponentData\TorqueConverterDataTest.cs" />
     <Compile Include="Models\SimulationComponentData\ValidationTest.cs" />
     <Compile Include="Models\SimulationComponent\ATGearboxTest.cs" />
+    <Compile Include="Models\SimulationComponent\EngineFanAuxTest.cs" />
     <Compile Include="Models\SimulationComponent\GearboxShiftLossesTest.cs" />
     <Compile Include="Models\Simulation\FactoryTest.cs" />
     <Compile Include="Models\Simulation\PTOIdleLossTest.cs" />
-- 
GitLab