From bc895d2682380e5a33e704d3599881740ba3e42b Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 3 Apr 2019 15:49:02 +0200
Subject: [PATCH] refactoring: adding engineering xml schema, engineering xml
 reader and engineering xml writer

---
 VECTO/GUI/GearboxForm.vb                      |  36 +-
 VECTO/GUI/MainForm.vb                         |   4 +-
 VECTO/GUI/VectoJobForm.vb                     |   2 +-
 VECTO/GUI/XMLExportJobDialog.vb               |  10 +-
 VECTO/Input Files/Gearbox.vb                  |  26 +-
 VECTO/Input Files/VectoEPTPJob.vb             |   9 +
 VECTO/Input Files/VectoJob.vb                 |  22 +-
 VECTO/OutputData/JSONFileWriter.vb            |  32 +-
 .../VectoCommon/InputData/DataSourceType.cs   |  11 +-
 .../InputData/DeclarationInputData.cs         |   9 +-
 .../InputData/EngineeringInputData.cs         |  56 +-
 .../InputData/IInputDataProvider.cs           |   5 +-
 .../VectoCommon/Models/VehicleCategory.cs     |   1 +
 .../OutputData/IOutputFileWriter.cs           |   2 +-
 .../Resources/XMLNames.Designer.cs            |  84 ++-
 .../VectoCommon/Resources/XMLNames.resx       |  15 +
 VectoConsole/Program.cs                       |   2 +-
 .../InputData/FileIO/JSON/JSONGearboxData.cs  |   2 +-
 .../InputData/FileIO/JSON/JSONInputData.cs    |  22 +-
 .../Declaration/DataProvider/XMLGearData.cs   |  19 +-
 .../Factory/IDeclarationInjectFactory.cs      |   2 +-
 .../Reader/Impl/XMLComponentReader.cs         |   2 +-
 .../Reader/Impl/XMLDeclarationInputReader.cs  |   2 +-
 .../XMLDeclarationReaderInjectModule.cs       |   5 -
 ...ractEngineeringXMLComponentDataProvider.cs | 216 -------
 .../AbstractCommonComponentType.cs            |  74 +++
 ...actEngineeringXMLComponentDataProvider.cs} | 135 ++--
 .../AbstractVehicleEngineeringType.cs         |   9 +
 .../DataProvider/AbstractXMLType.cs           |  81 +++
 .../DataProvider/XMLCyclesDataProvider.cs     |  78 +++
 .../DataProvider/XMLDriverAcceleration.cs     |  48 ++
 .../XMLEngineeringAirdragDataProvider.cs      | 104 +++
 .../XMLEngineeringAngledriveDataProvider.cs   |  96 +++
 .../XMLEngineeringAuxiliariesDataProvider.cs  | 193 ++++++
 .../XMLEngineeringAxlegearDataProvider.cs     | 109 ++++
 .../XMLEngineeringAxlesDataProvider.cs        | 238 +++++++
 .../XMLEngineeringDriverDataProvider.cs       |  70 ++
 .../XMLEngineeringDriverLookAhead.cs          |  96 +++
 .../XMLEngineeringEngineDataProvider.cs       | 214 +++++++
 .../XMLEngineeringGearboxDataProvider.cs      | 238 +++++++
 .../XMLEngineeringGearshiftData.cs            | 128 ++++
 .../XMLEngineeringInputDataProvider.cs        |  72 +++
 .../XMLEngineeringJobInputDataProvider.cs     | 106 +++
 .../DataProvider/XMLEngineeringOverspeed.cs   |  58 ++
 .../XMLEngineeringRetarderDataProvider.cs     |  95 +++
 ...LEngineeringTorqueConverterDataProvider.cs |  92 +++
 ...ngineeringVehicleComponentsDataProvider.cs | 104 +++
 .../XMLEngineeringVehicleDataProvider.cs      | 304 +++++++++
 .../XMLTyreEngineeringDataProvider.cs         |  72 +++
 .../Factory/IEngineeringInjectFactory.cs      |  13 -
 .../IEngineeringReaderInjectFactory.cs        |  77 +++
 .../XML/Engineering/IXMLComponentsReader.cs   |  38 ++
 .../XML/Engineering/IXMLDriverDataReader.cs   |  16 +
 .../Engineering/IXMLEngineeringInputReader.cs |   3 +-
 .../XML/Engineering/IXMLJobDataReader.cs      |  13 +
 .../Engineering/Interfaces/IXMLAirdragData.cs |   6 +
 .../Interfaces/IXMLAngledriveData.cs          |   6 +
 .../Interfaces/IXMLAuxiliairesData.cs         |   9 +
 .../Interfaces/IXMLAuxiliaryData.cs           |   6 +
 .../Interfaces/IXMLAxleEngineeringData.cs     |   9 +
 .../Interfaces/IXMLAxlegearData.cs            |   6 +
 .../Engineering/Interfaces/IXMLAxlesData.cs   |   9 +
 .../Interfaces/IXMLCyclesDataProvider.cs      |  10 +
 .../Interfaces/IXMLDriverAcceleration.cs      |   9 +
 .../Engineering/Interfaces/IXMLEngineData.cs  |   6 +
 .../Interfaces/IXMLEngineeringDriverData.cs   |   9 +
 .../IXMLEngineeringGearshiftData.cs           |   7 +
 .../Interfaces/IXMLEngineeringInputData.cs    |   2 +-
 .../Interfaces/IXMLEngineeringJobInputData.cs |  11 +
 .../IXMLEngineeringVehicleComponentsData.cs   |   8 +
 .../Interfaces/IXMLEngineeringVehicleData.cs  |  18 +
 .../Engineering/Interfaces/IXMLGearData.cs    |   6 +
 .../Engineering/Interfaces/IXMLGearboxData.cs |   9 +
 .../Interfaces/IXMLLookaheadData.cs           |   5 +
 .../Interfaces/IXMLOverspeedData.cs           |   8 +
 .../Interfaces/IXMLRetarderData.cs            |   6 +
 .../Interfaces/IXMLTorqueconverterData.cs     |   6 +
 .../Engineering/Interfaces/IXMLTyreData.cs    |   6 +
 .../XMLEngineeringReaderTestOverrides.cs      |  28 +
 .../XMLEngineeringReaderV07InjectModule.cs    |  84 +++
 .../XMLEngineeringReaderV10InjectModule.cs    |  86 +++
 .../Reader/AbstractExternalResourceReader.cs  |  90 +++
 .../Reader/XMLComponentsEngineeringReader.cs  | 268 ++++++++
 .../Engineering/Reader/XMLDriverDataReader.cs | 125 ++++
 .../Reader/XMLEngineeringInputReader.cs       |  64 ++
 .../Engineering/Reader/XMLJobDataReader.cs    |  69 ++
 .../XMLEngineeringAirdragDataProvider.cs      |  73 ---
 .../XMLEngineeringAngledriveDataProvider.cs   |  73 ---
 .../XMLEngineeringAuxiliaryDataProvider.cs    | 139 ----
 .../XMLEngineeringAxlegearDataProvider.cs     |  77 ---
 .../XMLEngineeringDriverDataProvider.cs       | 192 ------
 .../XMLEngineeringEngineDataProvider.cs       | 144 -----
 .../XMLEngineeringGearboxDataProvider.cs      | 174 -----
 .../XMLEngineeringInputDataProvider.cs        | 201 ------
 .../XMLEngineeringJobInputDataProvider.cs     | 260 --------
 .../XMLEngineeringReaderInjectModule.cs       |  35 +
 ...LEngineeringTorqueConverterDataProvider.cs | 111 ----
 .../XMLEngineeringVehicleDataProvider.cs      | 435 -------------
 .../FileIO/XML/XMLInputDataNinjectModule.cs   |  22 +
 .../VectoCore/InputData/Impl/InputData.cs     |  17 +
 .../EngineeringDataAdapter.cs                 |  26 +-
 .../EngineeringModeVectoRunDataFactory.cs     |   5 +-
 .../Models/Simulation/ISimulatorFactory.cs    |  24 +
 .../Simulation/ISimulatorFactoryFactory.cs    |  13 +
 .../Models/Simulation/Impl/JobContainer.cs    |   2 +-
 .../Simulation/Impl/SimulatorFactory.cs       |   4 +-
 .../SimulationFactoryNinjectModule.cs         |  86 +++
 .../VectoCore/Ninject/VectoNinjectModule.cs   |  31 +-
 .../Factory/EngineeringWriterFactory.cs       | 106 +++
 .../IEngineeringWriterInjectFactory.cs        |  10 +
 .../IXMLEngineeringComponentWriter.cs         |  65 ++
 .../Interfaces/IXMLEngineeringEngineWriter.cs |   4 +
 .../Interfaces/IXMLEngineeringJobWriter.cs    |  13 +
 .../Interfaces/IXMLEngineeringWriter.cs       |  29 +
 .../XMLEngineeringWriterTestOverrides.cs      |  26 +
 .../XMLEngineeringWriterV10InjectModule.cs    |  86 +++
 .../Writer/AbstractComponentWriter.cs         | 171 +++++
 .../DriverData/XMLAccelerationDataWriter.cs   |  64 ++
 .../XMLEngineeringLookaheadDataWriter.cs      |  74 +++
 .../XMLEngineeringOverspeedDataWriter.cs      |  53 ++
 .../DriverData/XMLShiftParmeterDataWriter.cs  |  58 ++
 .../Writer/XMLEngineeringADASWriterV10.cs     |  35 +
 .../Writer/XMLEngineeringAirdragWriter.cs     |  69 ++
 .../Writer/XMLEngineeringAngledriveWriter.cs  |  61 ++
 .../Writer/XMLEngineeringAuxiliariesWriter.cs |  22 +
 .../Writer/XMLEngineeringAuxiliaryWriter.cs   |  22 +
 .../Writer/XMLEngineeringAxleWriter.cs        | 113 ++++
 .../Writer/XMLEngineeringAxlegearWriter.cs    |  62 ++
 .../Writer/XMLEngineeringAxlesWriter.cs       |  67 ++
 .../Writer/XMLEngineeringComponentsWriter.cs  | 122 ++++
 .../Writer/XMLEngineeringDriverDataWriter.cs  |  67 ++
 .../Writer/XMLEngineeringEngineWriter.cs      | 102 +++
 .../Writer/XMLEngineeringGearDataWriter.cs    |  80 +++
 .../Writer/XMLEngineeringGearboxWriter.cs     |  66 ++
 .../Writer/XMLEngineeringJobWriter.cs         | 128 ++++
 .../Writer/XMLEngineeringRetarderWriter.cs    |  52 ++
 .../XMLEngineeringTorqueconverterWriter.cs    |  60 ++
 .../Writer/XMLEngineeringTyreWriter.cs        |  56 ++
 .../Writer/XMLEngineeringVehicleDataWriter.cs | 119 ++++
 .../XML/Engineering/XMLEngineeringWriter.cs   | 176 +++++
 .../XMLEngineeringWriterInjectModule.cs       |  36 ++
 .../XML/Engineering/XMLWriterMapping.cs       | 146 +++++
 .../OutputData/XML/XMLEngineeringWriter.cs    | 602 ------------------
 .../Resources/XSD/VectoDeclarationJob.xsd     |   1 +
 .../Resources/XSD/VectoDefinitions.xsd        |   9 -
 .../XSD/VectoEngineeringComponent.1.0.xsd     |  10 +
 .../XSD/VectoEngineeringComponent.xsd         |  11 +
 .../VectoEngineeringDefinitions.1.0.TEST.xsd  |  57 ++
 .../XSD/VectoEngineeringDefinitions.xsd       |  11 +
 .../XSD/VectoEngineeringInput.1.0.xsd         |   5 -
 .../VectoCore/Resources/XSD/VectoInput.xsd    |  10 -
 VectoCore/VectoCore/Utils/XMLDefinitions.cs   |  18 +-
 VectoCore/VectoCore/Utils/XMLHelper.cs        |  47 ++
 VectoCore/VectoCore/Utils/XMLValidator.cs     |   1 +
 VectoCore/VectoCore/VectoCore.csproj          | 128 +++-
 .../VectoCoreTest/FileIO/JsonReadTest.cs      |  18 +-
 .../VectoCoreTest/FileIO/JsonWriteTest.cs     |   8 +-
 .../SampleJobEngineering1.0.xml               | 148 +++++
 .../SampleJobEngineering1.1.xml               | 149 +++++
 .../Utils/MockSimulationDataFactory.cs        |   3 +-
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |   6 +
 .../XML/XMLEngineeringInputRefTest.cs         |  51 +-
 .../XML/XMLEngineeringInputSingleTest.cs      | 340 +++++-----
 VectoCore/VectoCoreTest/XML/XMLWritingTest.cs |  32 +-
 VectoCore/VectoXML.spp                        |  67 +-
 165 files changed, 7629 insertions(+), 3228 deletions(-)
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs
 rename VectoCore/VectoCore/InputData/FileIO/XML/Engineering/{XMLEngineeringRetarderDataProvider.cs => DataProvider/AbstractEngineeringXMLComponentDataProvider.cs} (55%)
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs
 delete mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
 create mode 100644 VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs
 create mode 100644 VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs
 create mode 100644 VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs
 create mode 100644 VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs
 create mode 100644 VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs
 delete mode 100644 VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
 delete mode 100644 VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd
 create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd
 create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd
 create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd
 create mode 100644 VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd
 delete mode 100644 VectoCore/VectoCore/Resources/XSD/VectoInput.xsd
 create mode 100644 VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml
 create mode 100644 VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml

diff --git a/VECTO/GUI/GearboxForm.vb b/VECTO/GUI/GearboxForm.vb
index b2344cd72b..56bfa2cb99 100644
--- a/VECTO/GUI/GearboxForm.vb
+++ b/VECTO/GUI/GearboxForm.vb
@@ -15,10 +15,12 @@ Imports System.IO
 Imports System.Linq
 Imports System.Windows.Forms.DataVisualization.Charting
 Imports System.Xml.Linq
+Imports Ninject
 Imports TUGraz.VECTO.Input_Files
 Imports TUGraz.VectoCommon.InputData
 Imports TUGraz.VectoCommon.Models
 Imports TUGraz.VectoCommon.Utils
+Imports TUGraz.VectoCore
 Imports TUGraz.VectoCore.InputData.FileIO.JSON
 Imports TUGraz.VectoCore.InputData.Impl
 Imports TUGraz.VectoCore.InputData.Reader
@@ -28,6 +30,8 @@ Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 Imports TUGraz.VectoCore.OutputData.FileIO
 Imports TUGraz.VectoCore.OutputData.XML
+Imports TUGraz.VectoCore.OutputData.XML.Engineering
+Imports TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces
 Imports TUGraz.VectoCore.Utils
 
 ''' <summary>
@@ -241,6 +245,7 @@ Public Class GearboxForm
 																IEngineeringInputDataProvider)
 		Dim vehicle As IVehicleEngineeringInputData = inputData.JobInputData.Vehicle
 		Dim gearbox As IGearboxEngineeringInputData = vehicle.Components.GearboxInputData
+	    Dim shiftParams As IGearshiftEngineeringInputData = TryCast(gearbox, IGearshiftEngineeringInputData)
 		Dim axlegear As IAxleGearInputData = vehicle.Components.AxleGearInputData
 
 		_vehicleCategory = vehicleCategory
@@ -286,11 +291,11 @@ Public Class GearboxForm
 												If(gear.MaxInputSpeed Is Nothing, "", gear.MaxInputSpeed.AsRPM.ToGUIFormat())))
 		Next
 
-		TbTqResv.Text = (gearbox.TorqueReserve * 100).ToGUIFormat()
-		TbMinTimeBetweenShifts.Text = gearbox.MinTimeBetweenGearshift.ToGUIFormat()
-		TbTqResvStart.Text = (gearbox.StartTorqueReserve * 100).ToGUIFormat()
-		TbStartSpeed.Text = gearbox.StartSpeed.ToGUIFormat()
-		TbStartAcc.Text = gearbox.StartAcceleration.ToGUIFormat()
+		TbTqResv.Text = (shiftParams.TorqueReserve * 100).ToGUIFormat()
+		TbMinTimeBetweenShifts.Text = shiftParams.MinTimeBetweenGearshift.ToGUIFormat()
+		TbTqResvStart.Text = (shiftParams.StartTorqueReserve * 100).ToGUIFormat()
+		TbStartSpeed.Text = shiftParams.StartSpeed.ToGUIFormat()
+		TbStartAcc.Text = shiftParams.StartAcceleration.ToGUIFormat()
 
 		Dim torqueConverter As ITorqueConverterEngineeringInputData = gearbox.TorqueConverter
 		If torqueConverter Is Nothing OrElse gearbox.Type.ManualTransmission() Then
@@ -310,13 +315,13 @@ Public Class GearboxForm
 				If(torqueConverter.ShiftPolygon Is Nothing, "", GetRelativePath(torqueConverter.ShiftPolygon.Source, basePath))
 			tbTCmaxSpeed.Text =
 				If(torqueConverter.MaxInputSpeed Is Nothing, "", torqueConverter.MaxInputSpeed.AsRPM.ToGUIFormat())
-			tbTCLUpshiftMinAcceleration.Text = torqueConverter.CLUpshiftMinAcceleration.ToGUIFormat()
-			tbTCCUpshiftMinAcceleration.Text = torqueConverter.CCUpshiftMinAcceleration.ToGUIFormat()
+			tbTCLUpshiftMinAcceleration.Text = shiftParams.CLUpshiftMinAcceleration.ToGUIFormat()
+			tbTCCUpshiftMinAcceleration.Text = shiftParams.CCUpshiftMinAcceleration.ToGUIFormat()
 		End If
 
-		tbUpshiftMinAcceleration.Text = gearbox.UpshiftMinAcceleration.ToGUIFormat()
-		tbDownshiftAfterUpshift.Text = gearbox.DownshiftAfterUpshiftDelay.ToGUIFormat()
-		tbUpshiftAfterDownshift.Text = gearbox.UpshiftAfterDownshiftDelay.ToGUIFormat()
+		tbUpshiftMinAcceleration.Text = shiftParams.UpshiftMinAcceleration.ToGUIFormat()
+		tbDownshiftAfterUpshift.Text = shiftParams.DownshiftAfterUpshiftDelay.ToGUIFormat()
+		tbUpshiftAfterDownshift.Text = shiftParams.UpshiftAfterDownshiftDelay.ToGUIFormat()
 
 		tbATShiftTime.Text = gearbox.PowershiftShiftTime.ToGUIFormat()
 
@@ -999,8 +1004,10 @@ Public Class GearboxForm
 			Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data, data)
 			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
 		Else
-			Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data,
-																														data)
+		    Dim kernel As IKernel = new StandardKernel(new VectoNinjectModule)
+		    dim writer As IXMLEngineeringWriter = kernel.Get(of IXMLEngineeringWriter)()
+		    writer.Configuration = new WriterConfiguration() With { .SingleFile = true, .BasePath = filePath }
+			Dim export As XDocument = writer.WriteComponent(TryCast(data, IGearboxEngineeringInputData))
 			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
 		End If
 	End Sub
@@ -1020,7 +1027,10 @@ Public Class GearboxForm
 			Dim export As XDocument = New XMLDeclarationWriter(data.Manufacturer).GenerateVectoComponent(data)
 			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
 		Else
-			Dim export As XDocument = New XMLEngineeringWriter(_gbxFile, True, data.Manufacturer).GenerateVectoComponent(data)
+		    Dim kernel As IKernel = new StandardKernel(new VectoNinjectModule)
+		    dim writer As IXMLEngineeringWriter = kernel.Get(of IXMLEngineeringWriter)()
+		    writer.Configuration = new WriterConfiguration() With { .SingleFile = true, .BasePath = filePath }
+			Dim export As XDocument = writer.WriteComponent(TryCast(data, IAxleGearInputData))
 			export.Save(Path.Combine(filePath, data.ModelName + ".xml"))
 		End If
 	End Sub
diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb
index b264c6a785..31a33ca2cd 100644
--- a/VECTO/GUI/MainForm.vb
+++ b/VECTO/GUI/MainForm.vb
@@ -973,7 +973,7 @@ Imports TUGraz.VectoCore.Utils
                         Dim xmlInputReader as IXMLInputDataReader = kernel.Get(Of IXMLInputDataReader)
                         Select Case rootNode
                             Case XMLNames.VectoInputEngineering
-                                input = New XMLEngineeringInputDataProvider(jobFile, True)
+                                input = xmlInputReader.CreateEngineering(jobFile, True)
                             Case XMLNames.VectoInputDeclaration
                                 input = xmlInputReader.CreateDeclaration(XmlReader.Create(jobFile), True)
                         End Select
@@ -2038,7 +2038,7 @@ Imports TUGraz.VectoCore.Utils
                     Dim xmlInputReader as IXMLInputDataReader = kernel.Get(Of IXMLInputDataReader)
                     Select Case rootNode
                         Case XMLNames.VectoInputEngineering
-                            input = New XMLEngineeringInputDataProvider(f, True)
+                            input = xmlInputReader.CreateEngineering(f, True)
                         Case XMLNames.VectoInputDeclaration
                             input = xmlInputReader.CreateDeclaration(XmlReader.Create(f), True)
                     End Select
diff --git a/VECTO/GUI/VectoJobForm.vb b/VECTO/GUI/VectoJobForm.vb
index 49d5d40ad3..1cd34fee5b 100644
--- a/VECTO/GUI/VectoJobForm.vb
+++ b/VECTO/GUI/VectoJobForm.vb
@@ -469,7 +469,7 @@ Public Class VectoJobForm
 		Else
 			'VACC
 			TbDesMaxFile.Text =
-				If(driver.AccelerationCurve Is Nothing, "", GetRelativePath(driver.AccelerationCurve.Source, _basePath))
+				If(driver.AccelerationCurve Is Nothing, "", GetRelativePath(driver.AccelerationCurve.AccelerationCurve.Source, _basePath))
 
 			cboAdvancedAuxiliaries.Enabled = True
 			Dim auxInput As IAuxiliariesEngineeringInputData = inputData.JobInputData.Vehicle.Components.AuxiliaryInputData
diff --git a/VECTO/GUI/XMLExportJobDialog.vb b/VECTO/GUI/XMLExportJobDialog.vb
index 66ad6efc85..4af8c8992a 100644
--- a/VECTO/GUI/XMLExportJobDialog.vb
+++ b/VECTO/GUI/XMLExportJobDialog.vb
@@ -1,9 +1,12 @@
 Imports System.IO
 Imports System.Xml.Linq
+Imports Ninject
 Imports TUGraz.VectoCommon.Exceptions
 Imports TUGraz.VectoCommon.InputData
 Imports TUGraz.VectoCommon.Models
+Imports TUGraz.VectoCore
 Imports TUGraz.VectoCore.OutputData.XML
+Imports TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces
 
 Public Class XMLExportJobDialog
 	Private _mode As ExecutionMode
@@ -58,8 +61,11 @@ Public Class XMLExportJobDialog
 			If (engineeringData Is Nothing OrElse engineeringData.JobInputData().SavedInDeclarationMode) Then
 				Throw New Exception("Input data is not in engineering mode!")
 			End If
-			Dim document As XDocument =
-					New XMLEngineeringWriter(tbDestination.Text, cbSingleFile.Checked, tbVendor.Text).GenerateVectoJob(engineeringData)
+
+		    Dim kernel As IKernel = new StandardKernel(new VectoNinjectModule)
+		    dim writer As IXMLEngineeringWriter = kernel.Get(of IXMLEngineeringWriter)()
+		    writer.Configuration = new WriterConfiguration() With { .SingleFile = true, .BasePath = tbDestination.Text }
+			Dim document As XDocument =writer.Write(engineeringData)
 			document.Save(Path.Combine(tbDestination.Text, engineeringData.JobInputData().JobName + ".xml"))
 			MessageBox.Show("Successfully exported")
 			Close()
diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb
index 67c38f2497..91610b8b7a 100644
--- a/VECTO/Input Files/Gearbox.vb	
+++ b/VECTO/Input Files/Gearbox.vb	
@@ -30,7 +30,7 @@ Imports TUGraz.VectoCore.Utils
 <CustomValidation(GetType(Gearbox), "ValidateGearbox")>
 Public Class Gearbox
 	Implements IGearboxEngineeringInputData, IGearboxDeclarationInputData, IAxleGearInputData, 
-				ITorqueConverterEngineeringInputData, ITorqueConverterDeclarationInputData
+				ITorqueConverterEngineeringInputData, ITorqueConverterDeclarationInputData, IGearshiftEngineeringInputData
 
 	Private _myPath As String
 	Private _filePath As String
@@ -123,7 +123,7 @@ Public Class Gearbox
 
 		Try
 			Dim writer As JSONFileWriter = JSONFileWriter.Instance
-			writer.SaveGearbox(Me, Me, _filePath)
+			writer.SaveGearbox(Me, Me, Me, _filePath)
 		Catch ex As Exception
 			MsgBox("failed to write Gearbox file: " + ex.Message)
 			Return False
@@ -233,7 +233,7 @@ Public Class Gearbox
 				End Try
 
 				axlegearData = doa.CreateAxleGearData(gearbox)
-				gearboxData = doa.CreateGearboxData(gearbox, engine, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory)
+				gearboxData = doa.CreateGearboxData(gearbox, engine, gearbox, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory)
 			End If
 
 			Dim result As IList(Of ValidationResult) =
@@ -416,14 +416,14 @@ Public Class Gearbox
 	End Property
 
 	Public ReadOnly Property CLUpshiftMinAcceleration As MeterPerSquareSecond _
-		Implements ITorqueConverterEngineeringInputData.CLUpshiftMinAcceleration
+		Implements IGearshiftEngineeringInputData.CLUpshiftMinAcceleration
 		Get
 			Return TCLUpshiftMinAcceleration.SI(Of MeterPerSquareSecond)()
 		End Get
 	End Property
 
 	Public ReadOnly Property CCUpshiftMinAcceleration As MeterPerSquareSecond _
-		Implements ITorqueConverterEngineeringInputData.CCUpshiftMinAcceleration
+		Implements IGearshiftEngineeringInputData.CCUpshiftMinAcceleration
 		Get
 			Return TCCUpshiftMinAcceleration.SI(Of MeterPerSquareSecond)()
 		End Get
@@ -437,20 +437,20 @@ Public Class Gearbox
 	End Property
 
 
-	Public ReadOnly Property TorqueReserve As Double Implements IGearboxEngineeringInputData.TorqueReserve
+	Public ReadOnly Property TorqueReserve As Double Implements IGearshiftEngineeringInputData.TorqueReserve
 		Get
 			Return TorqueResv / 100
 		End Get
 	End Property
 
 	Public ReadOnly Property StartAcceleration As MeterPerSquareSecond _
-		Implements IGearboxEngineeringInputData.StartAcceleration
+		Implements IGearshiftEngineeringInputData.StartAcceleration
 		Get
 			Return StartAcc.SI(Of MeterPerSquareSecond)()
 		End Get
 	End Property
 
-	Public ReadOnly Property StartTorqueReserve As Double Implements IGearboxEngineeringInputData.StartTorqueReserve
+	Public ReadOnly Property StartTorqueReserve As Double Implements IGearshiftEngineeringInputData.StartTorqueReserve
 		Get
 			Return TorqueResvStart / 100
 		End Get
@@ -464,14 +464,14 @@ Public Class Gearbox
 	End Property
 
 	Public ReadOnly Property DownshiftAferUpshiftDelay As Second _
-		Implements IGearboxEngineeringInputData.DownshiftAfterUpshiftDelay
+		Implements IGearshiftEngineeringInputData.DownshiftAfterUpshiftDelay
 		Get
 			Return DownshiftAfterUpshift.SI(Of Second)()
 		End Get
 	End Property
 
 	Public ReadOnly Property UpshiftAfterDownshiftDelay As Second _
-		Implements IGearboxEngineeringInputData.UpshiftAfterDownshiftDelay
+		Implements IGearshiftEngineeringInputData.UpshiftAfterDownshiftDelay
 		Get
 			Return UpshiftAfterDownshift.SI(Of Second)()
 		End Get
@@ -485,7 +485,7 @@ Public Class Gearbox
 
 
 	Public ReadOnly Property IGearboxEngineeringInputData_UpshiftMinAcceleration As MeterPerSquareSecond _
-		Implements IGearboxEngineeringInputData.UpshiftMinAcceleration
+		Implements IGearshiftEngineeringInputData.UpshiftMinAcceleration
 		Get
 			Return UpshiftMinAcceleration.SI(Of MeterPerSquareSecond)()
 		End Get
@@ -493,14 +493,14 @@ Public Class Gearbox
 
 
 	Public ReadOnly Property IGearboxEngineeringInputData_StartSpeed As MeterPerSecond _
-		Implements IGearboxEngineeringInputData.StartSpeed
+		Implements IGearshiftEngineeringInputData.StartSpeed
 		Get
 			Return StartSpeed.SI(Of MeterPerSecond)()
 		End Get
 	End Property
 
 	Public ReadOnly Property MinTimeBetweenGearshift As Second _
-		Implements IGearboxEngineeringInputData.MinTimeBetweenGearshift
+		Implements IGearshiftEngineeringInputData.MinTimeBetweenGearshift
 		Get
 			Return ShiftTime.SI(Of Second)()
 		End Get
diff --git a/VECTO/Input Files/VectoEPTPJob.vb b/VECTO/Input Files/VectoEPTPJob.vb
index c1a771ad49..34aaaaede3 100644
--- a/VECTO/Input Files/VectoEPTPJob.vb	
+++ b/VECTO/Input Files/VectoEPTPJob.vb	
@@ -225,4 +225,13 @@ Public Class VectoVTPJob
 
     Public ReadOnly Property ComponentDigests As IDictionary(Of VectoComponents,IList(Of String)) Implements IManufacturerReport.ComponentDigests
     Public ReadOnly Property JobDigest As DigestData Implements IManufacturerReport.JobDigest
+
+    Public ReadOnly Property DataSource As DataSource Implements IInputDataProvider.DataSource
+        Get
+            Dim retVal As DataSource =  New DataSource() 
+            retVal.SourceType = DataSourceType.JSONFile
+            retVal.SourceFile = FilePath
+            Return retVal
+        End Get
+    End Property
 End Class
diff --git a/VECTO/Input Files/VectoJob.vb b/VECTO/Input Files/VectoJob.vb
index 206c942941..2058b786d8 100644
--- a/VECTO/Input Files/VectoJob.vb	
+++ b/VECTO/Input Files/VectoJob.vb	
@@ -230,7 +230,7 @@ Public Class VectoJob
     End Property
 
 
-    Public ReadOnly Property AccelerationCurve As TableData Implements IDriverEngineeringInputData.AccelerationCurve
+    Public ReadOnly Property AccelerationCurve As IDriverAccelerationData Implements IDriverEngineeringInputData.AccelerationCurve
         Get
             If String.IsNullOrWhiteSpace(_driverAccelerationFile.FullPath) Then Return Nothing
             If Not File.Exists(_driverAccelerationFile.FullPath) Then
@@ -239,15 +239,16 @@ Public Class VectoJob
                             RessourceHelper.ReadStream(
                                 DeclarationData.DeclarationDataResourcePrefix + ".VACC." + _driverAccelerationFile.OriginalPath +
                                 VectoCore.Configuration.Constants.FileExtensions.DriverAccelerationCurve)
-                    Return _
+                    Return  New DriverAccelerationInputData() With{ .AccelerationCurve =
                         VectoCSVFile.ReadStream(cycleDataRes,
                                                 source:=DeclarationData.DeclarationDataResourcePrefix + ".VACC." + _driverAccelerationFile.OriginalPath +
                                                         VectoCore.Configuration.Constants.FileExtensions.DriverAccelerationCurve)
+                    }
                 Catch ex As Exception
                     Return Nothing
                 End Try
             End If
-            Return VectoCSVFile.Read(_driverAccelerationFile.FullPath)
+            Return New DriverAccelerationInputData() With{ .AccelerationCurve = VectoCSVFile.Read(_driverAccelerationFile.FullPath) }
         End Get
     End Property
 
@@ -269,6 +270,11 @@ Public Class VectoJob
         End Get
     End Property
 
+    Public ReadOnly Property GearshiftInputData As IGearshiftEngineeringInputData Implements IDriverEngineeringInputData.GearshiftInputData
+        get
+            Return TryCast( New JSONComponentInputData(_gearboxFile.FullPath, Me).JobInputData.Vehicle.Components.GearboxInputData, IGearshiftEngineeringInputData)
+        End Get
+    End Property
 
     Public Property DesMaxFile(Optional ByVal original As Boolean = False) As String
         Get
@@ -639,6 +645,16 @@ Public Class VectoJob
             Return Me
         End Get
     End Property
+
+    Public ReadOnly Property DataSource As DataSource Implements IInputDataProvider.DataSource
+        Get
+            Dim retVal As DataSource =  New DataSource() 
+            retVal.SourceType = DataSourceType.JSONFile
+            retVal.SourceFile = FilePath
+            Return retVal
+        End Get
+    End Property
+
 End Class
 
 
diff --git a/VECTO/OutputData/JSONFileWriter.vb b/VECTO/OutputData/JSONFileWriter.vb
index 011cdff10c..24c525a75c 100644
--- a/VECTO/OutputData/JSONFileWriter.vb
+++ b/VECTO/OutputData/JSONFileWriter.vb
@@ -74,7 +74,7 @@ Public Class JSONFileWriter
 		Return header
 	End Function
 
-	Public Sub SaveGearbox(gbx As IGearboxEngineeringInputData, axl As IAxleGearInputData, filename As String) _
+	Public Sub SaveGearbox(gbx As IGearboxEngineeringInputData, axl As IAxleGearInputData, gshift As IGearshiftEngineeringInputData, filename As String) _
 		Implements IOutputFileWriter.SaveGearbox
 
 		'Header
@@ -117,11 +117,11 @@ Public Class JSONFileWriter
 			ls.Add(gearDict)
 		Next
 		body.Add(JsonKeys.Gearbox_Gears, ls)
-		body.Add(JsonKeys.Gearbox_TorqueReserve, gbx.TorqueReserve*100)
-		body.Add(JsonKeys.Gearbox_ShiftTime, gbx.MinTimeBetweenGearshift.Value())
-		body.Add(JsonKeys.Gearbox_StartTorqueReserve, gbx.StartTorqueReserve*100)
-		body.Add(JsonKeys.Gearbox_StartSpeed, gbx.StartSpeed.Value())
-		body.Add(JsonKeys.Gearbox_StartAcceleration, gbx.StartAcceleration.Value())
+		body.Add(JsonKeys.Gearbox_TorqueReserve, gshift.TorqueReserve*100)
+		body.Add(JsonKeys.Gearbox_ShiftTime, gshift.MinTimeBetweenGearshift.Value())
+		body.Add(JsonKeys.Gearbox_StartTorqueReserve, gshift.StartTorqueReserve*100)
+		body.Add(JsonKeys.Gearbox_StartSpeed, gshift.StartSpeed.Value())
+		body.Add(JsonKeys.Gearbox_StartAcceleration, gshift.StartAcceleration.Value())
 		body.Add(JsonKeys.Gearbox_GearboxType, gbx.Type.ToString())
 
 		Dim torqueConverter As ITorqueConverterEngineeringInputData = gbx.TorqueConverter
@@ -135,14 +135,14 @@ Public Class JSONFileWriter
 			torqueConverterDict.Add("ShiftPolygon",
 									If (Not gbx.SavedInDeclarationMode AndAlso Not torqueConverter.ShiftPolygon Is Nothing,
 										GetRelativePath(torqueConverter.ShiftPolygon.Source, Path.GetDirectoryName(filename)), ""))
-			torqueConverterDict.Add("CLUpshiftMinAcceleration", torqueConverter.CLUpshiftMinAcceleration.Value())
-			torqueConverterDict.Add("CCUpshiftMinAcceleration", torqueConverter.CCUpshiftMinAcceleration.Value())
+			torqueConverterDict.Add("CLUpshiftMinAcceleration", gshift.CLUpshiftMinAcceleration.Value())
+			torqueConverterDict.Add("CCUpshiftMinAcceleration", gshift.CCUpshiftMinAcceleration.Value())
 		End If
 		body.Add(JsonKeys.Gearbox_TorqueConverter, torqueConverterDict)
 
-		body.Add("DownshiftAfterUpshiftDelay", gbx.DownshiftAfterUpshiftDelay.Value())
-		body.Add("UpshiftAfterDownshiftDelay", gbx.UpshiftAfterDownshiftDelay.Value())
-		body.Add("UpshiftMinAcceleration", gbx.UpshiftMinAcceleration.Value())
+		body.Add("DownshiftAfterUpshiftDelay", gshift.DownshiftAfterUpshiftDelay.Value())
+		body.Add("UpshiftAfterDownshiftDelay", gshift.UpshiftAfterDownshiftDelay.Value())
+		body.Add("UpshiftMinAcceleration", gshift.UpshiftMinAcceleration.Value())
 
 		body.Add("PowershiftShiftTime", gbx.PowershiftShiftTime.Value())
 
@@ -308,7 +308,7 @@ Public Class JSONFileWriter
 		Dim driver As IDriverEngineeringInputData =  input.DriverInputData
 		
 		If Not job.SavedInDeclarationMode Then
-			body.Add("VACC", GetRelativePath(driver.AccelerationCurve.Source, basePath))
+			body.Add("VACC", GetRelativePath(driver.AccelerationCurve.AccelerationCurve.Source, basePath))
 		End If
 		'body.Add("StartStop", New Dictionary(Of String, Object) From {
 		'			{"Enabled", driver.StartStop.Enabled},
@@ -370,10 +370,10 @@ Public Class JSONFileWriter
 		Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object)
 		body.Add("SavedInDeclMode", declarationmode)
 		body.Add("DeclarationVehicle", GetRelativePath(job.Vehicle.DataSource.SourceFile, Path.GetDirectoryName(filename)))
-        if declarationmode Then
-            body.add("ManufacturerRecord", GetRelativePath(job.ManufacturerReportInputData.Source, Path.GetDirectoryName(filename)))
-            body.Add("Mileage", job.Mileage.ConvertToKiloMeter().Value)
-        End If
+		if declarationmode Then
+			body.add("ManufacturerRecord", GetRelativePath(job.ManufacturerReportInputData.Source, Path.GetDirectoryName(filename)))
+			body.Add("Mileage", job.Mileage.ConvertToKiloMeter().Value)
+		End If
 		body.Add("FanPowerCoefficients", job.FanPowerCoefficents)
 		body.Add("FanDiameter", job.FanDiameter.Value())
 		body.Add("Cycles",
diff --git a/VectoCommon/VectoCommon/InputData/DataSourceType.cs b/VectoCommon/VectoCommon/InputData/DataSourceType.cs
index 6aa6e157df..3a0efe5913 100644
--- a/VectoCommon/VectoCommon/InputData/DataSourceType.cs
+++ b/VectoCommon/VectoCommon/InputData/DataSourceType.cs
@@ -37,6 +37,15 @@ namespace TUGraz.VectoCommon.InputData
 		CSVFile,
 		JSONFile,
 		Missing,
-		XMLFile
+		XMLFile,
+		XMLEmbedded
+	}
+
+	public static class DataSourceTypeExtensions
+	{
+		public static bool IsXMLFormat(this DataSourceType dst)
+		{
+			return dst == DataSourceType.XMLFile || dst == DataSourceType.XMLEmbedded;
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index 489934a670..fd072a3b0c 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -305,7 +305,8 @@ namespace TUGraz.VectoCommon.InputData
 		AxleType AxleType { get; }
 
 		ITyreDeclarationInputData Tyre { get; }
-		
+
+		DataSource DataSource { get; }
 	}
 
 	public interface ITyreDeclarationInputData : IComponentInputData
@@ -388,6 +389,8 @@ namespace TUGraz.VectoCommon.InputData
 		/// cf. VECTO Input Parameters.xlsx
 		/// </summary>
 		TableData ShiftPolygon { get; }
+
+		DataSource DataSource { get; }
 	}
 
 	public interface IAxleGearInputData : IComponentInputData
@@ -506,12 +509,12 @@ namespace TUGraz.VectoCommon.InputData
 		TableData CycleData { get; }
 	}
 
-	public interface IDriverDeclarationInputData
+	public interface IDriverDeclarationInputData : IDriverModelData
 	{
 		bool SavedInDeclarationMode { get; }
 	}
 
-	public interface IOverSpeedEcoRollDeclarationInputData
+	public interface IOverSpeedEcoRollDeclarationInputData : IDriverModelData
 	{
 		/// <summary>
 		/// P015
diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
index 9b8e2c521e..095ab46ebf 100644
--- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
@@ -82,7 +82,9 @@ namespace TUGraz.VectoCommon.InputData
 	}
 
 	public interface IAdvancedDriverAssistantSystemsEngineering
-	{ }
+	{
+		DataSource DataSource { get; }
+	}
 
 
 	public interface IVehicleComponentsEngineering
@@ -174,6 +176,8 @@ namespace TUGraz.VectoCommon.InputData
 		/// cf. VECTO Input Parameters.xlsx
 		/// </summary>
 		KilogramSquareMeter Inertia { get; }
+
+		Meter DynamicTyreRadius { get; }
 	}
 
 	public interface IGearboxEngineeringInputData : IGearboxDeclarationInputData
@@ -190,6 +194,13 @@ namespace TUGraz.VectoCommon.InputData
 		/// </summary>
 		Second TractionInterruption { get; }
 
+		Second PowershiftShiftTime { get; }
+
+		new ITorqueConverterEngineeringInputData TorqueConverter { get; }
+	}
+
+	public interface IGearshiftEngineeringInputData : ITorqueConverterEngineeringShiftParameterInputData, IDriverModelData
+	{
 		/// <summary>
 		/// P086
 		/// cf. VECTO Input Parameters.xlsx
@@ -239,9 +250,20 @@ namespace TUGraz.VectoCommon.InputData
 
 		MeterPerSquareSecond UpshiftMinAcceleration { get; }
 
-		Second PowershiftShiftTime { get; }
 
-		new ITorqueConverterEngineeringInputData TorqueConverter { get; }
+	}
+
+	public interface ITorqueConverterEngineeringShiftParameterInputData
+	{
+		/// <summary>
+		/// Min Acceleration after C->L upshifts.
+		/// </summary>
+		MeterPerSquareSecond CLUpshiftMinAcceleration { get; }
+
+		/// <summary>
+		/// Min Acceleration after C->C upshifts.
+		/// </summary>
+		MeterPerSquareSecond CCUpshiftMinAcceleration { get; }
 	}
 
 	public interface ITorqueConverterEngineeringInputData : ITorqueConverterDeclarationInputData
@@ -269,15 +291,6 @@ namespace TUGraz.VectoCommon.InputData
 
 		PerSecond MaxInputSpeed { get; }
 
-		/// <summary>
-		/// Min Acceleration after C->L upshifts.
-		/// </summary>
-		MeterPerSquareSecond CLUpshiftMinAcceleration { get; }
-
-		/// <summary>
-		/// Min Acceleration after C->C upshifts.
-		/// </summary>
-		MeterPerSquareSecond CCUpshiftMinAcceleration { get; }
 	}
 
 	public interface IEngineEngineeringInputData : IEngineDeclarationInputData
@@ -306,6 +319,17 @@ namespace TUGraz.VectoCommon.InputData
 		string AdvancedAuxiliaryFilePath { get; }
 	}
 
+	public interface IDriverModelData
+	{
+
+	}
+
+	public interface IDriverAccelerationData : IDriverModelData
+	{
+		TableData AccelerationCurve { get; }
+	}
+
+
 	public interface IDriverEngineeringInputData : IDriverDeclarationInputData
 	{
 		//new IStartStopEngineeringInputData StartStop { get; }
@@ -316,9 +340,11 @@ namespace TUGraz.VectoCommon.InputData
 		/// P009; P033, P034, P035
 		/// cf. VECTO Input Parameters.xlsx
 		/// </summary>
-		TableData AccelerationCurve { get; }
+		IDriverAccelerationData AccelerationCurve { get; }
 
 		ILookaheadCoastingInputData Lookahead { get; }
+
+		IGearshiftEngineeringInputData GearshiftInputData { get; }
 	}
 
 	public interface IOverSpeedEcoRollEngineeringInputData : IOverSpeedEcoRollDeclarationInputData
@@ -342,7 +368,7 @@ namespace TUGraz.VectoCommon.InputData
 		MeterPerSecond UnderSpeed { get; }
 	}
 
-	public interface ILookaheadCoastingInputData
+	public interface ILookaheadCoastingInputData : IDriverModelData
 	{
 		/// <summary>
 		/// P019
@@ -414,5 +440,7 @@ namespace TUGraz.VectoCommon.InputData
 		/// additional constant auxiliary load, similar to Padd; not specified in the cycle but as auxiliary
 		/// </summary>
 		Watt ConstantPowerDemand { get; }
+
+		DataSource DataSource { get; }
 	}
 }
diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
index 2397f81305..3b26742df8 100644
--- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
+++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
@@ -35,7 +35,10 @@ using TUGraz.VectoCommon.Utils;
 
 namespace TUGraz.VectoCommon.InputData
 {
-	public interface IInputDataProvider {}
+	public interface IInputDataProvider
+	{
+		DataSource DataSource { get; }
+	}
 
 	public interface IDeclarationInputDataProvider : IInputDataProvider
 	{
diff --git a/VectoCommon/VectoCommon/Models/VehicleCategory.cs b/VectoCommon/VectoCommon/Models/VehicleCategory.cs
index 04b21f931e..f4927a6adc 100644
--- a/VectoCommon/VectoCommon/Models/VehicleCategory.cs
+++ b/VectoCommon/VectoCommon/Models/VehicleCategory.cs
@@ -35,6 +35,7 @@ namespace TUGraz.VectoCommon.Models
 {
 	public enum VehicleCategory
 	{
+		Unknown,
 		RigidTruck,
 		Tractor,
 		CityBus,
diff --git a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs
index 53050dce43..8f3fd1c3d9 100644
--- a/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs
+++ b/VectoCommon/VectoCommon/OutputData/IOutputFileWriter.cs
@@ -37,7 +37,7 @@ namespace TUGraz.VectoCommon.OutputData
 	{
 		void SaveEngine(IEngineEngineeringInputData eng, string filename);
 
-		void SaveGearbox(IGearboxEngineeringInputData gbx, IAxleGearInputData axl, string filename);
+		void SaveGearbox(IGearboxEngineeringInputData gbx, IAxleGearInputData axl, IGearshiftEngineeringInputData gshift, string filename);
 
 		void SaveVehicle(IVehicleEngineeringInputData vehicle, IAirdragEngineeringInputData airdrag,
 			IRetarderInputData retarder,
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
index a5a5cd7776..0e6081e2eb 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs
@@ -1,33 +1,12 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
 
 namespace TUGraz.VectoCommon.Resources {
     using System;
@@ -891,6 +870,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to PowershiftShiftTime.
+        /// </summary>
+        public static string DriverModel_ShiftStrategyParameters_PowershiftShiftTime {
+            get {
+                return ResourceManager.GetString("DriverModel_ShiftStrategyParameters_PowershiftShiftTime", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to StartAcceleration.
         /// </summary>
@@ -999,6 +987,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to FCCorrection.
+        /// </summary>
+        public static string Engine_FCCorrection {
+            get {
+                return ResourceManager.GetString("Engine_FCCorrection", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to FuelConsumptionMap.
         /// </summary>
@@ -1980,6 +1977,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to CCUpshiftMinAcceleration.
+        /// </summary>
+        public static string TorqueConverter_CCUpshiftMinAcceleration {
+            get {
+                return ResourceManager.GetString("TorqueConverter_CCUpshiftMinAcceleration", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Characteristics.
         /// </summary>
@@ -1998,6 +2004,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to CLUpshiftMinAcceleration.
+        /// </summary>
+        public static string TorqueConverter_CLUpshiftMinAcceleration {
+            get {
+                return ResourceManager.GetString("TorqueConverter_CLUpshiftMinAcceleration", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Inertia.
         /// </summary>
@@ -2007,6 +2022,15 @@ namespace TUGraz.VectoCommon.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to MaxInputSpeed.
+        /// </summary>
+        public static string TorqueConverter_MaxInputSpeed {
+            get {
+                return ResourceManager.GetString("TorqueConverter_MaxInputSpeed", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to ReferenceRPM.
         /// </summary>
diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx
index 60057706b2..4e3ede03d8 100644
--- a/VectoCommon/VectoCommon/Resources/XMLNames.resx
+++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx
@@ -1038,4 +1038,19 @@
   <data name="Report_Results" xml:space="preserve">
     <value>Results</value>
   </data>
+  <data name="Engine_FCCorrection" xml:space="preserve">
+    <value>FCCorrection</value>
+  </data>
+  <data name="DriverModel_ShiftStrategyParameters_PowershiftShiftTime" xml:space="preserve">
+    <value>PowershiftShiftTime</value>
+  </data>
+  <data name="TorqueConverter_CLUpshiftMinAcceleration" xml:space="preserve">
+    <value>CLUpshiftMinAcceleration</value>
+  </data>
+  <data name="TorqueConverter_CCUpshiftMinAcceleration" xml:space="preserve">
+    <value>CCUpshiftMinAcceleration</value>
+  </data>
+  <data name="TorqueConverter_MaxInputSpeed" xml:space="preserve">
+    <value>MaxInputSpeed</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs
index fd63938efe..3cd48720a2 100644
--- a/VectoConsole/Program.cs
+++ b/VectoConsole/Program.cs
@@ -214,7 +214,7 @@ Examples:
 							var rootNode = xDocument == null ? "" : xDocument.Root.Name.LocalName;
 							switch (rootNode) {
 								case "VectoInputEngineering":
-									dataProvider = new XMLEngineeringInputDataProvider(file, true);
+									dataProvider = inputReader.CreateEngineering(file, true);
 									break;
 								case "VectoInputDeclaration":
 									dataProvider = inputReader.CreateDeclaration(XmlReader.Create(file), true);
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
index 017b4c151e..9592e12015 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
@@ -116,7 +116,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	/// }
 	// ReSharper disable once InconsistentNaming
 	public class JSONGearboxDataV5 : JSONFile, IGearboxEngineeringInputData, IAxleGearInputData,
-		ITorqueConverterEngineeringInputData
+		ITorqueConverterEngineeringInputData, IGearshiftEngineeringInputData
 	{
 		public JSONGearboxDataV5(JObject data, string filename, bool tolerateMissing = false)
 			: base(data, filename, tolerateMissing) {}
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index 075ea9fdd6..61fde26b14 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -152,11 +152,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			Gearbox = ReadGearbox();
 			AxleGear = Gearbox as IAxleGearInputData;
 			TorqueConverter = Gearbox as ITorqueConverterEngineeringInputData;
+			GearshiftInputData = Gearbox as IGearshiftEngineeringInputData;
 
 			VehicleData = ReadVehicle();
 		}
 
 		public IGearboxEngineeringInputData Gearbox { get; internal set; }
+
+		public IGearshiftEngineeringInputData GearshiftInputData { get; internal set; }
+
 		public IAxleGearInputData AxleGear { get; internal set; }
 		public ITorqueConverterEngineeringInputData TorqueConverter { get; internal set; }
 		public IEngineEngineeringInputData Engine { get; internal set; }
@@ -462,7 +466,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		public virtual TableData AccelerationCurve
+		public virtual IDriverAccelerationData AccelerationCurve
 		{
 			[System.Diagnostics.CodeAnalysis.SuppressMessage(
 				"Microsoft.Design",
@@ -476,22 +480,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 				}
 
 				try {
-					return ReadTableData(acceleration.Value<string>(), "DriverAccelerationCurve");
+					return new DriverAccelerationInputData() {
+						AccelerationCurve = 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);
+						return new DriverAccelerationInputData() {
+							AccelerationCurve = 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);
+						return new DriverAccelerationInputData() {
+							AccelerationCurve = new TableData(
+								Path.Combine(BasePath, acceleration.Value<string>()) + MissingFileSuffix,
+								DataSourceType.Missing)
+						};
 					}
 				}
 			}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
index bec7194a75..aa5ef90b44 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
@@ -10,9 +10,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 {
 	public abstract class XMLAbstractGearData : AbstractXMLType
 	{
+		
 		protected TableData _lossmap;
 
-		protected XMLAbstractGearData(XmlNode gearNode) : base(gearNode) { }
+		protected XMLAbstractGearData(XmlNode gearNode, string sourceFile) : base(gearNode)
+		{
+			SourceFile = sourceFile;
+		}
+
+		public string SourceFile { get; }
 
 		#region Implementation of ITransmissionInputData
 
@@ -58,6 +64,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return null; }
 		}
 
+		
+
 		#endregion
 	}
 
@@ -65,6 +73,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 	{
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
-		public XMLGearDataV10(XmlNode gearNode) : base(gearNode) { }
+		protected DataSource _dataSource;
+
+		public XMLGearDataV10(XmlNode gearNode, string sourceFile) : base(gearNode, sourceFile) { }
+
+		public virtual DataSource DataSource
+		{
+			get { return _dataSource ?? (_dataSource = new DataSource() { SourceFile = SourceFile, SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) }); }
+		}
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs
index 0b60097407..cfa40aac06 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs
@@ -33,7 +33,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory
 		IXMLGearboxDeclarationInputData CreateGearboxData(
 			string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile);
 
-		IXMLGearData CreateGearData(string version, XmlNode gearNode);
+		IXMLGearData CreateGearData(string version, XmlNode gearNode, string sourceFile);
 
 
 		IXMLTorqueConverterDeclarationInputData CreateTorqueconverterData(
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs
index a8c6f3afc8..8a2e710ed0 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs
@@ -76,7 +76,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		{
 			var version = XMLHelper.GetSchemaVersion(gearNode);
 			try {
-				return Factory.CreateGearData(version, gearNode);
+				return Factory.CreateGearData(version, gearNode, ParentComponent.DataSource.SourceFile);
 			} catch (Exception e) {
 				var gearNumber = gearNode.Attributes?.GetNamedItem(XMLNames.Gearbox_Gear_GearNumber_Attr).InnerText;
 				throw new VectoException(
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs
index fb6d3a5bfc..a39bd6c35f 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs
@@ -38,7 +38,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		private IDeclarationJobInputData JobCreator(string version, XmlNode node, string arg3)
 		{
-			var job = Factory.CreateJobData(version, BaseNode, InputData, InputData.DataSource.SourceFile);
+			var job = Factory.CreateJobData(version, BaseNode, InputData, (InputData as IXMLResource).DataSource.SourceFile);
 			var jobNode = 
 			job.Reader = Factory.CreateJobReader(version, job, JobNode, VerifyXML);
 			return job;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs
index 91462f4e5b..8f963b9922 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/XMLDeclarationReaderInjectModule.cs
@@ -16,15 +16,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 		{
 			Bind<IDeclarationInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider());
 
-			Bind<IXMLInputDataReader>().To<XMLInputDataFactory>();
-
 			Kernel?.Load(new INinjectModule[] {
 				new XMLDeclarationInputDataV10InjectModule(), 
 			});
 
-			// dummy 
-			Bind<IEngineeringInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider());
-
 			#endregion
 		}
 	}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs
deleted file mode 100644
index aff2437d3f..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/AbstractEngineeringXMLComponentDataProvider.cs
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Xml;
-using System.Xml.XPath;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
-using TUGraz.VectoCore.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class AbstractEngineeringXMLComponentDataProvider //: AbstractDeclarationXMLComponentDataProvider
-	{
-		protected readonly XMLEngineeringInputDataProvider InputData;
-
-		protected XPathNavigator Navigator;
-
-		protected readonly string FSBasePath;
-
-		protected string XBasePath = "";
-		protected XmlNamespaceManager Manager;
-
-
-		protected readonly string VehiclePath;
-
-		protected XPathHelper Helper;
-
-		protected readonly XmlDocument XMLDocument;
-
-		protected AbstractEngineeringXMLComponentDataProvider(
-			XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument document, string xmlBasePath, string fsBasePath)
-		{
-			XMLDocument = document;
-			XBasePath = xmlBasePath;
-			FSBasePath = fsBasePath;
-			InputData = xmlEngineeringJobInputDataProvider;
-			Navigator = document.CreateNavigator();
-			Manager = new XmlNamespaceManager(Navigator.NameTable ?? new NameTable());
-			Helper = new XPathHelper(ExecutionMode.Engineering);
-			Helper.AddNamespaces(Manager);
-
-			SourceType = DataSourceType.Embedded;
-		}
-
-		public virtual DataSource DataSource
-		{
-			get { return new DataSource() { SourceFile = Source, SourceVersion = SourceVersion, SourceType = SourceType }; }
-		}
-		public string Source { get { return InputData.Source; } }
-		public DataSourceType SourceType { get; protected set; }
-
-		protected string SourceVersion { get { return XMLHelper.GetVersionFromNamespaceUri(SchemaNamespace); } }
-
-		protected string SchemaNamespace { get { return null; } }
-
-		public bool SavedInDeclarationMode
-		{
-			get { return false; }
-		}
-
-		public  string Manufacturer
-		{
-			get { return GetElementValue(XMLNames.Component_Manufacturer); }
-		}
-
-		public  string Model
-		{
-			get { return GetElementValue(XMLNames.Component_Model); }
-		}
-
-
-		public  string Date
-		{
-			get { return GetElementValue(XMLNames.Component_Date); }
-		}
-
-		public  DigestData DigestValue
-		{
-			get { return null; }
-		}
-
-		public  string CertificationNumber
-		{
-			get { return "N.A."; }
-		}
-
-		public  CertificationMethod CertificationMethod
-		{
-			get { return CertificationMethod.NotCertified; }
-		}
-
-
-		protected TableData ReadCSVResourceFile(string relPath)
-		{
-			if (!ElementExists(Helper.Query(relPath, ExtCsvResourceTag))) {
-				throw new VectoException("Failed to read {0} resource", relPath);
-			}
-			var file =
-				GetAttributeValue(
-					Helper.Query(relPath, ExtCsvResourceTag), XMLNames.ExtResource_File_Attr);
-			var fullFilename = Path.Combine(FSBasePath ?? "", file);
-			if (file == null || !File.Exists(fullFilename)) {
-				throw new VectoException("{1} file not found: {0}", file, relPath);
-			}
-			return VectoCSVFile.Read(fullFilename);
-		}
-
-		protected string ExtCsvResourceTag
-		{
-			get {
-				return Helper.Query(Helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_Type_Attr,
-					XMLNames.ExtResource_Type_Value_CSV));
-			}
-		}
-
-		protected bool ElementExists(string relativePath)
-		{
-			var path = Helper.Query(XBasePath, relativePath.Any() ? relativePath : null);
-
-			var node = Navigator.SelectSingleNode(path, Manager);
-			return node != null;
-		}
-
-		protected string GetElementValue(string relativePath)
-		{
-			var path = Helper.Query(XBasePath, relativePath.Any() ? relativePath : null);
-
-			var node = Navigator.SelectSingleNode(path, Manager);
-			if (node == null) {
-				throw new VectoException("Node {0} not found in input data", path);
-			}
-			return node.InnerXml;
-		}
-
-		protected double GetDoubleElementValue(string relativePath)
-		{
-			return GetElementValue(relativePath).ToDouble();
-		}
-
-		protected string GetAttributeValue(string relativePath, string attrName)
-		{
-			var nodes =
-				Navigator.Select(string.IsNullOrWhiteSpace(relativePath) ? XBasePath : Helper.Query(XBasePath, relativePath),
-					Manager);
-			if (nodes.Count == 0) {
-				return null;
-			}
-			nodes.MoveNext();
-			return nodes.Current.GetAttribute(attrName, "");
-		}
-
-		protected TableData ReadTableData(Dictionary<string, string> attributeMapping, string relativePath,
-			XPathNavigator origin = null)
-		{
-			var startNode = origin ?? Navigator.SelectSingleNode(XBasePath, Manager);
-			if (startNode == null) {
-				throw new VectoException("start node for base-path {0} not found!", XBasePath);
-			}
-			var table = new TableData();
-			foreach (var entry in attributeMapping) {
-				if (startNode.Select(Helper.Query(relativePath, "@" + entry.Value), Manager).Count == 0) {
-					continue;
-				}
-				table.Columns.Add(entry.Key);
-			}
-			var nodes = startNode.Select(relativePath, Manager);
-			while (nodes.MoveNext()) {
-				var row = table.NewRow();
-				foreach (var attribute in attributeMapping) {
-					if (nodes.Current.SelectSingleNode("@" + attribute.Value) != null) {
-						row[attribute.Key] = nodes.Current.GetAttribute(attribute.Value, "");
-					}
-				}
-				table.Rows.Add(row);
-			}
-
-			return table;
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs
new file mode 100644
index 0000000000..d42a916167
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractCommonComponentType.cs
@@ -0,0 +1,74 @@
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	public abstract class AbstractXMLResource : AbstractXMLType, IXMLResource
+	{
+		protected string SourceFile;
+
+		public AbstractXMLResource(XmlNode node, string source) : base(node)
+		{
+			SourceFile = source;
+		}
+
+		public virtual DataSource DataSource
+		{
+			get { return new DataSource() { SourceFile = SourceFile, SourceVersion = SourceVersion, SourceType = SourceType }; }
+		}
+
+
+		protected string SourceVersion { get { return XMLHelper.GetVersionFromNamespaceUri(SchemaNamespace); } }
+
+		protected abstract string SchemaNamespace { get;}
+
+		protected abstract DataSourceType SourceType { get; }
+	}
+
+
+	public abstract class AbstractCommonComponentType : AbstractXMLResource
+	{
+		public AbstractCommonComponentType(XmlNode node, string source) : base(node, source) { }
+
+		
+		public bool SavedInDeclarationMode
+		{
+			get { return false; }
+		}
+
+		public string Manufacturer
+		{
+			get { return GetString(XMLNames.Component_Manufacturer); }
+		}
+
+		public string Model
+		{
+			get { return GetString(XMLNames.Component_Model); }
+		}
+
+		public string Date
+		{
+			get { return GetString(XMLNames.Component_Date); }
+		}
+
+		public virtual CertificationMethod CertificationMethod
+		{
+			get { return CertificationMethod.NotCertified; }
+		}
+
+		public virtual string CertificationNumber
+		{
+			get { return "N.A."; }
+		}
+
+		public virtual DigestData DigestValue
+		{
+			get { return null; }
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractEngineeringXMLComponentDataProvider.cs
similarity index 55%
rename from VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringRetarderDataProvider.cs
rename to VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractEngineeringXMLComponentDataProvider.cs
index 4d5dea4f12..664e9911e2 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringRetarderDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractEngineeringXMLComponentDataProvider.cs
@@ -1,68 +1,67 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Xml;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringRetarderDataProvider : AbstractEngineeringXMLComponentDataProvider, IRetarderInputData
-	{
-		public XMLEngineeringRetarderDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument retarderDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, retarderDocument, xmlBasePath, fsBasePath) {}
-
-		public RetarderType Type
-		{
-			get { return InputData.VehicleData.RetarderType; }
-		}
-
-		public double Ratio
-		{
-			get { return InputData.VehicleData.RetarderRatio; }
-		}
-
-		public TableData LossMap
-		{
-			get
-			{
-				if (ElementExists(Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry))) {
-					return ReadTableData(AttributeMappings.RetarderLossmapMapping,
-						Helper.Query(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry));
-				}
-				return ReadCSVResourceFile(XMLNames.Retarder_RetarderLossMap);
-			}
-		}
-	}
-}
\ No newline at end of file
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2017 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal abstract class AbstractEngineeringXMLComponentDataProvider : AbstractCommonComponentType
+	{
+		protected readonly IXMLEngineeringVehicleData Vehicle;
+
+
+		protected AbstractEngineeringXMLComponentDataProvider(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode baseNode, string source) : base(baseNode, source)
+		{
+			Vehicle = vehicle;
+		}
+
+
+		public override DigestData DigestValue
+		{
+			get { return null; }
+		}
+
+		public override string CertificationNumber
+		{
+			get { return "N.A."; }
+		}
+
+		public override CertificationMethod CertificationMethod
+		{
+			get { return CertificationMethod.NotCertified; }
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs
new file mode 100644
index 0000000000..3a343866c2
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractVehicleEngineeringType.cs
@@ -0,0 +1,9 @@
+using System.Xml;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	public abstract class AbstractVehicleEngineeringType : AbstractCommonComponentType
+	{
+		protected AbstractVehicleEngineeringType(XmlNode node, string source) : base(node, source) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs
new file mode 100644
index 0000000000..8888b8c67b
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/AbstractXMLType.cs
@@ -0,0 +1,81 @@
+using System.Xml;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	public abstract class AbstractXMLType
+	{
+		protected readonly XmlNode BaseNode;
+
+		protected AbstractXMLType(XmlNode node)
+		{
+			BaseNode = node;
+		}
+
+		protected bool ElementExists(string nodeName)
+		{
+			return GetNode(nodeName, BaseNode, required: false) != null;
+		}
+
+		protected string GetString(string nodeName, XmlNode basenode = null, bool required = true)
+		{
+			return GetNode(nodeName, basenode, required)?.InnerText;
+		}
+
+		protected double GetDouble(string nodeName, double? fallbackValue = null)
+		{
+			var node = GetNode(nodeName, required: fallbackValue != null);
+
+			return node?.InnerText.ToDouble() ?? fallbackValue.Value;
+		}
+
+		protected double GetDouble(string[] nodePath, double? fallbackValue = null)
+		{
+			var node = GetNode(nodePath, required: fallbackValue == null);
+
+			return node?.InnerText.ToDouble() ?? fallbackValue.Value;
+		}
+
+		protected bool GetBool(string nodeName) 
+		{
+			return XmlConvert.ToBoolean(GetNode(nodeName).InnerText);
+		}
+
+		protected XmlNode GetNode(string[] nodeName, XmlNode baseNode = null, bool required = true)
+		{
+			return DoGetNode(XMLHelper.QueryLocalName(nodeName), baseNode, required);
+		}
+
+		protected XmlNode GetNode(string nodeName, XmlNode baseNode = null, bool required = true)
+		{
+			return DoGetNode(XMLHelper.QueryLocalName(nodeName), baseNode, required);
+		}
+
+		private XmlNode DoGetNode(string xpathQuery, XmlNode baseNode, bool required)
+		{
+			var node = (baseNode ?? BaseNode)?.SelectSingleNode(xpathQuery);
+			if (required && node == null) {
+				throw new VectoException("Node {0} not found", xpathQuery);
+			}
+
+			return node;
+		}
+
+		protected XmlNodeList GetNodes(string nodeName, XmlNode baseNode = null)
+		{
+			return (baseNode ?? BaseNode).SelectNodes(XMLHelper.QueryLocalName(nodeName));
+		}
+
+		protected XmlNodeList GetNodes(string[] nodeName, XmlNode baseNode = null)
+		{
+			return (baseNode ?? BaseNode).SelectNodes(XMLHelper.QueryLocalName(nodeName));
+		}
+
+		protected string GetAttribute(XmlNode node, string attribute)
+		{
+			return node?.Attributes?.GetNamedItem(attribute)?.InnerText;
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs
new file mode 100644
index 0000000000..fe1f09c759
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLCyclesDataProvider.cs
@@ -0,0 +1,78 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLCyclesDataProviderV07 : AbstractXMLType, IXMLCyclesDataProvider
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected string BasePath;
+
+		public XMLCyclesDataProviderV07(IEngineeringJobInputData jobData, XmlNode baseNode, string basePath) : base(baseNode)
+		{
+			BasePath = basePath;
+		}
+
+
+		public IList<ICycleData> Cycles
+		{
+			get {
+				var retVal = new List<ICycleData>();
+				var cycleNodes = GetNodes(XMLNames.Missions_Cycle);
+				if (cycleNodes == null || cycleNodes.Count == 0) {
+					return retVal;
+				}
+
+				foreach (XmlNode cycleNode in cycleNodes) {
+					var file = cycleNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText;
+					if (string.IsNullOrWhiteSpace(file)) {
+						continue;
+					}
+
+					var fullPath = Path.Combine(BasePath ?? "", file);
+					if (File.Exists(fullPath)) {
+						retVal.Add(
+							new CycleInputData() {
+								Name = Path.GetFileNameWithoutExtension(fullPath),
+								CycleData = VectoCSVFile.Read(fullPath)
+							});
+					} else {
+						try {
+							var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file +
+												Constants.FileExtensions.CycleFile;
+							retVal.Add(
+								new CycleInputData() {
+									Name = Path.GetFileNameWithoutExtension(file),
+									CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName),
+								});
+						} catch {
+							//Log.Debug("Driving Cycle could not be read: " + cycleFile);
+							throw new VectoException("Driving Cycle could not be read: " + file);
+						}
+					}
+				}
+
+				return retVal;
+			}
+		}
+	}
+
+
+	internal class XMLCyclesDataProviderV10 : XMLCyclesDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLCyclesDataProviderV10(IEngineeringJobInputData jobData, XmlNode baseNode, string basePath) : base(
+			jobData, baseNode, basePath) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs
new file mode 100644
index 0000000000..745275d958
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLDriverAcceleration.cs
@@ -0,0 +1,48 @@
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLDriverAccelerationV07 : AbstractXMLType, IXMLDriverAcceleration
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected IXMLEngineeringDriverData DriverData;
+		private IDriverAccelerationData _accelerationCurve;
+
+		public XMLDriverAccelerationV07(IXMLEngineeringDriverData driverData, XmlNode node) : base(node)
+		{
+			DriverData = driverData;
+		}
+
+		public XMLDriverAccelerationV07(TableData accCurve) : base(null)
+		{
+			_accelerationCurve = new DriverAccelerationInputData() { AccelerationCurve = accCurve };
+		}
+
+		public virtual IDriverAccelerationData AccelerationCurve
+		{
+			get {
+				return BaseNode == null
+					? _accelerationCurve
+					: new DriverAccelerationInputData() {
+						AccelerationCurve = XMLHelper.ReadEntriesOrResource(
+							BaseNode, DriverData.DataSource.SourcePath, null, XMLNames.DriverModel_DriverAccelerationCurve_Entry,
+							AttributeMappings.DriverAccelerationCurveMapping)
+					};
+			}
+		}
+	}
+
+	internal class XMLDriverAccelerationV10 : XMLDriverAccelerationV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLDriverAccelerationV10(IXMLEngineeringDriverData driverData, XmlNode node) : base(driverData, node) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs
new file mode 100644
index 0000000000..6164f9a744
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs
@@ -0,0 +1,104 @@
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2017 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringAirdragDataProviderV07 : AbstractEngineeringXMLComponentDataProvider,
+		IXMLAirdragData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringAirdragDataProviderV07(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath)
+			: base(vehicle, axlegearNode, fsBasePath)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		public virtual SquareMeter AirDragArea
+		{
+			get { return GetDouble(XMLNames.Vehicle_AirDragArea).SI<SquareMeter>(); }
+		}
+
+		public virtual SquareMeter TransferredAirDragArea
+		{
+			get { return AirDragArea; }
+		}
+
+		public virtual SquareMeter AirdragArea_0
+		{
+			get { return AirDragArea; }
+		}
+
+		public virtual CrossWindCorrectionMode CrossWindCorrectionMode
+		{
+			get { return GetString(XMLNames.Vehicle_CrossWindCorrectionMode).ParseEnum<CrossWindCorrectionMode>(); }
+		}
+
+		public virtual TableData CrosswindCorrectionMap
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.Vehicle_CrosswindCorrectionData, XMLNames.Vehicle_CrosswindCorrectionData_Entry,
+					AttributeMappings.CrossWindCorrectionMapping);
+			}
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLEngineeringAirdragDataProviderV10 : XMLEngineeringAirdragDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAirdragDataProviderV10(
+			IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base(
+			vehicle, axlegearNode, fsBasePath) { }
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs
new file mode 100644
index 0000000000..c9150b435b
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAngledriveDataProvider.cs
@@ -0,0 +1,96 @@
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2017 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringAngledriveDataProviderV07 : AbstractEngineeringXMLComponentDataProvider,
+		IXMLAngledriveData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringAngledriveDataProviderV07(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath)
+			: base(vehicle, axlegearNode, fsBasePath)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		public virtual AngledriveType Type
+		{
+			get { return Vehicle.AngledriveType; }
+		}
+
+		public virtual double Ratio
+		{
+			get { return GetDouble(XMLNames.AngleDrive_Ratio); }
+		}
+
+		public virtual TableData LossMap
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath,
+					XMLNames.AngleDrive_TorqueLossMap, XMLNames.Angledrive_LossMap_Entry,
+					AttributeMappings.TransmissionLossmapMapping);
+			}
+		}
+
+		public virtual double Efficiency
+		{
+			get { return GetDouble(new[] { XMLNames.AngleDrive_TorqueLossMap, XMLNames.AngleDrive_Efficiency }, double.NaN); }
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLEngineeringAngledriveDataProviderV10 : XMLEngineeringAngledriveDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAngledriveDataProviderV10(
+			IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base(
+			vehicle, axlegearNode, fsBasePath) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs
new file mode 100644
index 0000000000..26807fa2fa
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAuxiliariesDataProvider.cs
@@ -0,0 +1,193 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringAuxiliariesDataProviderV07 : AbstractXMLType, IXMLAuxiliairesData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringAuxiliariesDataProviderV07(
+			IXMLEngineeringVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode) { }
+
+		public IXMLComponentsReader Reader { protected get; set; }
+
+		#region Implementation of IAuxiliariesEngineeringInputData
+
+		public virtual IList<IAuxiliaryEngineeringInputData> Auxiliaries
+		{
+			get {
+				var auxNodes = GetNodes(XMLNames.Auxiliaries_Auxiliary);
+				if (auxNodes == null || auxNodes.Count == 0) {
+					return new List<IAuxiliaryEngineeringInputData>();
+				}
+
+				var retVal = new List<IAuxiliaryEngineeringInputData>();
+				foreach (XmlNode auxNode in auxNodes) {
+					retVal.Add(Reader.Create(auxNode));
+				}
+
+				return retVal;
+			}
+		}
+
+		public virtual AuxiliaryModel AuxiliaryAssembly
+		{
+			get { return AuxiliaryModel.Classic; }
+		}
+
+		public virtual string AuxiliaryVersion
+		{
+			get { return ""; }
+		}
+
+		public virtual string AdvancedAuxiliaryFilePath
+		{
+			get { return ""; }
+		}
+
+		#endregion
+	}
+
+	internal class XMLEngineeringAuxiliariesDataProviderV10 : XMLEngineeringAuxiliariesDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAuxiliariesDataProviderV10(
+			IXMLEngineeringVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(
+			vehicle, componentNode, sourceFile) { }
+	}
+
+	internal class XMLAuxiliaryEngineeringDataV07 : AbstractXMLType, IXMLAuxiliaryData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected string BasePath;
+
+		protected AuxiliaryDataInputData AuxData;
+
+		public XMLAuxiliaryEngineeringDataV07(XmlNode node, string basePath) : base(node)
+		{
+			BasePath = basePath;
+
+			//ReadAuxData();
+		}
+
+		protected virtual AuxiliaryDataInputData ReadAuxData()
+		{
+			var id = BaseNode.Attributes?.GetNamedItem("id")?.InnerText ?? "";
+			var childNode = BaseNode.SelectSingleNode("./*");
+			if (childNode == null) {
+				throw new VectoException("No auxiliary data found! ID: {0}", id);
+			}
+
+			if (childNode.LocalName == XMLNames.ExternalResource) {
+				var auxFile = childNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText;
+				if (string.IsNullOrWhiteSpace(auxFile) || !File.Exists(Path.Combine(BasePath, auxFile))) {
+					throw new VectoException("Auxiliary resource file {0} not found! Aux: {1}", auxFile, id);
+				}
+
+				var retVal = new AuxiliaryDataInputData() {
+					AuxiliaryType = AuxiliaryDemandType.Mapping,
+					ID = id,
+					DataSource =
+						new DataSource() { SourceType = DataSourceType.CSVFile, SourceVersion = "0", SourceFile = auxFile }
+				};
+				AuxiliaryFileHelper.FillAuxiliaryDataInputData(retVal, Path.Combine(BasePath, auxFile));
+				return retVal;
+			}
+
+			if (childNode.LocalName == XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad) {
+				return new AuxiliaryDataInputData {
+					ID = "ConstantAux",
+					AuxiliaryType = AuxiliaryDemandType.Constant,
+					ConstantPowerDemand = childNode.InnerText.ToDouble().SI<Watt>(),
+					DataSource =
+						new DataSource() { SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) }
+				};
+			}
+
+			return new AuxiliaryDataInputData() {
+				AuxiliaryType = AuxiliaryDemandType.Mapping,
+				ID = id,
+				TransmissionRatio =
+					BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_TransmissionRatioToEngine))
+							?.InnerText
+							.ToDouble() ?? 0,
+				EfficiencyToEngine =
+					BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_EfficiencyToEngine))?.InnerText
+							.ToDouble() ?? 0,
+				EfficiencyToSupply =
+					BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_EfficiencyAuxSupply))?.InnerText
+							.ToDouble() ?? 0,
+				DemandMap = XMLHelper.ReadTableData(
+					AttributeMappings.AuxMapMapping,
+					BaseNode.SelectNodes(
+						XMLHelper.QueryLocalName(XMLNames.Auxiliaries_Auxiliary_AuxMap, XMLNames.Auxiliaries_Auxiliary_AuxMap_Entry))),
+				DataSource =
+					new DataSource() { SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) }
+			};
+		}
+
+		#region Implementation of IAuxiliaryEngineeringInputData
+
+		public virtual string ID
+		{
+			get { return AuxData?.ID ?? (AuxData = ReadAuxData()).ID; }
+		}
+
+		public virtual AuxiliaryDemandType AuxiliaryType
+		{
+			get { return AuxData?.AuxiliaryType ?? (AuxData = ReadAuxData()).AuxiliaryType; }
+		}
+
+		public virtual double TransmissionRatio
+		{
+			get { return AuxData?.TransmissionRatio ?? (AuxData = ReadAuxData()).TransmissionRatio; }
+		}
+
+		public virtual double EfficiencyToEngine
+		{
+			get { return AuxData?.EfficiencyToEngine ?? (AuxData = ReadAuxData()).EfficiencyToEngine; }
+		}
+
+		public virtual double EfficiencyToSupply
+		{
+			get { return AuxData?.EfficiencyToSupply ?? (AuxData = ReadAuxData()).EfficiencyToSupply; }
+		}
+
+		public virtual TableData DemandMap
+		{
+			get { return AuxData?.DemandMap ?? (AuxData = ReadAuxData()).DemandMap; }
+		}
+
+		public virtual Watt ConstantPowerDemand
+		{
+			get { return AuxData?.ConstantPowerDemand ?? (AuxData = ReadAuxData()).ConstantPowerDemand; }
+		}
+
+		public DataSource DataSource
+		{
+			get { return AuxData?.DataSource ?? (AuxData = ReadAuxData()).DataSource; }
+		}
+
+		#endregion
+	}
+
+	internal class XMLAuxiliaryEngineeringDataV10 : XMLAuxiliaryEngineeringDataV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLAuxiliaryEngineeringDataV10(XmlNode node, string basePath) : base(node, basePath) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs
new file mode 100644
index 0000000000..feaa1e1d6e
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlegearDataProvider.cs
@@ -0,0 +1,109 @@
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2017 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringAxlegearDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, IXMLAxlegearData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringAxlegearDataProviderV07(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath)
+			: base(vehicle, axlegearNode, fsBasePath)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+
+		public virtual double Ratio
+		{
+			get { return GetDouble(XMLNames.Axlegear_Ratio); }
+		}
+
+		public virtual TableData LossMap
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry,
+					AttributeMappings.TransmissionLossmapMapping);
+			}
+		}
+
+
+		public virtual double Efficiency
+		{
+			get { return GetDouble(new[] { XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_Efficiency }, double.NaN); }
+		}
+
+		public virtual AxleLineType LineType
+		{
+			get { return AxleLineType.SinglePortalAxle; }
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+
+	internal class XMLEngineeringAxlegearDataProviderV10 : XMLEngineeringAxlegearDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAxlegearDataProviderV10(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath)
+			: base(vehicle, axlegearNode, fsBasePath) { }
+
+		public override AxleLineType LineType
+		{
+			get {
+				return GetNode(XMLNames.Axlegear_LineType, required: false)?.InnerText.ParseEnum<AxleLineType>() ??
+						AxleLineType.SinglePortalAxle;
+			}
+		}
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs
new file mode 100644
index 0000000000..3a93a8f0e2
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAxlesDataProvider.cs
@@ -0,0 +1,238 @@
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringAxlesDataProviderV07 : AbstractEngineeringXMLComponentDataProvider,
+		IXMLAxlesData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringAxlesDataProviderV07(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source)
+			: base(vehicle, baseNode, source)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == source ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		#region Implementation of IAxlesEngineeringInputData
+
+		public virtual IList<IAxleEngineeringInputData> AxlesEngineering
+		{
+			get {
+				var axleNodes = GetNodes(new[] { XMLNames.AxleWheels_Axles, XMLNames.AxleWheels_Axles_Axle });
+				if (axleNodes == null || axleNodes.Count == 0) {
+					return new List<IAxleEngineeringInputData>();
+				}
+
+				var retVal = new IAxleEngineeringInputData[axleNodes.Count];
+				foreach (XmlNode axleNode in axleNodes) {
+					var axleNumber = GetAttribute(axleNode, XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr).ToInt();
+					if (axleNumber < 1 || axleNumber > retVal.Length) {
+						throw new VectoException("Axle #{0} exceeds axle count", axleNumber);
+					}
+					if (retVal[axleNumber - 1] != null) {
+						throw new VectoException("Axle #{0} defined multiple times!", axleNumber);
+					}
+
+					retVal[axleNumber - 1] = Reader.CreateAxle(axleNode);
+				}
+
+				return retVal;
+			}
+		}
+
+		public IXMLComponentsReader Reader { protected get; set; }
+
+		#endregion
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+
+		#endregion
+	}
+
+	internal class XMLEngineeringAxlesDataProviderV10 : XMLEngineeringAxlesDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAxlesDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base(
+			vehicle, baseNode, source) { }
+
+		#region Overrides of XMLEngineeringAxlesDataProviderV07
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+	}
+
+	internal class XMLAxleEngineeringDataV07 : AbstractEngineeringXMLComponentDataProvider, IXMLAxleEngineeringData,
+		ITyreEngineeringInputData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLAxleEngineeringDataV07(XmlNode node, IXMLEngineeringVehicleData vehicle) : base(
+			vehicle, node, (vehicle as IXMLResource).DataSource.SourcePath)
+		{
+			SourceType = DataSourceType.XMLEmbedded;
+		}
+
+		#region Implementation of IAxleDeclarationInputData
+
+		public virtual bool TwinTyres
+		{
+			get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_TwinTyres)?.InnerText ?? ""); }
+		}
+
+		public virtual bool Steered
+		{
+			get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_Steered)?.InnerText ?? ""); }
+		}
+
+		public virtual AxleType AxleType
+		{
+			get { return (GetNode(XMLNames.AxleWheels_Axles_Axle_AxleType)?.InnerText ?? "").ParseEnum<AxleType>(); }
+		}
+
+		public virtual double AxleWeightShare
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_WeightShare)?.InnerText.ToDouble() ?? 0; }
+		}
+
+		public virtual ITyreEngineeringInputData Tyre
+		{
+			get { return this; }
+		}
+
+		ITyreDeclarationInputData IAxleDeclarationInputData.Tyre
+		{
+			get { throw new NotImplementedException(); }
+		}
+
+		#endregion
+
+		#region Implementation of ITyreDeclarationInputData
+
+		public virtual string Dimension
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Dimension)?.InnerText; }
+		}
+
+		public virtual double RollResistanceCoefficient
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_RRCISO)?.InnerText.ToDouble() ?? double.NaN; }
+		}
+
+		public virtual Newton TyreTestLoad
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_FzISO)?.InnerText.ToDouble().SI<Newton>(); }
+		}
+
+		#endregion
+
+		#region Implementation of ITyreEngineeringInputData
+
+		public virtual KilogramSquareMeter Inertia
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Inertia)?.InnerText.ToDouble().SI<KilogramSquareMeter>(); }
+		}
+
+		public virtual Meter DynamicTyreRadius
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius)?.InnerText.ToDouble().SI(Unit.SI.Milli.Meter).Cast<Meter>(); }
+		}
+
+		#endregion
+
+		public IXMLComponentsReader Reader { protected get; set; }
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLAxleEngineeringDataV10 : AbstractEngineeringXMLComponentDataProvider, IXMLAxleEngineeringData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		private ITyreEngineeringInputData _tyre;
+
+		public XMLAxleEngineeringDataV10(XmlNode node, IXMLEngineeringVehicleData vehicle) : base(
+			vehicle, node, (vehicle as IXMLResource).DataSource.SourcePath)
+		{
+			SourceType = DataSourceType.XMLEmbedded;
+		}
+
+		#region Implementation of IAxleDeclarationInputData
+
+		public virtual bool TwinTyres
+		{
+			get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_TwinTyres)?.InnerText ?? ""); }
+		}
+
+		public virtual bool Steered
+		{
+			get { return XmlConvert.ToBoolean(GetNode(XMLNames.AxleWheels_Axles_Axle_Steered)?.InnerText ?? ""); }
+		}
+
+		public virtual AxleType AxleType
+		{
+			get { return (GetNode(XMLNames.AxleWheels_Axles_Axle_AxleType)?.InnerText ?? "").ParseEnum<AxleType>(); }
+		}
+
+		public virtual ITyreEngineeringInputData Tyre
+		{
+			get { return _tyre ?? (_tyre = Reader.Tyre); }
+		}
+
+
+		public virtual double AxleWeightShare
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_WeightShare)?.InnerText.ToDouble() ?? 0; }
+		}
+
+		ITyreDeclarationInputData IAxleDeclarationInputData.Tyre
+		{
+			get { return Tyre; }
+		}
+
+		#endregion
+
+		public IXMLComponentsReader Reader { protected get; set; }
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLAxleEngineeringDataV10TEST : XMLAxleEngineeringDataV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST;
+
+		public XMLAxleEngineeringDataV10TEST(XmlNode node, IXMLEngineeringVehicleData vehicle) : base(node, vehicle) { }
+
+		public override bool TwinTyres
+		{
+			get { return XmlConvert.ToBoolean(GetNode("TwinTires")?.InnerText ?? ""); }
+		}
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs
new file mode 100644
index 0000000000..9bdf209ba2
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverDataProvider.cs
@@ -0,0 +1,70 @@
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringDriverDataProviderV07 : AbstractCommonComponentType, IXMLEngineeringDriverData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		private ILookaheadCoastingInputData _lookahead;
+		private IOverSpeedEcoRollEngineeringInputData _overspeed;
+		private IXMLDriverAcceleration _accCurve;
+		private IGearshiftEngineeringInputData _shiftParameters;
+
+		public XMLEngineeringDriverDataProviderV07(
+			IXMLEngineeringInputData inputData,
+			XmlNode driverDataNode, string fsBasePath)
+			: base(driverDataNode, fsBasePath)
+		{
+			SourceType = (inputData as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		public IXMLDriverDataReader Reader { protected get; set; }
+
+		public virtual IDriverAccelerationData AccelerationCurve
+		{
+			get { return (_accCurve ?? (_accCurve = Reader.AccelerationCurveData)).AccelerationCurve; }
+		}
+
+		public virtual ILookaheadCoastingInputData Lookahead
+		{
+			get { return _lookahead ?? (_lookahead = Reader.LookAheadData); }
+		}
+
+		public IGearshiftEngineeringInputData GearshiftInputData
+		{
+			get { return _shiftParameters ?? (_shiftParameters = Reader.ShiftParameters); }
+		}
+
+		public virtual IOverSpeedEcoRollEngineeringInputData OverSpeedEcoRoll
+		{
+			get { return _overspeed ?? (_overspeed = Reader.OverspeedData); }
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLEngineeringDriverDataProviderV10 : XMLEngineeringDriverDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringDriverDataProviderV10(
+			IXMLEngineeringInputData inputData, XmlNode driverDataNode, string fsBasePath) : base(
+			inputData, driverDataNode, fsBasePath) { }
+
+		#region Overrides of XMLEngineeringDriverDataProviderV07
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs
new file mode 100644
index 0000000000..5d1f8f5fe4
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringDriverLookAhead.cs
@@ -0,0 +1,96 @@
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringDriverLookAheadV07 : AbstractXMLType, IXMLLookaheadData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected IXMLEngineeringDriverData DriverData;
+
+		public XMLEngineeringDriverLookAheadV07(IXMLEngineeringDriverData driverData, XmlNode node) : base(node)
+		{
+			DriverData = driverData;
+		}
+
+		#region Implementation of ILookaheadCoastingInputData
+
+		public virtual bool Enabled
+		{
+			get { return GetBool(XMLNames.DriverModel_LookAheadCoasting_Enabled); }
+		}
+
+		public virtual MeterPerSecond MinSpeed
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_Overspeed_MinSpeed, required: false)
+							?.InnerText.ToDouble().KMPHtoMeterPerSecond() ??
+						DeclarationData.Driver.LookAhead.MinimumSpeed;
+			}
+		}
+
+		public virtual double CoastingDecisionFactorOffset
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset, required: false)
+							?.InnerText.ToDouble() ??
+						DeclarationData.Driver.LookAhead.DecisionFactorCoastingOffset;
+			}
+		}
+
+		public virtual double CoastingDecisionFactorScaling
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling, required: false)
+							?.InnerText.ToDouble() ??
+						DeclarationData.Driver.LookAhead.DecisionFactorCoastingScaling;
+			}
+		}
+
+		public virtual double LookaheadDistanceFactor
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor, required: false)
+							?.InnerText.ToDouble() ??
+						DeclarationData.Driver.LookAhead.LookAheadDistanceFactor;
+			}
+		}
+
+		public virtual TableData CoastingDecisionFactorTargetSpeedLookup
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DriverData.DataSource.SourcePath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor,
+					XMLNames.LookAheadCoasting_SpeedDependentDecisionFactor_Entry,
+					AttributeMappings.CoastingDFTargetSpeedLookupMapping);
+			}
+		}
+
+		public virtual TableData CoastingDecisionFactorVelocityDropLookup
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DriverData.DataSource.SourcePath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor,
+					XMLNames.LookAheadCoasting_VelocityDropDecisionFactor_Entry,
+					AttributeMappings.CoastingDFVelocityDropLookupMapping);
+			}
+		}
+
+		#endregion
+	}
+
+	internal class XMLEngineeringDriverLookAheadV10 : XMLEngineeringDriverLookAheadV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringDriverLookAheadV10(IXMLEngineeringDriverData driverData, XmlNode node) :
+			base(driverData, node) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs
new file mode 100644
index 0000000000..db24106aad
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringEngineDataProvider.cs
@@ -0,0 +1,214 @@
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2017 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringEngineDataProviderV07 : AbstractEngineeringXMLComponentDataProvider,
+		IXMLEngineData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringEngineDataProviderV07(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode vehicleNode, string fsBasePath)
+			: base(vehicle, vehicleNode, fsBasePath)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		public XMLEngineeringEngineDataProviderV07(XmlNode node, string sourceFile) : base(null, node, sourceFile) { }
+
+		public virtual CubicMeter Displacement
+		{
+			get { return GetDouble(XMLNames.Engine_Displacement).SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(); }
+		}
+
+		public virtual PerSecond IdleSpeed
+		{
+			get { return GetDouble(XMLNames.Engine_IdlingSpeed).RPMtoRad(); }
+		}
+
+		public virtual double WHTCEngineering
+		{
+			get { return GetDouble(XMLNames.Engine_WHTCEngineering); }
+		}
+
+		public virtual double WHTCMotorway
+		{
+			get { throw new VectoException("Property not available in Engineering Mode"); }
+		}
+
+		public virtual double WHTCRural
+		{
+			get { throw new VectoException("Property not available in Engineering Mode"); }
+		}
+
+		public virtual double WHTCUrban
+		{
+			get { throw new VectoException("Property not available in Engineering Mode"); }
+		}
+
+		public virtual double ColdHotBalancingFactor
+		{
+			get { throw new VectoException("Property not available in Engineering Mode"); }
+		}
+
+		public virtual double CorrectionFactorRegPer
+		{
+			get {
+				return 1;
+
+				//GetDoubleElementValue(XMLNames.Engine_CorrectionFactor_RegPer); 
+			}
+		}
+
+		public virtual double CorrectionFactorNCV
+		{
+			get { return 1; }
+		}
+
+		public virtual FuelType FuelType
+		{
+			get {
+				return FuelType.DieselCI; //GetElementValue(XMLNames.Engine_FuelType).ParseEnum<FuelType>();
+			}
+		}
+
+		public virtual TableData FuelConsumptionMap
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry,
+					AttributeMappings.FuelConsumptionMapMapping);
+			}
+		}
+
+		public virtual TableData FullLoadCurve
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FullLoadCurve_Entry,
+					AttributeMappings.EngineFullLoadCurveMapping);
+			}
+		}
+
+		public virtual Watt RatedPowerDeclared
+		{
+			get {
+				return null; //GetDoubleElementValue(XMLNames.Engine_RatedPower).SI<Watt>(); 
+			}
+		}
+
+		public virtual PerSecond RatedSpeedDeclared
+		{
+			get {
+				return null; //GetDoubleElementValue(XMLNames.Engine_RatedSpeed).RPMtoRad(); 
+			}
+		}
+
+		public virtual NewtonMeter MaxTorqueDeclared
+		{
+			get {
+				return null; //GetDoubleElementValue(XMLNames.Engine_MaxTorque).SI<NewtonMeter>(); 
+			}
+		}
+
+		public virtual KilogramSquareMeter Inertia
+		{
+			get { return GetString(XMLNames.Engine_Inertia, required: false)?.ToDouble().SI<KilogramSquareMeter>(); }
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLEngineeringEngineDataProviderV10 : XMLEngineeringEngineDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringEngineDataProviderV10(
+			XMLEngineeringVehicleDataProviderV07 vehicle, XmlNode vehicleNode, string fsBasePath) : base(
+			vehicle, vehicleNode, fsBasePath) { }
+
+		public XMLEngineeringEngineDataProviderV10(XmlNode node, string sourceFile) : base(node, sourceFile) { }
+
+		public override double WHTCEngineering
+		{
+			get { return GetDouble(XMLNames.Engine_FCCorrection, 1.0); }
+		}
+
+		#region Overrides of XMLEngineeringEngineDataProviderV07
+
+		#region Overrides of XMLEngineeringEngineDataProviderV07
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+
+		#endregion
+	}
+
+	// this class is just for testing reading derived XML datatypes
+	internal class XMLEngineeringEngineDataProviderV10TEST : XMLEngineeringEngineDataProviderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST;
+
+		public XMLEngineeringEngineDataProviderV10TEST(XMLEngineeringVehicleDataProviderV07 vehicle, XmlNode vehicleNode, string fsBasePath) : base(vehicle, vehicleNode, fsBasePath) { }
+
+		public XMLEngineeringEngineDataProviderV10TEST(XmlNode node, string sourceFile) : base(node, sourceFile) { }
+
+		#region Overrides of XMLEngineeringEngineDataProviderV07
+
+		public override PerSecond RatedSpeedDeclared { get {
+			return GetString(XMLNames.Engine_RatedSpeed).Replace("rpm", "").ToDouble(0).RPMtoRad();
+		} }
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+	}
+
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs
new file mode 100644
index 0000000000..64ef5f418d
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearboxDataProvider.cs
@@ -0,0 +1,238 @@
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2017 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System.Collections.Generic;
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringGearboxDataProviderV07 : AbstractEngineeringXMLComponentDataProvider,
+		IXMLGearboxData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		private ITorqueConverterEngineeringInputData _torqueConverter;
+
+		public XMLEngineeringGearboxDataProviderV07(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath)
+			: base(vehicle, axlegearNode, fsBasePath)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		public virtual GearboxType Type
+		{
+			get { return GetString(XMLNames.Gearbox_TransmissionType).ParseEnum<GearboxType>(); }
+		}
+
+
+		public virtual KilogramSquareMeter Inertia
+		{
+			get { return GetDouble(XMLNames.Gearbox_Inertia).SI<KilogramSquareMeter>(); }
+		}
+
+		public virtual Second TractionInterruption
+		{
+			get { return GetDouble(XMLNames.Gearbox_TractionInterruption).SI<Second>(); }
+		}
+
+		public virtual Second PowershiftShiftTime
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_PowershiftShiftTime,
+								((XMLEngineeringInputDataProviderV07)Vehicle.Job.InputData).Document.DocumentElement, required: false)
+							?.InnerText.ToDouble().SI<Second>() ?? Constants.DefaultPowerShiftTime;
+			}
+		}
+
+		public virtual IList<ITransmissionInputData> Gears
+		{
+			get {
+				var gearNodes = GetNodes(new[] { XMLNames.Gearbox_Gears, XMLNames.Gearbox_Gears_Gear });
+				if (gearNodes == null || gearNodes.Count == 0) {
+					return new List<ITransmissionInputData>();
+				}
+
+				var retVal = new List<ITransmissionInputData>();
+				foreach (XmlNode gearNode in gearNodes) {
+					retVal.Add(Reader.CreateGear(gearNode));
+				}
+
+				return retVal;
+			}
+		}
+
+
+		ITorqueConverterDeclarationInputData IGearboxDeclarationInputData.TorqueConverter
+		{
+			get { return TorqueConverter; }
+		}
+
+		public ITorqueConverterEngineeringInputData TorqueConverter
+		{
+			get { return _torqueConverter ?? (_torqueConverter = Reader.TorqueConverter); }
+		}
+
+		public IXMLComponentsReader Reader { protected get; set; }
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+
+	internal class XMLEngineeringGearboxDataProviderV10 : XMLEngineeringGearboxDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringGearboxDataProviderV10(
+			IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base(
+			vehicle, axlegearNode, fsBasePath) { }
+
+		#region Overrides of XMLEngineeringGearboxDataProviderV07
+
+		public override Second PowershiftShiftTime
+		{
+			get { return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_PowershiftShiftTime, required: false)?.InnerText.ToDouble().SI<Second>() ?? Constants.DefaultPowerShiftTime; }
+		}
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+	}
+
+	public abstract class XMLAbstractGearData : AbstractXMLType
+	{
+		protected string BasePath;
+
+		public XMLAbstractGearData(XmlNode node, string basePath) : base(node)
+		{
+			BasePath = basePath;
+		}
+
+		public virtual int Gear
+		{
+			get {
+				return XmlConvert.ToUInt16(
+					BaseNode.Attributes?.GetNamedItem(XMLNames.Gearbox_Gear_GearNumber_Attr).InnerText ?? "0");
+			}
+		}
+
+		public virtual double Ratio
+		{
+			get {
+				return BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Gearbox_Gear_Ratio))?.InnerText.ToDouble() ??
+						double.NaN;
+			}
+		}
+
+		public virtual TableData LossMap
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, BasePath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry,
+					AttributeMappings.TransmissionLossmapMapping);
+			}
+		}
+
+		public virtual double Efficiency
+		{
+			get {
+				return GetNode(new[] { XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_Efficiency })
+							?.InnerText.ToDouble() ?? double.NaN;
+			}
+		}
+	}
+
+	internal class XMLGearDataV07 : XMLAbstractGearData, IXMLGearData
+	{
+		protected DataSource _dataSource;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLGearDataV07(XmlNode gearNode, string basePath) : base(gearNode, basePath) { }
+
+		#region Implementation of ITransmissionInputData
+
+		public virtual NewtonMeter MaxTorque
+		{
+			get {
+				return GetNode(XMLNames.Gearbox_Gears_MaxTorque, required: false)?.InnerText
+																				.ToDouble().SI<NewtonMeter>();
+			}
+		}
+
+		public virtual PerSecond MaxInputSpeed
+		{
+			get { return GetNode(XMLNames.Gearbox_Gear_MaxSpeed, required: false)?.InnerText.ToDouble().RPMtoRad(); }
+		}
+
+		public virtual TableData ShiftPolygon
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, BasePath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry,
+					AttributeMappings.ShiftPolygonMapping);
+			}
+		}
+
+		public virtual DataSource DataSource
+		{
+			get { return _dataSource ?? (_dataSource = new DataSource() {SourceFile = BasePath, SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) }); }
+		}
+
+		#endregion
+	}
+
+	internal class XMLGearDataV10 : XMLGearDataV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLGearDataV10(XmlNode gearNode, string basePath) : base(gearNode, basePath) { }
+
+		public override DataSource DataSource
+		{
+			get { return _dataSource ?? (_dataSource = new DataSource() { SourceFile = BasePath, SourceType = DataSourceType.XMLEmbedded, SourceVersion = XMLHelper.GetVersionFromNamespaceUri(NAMESPACE_URI) }); }
+		}
+
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
new file mode 100644
index 0000000000..0b40d588f2
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringGearshiftData.cs
@@ -0,0 +1,128 @@
+using System.Xml;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringGearshiftDataV07 : AbstractXMLType, IXMLEngineeringGearshiftData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringGearshiftDataV07(XmlNode node) : base(node) { }
+
+		#region Implementation of IGearshiftEngineeringInputData
+
+		//public virtual Second TractionInterruption
+		//{
+		//	get { return GetNode(XMLNames.Gearbox_TractionInterruption)?.InnerText.ToDouble().SI<Second>(); }
+		//}
+
+		public virtual Second MinTimeBetweenGearshift
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift, required: false)
+							?.InnerText.ToDouble().SI<Second>() ?? DeclarationData.Gearbox.MinTimeBetweenGearshifts;
+			}
+		}
+
+		public virtual double TorqueReserve
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve, required: false)?.InnerText.ToDouble() ??
+						DeclarationData.Gearbox.TorqueReserve;
+			}
+		}
+
+		public virtual MeterPerSecond StartSpeed
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed, required: false)
+							?.InnerText.ToDouble().SI<MeterPerSecond>() ?? DeclarationData.Gearbox.StartSpeed;
+			}
+		}
+
+		public virtual MeterPerSquareSecond StartAcceleration
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration, required: false)
+							?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ?? DeclarationData.Gearbox.StartAcceleration;
+			}
+		}
+
+		public virtual double StartTorqueReserve
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve, required: false)
+							?.InnerText.ToDouble() ??
+						DeclarationData.Gearbox.TorqueReserveStart;
+			}
+		}
+
+		public virtual Second DownshiftAfterUpshiftDelay
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay, required: false)
+							?.InnerText.ToDouble().SI<Second>() ??
+						DeclarationData.Gearbox.DownshiftAfterUpshiftDelay;
+			}
+		}
+
+		public virtual Second UpshiftAfterDownshiftDelay
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay, required: false)
+							?.InnerText.ToDouble().SI<Second>() ?? DeclarationData.Gearbox.UpshiftAfterDownshiftDelay;
+			}
+		}
+
+		public virtual MeterPerSquareSecond UpshiftMinAcceleration
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration, required: false)
+							?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ?? DeclarationData.Gearbox.UpshiftMinAcceleration;
+			}
+		}
+
+		public virtual Second PowershiftShiftTime
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_ShiftStrategyParameters_PowershiftShiftTime, required: false)
+							?.InnerText.ToDouble().SI<Second>() ?? 0.8.SI<Second>();
+			}
+		}
+
+		#endregion
+
+		#region Implementation of ITorqueConverterEngineeringShiftParameterInputData
+
+		public virtual MeterPerSquareSecond CLUpshiftMinAcceleration
+		{
+			get {
+				return GetNode(XMLNames.TorqueConverter_CLUpshiftMinAcceleration, required: false)
+							?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ??
+						DeclarationData.Gearbox.UpshiftMinAcceleration;
+			}
+		}
+
+		public virtual MeterPerSquareSecond CCUpshiftMinAcceleration
+		{
+			get {
+				return GetNode(XMLNames.TorqueConverter_CCUpshiftMinAcceleration, required: false)
+							?.InnerText.ToDouble().SI<MeterPerSquareSecond>() ??
+						DeclarationData.Gearbox.UpshiftMinAcceleration;
+			}
+		}
+
+		#endregion
+	}
+
+	internal class XMLEngineeringGearshiftDataV10 : XMLEngineeringGearshiftDataV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringGearshiftDataV10(XmlNode node) : base(node) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs
new file mode 100644
index 0000000000..81fdff48f6
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringInputDataProvider.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Xml;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringInputDataProviderV07 : AbstractXMLResource, IXMLEngineeringInputData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		internal XmlDocument Document;
+
+		protected IEngineeringJobInputData JobData;
+		protected IDriverEngineeringInputData DriverData;
+
+		public IXMLEngineeringInputReader Reader { protected get; set; }
+
+		public XMLEngineeringInputDataProviderV07(XmlDocument xmldoc, string fileName) : base(
+			xmldoc.DocumentElement, fileName)
+		{
+			Document = xmldoc;
+
+			// check for reference elements inside the vehicle or the vehicle is referenced itself
+			var refNodes = Document.DocumentElement?.SelectNodes(
+				String.Format("//*[local-name()='{0}']//*[local-name()='{1}' and @{2}]|/*/*[local-name()='{1}' and @{2}]", XMLNames.Component_Vehicle, XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr));
+			if (refNodes != null && refNodes.Count > 0 && fileName == null) {
+				throw new VectoException("XML input data with file references can not be read via stream!");
+			}
+
+			SourceType = DataSourceType.XMLFile;
+		}
+
+
+		#region Implementation of IEngineeringInputDataProvider
+
+		public virtual IEngineeringJobInputData JobInputData
+		{
+			get { return JobData ?? (JobData = Reader.JobData); }
+		}
+
+		public virtual IDriverEngineeringInputData DriverInputData
+		{
+			get { return DriverData ?? (DriverData = Reader.DriverModel); }
+		}
+
+		#endregion
+
+
+
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLEngineeringInputDataProviderV10 : XMLEngineeringInputDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringInputDataProviderV10(XmlDocument xmldoc, string fileName) : base(xmldoc, fileName) { }
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs
new file mode 100644
index 0000000000..22f15638a1
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringJobInputDataProvider.cs
@@ -0,0 +1,106 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringJobInputDataProviderV07 : AbstractXMLResource, IXMLEngineeringJobInputData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected string FileName;
+		protected IXMLEngineeringInputData InputProvider;
+
+		private IEngineEngineeringInputData _engineOnly;
+		private IVehicleEngineeringInputData _vehicle;
+
+		public IXMLJobDataReader Reader { protected get; set; }
+		private IXMLCyclesDataProvider _cycles;
+
+
+		public XMLEngineeringJobInputDataProviderV07(XmlNode node, IXMLEngineeringInputData inputProvider, string fileName) :
+			base(node, fileName)
+		{
+			InputProvider = inputProvider;
+			FileName = fileName;
+
+			EngineOnlyMode = GetBool(XMLNames.VectoJob_EngineOnlyMode);
+			SourceType = (inputProvider as IXMLResource).DataSource.SourceFile == fileName ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+
+		public virtual IList<ICycleData> Cycles
+		{
+			get { return (_cycles ?? (_cycles = Reader.CreateCycles)).Cycles; }
+		}
+
+		public virtual IEngineEngineeringInputData EngineOnly
+		{
+			get { return _engineOnly ?? (_engineOnly = Reader.CreateEngineOnly); }
+		}
+
+		public virtual bool EngineOnlyMode { get; }
+
+
+		public virtual string JobName
+		{
+			get {
+				return EngineOnlyMode
+					? EngineOnly.Model
+					: (GetAttribute(BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Component_Vehicle)), "id") ??
+						Vehicle.Model + " " + Vehicle.Manufacturer);
+			}
+		}
+
+		public virtual bool SavedInDeclarationMode
+		{
+			get { return false; }
+		}
+
+		public virtual IVehicleEngineeringInputData Vehicle
+		{
+			get { return _vehicle ?? (_vehicle = Reader.CreateVehicle); }
+		}
+
+		IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle
+		{
+			get { return Vehicle; }
+		}
+
+		public string SourePath
+		{
+			get { return FileName == null ? null : Path.GetDirectoryName(Path.GetFullPath(FileName)); }
+		}
+
+		public IXMLEngineeringInputData InputData
+		{
+			get { return InputProvider; }
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+
+	internal class XMLEngineeringJobInputDataProviderV10 : XMLEngineeringJobInputDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10;
+
+		public XMLEngineeringJobInputDataProviderV10(XmlNode node, IXMLEngineeringInputData inputProvider, string fileName) :
+			base(node, inputProvider, fileName) { }
+
+		#region Overrides of XMLEngineeringJobInputDataProviderV07
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs
new file mode 100644
index 0000000000..6b29a3949c
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringOverspeed.cs
@@ -0,0 +1,58 @@
+using System.Xml;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringOverspeedV07 : AbstractXMLType, IXMLOverspeedData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected IXMLEngineeringDriverData DriverData;
+
+		public XMLEngineeringOverspeedV07(IXMLEngineeringDriverData driverData, XmlNode node) : base(node)
+		{
+			DriverData = driverData;
+		}
+
+		#region Implementation of IOverSpeedEcoRollDeclarationInputData
+
+		public virtual DriverMode Mode
+		{
+			get { return GetNode(XMLNames.DriverModel_Overspeed_Mode, required: false)?.InnerText.ParseEnum<DriverMode>() ?? DriverMode.Off; }
+		}
+
+		#endregion
+
+		#region Implementation of IOverSpeedEcoRollEngineeringInputData
+
+		public virtual MeterPerSecond MinSpeed
+		{
+			get { return GetNode(XMLNames.DriverModel_Overspeed_MinSpeed, required: false)?.InnerText.ToDouble().KMPHtoMeterPerSecond(); }
+		}
+
+		public virtual MeterPerSecond OverSpeed
+		{
+			get { return GetNode(XMLNames.DriverModel_Overspeed_AllowedOverspeed, required: false)?.InnerText.ToDouble().KMPHtoMeterPerSecond(); }
+		}
+
+		public virtual MeterPerSecond UnderSpeed
+		{
+			get {
+				return GetNode(XMLNames.DriverModel_Overspeed_AllowedUnderspeed, required: false)?.InnerText.ToDouble().KMPHtoMeterPerSecond();
+			}
+		}
+
+		#endregion
+	}
+
+	internal class XMLEngineeringOverspeedV10 : XMLEngineeringOverspeedV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringOverspeedV10(IXMLEngineeringDriverData driverData, XmlNode node) : base(driverData, node) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs
new file mode 100644
index 0000000000..65aa4c7eac
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringRetarderDataProvider.cs
@@ -0,0 +1,95 @@
+/*
+* This file is part of VECTO.
+*
+* Copyright © 2012-2017 European Union
+*
+* Developed by Graz University of Technology,
+*              Institute of Internal Combustion Engines and Thermodynamics,
+*              Institute of Technical Informatics
+*
+* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
+* by the European Commission - subsequent versions of the EUPL (the "Licence");
+* You may not use VECTO except in compliance with the Licence.
+* You may obtain a copy of the Licence at:
+*
+* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
+*
+* Unless required by applicable law or agreed to in writing, VECTO
+* distributed under the Licence is distributed on an "AS IS" basis,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the Licence for the specific language governing permissions and
+* limitations under the Licence.
+*
+* Authors:
+*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
+*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
+*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
+*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
+*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
+*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
+*/
+
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringRetarderDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, IXMLRetarderData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringRetarderDataProviderV07(
+			IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath)
+			: base(vehicle, axlegearNode, fsBasePath)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == fsBasePath ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		public virtual RetarderType Type
+		{
+			get { return Vehicle.RetarderType; }
+		}
+
+		public virtual double Ratio
+		{
+			get { return Vehicle.RetarderRatio; }
+		}
+
+		public virtual TableData LossMap
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry,
+					AttributeMappings.RetarderLossmapMapping);
+			}
+		}
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLEngineeringRetarderDataProviderV10 : XMLEngineeringRetarderDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringRetarderDataProviderV10(
+			IXMLEngineeringVehicleData vehicle, XmlNode axlegearNode, string fsBasePath) : base(
+			vehicle, axlegearNode, fsBasePath) { }
+
+		#region Overrides of XMLEngineeringRetarderDataProviderV07
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs
new file mode 100644
index 0000000000..343e10ac73
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringTorqueConverterDataProvider.cs
@@ -0,0 +1,92 @@
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl
+{
+	internal class XMLEngineeringTorqueConverterDataProviderV07 : AbstractEngineeringXMLComponentDataProvider,
+		IXMLTorqueconverterData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public XMLEngineeringTorqueConverterDataProviderV07(
+			IXMLEngineeringVehicleData vehicle, XmlNode node, string source) : base(vehicle, node, source)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == source ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		#region Implementation of ITorqueConverterDeclarationInputData
+
+		public virtual TableData TCData
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.TorqueConverter_Characteristics, XMLNames.TorqueConverter_Characteristics_Entry,
+					AttributeMappings.TorqueConverterDataMapping);
+			}
+		}
+
+		#endregion
+
+		#region Implementation of ITorqueConverterEngineeringInputData
+
+		public virtual PerSecond ReferenceRPM
+		{
+			get {
+				return GetNode(XMLNames.TorqueConverter_ReferenceRPM)?.InnerText.ToDouble().RPMtoRad() ??
+						DeclarationData.TorqueConverter.ReferenceRPM;
+			}
+		}
+
+		public virtual KilogramSquareMeter Inertia
+		{
+			get {
+				return GetNode(XMLNames.TorqueConverter_Inertia)?.InnerText.ToDouble().SI<KilogramSquareMeter>() ??
+						0.SI<KilogramSquareMeter>();
+			}
+		}
+
+		public virtual TableData ShiftPolygon
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.TorqueConverter_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry,
+					AttributeMappings.ShiftPolygonMapping);
+			}
+		}
+
+		public virtual PerSecond MaxInputSpeed
+		{
+			get { return GetNode(XMLNames.TorqueConverter_MaxInputSpeed)?.InnerText.ToDouble().RPMtoRad(); }
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLEngineeringTorqueConverterDataProviderV10 : XMLEngineeringTorqueConverterDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringTorqueConverterDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode node, string source) :
+			base(vehicle, node, source) { }
+
+		#region Overrides of XMLEngineeringTorqueConverterDataProviderV07
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs
new file mode 100644
index 0000000000..e0235dfc06
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleComponentsDataProvider.cs
@@ -0,0 +1,104 @@
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringVehicleComponentsDataProviderV07 : AbstractEngineeringXMLComponentDataProvider, IXMLEngineeringVehicleComponentsData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		private IAirdragEngineeringInputData _airdragInputData;
+		private IGearboxEngineeringInputData _gearboxInputData;
+		private IAxleGearInputData _axleGearInputData;
+		private IAngledriveInputData _angledriveInputData;
+		private IEngineEngineeringInputData _engineInputData;
+		private IRetarderInputData _retarderInputData;
+		private IAuxiliariesEngineeringInputData _auxInputData;
+		private IAxlesEngineeringInputData _axleWheels;
+
+		public XMLEngineeringVehicleComponentsDataProviderV07(
+			IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base(vehicle, baseNode, source)
+		{
+			SourceType = DataSourceType.XMLEmbedded;
+		}
+
+		#region Implementation of IVehicleComponentsEngineering
+
+		public override DataSource DataSource
+		{
+			get { return ((IXMLResource)Vehicle).DataSource; }
+		}
+
+		public IXMLComponentsReader ComponentReader { protected get; set; }
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		protected override DataSourceType SourceType { get; }
+
+		public virtual IAirdragEngineeringInputData AirdragInputData
+		{
+			get { return _airdragInputData ?? (_airdragInputData = ComponentReader.AirdragInputData); }
+		}
+
+		public virtual IGearboxEngineeringInputData GearboxInputData
+		{
+			get { return _gearboxInputData ?? (_gearboxInputData = ComponentReader.GearboxData); }
+		}
+		public virtual ITorqueConverterEngineeringInputData TorqueConverterInputData
+		{
+			get { return GearboxInputData.TorqueConverter; }
+		}
+
+		public virtual IAxleGearInputData AxleGearInputData
+		{
+			get { return _axleGearInputData ?? (_axleGearInputData = ComponentReader.AxleGearInputData); }
+		}
+		
+		public virtual IAngledriveInputData AngledriveInputData
+		{
+			get { return _angledriveInputData ?? (_angledriveInputData = ComponentReader.AngularGearInputData); }
+		}
+
+		public virtual IEngineEngineeringInputData EngineInputData
+		{
+			get { return _engineInputData ?? (_engineInputData = ComponentReader.EngineInputData); }
+		}
+
+		public virtual IAuxiliariesEngineeringInputData AuxiliaryInputData
+		{
+			get { return _auxInputData ?? (_auxInputData = ComponentReader.AuxiliaryData); }
+		}
+
+		public virtual IRetarderInputData RetarderInputData
+		{
+			get { return _retarderInputData ?? (_retarderInputData = ComponentReader.RetarderInputData); }
+		}
+
+		public IPTOTransmissionInputData PTOTransmissionInputData { get { return Vehicle; } }
+
+		public IAxlesEngineeringInputData AxleWheels
+		{
+			get { return _axleWheels ?? (_axleWheels = ComponentReader.AxlesEngineeringInputData); }
+		}
+
+		#endregion
+
+		#region Implementation of IXMLResource
+
+		
+		#endregion
+
+	}
+
+	internal class XMLEngineeringVehicleComponentsDataProviderV10 : XMLEngineeringVehicleComponentsDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringVehicleComponentsDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base(vehicle, baseNode, source) { }
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs
new file mode 100644
index 0000000000..4782e983ae
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs
@@ -0,0 +1,304 @@
+using System.Collections.Generic;
+using System.Xml;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLEngineeringVehicleDataProviderV07 : AbstractVehicleEngineeringType, IXMLEngineeringVehicleData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		public IXMLComponentsReader ComponentReader { protected get; set; }
+
+		private IVehicleComponentsEngineering _components;
+		
+
+		public XMLEngineeringVehicleDataProviderV07(
+			IXMLEngineeringJobInputData jobProvider, XmlNode vehicleNode, string fullFilename) :
+			base(vehicleNode, fullFilename)
+		{
+			Job = jobProvider;
+			SourceType = jobProvider.DataSource.SourceFile == fullFilename ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		#region Implementation of IComponentInputData
+
+		public override CertificationMethod CertificationMethod
+		{
+			get { return CertificationMethod.NotCertified; }
+		}
+
+		public override string CertificationNumber
+		{
+			get { return "N.A."; }
+		}
+
+		public override DigestData DigestValue
+		{
+			get { return null; }
+		}
+
+		#endregion
+
+		#region Implementation of IVehicleDeclarationInputData
+
+		public string Identifier { get; }
+
+		public bool ExemptedVehicle
+		{
+			get { return false; }
+		}
+
+		public virtual string VIN
+		{
+			get { return GetString(XMLNames.Vehicle_VIN); }
+		}
+
+		public virtual LegislativeClass LegislativeClass
+		{
+			get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); }
+		}
+
+		public virtual VehicleCategory VehicleCategory
+		{
+			get {
+				return GetNode(XMLNames.Vehicle_VehicleCategory, required: false)?.InnerText.ParseEnum<VehicleCategory>() ??
+						VehicleCategory.Unknown;
+			}
+		}
+
+		public virtual AxleConfiguration AxleConfiguration
+		{
+			get { return AxleConfigurationHelper.Parse(GetString(XMLNames.Vehicle_AxleConfiguration)); }
+		}
+
+		public virtual Kilogram CurbMassChassis
+		{
+			get { return GetDouble(XMLNames.Vehicle_CurbMassChassis).SI<Kilogram>(); }
+		}
+
+		public virtual Kilogram CurbMassExtra
+		{
+			get { return GetDouble(XMLNames.Vehicle_CurbMassExtra).SI<Kilogram>(); }
+		}
+
+		public virtual Kilogram GrossVehicleMassRating
+		{
+			get { return GetDouble(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); }
+		}
+
+		public virtual string ManufacturerAddress
+		{
+			get { return GetString(XMLNames.Component_ManufacturerAddress); }
+		}
+
+		public virtual PerSecond EngineIdleSpeed
+		{
+			get { return GetDouble(XMLNames.Vehicle_IdlingSpeed).RPMtoRad(); }
+		}
+
+		public bool VocationalVehicle
+		{
+			get { return false; }
+		}
+
+		public bool SleeperCab
+		{
+			get { return false; }
+		}
+
+		public TankSystem? TankSystem
+		{
+			get {
+				return ElementExists(XMLNames.Vehicle_NgTankSystem)
+					? EnumHelper.ParseEnum<TankSystem>(GetString(XMLNames.Vehicle_NgTankSystem))
+					: (TankSystem?)null;
+			}
+		}
+
+		
+		public bool ZeroEmissionVehicle
+		{
+			get { return false; }
+		}
+
+		public bool HybridElectricHDV
+		{
+			get { return false; }
+		}
+
+		public bool DualFuelVehicle
+		{
+			get { return false; }
+		}
+
+		public Watt MaxNetPower1
+		{
+			get { return null; }
+		}
+
+		public Watt MaxNetPower2
+		{
+			get { return null; }
+		}
+
+		IVehicleComponentsDeclaration IVehicleDeclarationInputData.Components
+		{
+			get { return null; }
+		}
+
+		IAdvancedDriverAssistantSystemDeclarationInputData IVehicleDeclarationInputData.ADAS
+		{
+			get { return null; }
+		}
+
+
+		public IAdvancedDriverAssistantSystemsEngineering ADAS
+		{
+			get { return null; }
+		}
+
+		public virtual Kilogram Loading
+		{
+			get { return GetDouble(XMLNames.Vehicle_Loading).SI<Kilogram>(); }
+		}
+
+		public virtual Meter DynamicTyreRadius
+		{
+			get {
+				var queryString = XMLHelper.QueryLocalName(
+					XMLNames.Vehicle_Components,
+					XMLNames.Component_AxleWheels,
+					XMLNames.ComponentDataWrapper,
+					XMLNames.AxleWheels_Axles,
+					XMLNames.AxleWheels_Axles_Axle
+				);
+				queryString += string.Format(
+					"/*[local-name()='{0}' and text()='{1}']/ancestor-or-self::*[local-name()='{2}']//*[local-name()='{3}']",
+					XMLNames.AxleWheels_Axles_Axle_AxleType, AxleType.VehicleDriven.ToString(),
+					XMLNames.AxleWheels_Axles_Axle, XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius);
+				var node = BaseNode.SelectSingleNode(queryString);
+				return node?.InnerText.ToDouble().SI(Unit.SI.Milli.Meter).Cast<Meter>();
+			}
+		}
+
+		public virtual IList<ITorqueLimitInputData> TorqueLimits
+		{
+			get {
+				var retVal = new List<ITorqueLimitInputData>();
+
+				var tqLimits = GetNode(XMLNames.Vehicle_TorqueLimits, required: false);
+				if (tqLimits == null) {
+					return retVal;
+				}
+
+				var entries = GetNodes(XMLNames.Vehicle_TorqueLimits_Entry, tqLimits);
+				foreach (XmlNode entry in entries) {
+					retVal.Add(
+						new TorqueLimitInputData() {
+							Gear = GetAttribute(entry, XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr).ToInt(),
+							MaxTorque = GetAttribute(entry, XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr).ToDouble().SI<NewtonMeter>()
+						});
+				}
+
+				return retVal;
+			}
+		}
+
+
+		public virtual Meter Height
+		{
+			get { return GetNode("VehicleHeight")?.InnerText.ToDouble().SI<Meter>(); }
+		}
+
+		public IVehicleComponentsEngineering Components
+		{
+			get { return _components ?? (_components = ComponentReader.ComponentInputData); }
+		}
+
+		#endregion
+
+
+		public virtual RetarderType RetarderType
+		{
+			get { return GetString(XMLNames.Vehicle_RetarderType).ParseEnum<RetarderType>(); }
+		}
+
+		public virtual double RetarderRatio
+		{
+			get { return GetDouble(XMLNames.Vehicle_RetarderRatio); }
+		}
+
+
+		public virtual AngledriveType AngledriveType
+		{
+			get { return GetString(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); }
+		}
+
+		public virtual IXMLEngineeringJobInputData Job { get; }
+
+		#region Implementation of IPTOTransmissionInputData
+
+		public virtual string PTOTransmissionType
+		{
+			get { return GetString(XMLNames.Vehicle_PTOType); }
+		}
+
+		public virtual TableData PTOLossMap
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.Vehicle_PTOIdleLossMap, XMLNames.Vehicle_PTOIdleLossMap_Entry,
+					AttributeMappings.PTOLossMap);
+			}
+		}
+
+		public virtual TableData PTOCycle
+		{
+			get {
+				return XMLHelper.ReadEntriesOrResource(
+					BaseNode, DataSource.SourcePath, XMLNames.Vehicle_PTOCycle, XMLNames.Vehicle_PTOCycle_Entry,
+					AttributeMappings.PTOCycleMap);
+			}
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace
+		{
+			get { return NAMESPACE_URI; }
+		}
+
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+
+	internal class XMLEngineeringVehicleDataProviderV10 : XMLEngineeringVehicleDataProviderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringVehicleDataProviderV10(
+			IXMLEngineeringJobInputData jobProvider, XmlNode vehicleNode, string fullFilename) : base(
+			jobProvider, vehicleNode, fullFilename) { }
+
+		#region Overrides of XMLEngineeringVehicleDataProviderV07
+
+		protected override string SchemaNamespace
+		{
+			get { return NAMESPACE_URI; }
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs
new file mode 100644
index 0000000000..58cdedf66e
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLTyreEngineeringDataProvider.cs
@@ -0,0 +1,72 @@
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
+{
+	internal class XMLTyreEngineeringDataProviderV10 : AbstractEngineeringXMLComponentDataProvider, IXMLTyreData
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLTyreEngineeringDataProviderV10(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) :
+			base(vehicle, baseNode, source)
+		{
+			SourceType = (vehicle as IXMLResource).DataSource.SourceFile == source ? DataSourceType.XMLEmbedded : DataSourceType.XMLFile;
+		}
+
+		#region Implementation of ITyreDeclarationInputData
+
+		public virtual string Dimension
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Dimension, required:false)?.InnerText; }
+		}
+
+		public virtual double RollResistanceCoefficient
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_RRCISO, required: false)?.InnerText.ToDouble() ?? double.NaN; }
+		}
+
+		public virtual Newton TyreTestLoad
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_FzISO, required: false)?.InnerText.ToDouble().SI<Newton>(); }
+		}
+
+		#endregion
+
+		#region Implementation of ITyreEngineeringInputData
+
+		public virtual KilogramSquareMeter Inertia
+		{
+			get { return GetNode(XMLNames.AxleWheels_Axles_Axle_Inertia, required: false)?.InnerText.ToDouble().SI<KilogramSquareMeter>(); }
+		}
+
+		public virtual Meter DynamicTyreRadius
+		{
+			get {
+				return GetNode(XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius, required: false)?.InnerText.ToDouble().SI(Unit.SI.Milli.Meter).Cast<Meter>();
+			}
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLResource
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+
+		protected override DataSourceType SourceType { get; }
+
+		#endregion
+	}
+
+	internal class XMLTyreEngineeringDataProviderV10TEST : XMLTyreEngineeringDataProviderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST;
+
+		public XMLTyreEngineeringDataProviderV10TEST(IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source) : base(vehicle, baseNode, source) { }
+
+		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs
deleted file mode 100644
index 2b7098c4ef..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringInjectFactory.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.Xml;
-using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory
-{
-	public interface IEngineeringInjectFactory
-	{
-		IXMLEngineeringInputData CreateInputProvider(string version, XmlDocument xmldoc, string fileName);
-
-		IXMLEngineeringInputReader CreateInputReader(
-			string version, IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml);
-	}
-}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs
new file mode 100644
index 0000000000..b8a952b600
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Factory/IEngineeringReaderInjectFactory.cs
@@ -0,0 +1,77 @@
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory
+{
+	public interface IEngineeringInjectFactory
+	{
+		IXMLEngineeringInputData CreateInputProvider(string version, XmlDocument xmldoc, string fileName);
+
+		IXMLEngineeringInputReader CreateInputReader(
+			string version, IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml);
+
+		IXMLJobDataReader CreateJobReader(
+			string version, IXMLEngineeringJobInputData jobData, XmlNode jobNode, bool verifyXML);
+
+
+		IXMLDriverDataReader CreateDriverReader(string version, IXMLEngineeringDriverData driverData, XmlNode driverDataNode, bool verifyXML);
+
+		IXMLComponentsReader CreateComponentReader(string version, IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML);
+
+		IXMLComponentsReader CreateAxleReader(string version, IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML);
+
+
+		IXMLEngineeringJobInputData CreateJobData(string version, XmlNode node, IXMLEngineeringInputData inputProvider, string fileName);
+
+		IXMLEngineeringDriverData CreateDriverData(string version, IXMLEngineeringInputData inputData,
+			XmlNode driverDataNode, string fsBasePath);
+
+		IXMLEngineeringGearshiftData CreateShiftParametersData(string version, XmlNode node);
+
+		IXMLCyclesDataProvider CreateCycleData(string version, IEngineeringJobInputData jobData, XmlNode baseNode, string basePath);
+
+		IXMLEngineeringVehicleData CreateVehicleData(string version, IXMLEngineeringJobInputData jobProvider, XmlNode vehicleNode, string fullFilename);
+
+		IXMLAxleEngineeringData CreateAxleData(string version, XmlNode node, IXMLEngineeringVehicleData vehicle);
+
+		IXMLGearData CreateGearData(string version, XmlNode gearNode, string basePath);
+
+		IXMLAuxiliaryData CreateAuxData(string version, XmlNode node, string basePath);
+
+		IXMLAxlegearData CreateAxlegearData(string version, IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath);
+
+		IXMLAngledriveData CreateAngledriveData(string version, IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath);
+
+		IXMLEngineData CreateEngineData(string version, IXMLEngineeringVehicleData vehicle,
+			XmlNode vehicleNode, string fsBasePath);
+
+		IXMLRetarderData CreateRetarderData(string version, IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath);
+
+		IXMLAuxiliairesData CreateAuxiliariesData(string version, IXMLEngineeringVehicleData vehicle, XmlNode componentNode, string sourceFile);
+
+		IXMLGearboxData CreateGearboxData(string version, IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath);
+
+		IXMLAirdragData CreateAirdragData(string version, IXMLEngineeringVehicleData vehicle,
+			XmlNode axlegearNode, string fsBasePath);
+
+		IXMLTorqueconverterData CreateTorqueconverterData(string version, IXMLEngineeringVehicleData vehicle, XmlNode node, string source);
+
+		IXMLAxlesData CreateAxlesData(string version, IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source);
+
+		IXMLTyreData CreateTyre(string version, IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source);
+
+		IXMLEngineData CreateEngineOnlyEngine(string version, XmlNode node, string sourceFile);
+
+		IXMLLookaheadData CreateLookAheadData(string version, IXMLEngineeringDriverData driverData, XmlNode node);
+
+		IXMLOverspeedData CreateOverspeedData(string version, IXMLEngineeringDriverData driverData, XmlNode node);
+
+		IXMLDriverAcceleration CreateAccelerationCurveData(string version, IXMLEngineeringDriverData driverData, XmlNode node);
+		IXMLEngineeringVehicleComponentsData CreateComponentData(string version, IXMLEngineeringVehicleData vehicle, XmlNode baseNode, string source);
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs
new file mode 100644
index 0000000000..436f10e508
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLComponentsReader.cs
@@ -0,0 +1,38 @@
+using System.Xml;
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
+{
+	public interface IXMLComponentsReader
+	{
+		IAxleGearInputData AxleGearInputData { get; }
+
+		IAngledriveInputData AngularGearInputData { get; }
+
+		IEngineEngineeringInputData EngineInputData { get; }
+
+		IRetarderInputData RetarderInputData { get; }
+
+		IAuxiliariesEngineeringInputData AuxiliaryData { get; }
+
+		IGearboxEngineeringInputData GearboxData { get; }
+
+		ITorqueConverterEngineeringInputData TorqueConverter { get; }
+
+		IPTOTransmissionInputData PTOData { get; }
+
+		IAirdragEngineeringInputData AirdragInputData { get; }
+
+		IAxlesEngineeringInputData AxlesEngineeringInputData { get; }
+
+		ITyreEngineeringInputData Tyre { get; }
+
+		IVehicleComponentsEngineering ComponentInputData { get; }
+
+		IAxleEngineeringInputData CreateAxle(XmlNode axleNode);
+
+		ITransmissionInputData CreateGear(XmlNode gearNode);
+
+		IAuxiliaryEngineeringInputData Create(XmlNode auxNode);
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs
new file mode 100644
index 0000000000..b896ec0eba
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLDriverDataReader.cs
@@ -0,0 +1,16 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
+{
+	public interface IXMLDriverDataReader
+	{
+		ILookaheadCoastingInputData LookAheadData { get; }
+
+		IOverSpeedEcoRollEngineeringInputData OverspeedData { get; }
+
+		IXMLDriverAcceleration AccelerationCurveData { get; }
+
+		IGearshiftEngineeringInputData ShiftParameters { get; }
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs
index 4b8dc29403..0ed673f29e 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLEngineeringInputReader.cs
@@ -7,5 +7,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
 		IEngineeringJobInputData JobData { get; }
 
 		IDriverEngineeringInputData DriverModel { get; }
+
 	}
-}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs
new file mode 100644
index 0000000000..508af6f2a2
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/IXMLJobDataReader.cs
@@ -0,0 +1,13 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
+{
+	public interface IXMLJobDataReader {
+		IEngineEngineeringInputData CreateEngineOnly { get; }
+
+		IVehicleEngineeringInputData CreateVehicle { get; }
+
+		IXMLCyclesDataProvider CreateCycles { get; }
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs
new file mode 100644
index 0000000000..cfe5a661b1
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAirdragData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLAirdragData : IAirdragEngineeringInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs
new file mode 100644
index 0000000000..f4bb56fab3
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAngledriveData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces {
+	public interface  IXMLAngledriveData : IAngledriveInputData
+	{ }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs
new file mode 100644
index 0000000000..81cd5beb87
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliairesData.cs
@@ -0,0 +1,9 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLAuxiliairesData : IAuxiliariesEngineeringInputData
+	{
+		IXMLComponentsReader Reader { set; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs
new file mode 100644
index 0000000000..38ae9e611f
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAuxiliaryData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLAuxiliaryData : IAuxiliaryEngineeringInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs
new file mode 100644
index 0000000000..e94c84b2fc
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxleEngineeringData.cs
@@ -0,0 +1,9 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLAxleEngineeringData : IAxleEngineeringInputData, IXMLResource
+	{
+		IXMLComponentsReader Reader { set; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs
new file mode 100644
index 0000000000..0f45dac724
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlegearData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLAxlegearData : IAxleGearInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs
new file mode 100644
index 0000000000..1f66928edb
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLAxlesData.cs
@@ -0,0 +1,9 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLAxlesData : IAxlesEngineeringInputData
+	{
+		IXMLComponentsReader Reader { set; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs
new file mode 100644
index 0000000000..76d20b7ce2
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLCyclesDataProvider.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLCyclesDataProvider
+	{
+		IList<ICycleData> Cycles { get; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs
new file mode 100644
index 0000000000..5c24b6fe96
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLDriverAcceleration.cs
@@ -0,0 +1,9 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLDriverAcceleration
+	{
+		IDriverAccelerationData AccelerationCurve { get; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs
new file mode 100644
index 0000000000..b5669537e5
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLEngineData : IEngineEngineeringInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs
new file mode 100644
index 0000000000..a3aa113fe8
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringDriverData.cs
@@ -0,0 +1,9 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLEngineeringDriverData : IDriverEngineeringInputData, IXMLResource
+	{
+		IXMLDriverDataReader Reader { set; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs
new file mode 100644
index 0000000000..779d497a72
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringGearshiftData.cs
@@ -0,0 +1,7 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLEngineeringGearshiftData : IGearshiftEngineeringInputData,
+		ITorqueConverterEngineeringShiftParameterInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs
index 23e47cf715..54fb54f151 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringInputData.cs
@@ -1,4 +1,4 @@
-using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.InputData;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
 {
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs
new file mode 100644
index 0000000000..d04a069034
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringJobInputData.cs
@@ -0,0 +1,11 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLEngineeringJobInputData : IEngineeringJobInputData, IXMLResource
+	{
+		IXMLJobDataReader Reader { set; }
+
+		IXMLEngineeringInputData InputData { get; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs
new file mode 100644
index 0000000000..7e650b140a
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleComponentsData.cs
@@ -0,0 +1,8 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLEngineeringVehicleComponentsData : IVehicleComponentsEngineering, IXMLResource {
+		IXMLComponentsReader ComponentReader { set; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs
new file mode 100644
index 0000000000..af56267af8
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLEngineeringVehicleData.cs
@@ -0,0 +1,18 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLEngineeringVehicleData : IVehicleEngineeringInputData, IPTOTransmissionInputData, IXMLResource
+	{
+		IXMLComponentsReader ComponentReader { set; }
+
+		AngledriveType AngledriveType { get; }
+
+		RetarderType RetarderType { get; }
+
+		double RetarderRatio { get; }
+
+		IXMLEngineeringJobInputData Job { get; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs
new file mode 100644
index 0000000000..43cbfbc1b6
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLGearData : ITransmissionInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs
new file mode 100644
index 0000000000..6a6e30593c
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLGearboxData.cs
@@ -0,0 +1,9 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLGearboxData : IGearboxEngineeringInputData
+	{
+		IXMLComponentsReader Reader { set; }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs
new file mode 100644
index 0000000000..4448fd17bb
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLLookaheadData.cs
@@ -0,0 +1,5 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces {
+	public interface IXMLLookaheadData : ILookaheadCoastingInputData { }
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs
new file mode 100644
index 0000000000..3964d013ca
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLOverspeedData.cs
@@ -0,0 +1,8 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces {
+	public interface IXMLOverspeedData : IOverSpeedEcoRollEngineeringInputData
+	{
+		
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs
new file mode 100644
index 0000000000..036599682c
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLRetarderData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLRetarderData : IRetarderInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs
new file mode 100644
index 0000000000..9f723b7313
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTorqueconverterData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLTorqueconverterData : ITorqueConverterEngineeringInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs
new file mode 100644
index 0000000000..cf2a984c7a
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Interfaces/IXMLTyreData.cs
@@ -0,0 +1,6 @@
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces
+{
+	public interface IXMLTyreData : ITyreEngineeringInputData { }
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs
new file mode 100644
index 0000000000..db3c326691
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderTestOverrides.cs
@@ -0,0 +1,28 @@
+using Ninject.Modules;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules
+{
+	public class XMLEngineeringReaderTestOverrides : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			// testing derived xml data types
+			Bind<IXMLEngineData>().To<XMLEngineeringEngineDataProviderV10TEST>()
+								.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineDataProviderV10TEST.NAMESPACE_URI));
+			Bind<IXMLTyreData>().To<XMLTyreEngineeringDataProviderV10TEST>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLTyreEngineeringDataProviderV10TEST.NAMESPACE_URI));
+
+			Bind<IXMLAxleEngineeringData>().To<XMLAxleEngineeringDataV10TEST>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLAxleEngineeringDataV10TEST.NAMESPACE_URI));
+			Bind<IXMLComponentsReader>().To<XMLComponentsEngineeringReaderV10TEST>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLComponentsEngineeringReaderV10TEST.NAMESPACE_URI));
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs
new file mode 100644
index 0000000000..6f7b3c8c1f
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV07InjectModule.cs
@@ -0,0 +1,84 @@
+using Ninject.Modules;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules
+{
+	public class XMLEngineeringReaderV07InjectModule : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<IXMLEngineeringInputData>().To<XMLEngineeringInputDataProviderV07>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLEngineeringInputReader>().To<XMLEngineeringInputReaderV07>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputReaderV07.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringJobInputData>().To<XMLEngineeringJobInputDataProviderV07>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringJobInputDataProviderV07.NAMESPACE_URI));
+
+			Bind<IXMLJobDataReader>().To<XMLJobDataReaderV07>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLJobDataReaderV07.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringDriverData>().To<XMLEngineeringDriverDataProviderV07>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverDataProviderV07.NAMESPACE_URI));
+
+			Bind<IXMLDriverDataReader>().To<XMLDriverDataReaderV07>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverDataReaderV07.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringGearshiftData>().To<XMLEngineeringGearshiftDataV07>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearshiftDataV07.NAMESPACE_URI));
+
+			Bind<IXMLCyclesDataProvider>().To<XMLCyclesDataProviderV07>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLCyclesDataProviderV07.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringVehicleData>().To<XMLEngineeringVehicleDataProviderV07>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLComponentsReader>().To<XMLComponentsEngineeringReaderV07>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLComponentsEngineeringReaderV07.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringVehicleComponentsData>().To<XMLEngineeringVehicleComponentsDataProviderV07>()
+														.Named(
+															XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleComponentsDataProviderV07.NAMESPACE_URI));
+
+			Bind<IXMLAxleEngineeringData>().To<XMLAxleEngineeringDataV07>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLAxleEngineeringDataV07.NAMESPACE_URI));
+			Bind<IXMLGearData>().To<XMLGearDataV07>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLGearDataV07.NAMESPACE_URI));
+			Bind<IXMLAuxiliaryData>().To<XMLAuxiliaryEngineeringDataV07>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLAuxiliaryEngineeringDataV07.NAMESPACE_URI));
+			Bind<IXMLAxlegearData>().To<XMLEngineeringAxlegearDataProviderV07>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlegearDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLAngledriveData>().To<XMLEngineeringAngledriveDataProviderV07>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAngledriveDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLEngineData>().To<XMLEngineeringEngineDataProviderV07>()
+								.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLRetarderData>().To<XMLEngineeringRetarderDataProviderV07>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringRetarderDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLAuxiliairesData>().To<XMLEngineeringAuxiliariesDataProviderV07>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliariesDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLGearboxData>().To<XMLEngineeringGearboxDataProviderV07>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearboxDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLAirdragData>().To<XMLEngineeringAirdragDataProviderV07>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAirdragDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLTorqueconverterData>().To<XMLEngineeringTorqueConverterDataProviderV07>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTorqueConverterDataProviderV07.NAMESPACE_URI));
+			Bind<IXMLAxlesData>().To<XMLEngineeringAxlesDataProviderV07>()
+								.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlesDataProviderV07.NAMESPACE_URI));
+
+			Bind<IXMLLookaheadData>().To<XMLEngineeringDriverLookAheadV07>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverLookAheadV07.NAMESPACE_URI));
+
+			Bind<IXMLOverspeedData>().To<XMLEngineeringOverspeedV07>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringOverspeedV07.NAMESPACE_URI));
+
+			Bind<IXMLDriverAcceleration>().To<XMLDriverAccelerationV07>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverAccelerationV07.NAMESPACE_URI));
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs
new file mode 100644
index 0000000000..42065f596c
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/NinjectModules/XMLEngineeringReaderV10InjectModule.cs
@@ -0,0 +1,86 @@
+using Ninject.Modules;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules
+{
+	public class XMLEngineeringReaderV10InjectModule : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<IXMLEngineeringInputData>().To<XMLEngineeringInputDataProviderV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLEngineeringInputReader>().To<XMLEngineeringInputReaderV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringInputReaderV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringJobInputData>().To<XMLEngineeringJobInputDataProviderV10>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringJobInputDataProviderV10.NAMESPACE_URI));
+
+			Bind<IXMLJobDataReader>().To<XMLJobDataReaderV10>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLJobDataReaderV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringDriverData>().To<XMLEngineeringDriverDataProviderV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverDataProviderV10.NAMESPACE_URI));
+
+			Bind<IXMLDriverDataReader>().To<XMLDriverDataReaderV10>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverDataReaderV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringGearshiftData>().To<XMLEngineeringGearshiftDataV10>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearshiftDataV10.NAMESPACE_URI));
+
+			Bind<IXMLCyclesDataProvider>().To<XMLCyclesDataProviderV10>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLCyclesDataProviderV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringVehicleData>().To<XMLEngineeringVehicleDataProviderV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLComponentsReader>().To<XMLComponentsEngineeringReaderV10>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLComponentsEngineeringReaderV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringVehicleComponentsData>().To<XMLEngineeringVehicleComponentsDataProviderV10>()
+														.Named(
+															XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleComponentsDataProviderV10.NAMESPACE_URI));
+
+			Bind<IXMLAxleEngineeringData>().To<XMLAxleEngineeringDataV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLAxleEngineeringDataV10.NAMESPACE_URI));
+			Bind<IXMLGearData>().To<XMLGearDataV10>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLGearDataV10.NAMESPACE_URI));
+			Bind<IXMLAuxiliaryData>().To<XMLAuxiliaryEngineeringDataV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLAuxiliaryEngineeringDataV10.NAMESPACE_URI));
+			Bind<IXMLAxlegearData>().To<XMLEngineeringAxlegearDataProviderV10>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlegearDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLAngledriveData>().To<XMLEngineeringAngledriveDataProviderV10>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAngledriveDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLEngineData>().To<XMLEngineeringEngineDataProviderV10>()
+								.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLRetarderData>().To<XMLEngineeringRetarderDataProviderV10>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringRetarderDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLAuxiliairesData>().To<XMLEngineeringAuxiliariesDataProviderV10>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliariesDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLGearboxData>().To<XMLEngineeringGearboxDataProviderV10>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearboxDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLAirdragData>().To<XMLEngineeringAirdragDataProviderV10>()
+									.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAirdragDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLTorqueconverterData>().To<XMLEngineeringTorqueConverterDataProviderV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTorqueConverterDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLAxlesData>().To<XMLEngineeringAxlesDataProviderV10>()
+								.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlesDataProviderV10.NAMESPACE_URI));
+			Bind<IXMLTyreData>().To<XMLTyreEngineeringDataProviderV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLTyreEngineeringDataProviderV10.NAMESPACE_URI));
+
+			Bind<IXMLLookaheadData>().To<XMLEngineeringDriverLookAheadV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverLookAheadV10.NAMESPACE_URI));
+
+			Bind<IXMLOverspeedData>().To<XMLEngineeringOverspeedV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringOverspeedV10.NAMESPACE_URI));
+
+			Bind<IXMLDriverAcceleration>().To<XMLDriverAccelerationV10>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLDriverAccelerationV10.NAMESPACE_URI));
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs
new file mode 100644
index 0000000000..84d95595a0
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/AbstractExternalResourceReader.cs
@@ -0,0 +1,90 @@
+using System;
+using System.IO;
+using System.Xml;
+using System.Xml.Schema;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader
+{
+	internal abstract class AbstractExternalResourceReader
+	{
+		protected XmlNode BaseNode;
+		protected bool VerifyXML;
+		protected IXMLResource ParentComponent;
+
+		public AbstractExternalResourceReader(IXMLResource parent, XmlNode baseNode, bool verifyXML)
+		{
+			BaseNode = baseNode;
+			VerifyXML = verifyXML;
+			ParentComponent = parent;
+		}
+
+		protected virtual T CreateComponent<T>(
+			string component, Func<string, XmlNode, string, T> componentCreator, bool allowExternalResource = true,
+			bool createDummy = false)
+		{
+			var componentNode = BaseNode.LocalName == component
+				? BaseNode
+				: BaseNode.SelectSingleNode(XMLHelper.QueryLocalName(component));
+			var dataNode = componentNode?.SelectSingleNode(string.Format("./*[local-name()='{0}']", XMLNames.ComponentDataWrapper)) ?? componentNode;
+			if (componentNode != null) {
+				var version = XMLHelper.GetSchemaVersion(dataNode ?? componentNode);
+				try {
+					return componentCreator(version, componentNode, ParentComponent.DataSource.SourceFile);
+				} catch (Exception e) {
+					throw new VectoException("Failed to create component {0} version {1}.", e, component, version);
+				}
+			}
+
+			if (!allowExternalResource && !createDummy) {
+				throw new VectoException("Component {0} not found!", component);
+			}
+
+			var componentResourceNode = BaseNode.SelectSingleNode(
+				string.Format(
+					"./*[local-name()='{0}' and @{1}='{2}' and @{3}='{4}']", XMLNames.ExternalResource,
+					XMLNames.ExtResource_Component_Attr, component, XMLNames.ExtResource_Type_Attr,
+					XMLNames.ExtResource_Type_Value_XML));
+			if (componentResourceNode != null) {
+				try {
+					var componentFile = componentResourceNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText;
+					var fullFileName = componentFile == null ? null : Path.Combine(ParentComponent.DataSource.SourcePath, componentFile);
+					if (componentFile == null || !File.Exists(fullFileName)) {
+						throw new VectoException(
+							"Referenced component file '{1}' for component '{0}' not found!", component, componentFile);
+					}
+
+					var componentDocument = new XmlDocument();
+					componentDocument.Load(XmlReader.Create(fullFileName));
+					if (VerifyXML) {
+						new XMLValidator(componentDocument, null, XMLValidator.CallBackExceptionOnError).ValidateXML(
+							XmlDocumentType.EngineeringJobData);
+					}
+
+					var version = XMLHelper.GetSchemaVersion(componentDocument.DocumentElement);
+					try {
+						return componentCreator(version, componentDocument.DocumentElement, fullFileName);
+					} catch (Exception e) {
+						throw new VectoException("Failed to create component {0} version {1}.", e, component, version);
+					}
+				} catch (XmlSchemaValidationException validationException) {
+					throw new VectoException("Validation of XML-file for component {0} failed", validationException, component);
+				}
+			}
+
+			if (createDummy) {
+				try {
+					return componentCreator(null, null, null);
+				} catch (Exception e) {
+					throw new VectoException("Failed to create dummy instance for component {0}.", e, component);
+				}
+			}
+
+			throw new VectoException("Component {0} not found!", component);
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs
new file mode 100644
index 0000000000..e7a5231596
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLComponentsEngineeringReader.cs
@@ -0,0 +1,268 @@
+using System;
+using System.Xml;
+using Ninject;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader
+{
+	internal class XMLComponentsEngineeringReaderV07 : AbstractExternalResourceReader, IXMLComponentsReader
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		//protected string Version;
+		protected IXMLEngineeringVehicleData Vehicle;
+
+		protected IAxleGearInputData _axleGearInputData;
+		protected IAngledriveInputData _angularGearInputData;
+		protected IEngineEngineeringInputData _engineInputData;
+		protected IRetarderInputData _retarderInputData;
+		protected IAuxiliariesEngineeringInputData _auxiliaryData;
+		protected IGearboxEngineeringInputData _gearboxData;
+		protected IAirdragEngineeringInputData _airdragInputData;
+		protected ITorqueConverterEngineeringInputData _torqueConverterInputData;
+		protected IAxlesEngineeringInputData _axlesInputData;
+		protected ITyreEngineeringInputData _tyre;
+		protected IVehicleComponentsEngineering _components;
+
+		[Inject]
+		public IEngineeringInjectFactory Factory { protected get; set; }
+
+		public XMLComponentsEngineeringReaderV07(IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML) :
+			base(vehicle, componentsNode, verifyXML)
+		{
+			if (componentsNode == null) {
+				throw new VectoException("component node must not be null!");
+			}
+
+			BaseNode = componentsNode;
+			Vehicle = vehicle;
+		}
+
+		#region Implementation of IEngineeringComponentsFactory
+
+		public virtual IAxleGearInputData AxleGearInputData
+		{
+			get {
+				return _axleGearInputData ?? (_axleGearInputData = CreateComponent(XMLNames.Component_Axlegear, AxlegearCreator));
+			}
+		}
+
+		public virtual IAngledriveInputData AngularGearInputData
+		{
+			get {
+				return _angularGearInputData ?? (_angularGearInputData = CreateComponent(
+							XMLNames.Component_Angledrive, AngledriveCreator, false, true));
+			}
+		}
+
+		public virtual IEngineEngineeringInputData EngineInputData
+		{
+			get { return _engineInputData ?? (_engineInputData = CreateComponent(XMLNames.Component_Engine, EngineCreator)); }
+		}
+
+		public virtual IRetarderInputData RetarderInputData
+		{
+			get {
+				return _retarderInputData ?? (_retarderInputData = CreateComponent(
+							XMLNames.Component_Retarder, RetarderCreator, false, true));
+			}
+		}
+
+		public virtual IAuxiliariesEngineeringInputData AuxiliaryData
+		{
+			get {
+				return _auxiliaryData ?? (_auxiliaryData = CreateComponent(XMLNames.Component_Auxiliaries, AuxiliariesCreator));
+			}
+		}
+
+		public virtual IGearboxEngineeringInputData GearboxData
+		{
+			get { return _gearboxData ?? (_gearboxData = CreateComponent(XMLNames.Component_Gearbox, GearboxCreator)); }
+		}
+
+		public virtual IPTOTransmissionInputData PTOData
+		{
+			get { return Vehicle; }
+		}
+
+		public virtual IAirdragEngineeringInputData AirdragInputData
+		{
+			get {
+				return _airdragInputData ?? (_airdragInputData = CreateComponent(XMLNames.Component_AirDrag, AirdragCreator));
+			}
+		}
+
+		public virtual IAxlesEngineeringInputData AxlesEngineeringInputData
+		{
+			get { return _axlesInputData ?? (_axlesInputData = CreateComponent(XMLNames.Component_AxleWheels, AxlesCreator)); }
+		}
+
+		public virtual ITorqueConverterEngineeringInputData TorqueConverter
+		{
+			get {
+				return _torqueConverterInputData ?? (_torqueConverterInputData = CreateComponent(
+							XMLNames.Component_TorqueConverter, TorqueConverterCreator, true, true));
+			}
+		}
+
+		public virtual ITyreEngineeringInputData Tyre
+		{
+			get { return _tyre ?? (_tyre = CreateComponent(XMLNames.AxleWheels_Axles_Axle_Tyre, TyreCreator)); }
+		}
+
+		public virtual IVehicleComponentsEngineering ComponentInputData { get {
+			return _components ?? (_components = CreateComponent(XMLNames.Vehicle_Components, ComponentsCreator));
+		} }
+
+
+
+
+		public IAxleEngineeringInputData CreateAxle(XmlNode axleNode)
+		{
+			var version = XMLHelper.GetSchemaVersion(axleNode);
+			try {
+				var axle = Factory.CreateAxleData(version, axleNode, Vehicle);
+				axle.Reader = Factory.CreateAxleReader(version, Vehicle, axleNode, VerifyXML);
+				return axle;
+			} catch (Exception e) {
+				var axleNumber = axleNode.Attributes?.GetNamedItem(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr).InnerText;
+				throw new VectoException(
+					"Unsupported XML Version! Node: {0} Axle: {1} Version: {2}", e, axleNode.LocalName, axleNumber, version);
+			}
+		}
+
+		public ITransmissionInputData CreateGear(XmlNode gearNode)
+		{
+			var version = XMLHelper.GetSchemaVersion(gearNode);
+			try {
+				return Factory.CreateGearData(version, gearNode, (Vehicle as IXMLResource).DataSource.SourcePath);
+			} catch (Exception e) {
+				var gearNumber = gearNode.Attributes?.GetNamedItem(XMLNames.Gearbox_Gear_GearNumber_Attr).InnerText;
+				throw new VectoException(
+					"Unsupported XML Version! Node: {0} Gear: {1} Version: {2}", e, gearNode.LocalName, gearNumber, version);
+			}
+		}
+
+		public IAuxiliaryEngineeringInputData Create(XmlNode auxNode)
+		{
+			var version = XMLHelper.GetSchemaVersion(auxNode);
+			try {
+				return Factory.CreateAuxData(version, auxNode, (Vehicle as IXMLResource).DataSource.SourcePath);
+			} catch (Exception e) {
+				throw new VectoException("Unsupported XML Version! Node: {0} Version: {2}", e, auxNode.LocalName, version);
+			}
+		}
+
+		#endregion
+
+		#region FactoryMethods
+
+		protected IVehicleComponentsEngineering ComponentsCreator(string version, XmlNode componentNode, string sourcefile)
+		{
+			var components = Factory.CreateComponentData(version, Vehicle, componentNode, sourcefile);
+			components.ComponentReader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML);
+			return components;
+		}
+
+		protected virtual IAxleGearInputData AxlegearCreator(string version, XmlNode componentNode, string sourceFile)
+		{
+			return Factory.CreateAxlegearData(version, Vehicle, componentNode, sourceFile);
+		}
+
+		protected IAngledriveInputData AngledriveCreator(string version, XmlNode componentNode, string sourceFile)
+		{
+			if (version == null) {
+				return new XMLEngineeringAngledriveDataProviderV07(Vehicle, componentNode, sourceFile);
+			}
+
+			return Factory.CreateAngledriveData(version, Vehicle, componentNode, sourceFile);
+		}
+
+		protected virtual IEngineEngineeringInputData EngineCreator(string version, XmlNode componentNode, string sourceFile)
+		{
+			return Factory.CreateEngineData(version, Vehicle, componentNode, sourceFile);
+		}
+
+		protected virtual IRetarderInputData RetarderCreator(string version, XmlNode componentNode, string sourceFile)
+		{
+			if (version == null) {
+				return new XMLEngineeringRetarderDataProviderV07(Vehicle, componentNode, sourceFile);
+			}
+
+			return Factory.CreateRetarderData(version, Vehicle, componentNode, sourceFile);
+		}
+
+		protected virtual IAuxiliariesEngineeringInputData AuxiliariesCreator(
+			string version, XmlNode componentNode, string sourceFile)
+		{
+			var aux = Factory.CreateAuxiliariesData(version, Vehicle, componentNode, sourceFile);
+			aux.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML);
+			return aux;
+		}
+
+		protected virtual IGearboxEngineeringInputData GearboxCreator(
+			string version, XmlNode componentNode, string sourceFile)
+		{
+			var gbx = Factory.CreateGearboxData(version, Vehicle, componentNode, sourceFile);
+			gbx.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML);
+			return gbx;
+		}
+
+		protected virtual IAirdragEngineeringInputData AirdragCreator(
+			string version, XmlNode componentNode, string sourceFile)
+		{
+			return Factory.CreateAirdragData(version, Vehicle, componentNode, sourceFile);
+		}
+
+		protected ITorqueConverterEngineeringInputData TorqueConverterCreator(
+			string version, XmlNode componentNode, string sourceFile)
+		{
+			if (version == null) {
+				return new XMLEngineeringTorqueConverterDataProviderV07(Vehicle, componentNode, sourceFile);
+			}
+
+			return Factory.CreateTorqueconverterData(version, Vehicle, componentNode, sourceFile);
+		}
+
+		protected IAxlesEngineeringInputData AxlesCreator(string version, XmlNode componentNode, string sourceFile)
+		{
+			var axles = Factory.CreateAxlesData(version, Vehicle, componentNode, sourceFile);
+			axles.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML);
+			return axles;
+		}
+
+		protected ITyreEngineeringInputData TyreCreator(string version, XmlNode componentNode, string sourceFile)
+		{
+			return Factory.CreateTyre(version, Vehicle, componentNode, sourceFile);
+		}
+
+		#endregion
+	}
+
+	internal class XMLComponentsEngineeringReaderV10 : XMLComponentsEngineeringReaderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLComponentsEngineeringReaderV10(IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML) :
+			base(vehicle, componentsNode, verifyXML) { }
+	}
+
+	internal class XMLComponentsEngineeringReaderV10TEST : XMLComponentsEngineeringReaderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST;
+
+		public XMLComponentsEngineeringReaderV10TEST(IXMLEngineeringVehicleData vehicle, XmlNode componentsNode, bool verifyXML) : base(vehicle, componentsNode, verifyXML) { }
+
+		public override ITyreEngineeringInputData Tyre
+		{
+			get { return _tyre ?? (_tyre = CreateComponent("Tire", TyreCreator)); }
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs
new file mode 100644
index 0000000000..c9bbdca1d8
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLDriverDataReader.cs
@@ -0,0 +1,125 @@
+using System;
+using System.Xml;
+using Ninject;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader {
+	internal class XMLDriverDataReaderV07 : IXMLDriverDataReader
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected XmlNode DriverDataNode;
+		protected IXMLEngineeringDriverData DriverData;
+
+		[Inject]
+		public IEngineeringInjectFactory Factory { protected get; set; }
+
+		public XMLDriverDataReaderV07(IXMLEngineeringDriverData driverData, XmlNode driverDataNode, bool verifyXML)
+		{
+			DriverData = driverData;
+			DriverDataNode = driverDataNode;
+		}
+
+		public ILookaheadCoastingInputData LookAheadData
+		{
+			get {
+				return CreateData(
+					XMLNames.DriverModel_LookAheadCoasting, (version, node) => Factory.CreateLookAheadData(version, DriverData, node));
+			}
+		}
+
+		public IOverSpeedEcoRollEngineeringInputData OverspeedData
+		{
+			get {
+				return CreateData(
+					XMLNames.DriverModel_Overspeed, (version, node) => Factory.CreateOverspeedData(version, DriverData, node));
+			}
+		}
+
+		public IXMLDriverAcceleration AccelerationCurveData
+		{
+			get {
+				return CreateData(
+					XMLNames.DriverModel_DriverAccelerationCurve,
+					(version, node) => version == null
+						? DefaultAccelerationCurve()
+						: Factory.CreateAccelerationCurveData(version, DriverData, node), false);
+			}
+		}
+
+		public IGearshiftEngineeringInputData ShiftParameters
+		{
+			get {
+				return CreateData(
+					XMLNames.DriverModel_ShiftStrategyParameters, ShiftParametersCreator, false);
+			}
+		}
+
+		private IGearshiftEngineeringInputData ShiftParametersCreator(string version, XmlNode node)
+		{
+			if (version == null) {
+				return new XMLEngineeringGearshiftDataV07(null);
+			}
+			return Factory.CreateShiftParametersData(version, node);
+		}
+
+		protected virtual T CreateData<T>(string elementName, Func<string, XmlNode, T> creator, bool required = true)
+		{
+			var node = GetNode(elementName, required);
+			if (!required && node == null) {
+				try {
+					return creator(null, node);
+				} catch (Exception e) {
+					throw new VectoException("Failed to create dummy data provider", e);
+				}
+			}
+
+			var version = XMLHelper.GetSchemaVersion(node);
+			try {
+				return creator(version, node);
+			} catch (Exception e) {
+				throw new VectoException("Unsupported XML Version! Node: {0} Version: {1}", e, node.LocalName, version);
+			}
+		}
+
+		
+		protected virtual XmlNode GetNode(string elementName, bool required = true)
+		{
+			var retVal =
+				DriverDataNode.SelectSingleNode(XMLHelper.QueryLocalName(elementName));
+			if (required && retVal == null) {
+				throw new VectoException("Element {0} not found!", elementName);
+			}
+
+			return retVal;
+		}
+
+		private static IXMLDriverAcceleration DefaultAccelerationCurve()
+		{
+			try {
+				var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".VACC.Truck" +
+									Constants.FileExtensions.DriverAccelerationCurve;
+				return new XMLDriverAccelerationV07(
+					VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName));
+			} catch (Exception e) {
+				throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e);
+			}
+		}
+	}
+	
+	internal class XMLDriverDataReaderV10 : XMLDriverDataReaderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLDriverDataReaderV10(IXMLEngineeringDriverData driverData, XmlNode driverDataNode, bool verifyXML) : base(driverData, driverDataNode, verifyXML) { }
+	}
+
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs
new file mode 100644
index 0000000000..ad7150b5cc
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLEngineeringInputReader.cs
@@ -0,0 +1,64 @@
+using System.Xml;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader
+{
+	internal class XMLEngineeringInputReaderV07 : AbstractExternalResourceReader, IXMLEngineeringInputReader
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+
+		protected XmlNode JobNode;
+		protected IXMLEngineeringInputData InputData;
+		private IEngineeringJobInputData _jobData;
+		private IDriverEngineeringInputData _driverModel;
+
+		[Inject]
+		public IEngineeringInjectFactory Factory { protected get; set; }
+
+		public XMLEngineeringInputReaderV07(IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml) :
+			base(inputData, documentElement, verifyXml)
+		{
+			JobNode = documentElement;
+			InputData = inputData;
+		}
+
+		public IEngineeringJobInputData JobData
+		{
+			get { return _jobData ?? (_jobData = CreateComponent(XMLNames.VectoInputEngineering, JobCreator, false)); }
+		}
+
+		public IDriverEngineeringInputData DriverModel
+		{
+			get { return _driverModel ?? (_driverModel = CreateComponent(XMLNames.Component_DriverModel, DriverModelCreator)); }
+		}
+
+
+		public IEngineeringJobInputData JobCreator(string version, XmlNode baseNode, string filename)
+		{
+			var job = Factory.CreateJobData(version, JobNode, InputData, (InputData as IXMLResource).DataSource.SourceFile);
+			job.Reader = Factory.CreateJobReader(version, job, JobNode, VerifyXML);
+			return job;
+		}
+
+		public IDriverEngineeringInputData DriverModelCreator(string version, XmlNode baseNode, string filename)
+		{
+			var driverData = Factory.CreateDriverData(version, InputData, baseNode, (InputData as IXMLResource).DataSource.SourceFile);
+			driverData.Reader = Factory.CreateDriverReader(version, driverData, baseNode, VerifyXML);
+			return driverData;
+		}
+	}
+
+	internal class XMLEngineeringInputReaderV10 : XMLEngineeringInputReaderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringInputReaderV10(
+			IXMLEngineeringInputData inputData, XmlNode documentElement, bool verifyXml) :
+			base(inputData, documentElement, verifyXml) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs
new file mode 100644
index 0000000000..40920d11e1
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/Reader/XMLJobDataReader.cs
@@ -0,0 +1,69 @@
+using System.Xml;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader
+{
+	internal class XMLJobDataReaderV07 : AbstractExternalResourceReader, IXMLJobDataReader
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V07;
+		
+		protected XmlNode JobNode;
+		protected IXMLEngineeringJobInputData JobData;
+
+		private IVehicleEngineeringInputData _vehicle;
+		private IEngineEngineeringInputData _engine;
+
+		[Inject] public IEngineeringInjectFactory Factory { protected get; set; }
+
+		public XMLJobDataReaderV07(IXMLEngineeringJobInputData jobData, XmlNode jobNode, bool verifyXML) : base(
+			jobData, jobNode, verifyXML)
+		{
+			JobNode = jobNode;
+			JobData = jobData;
+		}
+
+		public IEngineEngineeringInputData CreateEngineOnly
+		{
+			get { return _engine ?? (_engine = CreateComponent(XMLNames.Component_Engine, (version, node, sourceFile) => Factory.CreateEngineOnlyEngine(version, node, sourceFile))); }
+		}
+
+		public IVehicleEngineeringInputData CreateVehicle
+		{
+			get { return _vehicle ?? (_vehicle = CreateComponent(XMLNames.Component_Vehicle, VehicleCreator)); }
+		}
+
+
+		public IXMLCyclesDataProvider CreateCycles
+		{
+			get {
+				var cyclesNode = JobNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.VectoJob_MissionCycles));
+				var version = XMLHelper.GetSchemaVersion(cyclesNode);
+
+				return Factory.CreateCycleData(version, JobData, JobNode, JobData.DataSource.SourcePath);
+			}
+		}
+
+
+		private IVehicleEngineeringInputData VehicleCreator(string version, XmlNode componentNode, string sourceFile)
+		{
+			var vehicle = Factory.CreateVehicleData(version, JobData, componentNode, sourceFile);
+			vehicle.ComponentReader = Factory.CreateComponentReader(version, vehicle, componentNode.SelectSingleNode(XMLHelper.QueryLocalName(XMLNames.Vehicle_Components)), VerifyXML);
+			return vehicle;
+		}
+
+	}
+
+
+	internal class XMLJobDataReaderV10 : XMLJobDataReaderV07
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLJobDataReaderV10(XMLEngineeringJobInputDataProviderV10 jobData, XmlNode jobNode, bool verifyXML) : base(jobData, jobNode, verifyXML) { }
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs
deleted file mode 100644
index 5e4f236b86..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAirdragDataProvider.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Xml;
-using System.Xml.XPath;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringAirdragDataProvider : AbstractEngineeringXMLComponentDataProvider,
-		IAirdragEngineeringInputData
-	{
-		public XMLEngineeringAirdragDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument axlegearDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, axlegearDocument, xmlBasePath, fsBasePath) {}
-
-		public SquareMeter AirDragArea
-		{
-			get { return GetDoubleElementValue(XMLNames.Vehicle_AirDragArea).SI<SquareMeter>(); }
-		}
-
-		public CrossWindCorrectionMode CrossWindCorrectionMode
-		{
-			get { return GetElementValue(XMLNames.Vehicle_CrossWindCorrectionMode).ParseEnum<CrossWindCorrectionMode>(); }
-		}
-
-		public TableData CrosswindCorrectionMap
-		{
-			get {
-				return ReadTableData(AttributeMappings.CrossWindCorrectionMapping,
-					Helper.Query(XMLNames.Vehicle_CrosswindCorrectionData, XMLNames.Vehicle_CrosswindCorrectionData_Entry));
-			}
-		}
-
-		#region Implementation of IComponentInputData
-
-		
-
-		#endregion
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs
deleted file mode 100644
index e24071b4a7..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAngledriveDataProvider.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Xml;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringAngledriveDataProvider : AbstractEngineeringXMLComponentDataProvider, IAngledriveInputData
-	{
-		public XMLEngineeringAngledriveDataProvider(XMLEngineeringInputDataProvider jobInputData, XmlDocument xmlDocument,
-			string xBasePath, string fsBasePath) : base(jobInputData, xmlDocument, xBasePath, fsBasePath) {}
-
-		public AngledriveType Type
-		{
-			get { return InputData.VehicleData.AngledriveType; }
-		}
-
-		public double Ratio
-		{
-			get { return GetDoubleElementValue(XMLNames.AngleDrive_Ratio); }
-		}
-
-		public TableData LossMap
-		{
-			get {
-				if (ElementExists(Helper.Query(XMLNames.AngleDrive_TorqueLossMap, XMLNames.Angledrive_LossMap_Entry))) {
-					return ReadTableData(AttributeMappings.TransmissionLossmapMapping,
-						Helper.Query(XMLNames.AngleDrive_TorqueLossMap, XMLNames.Angledrive_LossMap_Entry));
-				}
-				return ReadCSVResourceFile(XMLNames.AngleDrive_TorqueLossMap);
-			}
-		}
-
-		public double Efficiency
-		{
-			get {
-				return GetDoubleElementValue(Helper.Query(XMLNames.AngleDrive_TorqueLossMap, XMLNames.AngleDrive_Efficiency));
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs
deleted file mode 100644
index 5207e8e82d..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAuxiliaryDataProvider.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Xml;
-using System.Xml.XPath;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.Impl;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringAuxiliaryDataProvider : AbstractEngineeringXMLComponentDataProvider,
-		IAuxiliariesEngineeringInputData
-	{
-		public XMLEngineeringAuxiliaryDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument auxDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, auxDocument, xmlBasePath, fsBasePath) {}
-
-
-		public IList<IAuxiliaryDeclarationInputData> Auxiliaries
-		{
-			get { return AuxiliaryInputData().Cast<IAuxiliaryDeclarationInputData>().ToList(); }
-		}
-
-		IList<IAuxiliaryEngineeringInputData> IAuxiliariesEngineeringInputData.Auxiliaries
-		{
-			get { return AuxiliaryInputData().Cast<IAuxiliaryEngineeringInputData>().ToList(); }
-		}
-
-		private IEnumerable<AuxiliaryDataInputData> AuxiliaryInputData()
-		{
-			var retVal = new List<AuxiliaryDataInputData>();
-			var auxiliaries = Navigator.Select(Helper.Query(XBasePath, XMLNames.Auxiliaries_Auxiliary), Manager);
-			while (auxiliaries.MoveNext()) {
-				var constantAux = auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad), Manager);
-				if (constantAux == null) {
-					retVal.Add(CreateMappingAuxiliary(auxiliaries));
-				} else {
-					retVal.Add(new AuxiliaryDataInputData() {
-						ID = "ConstantAux",
-						AuxiliaryType = AuxiliaryDemandType.Constant,
-						ConstantPowerDemand = constantAux.ValueAsDouble.SI<Watt>()
-					});
-				}
-			}
-			return retVal;
-		}
-
-		protected AuxiliaryDataInputData CreateMappingAuxiliary(XPathNodeIterator auxiliaries)
-		{
-			var auxData = new AuxiliaryDataInputData {
-				AuxiliaryType = AuxiliaryDemandType.Mapping,
-				ID = auxiliaries.Current.GetAttribute("id", ""),
-			};
-			var node =
-				auxiliaries.Current.SelectSingleNode(ExtCsvResourceTag, Manager);
-			if (node != null) {
-				var auxFile = node.GetAttribute(XMLNames.ExtResource_File_Attr, "");
-
-				if (!File.Exists(Path.Combine(FSBasePath, auxFile))) {
-					throw new VectoException("Auxiliary resource file {0} not found! Aux: {1}", auxFile, auxData.ID);
-				}
-				AuxiliaryFileHelper.FillAuxiliaryDataInputData(auxData, Path.Combine(FSBasePath, auxFile));
-			} else {
-				var transmissionRatio =
-					auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_TransmissionRatioToEngine),
-						Manager);
-				if (transmissionRatio != null) {
-					auxData.TransmissionRatio = transmissionRatio.ValueAsDouble;
-				}
-				var efficiencyEngine =
-					auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_EfficiencyToEngine), Manager);
-				if (efficiencyEngine != null) {
-					auxData.EfficiencyToEngine = efficiencyEngine.ValueAsDouble;
-				}
-				var efficiencyAuxSupply =
-					auxiliaries.Current.SelectSingleNode(Helper.Query(XMLNames.Auxiliaries_Auxiliary_EfficiencyAuxSupply), Manager);
-				if (efficiencyAuxSupply != null) {
-					auxData.EfficiencyToSupply = efficiencyAuxSupply.ValueAsDouble;
-				}
-				auxData.DemandMap = ReadTableData(AttributeMappings.AuxMapMapping,
-					Helper.Query(XMLNames.Auxiliaries_Auxiliary_AuxMap, XMLNames.Auxiliaries_Auxiliary_AuxMap_Entry),
-					auxiliaries.Current);
-
-			}
-			return auxData;
-		}
-
-		public AuxiliaryModel AuxiliaryAssembly
-		{
-			get { return AuxiliaryModel.Classic; }
-		}
-
-		public string AuxiliaryVersion
-		{
-			get { return ""; }
-		}
-
-		public string AdvancedAuxiliaryFilePath
-		{
-			get { return ""; }
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs
deleted file mode 100644
index 6b1e3d5909..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringAxlegearDataProvider.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Xml;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringAxlegearDataProvider : AbstractEngineeringXMLComponentDataProvider, IAxleGearInputData
-	{
-		public XMLEngineeringAxlegearDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument axlegearDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, axlegearDocument, xmlBasePath, fsBasePath) {}
-
-		public double Ratio
-		{
-			get { return GetDoubleElementValue(XMLNames.Axlegear_Ratio); }
-		}
-
-		public TableData LossMap
-		{
-			get {
-				if (ElementExists(Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry))) {
-					return ReadTableData(AttributeMappings.TransmissionLossmapMapping,
-						Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_TorqueLossMap_Entry));
-				}
-				return ReadCSVResourceFile(XMLNames.Axlegear_TorqueLossMap);
-			}
-		}
-
-		public double Efficiency
-		{
-			get { return GetDoubleElementValue(Helper.Query(XMLNames.Axlegear_TorqueLossMap, XMLNames.Axlegear_Efficiency)); }
-		}
-
-		public AxleLineType LineType
-		{
-			get {
-				return ElementExists(XMLNames.Axlegear_LineType)
-					? GetElementValue(XMLNames.Axlegear_LineType).ParseEnum<AxleLineType>()
-					: AxleLineType.SinglePortalAxle;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs
deleted file mode 100644
index 8d83f35a91..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringDriverDataProvider.cs
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System;
-using System.IO;
-using System.Xml;
-using System.Xml.XPath;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.InputData.Impl;
-using TUGraz.VectoCore.Models.Declaration;
-using TUGraz.VectoCore.Models.SimulationComponent.Data;
-using TUGraz.VectoCore.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringDriverDataProvider : AbstractEngineeringXMLComponentDataProvider,
-		IDriverEngineeringInputData
-	{
-		public XMLEngineeringDriverDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument driverDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, driverDocument, xmlBasePath, fsBasePath) {}
-
-		IOverSpeedEcoRollEngineeringInputData IDriverEngineeringInputData.OverSpeedEcoRoll
-		{
-			get {
-				var minSpeedPath = Helper.Query(XMLNames.Component_DriverModel,
-					XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_MinSpeed);
-				var overSpeedPath = Helper.Query(XMLNames.Component_DriverModel,
-					XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_AllowedOverspeed);
-				var underSpeedPath = Helper.Query(XMLNames.Component_DriverModel,
-					XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_AllowedUnderspeed);
-				var retVal = new OverSpeedEcoRollInputData {
-					Mode = GetElementValue(Helper.Query(XMLNames.Component_DriverModel,
-						XMLNames.DriverModel_Overspeed, XMLNames.DriverModel_Overspeed_Mode)).ParseEnum<DriverMode>(),
-					MinSpeed = ElementExists(minSpeedPath)
-						? GetDoubleElementValue(minSpeedPath).KMPHtoMeterPerSecond()
-						: DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed,
-					OverSpeed = ElementExists(overSpeedPath)
-						? GetDoubleElementValue(overSpeedPath).KMPHtoMeterPerSecond()
-						: DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed,
-					UnderSpeed = ElementExists(underSpeedPath)
-						? GetDoubleElementValue(underSpeedPath).KMPHtoMeterPerSecond()
-						: DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed
-				};
-
-				return retVal;
-			}
-		}
-
-		public TableData AccelerationCurve
-		{
-			get {
-				if (ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve))) {
-					return
-						ReadTableData(AttributeMappings.DriverAccelerationCurveMapping,
-							Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve,
-								XMLNames.DriverModel_DriverAccelerationCurve_Entry));
-				}
-				//Log.Warn("Could not find file for acceleration curve. Trying lookup in declaration data.");
-				try {
-					var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".VACC.Truck" +
-										Constants.FileExtensions.DriverAccelerationCurve;
-					return VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName);
-				} catch (Exception e) {
-					throw new VectoException("Failed to read Driver Acceleration Curve: " + e.Message, e);
-				}
-			}
-		}
-
-		public ILookaheadCoastingInputData Lookahead
-		{
-			get {
-				var lookAheadXmlPath = Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_LookAheadCoasting);
-
-				var retVal = new LookAheadCoastingInputData {
-					Enabled =
-						XmlConvert.ToBoolean(
-							GetElementValue(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_Enabled))),
-					LookaheadDistanceFactor =
-						ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor))
-							? GetDoubleElementValue(Helper.Query(lookAheadXmlPath,
-								XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor))
-							: DeclarationData.Driver.LookAhead.LookAheadDistanceFactor,
-					CoastingDecisionFactorOffset =
-						ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset))
-							? GetDoubleElementValue(Helper.Query(lookAheadXmlPath,
-								XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset))
-							: DeclarationData.Driver.LookAhead.DecisionFactorCoastingOffset,
-					CoastingDecisionFactorScaling =
-						ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling))
-							? GetDoubleElementValue(Helper.Query(lookAheadXmlPath,
-								XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling))
-							: DeclarationData.Driver.LookAhead.DecisionFactorCoastingScaling,
-					MinSpeed = ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_MinSpeed))
-						? GetDoubleElementValue(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_MinSpeed))
-							.KMPHtoMeterPerSecond()
-						: DeclarationData.Driver.LookAhead.MinimumSpeed
-				};
-
-				if (
-					ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor,
-						XMLNames.LookAheadCoasting_SpeedDependentDecisionFactor_Entry))) {
-					retVal.CoastingDecisionFactorTargetSpeedLookup = ReadTableData(
-						AttributeMappings.CoastingDFTargetSpeedLookupMapping,
-						Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor,
-							XMLNames.LookAheadCoasting_SpeedDependentDecisionFactor_Entry));
-				} else if (
-					ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor,
-						XMLNames.ExternalResource))) {
-					var node = Navigator.SelectSingleNode(Helper.Query(XBasePath, lookAheadXmlPath,
-						XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor, XMLNames.ExternalResource), Manager);
-					if (node != null &&
-						XMLNames.ExtResource_Type_Value_CSV.Equals(node.GetAttribute(XMLNames.ExtResource_Type_Attr, ""))) {
-						retVal.CoastingDecisionFactorTargetSpeedLookup =
-							VectoCSVFile.Read(Path.Combine(FSBasePath, node.GetAttribute(XMLNames.ExtResource_File_Attr, "")));
-					}
-				} else {
-					retVal.CoastingDecisionFactorTargetSpeedLookup = null;
-				}
-
-				if (
-					ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor,
-						XMLNames.LookAheadCoasting_VelocityDropDecisionFactor_Entry))) {
-					retVal.CoastingDecisionFactorVelocityDropLookup =
-						ReadTableData(AttributeMappings.CoastingDFVelocityDropLookupMapping,
-							Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor,
-								XMLNames.LookAheadCoasting_VelocityDropDecisionFactor_Entry));
-				} else if (
-					ElementExists(Helper.Query(lookAheadXmlPath, XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor,
-						XMLNames.ExternalResource))) {
-					var node =
-						Navigator.SelectSingleNode(Helper.Query(XBasePath, lookAheadXmlPath,
-							XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor, XMLNames.ExternalResource), Manager);
-					if (node != null &&
-						XMLNames.ExtResource_Type_Value_CSV.Equals(node.GetAttribute(XMLNames.ExtResource_Type_Attr, ""))) {
-						retVal.CoastingDecisionFactorVelocityDropLookup =
-							VectoCSVFile.Read(Path.Combine(FSBasePath, node.GetAttribute(XMLNames.ExtResource_File_Attr, "")));
-					}
-				} else {
-					retVal.CoastingDecisionFactorVelocityDropLookup = null;
-				}
-				return retVal;
-			}
-		}
-
-		public IOverSpeedEcoRollDeclarationInputData OverSpeedEcoRoll
-		{
-			get {
-				var node =
-					Navigator.SelectSingleNode(Helper.Query(XBasePath, XMLNames.Component_DriverModel, XMLNames.DriverModel_Overspeed,
-						XMLNames.DriverModel_Overspeed_Mode), Manager);
-				return new OverSpeedEcoRollInputData() {
-					Mode = node != null ? DriverData.ParseDriverMode(node.Value) : DriverMode.Off
-				};
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs
deleted file mode 100644
index 066653f4e6..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringEngineDataProvider.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Xml;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringEngineDataProvider : AbstractEngineeringXMLComponentDataProvider,
-		IEngineEngineeringInputData
-	{
-		public XMLEngineeringEngineDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument engineDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, engineDocument, xmlBasePath, fsBasePath) {}
-
-		public CubicMeter Displacement
-		{
-		    get { return GetDoubleElementValue(XMLNames.Engine_Displacement).SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(); }
-		}
-
-		public PerSecond IdleSpeed
-		{
-			get { return GetDoubleElementValue(XMLNames.Engine_IdlingSpeed).RPMtoRad(); }
-		}
-
-		public double WHTCEngineering
-		{
-			get { return GetDoubleElementValue(XMLNames.Engine_WHTCEngineering); }
-		}
-
-		public double WHTCMotorway
-		{
-			get { throw new VectoException("Property not available in Engineering Mode"); }
-		}
-
-		public double WHTCRural
-		{
-			get { throw new VectoException("Property not available in Engineering Mode"); }
-		}
-
-		public double WHTCUrban
-		{
-			get { throw new VectoException("Property not available in Engineering Mode"); }
-		}
-
-		public double ColdHotBalancingFactor
-		{
-			get { throw new VectoException("Property not available in Engineering Mode"); }
-		}
-
-		public double CorrectionFactorRegPer
-		{
-			get {
-				return 1;
-				//GetDoubleElementValue(XMLNames.Engine_CorrectionFactor_RegPer); 
-			}
-		}
-
-		public FuelType FuelType
-		{
-			get { return FuelType.DieselCI; //GetElementValue(XMLNames.Engine_FuelType).ParseEnum<FuelType>();
-			}
-		}
-
-		public TableData FuelConsumptionMap
-		{
-			get {
-				if (!ElementExists(Helper.Query(XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry))) {
-					return ReadCSVResourceFile(XMLNames.Engine_FuelConsumptionMap);
-				}
-				return ReadTableData(AttributeMappings.FuelConsumptionMapMapping,
-					Helper.Query(XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry));
-			}
-		}
-
-		public TableData FullLoadCurve
-		{
-			get {
-				if (!ElementExists(Helper.Query(XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FuelConsumptionMap_Entry))) {
-					return ReadCSVResourceFile(XMLNames.Engine_FullLoadAndDragCurve);
-				}
-
-				return ReadTableData(AttributeMappings.EngineFullLoadCurveMapping,
-					Helper.Query(XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FuelConsumptionMap_Entry));
-			}
-		}
-
-		public Watt RatedPowerDeclared
-		{
-			get { return null; //GetDoubleElementValue(XMLNames.Engine_RatedPower).SI<Watt>(); 
-			}
-		}
-
-		public PerSecond RatedSpeedDeclared
-		{
-			get { return null; //GetDoubleElementValue(XMLNames.Engine_RatedSpeed).RPMtoRad(); 
-			}
-		}
-
-		public NewtonMeter MaxTorqueDeclared
-		{
-			get { return null; //GetDoubleElementValue(XMLNames.Engine_MaxTorque).SI<NewtonMeter>(); 
-			}
-		}
-
-		public KilogramSquareMeter Inertia
-		{
-			get { return GetDoubleElementValue(XMLNames.Engine_Inertia).SI<KilogramSquareMeter>(); }
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs
deleted file mode 100644
index ac92dbe496..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringGearboxDataProvider.cs
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Collections.Generic;
-using System.Xml;
-using System.Xml.XPath;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.Impl;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringGearboxDataProvider : AbstractEngineeringXMLComponentDataProvider,
-		IGearboxEngineeringInputData
-	{
-		public XMLEngineeringGearboxDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument gbxDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, gbxDocument, xmlBasePath, fsBasePath) {}
-
-		public GearboxType Type
-		{
-			get { return GetElementValue(XMLNames.Gearbox_TransmissionType).ParseEnum<GearboxType>(); }
-		}
-
-
-		public KilogramSquareMeter Inertia
-		{
-			get { return GetDoubleElementValue(XMLNames.Gearbox_Inertia).SI<KilogramSquareMeter>(); }
-		}
-
-		public Second TractionInterruption
-		{
-			get { return GetDoubleElementValue(XMLNames.Gearbox_TractionInterruption).SI<Second>(); }
-		}
-
-		public IList<ITransmissionInputData> Gears
-		{
-			get
-			{
-				var retVal = new List<ITransmissionInputData>();
-				var gears = Navigator.Select(Helper.Query(XBasePath, XMLNames.Gearbox_Gears, XMLNames.Gearbox_Gears_Gear), Manager);
-				while (gears.MoveNext()) {
-					var gear = gears.Current.GetAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, "");
-					retVal.Add(ReadGear(gear));
-				}
-				return retVal;
-			}
-		}
-
-		protected ITransmissionInputData ReadGear(string gearNr)
-		{
-			var retVal = new TransmissionInputData();
-			var gearPath = Helper.Query(XMLNames.Gearbox_Gears,
-				Helper.QueryConstraint(XMLNames.Gearbox_Gears_Gear, XMLNames.Gearbox_Gear_GearNumber_Attr, gearNr));
-			retVal.Ratio = GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gear_Ratio));
-			retVal.Gear = XmlConvert.ToUInt16(gearNr);
-			if (
-				ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry))) {
-				retVal.LossMap = ReadTableData(AttributeMappings.TransmissionLossmapMapping,
-					Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap, XMLNames.Gearbox_Gear_TorqueLossMap_Entry));
-			} else {
-				retVal.LossMap = ReadCSVResourceFile(Helper.Query(gearPath, XMLNames.Gearbox_Gear_TorqueLossMap));
-			}
-
-			if (
-				ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon,
-					XMLNames.Gearbox_Gears_Gear_ShiftPolygon_Entry))) {
-				retVal.ShiftPolygon = ReadTableData(AttributeMappings.ShiftPolygonMapping,
-					Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon, XMLNames.Gearbox_Gears_Gear_ShiftPolygon_Entry));
-			}
-			if (
-				ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon, ExtCsvResourceTag))) {
-				retVal.ShiftPolygon = ReadCSVResourceFile(Helper.Query(gearPath, XMLNames.Gearbox_Gears_Gear_ShiftPolygon));
-			}
-
-			retVal.MaxTorque = ElementExists(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque))
-				? GetDoubleElementValue(Helper.Query(gearPath, XMLNames.Gearbox_Gears_MaxTorque)).SI<NewtonMeter>()
-				: null;
-			return retVal;
-		}
-
-		public Second MinTimeBetweenGearshift
-		{
-			get { return InputData.XMLEngineeringJobData.MinTimeBetweenGearshift; }
-		}
-
-		public double TorqueReserve
-		{
-			get { return InputData.XMLEngineeringJobData.TorqueReserve; }
-		}
-
-		public MeterPerSecond StartSpeed
-		{
-			get { return InputData.XMLEngineeringJobData.StartSpeed; }
-		}
-
-		public MeterPerSquareSecond StartAcceleration
-		{
-			get { return InputData.XMLEngineeringJobData.StartAcceleration; }
-		}
-
-		public double StartTorqueReserve
-		{
-			get { return InputData.XMLEngineeringJobData.StartTorqueReserve; }
-		}
-
-
-		ITorqueConverterDeclarationInputData IGearboxDeclarationInputData.TorqueConverter
-		{
-			get { return TorqueConverter; }
-		}
-
-		public ITorqueConverterEngineeringInputData TorqueConverter
-		{
-			get
-			{
-				return new XMLEngineeringTorqueConverterDataProvider(InputData, XMLDocument,
-					Helper.Query(XBasePath, "parent::*", XMLNames.Component_TorqueConverter, XMLNames.ComponentDataWrapper), FSBasePath);
-			}
-		}
-
-		public Second DownshiftAfterUpshiftDelay
-		{
-			get { return InputData.XMLEngineeringJobData.DownshiftAfterUpshiftDelay; }
-		}
-
-		public Second UpshiftAfterDownshiftDelay
-		{
-			get { return InputData.XMLEngineeringJobData.UpshiftAfterDownshiftDelay; }
-		}
-
-		public MeterPerSquareSecond UpshiftMinAcceleration
-		{
-			get { return InputData.XMLEngineeringJobData.UpshiftMinAcceleration; }
-		}
-
-		public Second PowershiftShiftTime
-		{
-			get { return InputData.XMLEngineeringJobData.PowershiftShiftTime; }
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs
deleted file mode 100644
index 69818e6860..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringInputDataProvider.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.IO;
-using System.Xml;
-using System.Xml.Schema;
-using System.Xml.XPath;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.Utils;
-using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringInputDataProvider : IEngineeringInputDataProvider
-	{
-		public readonly string FileName;
-
-		internal XmlDocument Document;
-
-		protected internal XMLEngineeringJobInputDataProvider XMLEngineeringJobData;
-
-		protected internal XMLEngineeringVehicleDataProvider VehicleData;
-		protected internal XMLEngineeringDriverDataProvider XMLEngineeringDriverData;
-
-		public bool VerifyXml { get; protected set; }
-
-		public XMLEngineeringInputDataProvider(string filename, bool verifyXml)
-		{
-			VerifyXml = verifyXml;
-			FileName = filename;
-			ReadXMLDocument(File.OpenRead(filename));
-
-			InitializeComponentDataProvider();
-		}
-
-
-		public XMLEngineeringInputDataProvider(Stream inputData, bool verifyXml)
-		{
-			FileName = ".";
-			VerifyXml = verifyXml;
-			ReadXMLDocument(inputData);
-
-			var nav = Document.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var refNodes =
-				nav.Select(
-					"//" + helper.Query(helper.QueryConstraint(XMLNames.ExternalResource, XMLNames.ExtResource_File_Attr, null)),
-					manager);
-			if (refNodes.Count > 0) {
-				throw new VectoException("XML input data with file references can not be read via stream!");
-			}
-
-			InitializeComponentDataProvider();
-		}
-
-
-		private void ReadXMLDocument(Stream inputData)
-		{
-
-			var xmldoc = new XmlDocument();
-			xmldoc.Load(inputData);
-			if (VerifyXml) {
-				new XMLValidator(xmldoc, null, ValidationCallBack).ValidateXML(XmlDocumentType.EngineeringJobData);
-			}
-			Document = xmldoc;
-		}
-
-		private void InitializeComponentDataProvider()
-		{
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			XMLEngineeringJobData = new XMLEngineeringJobInputDataProvider(this, Document,
-				helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix)),
-				Path.GetDirectoryName(Path.GetFullPath(FileName)));
-			if (XMLEngineeringJobData.EngineOnlyMode) {
-				EngineOnlyInputData = new XMLEngineeringEngineDataProvider(this, Document,
-					helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-						XMLNames.Component_Engine,
-						XMLNames.ComponentDataWrapper), Path.GetDirectoryName(Path.GetFullPath(FileName)));
-				return;
-			}
-			ReadVehicle();
-
-			XMLEngineeringDriverData = XMLEngineeringJobData.GetDriverData();
-		}
-
-		internal static void ValidationCallBack(XmlSeverityType severity, ValidationEvent evt)
-		{
-			if (severity == XmlSeverityType.Error) {
-				throw new VectoException("Validation error: {0}", evt.ValidationEventArgs.Message);
-			}
-		}
-
-		private void ReadVehicle()
-		{
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-
-
-			var nav = Document.CreateNavigator();
-			var vehiclePath = helper.QueryAbs(helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle);
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			helper.AddNamespaces(manager);
-			var vehicle = nav.SelectSingleNode(vehiclePath, manager);
-			if (vehicle != null) {
-				VehicleData = new XMLEngineeringVehicleDataProvider(this, Document, vehiclePath,
-					Path.GetDirectoryName(Path.GetFullPath(FileName)));
-				return;
-			}
-
-			var extVehilePath = helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				helper.QueryConstraint(XMLNames.ExternalResource, "@component='Vehicle' and @type='xml'", null, ""));
-			var extVehicle = nav.SelectSingleNode(extVehilePath, manager);
-			if (extVehicle != null) {
-				try {
-					var vehicleFile = extVehicle.GetAttribute(XMLNames.ExtResource_File_Attr, "");
-					var vehicleDocument = new XmlDocument();
-					vehicleDocument.Load(XmlReader.Create(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile)));
-					if (VerifyXml) {
-						new XMLValidator(vehicleDocument, null, ValidationCallBack).ValidateXML(XmlDocumentType.EngineeringJobData);
-					}
-					var vehicleCompPath =
-						helper.QueryAbs(
-							helper.NSPrefix("VectoComponentEngineering", Constants.XML.RootNSPrefix),
-							XMLNames.Component_Vehicle);
-					VehicleData = new XMLEngineeringVehicleDataProvider(this, vehicleDocument, vehicleCompPath,
-						Path.GetDirectoryName(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(FileName) ?? "./", vehicleFile))));
-					return;
-				} catch (XmlSchemaValidationException validationException) {
-					throw new VectoException("Validation of XML-file for Vehicle failed", validationException);
-				}
-			}
-			throw new VectoException("No Vehicle found");
-		}
-
-		private static XmlSchemaSet GetXMLSchema(string version)
-		{
-			var resource = RessourceHelper.LoadResourceAsStream(RessourceHelper.ResourceType.XMLSchema,
-				"VectoEngineeringInput.xsd");
-			var xset = new XmlSchemaSet() { XmlResolver = new XmlResourceResolver() };
-			var reader = XmlReader.Create(resource, new XmlReaderSettings(), XmlResourceResolver.BaseUri);
-			xset.Add(XmlSchema.Read(reader, null));
-			xset.Compile();
-			return xset;
-		}
-
-		public IEngineeringJobInputData JobInputData
-		{
-			get { return XMLEngineeringJobData; }
-		}
-
-		public IVehicleEngineeringInputData VehicleInputData
-		{
-			get { return VehicleData; }
-		}
-
-		public IEngineEngineeringInputData EngineOnlyInputData { get; private set; }
-
-		public IDriverEngineeringInputData DriverInputData
-		{
-			get { return XMLEngineeringDriverData; }
-		}
-
-		public string Source { get; private set; }
-	}
-}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs
deleted file mode 100644
index 00422ad327..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringJobInputDataProvider.cs
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Collections.Generic;
-using System.IO;
-using System.Xml;
-using System.Xml.XPath;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.InputData.Impl;
-using TUGraz.VectoCore.Models.Declaration;
-using TUGraz.VectoCore.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	// ReSharper disable once InconsistentNaming
-	public class XMLEngineeringJobInputDataProvider : AbstractEngineeringXMLComponentDataProvider, IEngineeringJobInputData
-	{
-		public XMLEngineeringJobInputDataProvider(XMLEngineeringInputDataProvider xmlEngineeringJobInputDataProvider,
-			XmlDocument jobDocument, string xmlBasePath, string fsBasePath)
-			: base(xmlEngineeringJobInputDataProvider, jobDocument, xmlBasePath, fsBasePath) {}
-
-
-		public IVehicleDeclarationInputData Vehicle
-		{
-			get { return InputData.VehicleInputData; }
-		}
-
-		IVehicleEngineeringInputData IEngineeringJobInputData.Vehicle
-		{
-			get { return InputData.VehicleInputData; }
-		}
-
-		public IList<ICycleData> Cycles
-		{
-			get {
-				var retVal = new List<ICycleData>();
-				var cycles = Navigator.Select(Helper.Query(XBasePath, XMLNames.VectoJob_MissionCycles,
-					Helper.QueryConstraint(XMLNames.Missions_Cycle, XMLNames.ExtResource_Type_Attr,
-						XMLNames.ExtResource_Type_Value_CSV)), Manager);
-				while (cycles.MoveNext()) {
-					var file = cycles.Current.GetAttribute(XMLNames.ExtResource_File_Attr, "");
-					var fileFull = Path.Combine(FSBasePath ?? "", file);
-					if (File.Exists(fileFull)) {
-						retVal.Add(new CycleInputData() {
-							Name = Path.GetFileNameWithoutExtension(fileFull),
-							CycleData = VectoCSVFile.Read(fileFull)
-						});
-					} else {
-						try {
-							var resourceName = DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles." + file +
-												Constants.FileExtensions.CycleFile;
-							retVal.Add(new CycleInputData() {
-								Name = Path.GetFileNameWithoutExtension(file),
-								CycleData = VectoCSVFile.ReadStream(RessourceHelper.ReadStream(resourceName), source: resourceName),
-							});
-						} catch {
-							//Log.Debug("Driving Cycle could not be read: " + cycleFile);
-							throw new VectoException("Driving Cycle could not be read: " + file);
-						}
-					}
-				}
-				return retVal;
-			}
-		}
-
-		public bool EngineOnlyMode
-		{
-			get {
-				return ElementExists(XMLNames.VectoJob_EngineOnlyMode) &&
-						XmlConvert.ToBoolean(GetElementValue(XMLNames.VectoJob_EngineOnlyMode));
-			}
-		}
-
-		public IEngineEngineeringInputData EngineOnly
-		{
-			get { return InputData.EngineOnlyInputData; }
-		}
-
-		protected internal Second DownshiftAfterUpshiftDelay
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"DownshiftAfterUpshiftDelay"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"DownshiftAfterUpshiftDelay")).SI<Second>()
-						: DeclarationData.Gearbox.DownshiftAfterUpshiftDelay;
-			}
-		}
-
-		protected internal Second UpshiftAfterDownshiftDelay
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"UpshiftAfterDownshiftDelay"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"UpshiftAfterDownshiftDelay")).SI<Second>()
-						: DeclarationData.Gearbox.UpshiftAfterDownshiftDelay;
-			}
-		}
-
-		protected internal MeterPerSquareSecond UpshiftMinAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"UpshiftMinAcceleration"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"UpshiftMinAcceleration"))
-							.SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.UpshiftMinAcceleration;
-			}
-		}
-
-
-		public string JobName
-		{
-			get {
-				return InputData.JobInputData.EngineOnlyMode
-					? InputData.JobInputData.EngineOnly.Model
-					: InputData.VehicleData.GetVehicleID;
-			}
-		}
-
-		public double TorqueReserve
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve))
-						: DeclarationData.Gearbox.TorqueReserve;
-			}
-		}
-
-		public Second MinTimeBetweenGearshift
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift)).SI<Second>()
-						: DeclarationData.Gearbox.MinTimeBetweenGearshifts;
-			}
-		}
-
-		public MeterPerSecond StartSpeed
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed)).SI<MeterPerSecond>()
-						: DeclarationData.Gearbox.StartSpeed;
-			}
-		}
-
-		public MeterPerSquareSecond StartAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration)).SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.StartAcceleration;
-			}
-		}
-
-		public double StartTorqueReserve
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve))
-						: DeclarationData.Gearbox.TorqueReserveStart;
-			}
-		}
-
-
-		public Second PowershiftShiftTime
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"PowershiftShiftTime"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"PowershiftShiftTime")).SI<Second>()
-						: 0.8.SI<Second>();
-			}
-		}
-
-		public MeterPerSquareSecond CCUpshiftMinAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"CCUpshiftMinAcceleration"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"CCUpshiftMinAcceleration")).SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.UpshiftMinAcceleration;
-			}
-		}
-
-		public MeterPerSquareSecond CLUpshiftMinAcceleration
-		{
-			get {
-				return
-					ElementExists(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-						"CLUpshiftMinAcceleration"))
-						? GetDoubleElementValue(Helper.Query(XMLNames.Component_DriverModel, XMLNames.DriverModel_ShiftStrategyParameters,
-							"CLUpshiftMinAcceleration")).SI<MeterPerSquareSecond>()
-						: DeclarationData.Gearbox.UpshiftMinAcceleration;
-			}
-		}
-
-		public XMLEngineeringDriverDataProvider GetDriverData()
-		{
-			return new XMLEngineeringDriverDataProvider(InputData, XMLDocument, XBasePath, FSBasePath);
-		}
-	}
-}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs
new file mode 100644
index 0000000000..d7bd276f70
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringReaderInjectModule.cs
@@ -0,0 +1,35 @@
+using Ninject.Extensions.Factory;
+using Ninject.Modules;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Impl;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Reader;
+using TUGraz.VectoCore.Utils;
+using TUGraz.VectoCore.Utils.Ninject;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
+{
+	public class XMLEngineeringReaderInjectModule : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<IEngineeringInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider());
+
+			Kernel?.Load(new INinjectModule[] {
+				new XMLEngineeringReaderV07InjectModule(),
+				new XMLEngineeringReaderV10InjectModule()}
+			);
+
+		}
+
+		#endregion
+
+		
+
+
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs
deleted file mode 100644
index 66bf6ed580..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringTorqueConverterDataProvider.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System.Xml;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringTorqueConverterDataProvider : AbstractEngineeringXMLComponentDataProvider,
-		ITorqueConverterEngineeringInputData
-	{
-		public XMLEngineeringTorqueConverterDataProvider(XMLEngineeringInputDataProvider jobInputData,
-			XmlDocument xmlDocument,
-			string xBasePath, string fsBasePath)
-			: base(jobInputData, xmlDocument, xBasePath, fsBasePath) {}
-
-		public TableData TCData
-		{
-			get
-			{
-				if (
-					ElementExists(Helper.Query(XMLNames.TorqueConverter_Characteristics, XMLNames.TorqueConverter_Characteristics_Entry))) {
-					return ReadTableData(AttributeMappings.TorqueConverterDataMapping,
-						Helper.Query(XMLNames.TorqueConverter_Characteristics, XMLNames.TorqueConverter_Characteristics_Entry));
-				}
-				return ReadCSVResourceFile(XMLNames.TorqueConverter_Characteristics);
-			}
-		}
-
-		public PerSecond ReferenceRPM
-		{
-			get { return GetDoubleElementValue(XMLNames.TorqueConverter_ReferenceRPM).RPMtoRad(); }
-		}
-
-		public KilogramSquareMeter Inertia
-		{
-			get { return GetDoubleElementValue(XMLNames.TorqueConverter_Inertia).SI<KilogramSquareMeter>(); }
-		}
-
-
-		public TableData ShiftPolygon
-		{
-			get
-			{
-				if (ElementExists(Helper.Query(XMLNames.TorqueConverter_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry))) {
-					return ReadTableData(AttributeMappings.ShiftPolygonMapping,
-						Helper.Query(XMLNames.TorqueConverter_ShiftPolygon, XMLNames.TorqueConverter_ShiftPolygon_Entry));
-				}
-				if (
-					ElementExists(Helper.Query(XMLNames.TorqueConverter_ShiftPolygon, ExtCsvResourceTag))) {
-					return ReadCSVResourceFile(XMLNames.TorqueConverter_ShiftPolygon);
-				}
-				return null;
-			}
-		}
-
-		public PerSecond MaxInputSpeed
-		{
-			get
-			{
-				return ElementExists(Helper.Query("MaxInputSpeed"))
-					? GetDoubleElementValue("MaxInputSpeed").RPMtoRad()
-					: 5000.RPMtoRad();
-			}
-		}
-
-		public MeterPerSquareSecond CLUpshiftMinAcceleration
-		{
-			get { return InputData.XMLEngineeringJobData.CLUpshiftMinAcceleration; }
-		}
-
-		public MeterPerSquareSecond CCUpshiftMinAcceleration
-		{
-			get
-			{
-				return InputData.XMLEngineeringJobData.CCUpshiftMinAcceleration;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
deleted file mode 100644
index 24d044a6ad..0000000000
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/XMLEngineeringVehicleDataProvider.cs
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Xml;
-using System.Xml.Schema;
-using System.Xml.XPath;
-using TUGraz.IVT.VectoXML;
-using TUGraz.VectoCommon.Exceptions;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.InputData.Impl;
-using TUGraz.VectoCore.Utils;
-using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
-
-namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering
-{
-	public class XMLEngineeringVehicleDataProvider : AbstractEngineeringXMLComponentDataProvider,
-		IVehicleEngineeringInputData, IPTOTransmissionInputData, IVehicleComponentsEngineering, IAxlesEngineeringInputData
-	{
-		protected internal XMLEngineeringAuxiliaryDataProvider XMLEngineeringAuxiliaryData;
-		protected internal XMLEngineeringAxlegearDataProvider AxlegearData;
-		
-
-		public XMLEngineeringVehicleDataProvider(XMLEngineeringInputDataProvider jobProvider,
-			XmlDocument vehicleDocument, string xmlBasePath, string fsBasePath)
-			: base(jobProvider, vehicleDocument, xmlBasePath, fsBasePath)
-		{
-			AxlegearData = GetAxleGearInputData(jobProvider.VerifyXml);
-			AngledriveInputData = GetAngularGearInputData();
-			EngineInputData = GetEngineInputData(jobProvider.VerifyXml);
-			RetarderInputData = GetRetarderInputData(jobProvider.VerifyXml);
-			XMLEngineeringAuxiliaryData = GetAuxiliaryData(jobProvider.VerifyXml);
-			GearboxInputData = GetGearboxData(jobProvider.VerifyXml);
-			TorqueConverterInputData = GearboxInputData.TorqueConverter;
-			PTOTransmissionInputData = GetPTOData();
-			AirdragInputData = GetAirdragInputData(jobProvider.VerifyXml);
-		}
-
-		public string GetVehicleID
-		{
-			get { return GetAttributeValue("", XMLNames.Component_ID_Attr); }
-		}
-
-		public string Identifier { get { return GetVehicleID; } }
-
-		public bool ExemptedVehicle { get { return false; } }
-
-		public string VIN
-		{
-			get { return GetElementValue(XMLNames.Vehicle_VIN); }
-		}
-
-		public LegislativeClass LegislativeClass
-		{
-			get { return GetElementValue(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); }
-		}
-
-		public VehicleCategory VehicleCategory
-		{
-			get { return GetElementValue(XMLNames.Vehicle_VehicleCategory).ParseEnum<VehicleCategory>(); }
-		}
-
-		public Kilogram CurbMassChassis
-		{
-			get { return GetDoubleElementValue(XMLNames.Vehicle_CurbMassChassis).SI<Kilogram>(); }
-		}
-
-		public Kilogram CurbMassExtra
-		{
-			get { return GetDoubleElementValue(XMLNames.Vehicle_CurbMassExtra).SI<Kilogram>(); }
-		}
-
-		public Kilogram GrossVehicleMassRating
-		{
-			get { return GetDoubleElementValue(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); }
-		}
-
-		public IList<ITorqueLimitInputData> TorqueLimits
-		{
-			get {
-				var retVal = new List<ITorqueLimitInputData>();
-				var limits =
-					Navigator.Select(Helper.Query(VehiclePath, XMLNames.Vehicle_TorqueLimits, XMLNames.Vehicle_TorqueLimits_Entry),
-						Manager);
-				while (limits.MoveNext()) {
-					retVal.Add(new TorqueLimitInputData() {
-						Gear = limits.Current.GetAttribute(XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr, "").ToInt(),
-						MaxTorque =
-							limits.Current.GetAttribute(XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr, "").ToDouble().SI<NewtonMeter>()
-					});
-				}
-				return retVal;
-			}
-		}
-
-		public Kilogram Loading
-		{
-			get { return GetDoubleElementValue(XMLNames.Vehicle_Loading).SI<Kilogram>(); }
-		}
-
-		public Meter DynamicTyreRadius
-		{
-			get {
-				var queryPath = Helper.Query(XMLNames.Vehicle_Components,
-					XMLNames.Component_AxleWheels,
-					XMLNames.ComponentDataWrapper,
-					XMLNames.AxleWheels_Axles,
-					Helper.QueryConstraint(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle),
-						Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_AxleType),
-						AxleType.VehicleDriven.ToString(), ""), // query
-					XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius
-					);
-				return (GetDoubleElementValue(queryPath) / 1000).SI<Meter>();
-			}
-		}
-
-		public Meter Height
-		{
-			get {
-				if (ElementExists(Helper.Query("VehicleHeight"))) {
-					return GetDoubleElementValue("VehicleHeight").SI<Meter>();
-				}
-				return null;
-			}
-		}
-
-		IVehicleComponentsEngineering IVehicleEngineeringInputData.Components
-		{
-			get { return this; }
-		}
-
-		IAdvancedDriverAssistantSystemsEngineering IVehicleEngineeringInputData.ADAS
-		{
-			get { return null; }
-		}
-
-
-		public AxleConfiguration AxleConfiguration
-		{
-			get { return AxleConfigurationHelper.Parse(GetElementValue(XMLNames.Vehicle_AxleConfiguration)); }
-		}
-
-		public IList<IAxleEngineeringInputData> AxlesEngineering
-		{
-			get { return AxleEngineeringInput().Cast<IAxleEngineeringInputData>().ToList(); }
-		}
-
-		public string ManufacturerAddress
-		{
-			get { return "N.A."; }
-		}
-
-		public PerSecond EngineIdleSpeed
-		{
-			get { return null; }
-		}
-
-		
-		private IEnumerable<AxleInputData> AxleEngineeringInput()
-		{
-			
-				var axlePath = Helper.Query(
-					XMLNames.Vehicle_Components,
-					XMLNames.Component_AxleWheels,
-					XMLNames.ComponentDataWrapper,
-					XMLNames.AxleWheels_Axles,
-					XMLNames.AxleWheels_Axles_Axle);
-				var axles =
-					Navigator.Select(Helper.Query(XBasePath, axlePath), Manager);
-
-				var retVal = new AxleInputData[axles.Count];
-
-				while (axles.MoveNext()) {
-					var axleNumber = axles.Current.GetAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "").ToInt();
-					if (axleNumber < 1 || axleNumber > retVal.Length) {
-						throw new VectoException("Axle #{0} exceeds axle count", axleNumber);
-					}
-					if (retVal[axleNumber - 1] != null) {
-						throw new VectoException("Axle #{0} defined multiple times!", axleNumber);
-					}
-
-					var dimension = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_Dimension), Manager);
-					var rollResistance = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_RRCISO), Manager);
-					var tyreTestLoad = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_FzISO), Manager);
-					var weightShare = axles.Current.SelectSingleNode(
-						Helper.Query(XMLNames.AxleWheels_Axles_Axle_WeightShare), Manager);
-					var inertia = axles.Current.SelectSingleNode(Helper.Query(XMLNames.AxleWheels_Axles_Axle_Inertia), Manager);
-					var axleType = axles.Current.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_AxleType), Manager);
-					var twinTyres = axles.Current.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_TwinTyres), Manager);
-					var steered = axles.Current.SelectSingleNode(Helper.NSPrefix(XMLNames.AxleWheels_Axles_Axle_Steered), Manager);
-
-					retVal[axleNumber - 1] = new AxleInputData {
-						AxleType = axleType == null ? AxleType.VehicleNonDriven : axleType.Value.ParseEnum<AxleType>(),
-						TwinTyres = twinTyres != null && XmlConvert.ToBoolean(twinTyres.Value),
-						Steered = steered != null && XmlConvert.ToBoolean(steered.Value),
-						AxleWeightShare = weightShare == null ? 0 : weightShare.ValueAsDouble,
-						Tyre = new TyreInputData() {
-							TyreTestLoad = tyreTestLoad == null ? null : tyreTestLoad.Value.ToDouble().SI<Newton>(),
-							RollResistanceCoefficient = rollResistance == null ? double.NaN : rollResistance.Value.ToDouble(),
-							Dimension = dimension == null ? null : dimension.Value,
-							Inertia = inertia == null ? null : inertia.ValueAsDouble.SI<KilogramSquareMeter>(),
-						}
-					};
-				}
-
-				return retVal;
-			
-		}
-
-		public double RetarderRatio
-		{
-			get { return GetDoubleElementValue(XMLNames.Vehicle_RetarderRatio); }
-		}
-
-		public RetarderType RetarderType
-		{
-			get { return GetElementValue(XMLNames.Vehicle_RetarderType).ParseEnum<RetarderType>(); }
-		}
-
-		public AngledriveType AngledriveType
-		{
-			get { return GetElementValue(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); }
-		}
-
-		public IAirdragEngineeringInputData AirdragInputData { get; private set; }
-
-		
-		public IGearboxEngineeringInputData GearboxInputData { get; private set; }
-
-		public ITorqueConverterEngineeringInputData TorqueConverterInputData { get; private set; }
-
-		public IAxleGearInputData AxleGearInputData
-		{
-			get { return AxlegearData; }
-		}
-
-		public IAngledriveInputData AngledriveInputData { get; private set; }
-
-		public IEngineEngineeringInputData EngineInputData { get; private set; }
-
-		IAuxiliariesEngineeringInputData IVehicleComponentsEngineering.AuxiliaryInputData
-		{
-			get { return XMLEngineeringAuxiliaryData; }
-		}
-
-		public IAuxiliariesEngineeringInputData AuxiliaryInputData
-		{
-			get { return XMLEngineeringAuxiliaryData; }
-		}
-
-		public IRetarderInputData RetarderInputData { get; private set; }
-
-		public IPTOTransmissionInputData PTOTransmissionInputData { get; private set; }
-		public IAxlesEngineeringInputData AxleWheels { get { return this; } }
-		public bool VocationalVehicle { get { return false; } }
-		public bool SleeperCab { get { return true; } }
-		public TankSystem? TankSystem { get; }
-		public IAdvancedDriverAssistantSystemDeclarationInputData ADAS { get { return null; } }
-		public bool ZeroEmissionVehicle { get { return false; } }
-		public bool HybridElectricHDV { get { return false; } }
-		public bool DualFuelVehicle { get { return false; } }
-		public Watt MaxNetPower1 { get { return null; } }
-		public Watt MaxNetPower2 { get { return null; } }
-		public IVehicleComponentsDeclaration Components { get { return null; } }
-
-		#region "FactoryMethods"
-
-		private IAirdragEngineeringInputData GetAirdragInputData(bool verifyXml)
-		{
-			return CreateComponentInput(XMLNames.Component_AirDrag, verifyXml,
-				(a, b, c, d) => new XMLEngineeringAirdragDataProvider(a, b, c, d));
-		}
-
-		private XMLEngineeringAxlegearDataProvider GetAxleGearInputData(bool verifyXml)
-		{
-			return CreateComponentInput(XMLNames.Component_Axlegear, verifyXml,
-				(a, b, c, d) => new XMLEngineeringAxlegearDataProvider(a, b, c, d));
-		}
-
-		private XMLEngineeringEngineDataProvider GetEngineInputData(bool verifyXml)
-		{
-			return CreateComponentInput(XMLNames.Component_Engine, verifyXml,
-				(a, b, c, d) => new XMLEngineeringEngineDataProvider(a, b, c, d));
-		}
-
-		private XMLEngineeringRetarderDataProvider GetRetarderInputData(bool verifyXml)
-		{
-			if (!RetarderType.IsDedicatedComponent()) {
-				return new XMLEngineeringRetarderDataProvider(InputData, XMLDocument,
-					Helper.Query(XBasePath, XMLNames.Vehicle_Components, XMLNames.Component_Retarder, XMLNames.ComponentDataWrapper),
-					FSBasePath);
-			}
-
-			return CreateComponentInput(XMLNames.Component_Retarder, verifyXml,
-				(a, b, c, d) => new XMLEngineeringRetarderDataProvider(a, b, c, d));
-		}
-
-		private XMLEngineeringGearboxDataProvider GetGearboxData(bool verifyXml)
-		{
-			return CreateComponentInput(XMLNames.Component_Gearbox, verifyXml,
-				(a, b, c, d) => new XMLEngineeringGearboxDataProvider(a, b, c, d));
-		}
-
-		private XMLEngineeringAuxiliaryDataProvider GetAuxiliaryData(bool verifyXml)
-		{
-			return CreateComponentInput(XMLNames.Component_Auxiliaries, verifyXml,
-				(a, b, c, d) => new XMLEngineeringAuxiliaryDataProvider(a, b, c, d));
-		}
-
-
-		private T CreateComponentInput<T>(string componentName, bool verifyXml,
-			Func<XMLEngineeringInputDataProvider, XmlDocument, string, string, T> creator)
-		{
-			if (ElementExists(Helper.Query(XMLNames.Vehicle_Components, componentName))) {
-				return creator(InputData, XMLDocument,
-					Helper.Query(XBasePath, XMLNames.Vehicle_Components, componentName, XMLNames.ComponentDataWrapper), FSBasePath);
-			}
-			string componentPath = Helper.Query(XMLNames.Vehicle_Components,
-				Helper.QueryConstraint(XMLNames.ExternalResource, string.Format("@component='{0}' and @type='xml'", componentName),
-					null, ""));
-			if (!ElementExists(componentPath)) {
-				throw new VectoException("Component {0} not found!", componentName);
-			}
-			var componentNode =
-				Navigator.SelectSingleNode(Helper.Query(XBasePath, componentPath), Manager);
-			if (componentNode != null) {
-				try {
-					var componentFile = componentNode.GetAttribute(XMLNames.ExtResource_File_Attr, "");
-					var componentDocument = new XmlDocument();
-					componentDocument.Load(XmlReader.Create(Path.Combine(FSBasePath, componentFile)));
-					if (verifyXml) {
-						new XMLValidator(componentDocument, null, XMLEngineeringInputDataProvider.ValidationCallBack).ValidateXML(XmlDocumentType
-							.EngineeringJobData);
-					}
-					return creator(InputData, componentDocument,
-						Helper.QueryAbs(Helper.NSPrefix(XMLNames.VectoComponentEngineering, Constants.XML.RootNSPrefix), componentName,
-							XMLNames.ComponentDataWrapper),
-						Path.GetDirectoryName(Path.Combine(Path.GetFullPath(FSBasePath), componentFile)));
-				} catch (XmlSchemaValidationException validationException) {
-					throw new VectoException("Validation of XML-file for component {0} failed", validationException, componentName);
-				}
-			}
-			throw new VectoException("Component {0} not found!", componentName);
-		}
-
-		#endregion
-
-		public XMLEngineeringAngledriveDataProvider GetAngularGearInputData()
-		{
-			return new XMLEngineeringAngledriveDataProvider(InputData, XMLDocument,
-				Helper.Query(XBasePath, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive, XMLNames.ComponentDataWrapper)
-				, FSBasePath);
-		}
-
-		#region "PTO"
-
-		public IPTOTransmissionInputData GetPTOData()
-		{
-			return this;
-		}
-
-		public string PTOTransmissionType
-		{
-			get { return GetElementValue(XMLNames.Vehicle_PTOType); }
-		}
-
-		public TableData PTOLossMap
-		{
-			get {
-				if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOIdleLossMap, XMLNames.Vehicle_PTOIdleLossMap_Entry))) {
-					return ReadTableData(AttributeMappings.PTOLossMap,
-						Helper.Query(XMLNames.Vehicle_PTOIdleLossMap, XMLNames.Vehicle_PTOIdleLossMap_Entry));
-				}
-				if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOIdleLossMap, ExtCsvResourceTag))) {
-					return ReadCSVResourceFile(XMLNames.Vehicle_PTOIdleLossMap);
-				}
-				return null;
-			}
-		}
-
-		public TableData PTOCycle
-		{
-			get {
-				if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOCycle, XMLNames.Vehicle_PTOCycle_Entry))) {
-					return ReadTableData(AttributeMappings.PTOCycleMap,
-						Helper.Query(XMLNames.Vehicle_PTOCycle, XMLNames.Vehicle_PTOCycle_Entry));
-				}
-				if (ElementExists(Helper.Query(XMLNames.Vehicle_PTOCycle, ExtCsvResourceTag))) {
-					return ReadCSVResourceFile(XMLNames.Vehicle_PTOCycle);
-				}
-				return null;
-			}
-		}
-
-		#endregion
-
-		
-
-	}
-}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs
new file mode 100644
index 0000000000..f203504ac7
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/XMLInputDataNinjectModule.cs
@@ -0,0 +1,22 @@
+using Ninject.Modules;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
+
+namespace TUGraz.VectoCore.InputData.FileIO.XML
+{
+	public class XMLInputDataNinjectModule : AbstractNinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<IXMLInputDataReader>().To<XMLInputDataFactory>();
+
+			LoadModule<XMLDeclarationReaderInjectModule>();
+
+			LoadModule<XMLEngineeringReaderInjectModule>();
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs
index 8a2bc00275..e98ba61c51 100644
--- a/VectoCore/VectoCore/InputData/Impl/InputData.cs
+++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs
@@ -69,6 +69,16 @@ namespace TUGraz.VectoCore.InputData.Impl
 		public MeterPerSecond UnderSpeed { get; internal set; }
 	}
 
+	public class DriverAccelerationInputData : IDriverAccelerationData
+	{
+		#region Implementation of IDriverAccelerationData
+
+		public TableData AccelerationCurve { get; internal set; }
+
+		#endregion
+	}
+
+
 	public class TransmissionInputData : ITransmissionInputData
 	{
 		public int Gear { get; internal set; }
@@ -84,6 +94,7 @@ namespace TUGraz.VectoCore.InputData.Impl
 		public PerSecond MaxInputSpeed { get; internal set; }
 
 		public TableData ShiftPolygon { get; internal set; }
+		public DataSource DataSource { get; internal set; }
 	}
 
 	public class AxleInputData : IAxleEngineeringInputData
@@ -103,6 +114,8 @@ namespace TUGraz.VectoCore.InputData.Impl
 
 
 		public double AxleWeightShare { get; internal set; }
+
+		public DataSource DataSource { get; internal set; }
 	}
 
 	public class TyreInputData : ITyreEngineeringInputData
@@ -134,6 +147,8 @@ namespace TUGraz.VectoCore.InputData.Impl
 		public Newton TyreTestLoad { get; internal set; }
 
 		public KilogramSquareMeter Inertia { get; internal set; }
+
+		public Meter DynamicTyreRadius { get; }
 	}
 
 	public class AuxiliaryDataInputData : IAuxiliaryEngineeringInputData, IAuxiliaryDeclarationInputData
@@ -161,6 +176,8 @@ namespace TUGraz.VectoCore.InputData.Impl
 		public TableData DemandMap { get; internal set; }
 
 		public Watt ConstantPowerDemand { get; internal set; }
+
+		public DataSource DataSource { get; internal set; }
 	}
 
 	public class TorqueLimitInputData : ITorqueLimitInputData
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
index ea66535900..7c659e0b18 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
@@ -158,7 +158,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			return retVal;
 		}
 
-		internal GearboxData CreateGearboxData(IGearboxEngineeringInputData gearbox, CombustionEngineData engineData,
+		internal GearboxData CreateGearboxData(IGearboxEngineeringInputData gearbox, CombustionEngineData engineData, IGearshiftEngineeringInputData gearshiftData,
 			double axlegearRatio, Meter dynamicTyreRadius, VehicleCategory vehicleCategory)
 		{
 			if (gearbox.SavedInDeclarationMode) {
@@ -172,7 +172,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				throw new VectoSimulationException("At least two Gear-Entries must be defined in Gearbox!");
 			}
 
-			SetEngineeringData(gearbox, retVal);
+			SetEngineeringData(gearbox, gearshiftData, retVal);
 
 			var gearDifferenceRatio = gearbox.Type.AutomaticTransmission() && gearbox.Gears.Count > 2
 				? gearbox.Gears[0].Ratio / gearbox.Gears[1].Ratio
@@ -211,7 +211,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				retVal.PowershiftShiftTime = gearbox.PowershiftShiftTime;
 				retVal.TorqueConverterData = TorqueConverterDataReader.Create(gearbox.TorqueConverter.TCData,
 					gearbox.TorqueConverter.ReferenceRPM, gearbox.TorqueConverter.MaxInputSpeed, ExecutionMode.Engineering, ratio,
-					gearbox.TorqueConverter.CLUpshiftMinAcceleration, gearbox.TorqueConverter.CCUpshiftMinAcceleration);
+					gearshiftData.CLUpshiftMinAcceleration, gearshiftData.CCUpshiftMinAcceleration);
 			}
 
 
@@ -242,18 +242,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			}
 		}
 
-		private static void SetEngineeringData(IGearboxEngineeringInputData gearbox, GearboxData retVal)
+		private static void SetEngineeringData(IGearboxEngineeringInputData gearbox, IGearshiftEngineeringInputData gearshiftData, GearboxData retVal)
 		{
 			retVal.Inertia = gearbox.Type.ManualTransmission() ? gearbox.Inertia : 0.SI<KilogramSquareMeter>();
 			retVal.TractionInterruption = gearbox.TractionInterruption;
-			retVal.TorqueReserve = gearbox.TorqueReserve;
-			retVal.StartTorqueReserve = gearbox.StartTorqueReserve;
-			retVal.ShiftTime = gearbox.MinTimeBetweenGearshift;
-			retVal.StartSpeed = gearbox.StartSpeed;
-			retVal.StartAcceleration = gearbox.StartAcceleration;
-			retVal.DownshiftAfterUpshiftDelay = gearbox.DownshiftAfterUpshiftDelay;
-			retVal.UpshiftAfterDownshiftDelay = gearbox.UpshiftAfterDownshiftDelay;
-			retVal.UpshiftMinAcceleration = gearbox.UpshiftMinAcceleration;
+			retVal.TorqueReserve = gearshiftData.TorqueReserve;
+			retVal.StartTorqueReserve = gearshiftData.StartTorqueReserve;
+			retVal.ShiftTime = gearshiftData.MinTimeBetweenGearshift;
+			retVal.StartSpeed = gearshiftData.StartSpeed;
+			retVal.StartAcceleration = gearshiftData.StartAcceleration;
+			retVal.DownshiftAfterUpshiftDelay = gearshiftData.DownshiftAfterUpshiftDelay;
+			retVal.UpshiftAfterDownshiftDelay = gearshiftData.UpshiftAfterDownshiftDelay;
+			retVal.UpshiftMinAcceleration = gearshiftData.UpshiftMinAcceleration;
 		}
 
 		public AxleGearData CreateAxleGearData(IAxleGearInputData data)
@@ -322,7 +322,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 			AccelerationCurveData accelerationData = null;
 			if (driver.AccelerationCurve != null) {
-				accelerationData = AccelerationCurveReader.Create(driver.AccelerationCurve);
+				accelerationData = AccelerationCurveReader.Create(driver.AccelerationCurve.AccelerationCurve);
 			}
 
 			if (driver.Lookahead == null) {
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
index 8948c9d6f1..ef6788abbb 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs
@@ -68,8 +68,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			var tempVehicle = dao.CreateVehicleData(vehicle);
 
 			var axlegearData = dao.CreateAxleGearData(vehicle.Components.AxleGearInputData);
-			var gearboxData = dao.CreateGearboxData(vehicle.Components.GearboxInputData, engineData, axlegearData.AxleGear.Ratio,
-				tempVehicle.DynamicTyreRadius,tempVehicle.VehicleCategory);
+			var gearboxData = dao.CreateGearboxData(
+				vehicle.Components.GearboxInputData, engineData, InputDataProvider.DriverInputData.GearshiftInputData,
+				axlegearData.AxleGear.Ratio, tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory);
 			var crossWindRequired = vehicle.Components.AirdragInputData.CrossWindCorrectionMode ==
 									CrossWindCorrectionMode.VAirBetaLookupTable;
 			var angledriveData = dao.CreateAngledriveData(vehicle.Components.AngledriveInputData);
diff --git a/VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs
new file mode 100644
index 0000000000..f7e4e5083c
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactory.cs
@@ -0,0 +1,24 @@
+using System.Collections.Generic;
+using TUGraz.VectoCore.InputData;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.Models.Simulation
+{
+	public interface ISimulatorFactory
+	{
+		bool WriteModalResults { get; set; }
+		bool ModalResults1Hz { get; set; }
+		bool ActualModalData { get; set; }
+
+		bool Validate { get; set; }
+		SummaryDataContainer SumData { get; set; }
+		int JobNumber { get; set; }
+		IVectoRunDataFactory DataReader { get; }
+
+		/// <summary>
+		/// Creates powertrain and initializes it with the component's data.
+		/// </summary>
+		/// <returns>new VectoRun Instance</returns>
+		IEnumerable<IVectoRun> SimulationRuns();
+	}
+}
diff --git a/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs
new file mode 100644
index 0000000000..c0021767a3
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Simulation/ISimulatorFactoryFactory.cs
@@ -0,0 +1,13 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.Models.Simulation
+{
+	public interface ISimulatorFactoryFactory
+	{
+		ISimulatorFactory Factory(
+			ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer,
+			IDeclarationReport declarationReport = null, IVTPReport vtpReport = null, bool validate = true);
+	}
+}
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs
index 0479003a44..661f32487d 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs
@@ -85,7 +85,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 		/// Adds the runs from the factory to the job container.
 		/// </summary>
 		/// <returns>A List of Run-Identifiers (unique), int</returns>
-		public List<int> AddRuns(SimulatorFactory factory)
+		public List<int> AddRuns(ISimulatorFactory factory)
 		{
 			var runIDs = new List<int>();
 
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index 9a27adae2d..be10e8d69c 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -49,7 +49,7 @@ using TUGraz.VectoCore.OutputData.XML;
 
 namespace TUGraz.VectoCore.Models.Simulation.Impl
 {
-	public class SimulatorFactory : LoggingObject
+	public class SimulatorFactory : LoggingObject, ISimulatorFactory
 	{
 		private static int _jobNumberCounter;
 
@@ -124,7 +124,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 
 		public bool Validate { get; set; }
 
-		protected internal IVectoRunDataFactory DataReader { get; private set; }
+		public IVectoRunDataFactory DataReader { get; private set; }
 
 		public SummaryDataContainer SumData { get; set; }
 
diff --git a/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
new file mode 100644
index 0000000000..1048415c73
--- /dev/null
+++ b/VectoCore/VectoCore/Models/Simulation/SimulationFactoryNinjectModule.cs
@@ -0,0 +1,86 @@
+using Ninject.Extensions.Factory;
+using Ninject.Modules;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.OutputData;
+using TUGraz.VectoHashing;
+
+namespace TUGraz.VectoCore.Models.Simulation
+{
+	public class SimulationFactoryNinjectModule : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<ISimulatorFactoryFactory>().ToFactory();
+
+			Bind<ISimulatorFactory>().To<SimulatorFactory>();
+
+			Bind<IDeclarationReport>().To<NullDeclarationReport>();
+			Bind<IVTPReport>().To<NullVTPReport>();
+
+			//if (Kernel != null && !Kernel.HasModule(typeof(PowertrainBuilderInjectModule).FullName)) {
+			//	Kernel.Load(new[] { new PowertrainBuilderInjectModule() });
+			//}
+		}
+
+		#endregion
+	}
+
+	internal class NullDeclarationReport : IDeclarationReport
+	{
+		#region Implementation of IDeclarationReport
+
+		public void InitializeReport(VectoRunData modelData)
+		{
+
+		}
+
+		public void PrepareResult(LoadingType loading, Mission mission, VectoRunData runData)
+		{
+
+		}
+
+		public void AddResult(LoadingType loadingType, Mission mission, VectoRunData runData, IModalDataContainer modData)
+		{
+
+		}
+
+		#endregion
+	}
+
+	internal class NullVTPReport : IVTPReport
+	{
+		#region Implementation of IDeclarationReport
+
+		public void InitializeReport(VectoRunData modelData)
+		{
+
+		}
+
+		public void PrepareResult(LoadingType loading, Mission mission, VectoRunData runData)
+		{
+
+		}
+
+		public void AddResult(LoadingType loadingType, Mission mission, VectoRunData runData, IModalDataContainer modData)
+		{
+
+		}
+
+		#endregion
+
+		#region Implementation of IVTPReport
+
+		public IVectoHash InputDataHash { set { } }
+
+		public IManufacturerReport ManufacturerRecord { set { } }
+
+		public IVectoHash ManufacturerRecordHash { set { } }
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs
index 74b41cf4da..8c463e10e8 100644
--- a/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs
+++ b/VectoCore/VectoCore/Ninject/VectoNinjectModule.cs
@@ -1,29 +1,38 @@
 using Ninject.Modules;
+using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.OutputData.XML;
 
 namespace TUGraz.VectoCore
 {
-	public class VectoNinjectModule : NinjectModule
+	public abstract class AbstractNinjectModule : NinjectModule
+	{
+		protected virtual void LoadModule<T>() where T : class, INinjectModule, new()
+		{
+			if (Kernel != null && !Kernel.HasModule(typeof(T).FullName)) {
+				Kernel.Load(new[] { new T() });
+			}
+
+		}
+	}
+
+	public class VectoNinjectModule : AbstractNinjectModule
 	{
 		#region Overrides of NinjectModule
 
 		public override void Load()
 		{
-			LoadModule<XMLDeclarationReaderInjectModule>();
+			LoadModule<XMLInputDataNinjectModule>();
 
-			// load module engineering reader
+			LoadModule<XMLEngineeringWriterInjectModule>();
 
-			// use ninject for simulator factory?
+			LoadModule<SimulationFactoryNinjectModule>();
 		}
 
 		#endregion
 
-		protected virtual void LoadModule<T>() where T : class, INinjectModule, new()
-		{
-			if (Kernel != null && !Kernel.HasModule(typeof(T).FullName)) {
-				Kernel.Load(new[] { new T() });
-			}
-
-		}
+		
 	}
 }
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs
new file mode 100644
index 0000000000..32ad14bb97
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/EngineeringWriterFactory.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Globalization;
+using System.Linq;
+using Ninject;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Factory
+{
+	public interface IEngineeringWriterFactory
+	{
+		IXMLEngineeringJobWriter CreateJobWriter(string version, IXMLEngineeringWriter writer, IEngineeringInputDataProvider inputData);
+
+		IXMLEngineeringComponentWriter GetWriter<T>(T inputData, IXMLEngineeringWriter writer, DataSource source) where T : class;
+
+		IXMLEngineeringComponentWriter GetWriter<T>(T inputData, IXMLEngineeringWriter writer) where T : class, IComponentInputData;
+
+		//IXMLEngineeringComponentWriter GetWriter(IComponentInputData inputData, IXMLEngineeringWriter xmlEngineeringWriter);
+
+		//IXMLEngineeringComponentWriter GetWriter(object inputData, IXMLEngineeringWriter xmlEngineeringWriter, DataSource source);
+
+		//IXMLEngineeringComponentWriter CreateComponentsWriter(string version, IXMLEngineeringWriter writer);
+	}
+
+	public class EngineeringWriterFactory : IEngineeringWriterFactory
+	{
+		[Inject]
+		public IKernel Kernel { protected get; set; }
+
+		public IXMLEngineeringJobWriter CreateJobWriter(
+			string version, IXMLEngineeringWriter writer, IEngineeringInputDataProvider inputData)
+		{
+			var jobWriter = Kernel.Get<IXMLEngineeringJobWriter>(version);
+			jobWriter.Writer = writer;
+			jobWriter.InputData = inputData;
+			return jobWriter;
+		}
+
+		public virtual IXMLEngineeringComponentWriter GetWriter<T>(
+			T inputData, IXMLEngineeringWriter writer, DataSource source) where T : class 
+		{
+			return DoGetWriter(typeof(T), writer, source);
+		}
+
+		public virtual IXMLEngineeringComponentWriter GetWriter<T>(
+			T inputData, IXMLEngineeringWriter writer) where T : class, IComponentInputData
+		{
+			return DoGetWriter(typeof(T), writer, inputData.DataSource);
+		}
+
+		protected virtual IXMLEngineeringComponentWriter DoGetWriter(Type inputDataType, IXMLEngineeringWriter xmlEngineeringWriter, DataSource source)
+		{
+			Type writerType = null;
+			if (inputDataType.IsInterface) {
+				writerType = XMLWriterMapping.GetWriterType(inputDataType);
+			} else { 
+				foreach (var type in inputDataType.GetInterfaces()) {
+					writerType = XMLWriterMapping.GetWriterType(type);
+					if (writerType != null) {
+						break;
+					}
+				}
+			}
+
+			if (writerType == null) {
+				throw new VectoException("no writer defined for {0}", inputDataType.FullName);
+			}
+			 
+			try {
+				var version = source.SourceVersion;
+				if (!source.SourceType.IsXMLFormat()) {
+					var bindings = Kernel.GetBindings(writerType).ToArray();
+					if (bindings.Any()) {
+						version = bindings.MaxBy(b => b.Metadata.Name.ToDouble()).Metadata.Name;
+					}
+				}
+				return GetEngineeringWriter(inputDataType, version, writerType, xmlEngineeringWriter);
+			} catch (Exception) {
+				var bindings = Kernel.GetBindings(writerType).ToArray();
+				if (bindings.Any()) {
+					var mostRecent = bindings.MaxBy(b => {
+						double retVal;
+						var success = double.TryParse(b.Metadata.Name, NumberStyles.Float, CultureInfo.InvariantCulture, out retVal);
+						return success ? retVal : -1;
+					}).Metadata.Name;
+					return GetEngineeringWriter(inputDataType, mostRecent, writerType, xmlEngineeringWriter);
+				}
+
+			}
+			throw new VectoException("No binding found for {0} ({2}) version {1}", inputDataType.FullName, source.SourceVersion, writerType.FullName);
+		}
+
+		private IXMLEngineeringComponentWriter GetEngineeringWriter(Type inputDataType, string version, Type writerType, IXMLEngineeringWriter xmlEngineeringWriter)
+		{
+			var retVal = Kernel.Get(writerType, version) as IXMLEngineeringComponentWriter;
+			if (retVal == null) {
+				throw new VectoException("Writer for type {0} is not an IXMLEngineeringWriter!", inputDataType.FullName);
+			}
+
+			retVal.Writer = xmlEngineeringWriter;
+			return retVal;
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs
new file mode 100644
index 0000000000..7f07c6f78b
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Factory/IEngineeringWriterInjectFactory.cs
@@ -0,0 +1,10 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+
+namespace TUGraz.VectoCore.OutputData.XML.Factory
+{
+	public interface IEngineeringWriterInjectFactory
+	{
+		IXMLEngineeringJobWriter CreateJobWriter(string version, IXMLEngineeringWriter writer, IEngineeringInputDataProvider inputData);
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs
new file mode 100644
index 0000000000..a623481442
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringComponentWriter.cs
@@ -0,0 +1,65 @@
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces {
+	public interface IXMLEngineeringComponentWriter
+	{
+		IXMLEngineeringWriter Writer { set; }
+
+		XAttribute GetXMLTypeAttribute();
+
+		object[] WriteXML(IComponentInputData inputData);
+
+		object[] WriteXML(IDriverModelData inputData);
+
+		object[] WriteXML(IEngineeringInputDataProvider inputData);
+
+		object[] WriteXML(ITransmissionInputData inputData, int gearNumber);
+		
+		object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius);
+		object[] WriteXML(IAuxiliaryEngineeringInputData inputData);
+
+		object[] WriteXML(IAdvancedDriverAssistantSystemsEngineering inputData);
+	}
+
+
+	public interface IXMLEngineeringDriverDataWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLLookaheadDataWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLOverspeedDataWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLAccelerationDataWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLGearshiftDataWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLVehicleDataWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringGearWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringTorqueconverterWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringAxlegearWriter :IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringRetarderWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringAirdragWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringAxlesWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringAxleWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXmlEngineeringTyreWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringAngledriveWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLAuxiliariesWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLAuxiliaryWriter : IXMLEngineeringComponentWriter { }
+
+	public interface IXMLEngineeringADASWriter : IXMLEngineeringComponentWriter { }
+
+
+
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs
new file mode 100644
index 0000000000..e48fdabd82
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringEngineWriter.cs
@@ -0,0 +1,4 @@
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces
+{
+	public interface IXMLEngineeringEngineWriter : IXMLEngineeringComponentWriter { }
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs
new file mode 100644
index 0000000000..ac5b7ce71e
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringJobWriter.cs
@@ -0,0 +1,13 @@
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+
+namespace TUGraz.VectoCore.OutputData.XML
+{
+	public interface IXMLEngineeringJobWriter
+	{
+		IEngineeringInputDataProvider InputData { set; }
+		IXMLEngineeringWriter Writer { set; }
+
+		object[] WriteXML();
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs
new file mode 100644
index 0000000000..9c42a332ad
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Interfaces/IXMLEngineeringWriter.cs
@@ -0,0 +1,29 @@
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces {
+	public interface IXMLEngineeringWriter
+	{
+		XNamespace RegisterNamespace(string namespaceUri);
+
+		string GetNSPrefix(string xmlns);
+
+		XDocument Write(IEngineeringInputDataProvider inputData);
+
+		XDocument Write(IInputDataProvider inputData);
+
+		XDocument WriteComponent<T>(T componentInputData) where T : class, IComponentInputData;
+
+		WriterConfiguration Configuration { get; set; }
+
+		string GetFilename<T>(T componentData, string suffix = null) where T:IComponentInputData;
+
+		string RemoveInvalidFileCharacters(string filename);
+	}
+
+	public class WriterConfiguration
+	{
+		public bool SingleFile { get; set; }
+		public string BasePath { get; set; }
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs
new file mode 100644
index 0000000000..80e3336928
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterTestOverrides.cs
@@ -0,0 +1,26 @@
+using Ninject.Modules;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Writer;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.NinjectModules
+{
+	public class XMLEngineeringWriterTestOverrides : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			// testing derived xml data types
+
+			Bind<IXMLEngineeringAxleWriter>().To<XMLEngineeringAxleWriterV10TEST>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxleWriterV10TEST.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringEngineWriter>().To<XMLEngineeringEngineWriterV10TEST>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineWriterV10TEST.NAMESPACE_URI));
+
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs
new file mode 100644
index 0000000000..f368c38b46
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/NinjectModules/XMLEngineeringWriterV10InjectModule.cs
@@ -0,0 +1,86 @@
+using Ninject.Modules;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Writer;
+using TUGraz.VectoCore.OutputData.XML.Writer;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.NinjectModules
+{
+	public class XMLEngineeringWriterV10InjectModule : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<IXMLEngineeringJobWriter>().To<XMLEngineeringJobWriterV10>().Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringJobWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLVehicleDataWriter>().To<XMLEngineeringVehicleDataWriterV10>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringVehicleDataWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringComponentWriter>().To<XMLEngineeringComponentsWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringComponentsWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringComponentsWriter>().To<XMLEngineeringComponentsWriterV10>()
+										.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringComponentsWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringEngineWriter>().To<XMLEngineeringEngineWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringEngineWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringGearboxWriter>().To<XMLEngineeringGearboxWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearboxWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringGearWriter>().To<XMLEngineeringGearDataWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringGearDataWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringRetarderWriter>().To<XMLEngineeringRetarderWriterV10>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringRetarderWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringAxlegearWriter>().To<XMLEngineeringAxlegearWriterV10>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlegearWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringAngledriveWriter>().To<XMLEngineeringAngledriveWriterV10>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAngledriveWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringAxlesWriter>().To<XMLEngineeringAxlesWriterV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxlesWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringAxleWriter>().To<XMLEngineeringAxleWriterV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAxleWriterV10.NAMESPACE_URI));
+
+			Bind<IXmlEngineeringTyreWriter>().To<XMLEngineeringTyreWriterV10>()
+											.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTyreWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringTorqueconverterWriter>().To<XMLEngineeringTorqueconverterWriterV10>()
+														.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringTorqueconverterWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringAirdragWriter>().To<XMLEngineeringAirdragWriterV10>()
+												.Named(XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAirdragWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringDriverDataWriter>().To<XMLEngineeringDriverDataWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringDriverDataWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLLookaheadDataWriter>().To<XMLEngineeringLookaheadDataWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringLookaheadDataWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLOverspeedDataWriter>().To<XMLEngineeringOverspeedDataWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringOverspeedDataWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLAccelerationDataWriter>().To<XMLAccelerationDataWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLAccelerationDataWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLGearshiftDataWriter>().To<XMLShiftParmeterDataWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLShiftParmeterDataWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLAuxiliariesWriter>().To<XMLEngineeringAuxiliariesWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliariesWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLAuxiliaryWriter>().To<XMLEngineeringAuxiliaryWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringAuxiliaryWriterV10.NAMESPACE_URI));
+
+			Bind<IXMLEngineeringADASWriter>().To<XMLEngineeringADASWriterV10>().Named(
+				XMLHelper.GetVersionFromNamespaceUri(XMLEngineeringADASWriterV10.NAMESPACE_URI));
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs
new file mode 100644
index 0000000000..f4edfd7400
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/AbstractComponentWriter.cs
@@ -0,0 +1,171 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	public abstract class AbstractXMLWriter
+	{
+		public string XMLDataType { get; }
+
+		protected AbstractXMLWriter(string xmlType)
+		{
+			XMLDataType = xmlType;
+		}
+
+		protected XElement[] GetDefaultComponentElements(IComponentInputData data)
+		{
+			var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+			return new[] {
+				new XElement(tns + XMLNames.Component_Manufacturer, string.IsNullOrWhiteSpace(data.Manufacturer) ? "N.A." : data.Manufacturer),
+				new XElement(tns + XMLNames.Component_Model,  string.IsNullOrWhiteSpace(data.Model) ? "N.A." : data.Model),
+				new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
+				new XElement(tns + XMLNames.Component_AppVersion, "VECTO " + VectoSimulationCore.VersionNumber),
+			};
+		}
+
+		protected XElement[] GetDefaultComponentElements(IVehicleEngineeringInputData data)
+		{
+			var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+			return new[] {
+				new XElement(tns + XMLNames.Component_Manufacturer, data.Manufacturer),
+				new XElement(tns + XMLNames.Component_ManufacturerAddress, data.ManufacturerAddress),
+				new XElement(tns + XMLNames.Component_Model, data.Model),
+				new XElement(tns + XMLNames.Vehicle_VIN, data.VIN),
+				new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
+			};
+		}
+
+		protected object[] EmbedDataTable(
+			DataTable table, Dictionary<string, string> mapping, string tagName = "Entry",
+			Dictionary<string, uint> precision = null)
+		{
+			var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+
+			return (from DataRow row in table.Rows
+					select
+						new XElement(
+							tns + tagName,
+							table.Columns.Cast<DataColumn>()
+								.Where(c => mapping.ContainsKey(c.ColumnName))
+								.Select(
+									c => {
+										var p = precision != null && precision.ContainsKey(c.ColumnName) ? precision[c.ColumnName] : 2;
+										return new XAttribute(mapping[c.ColumnName], row.Field<string>(c).ToDouble().ToXMLFormat(p));
+									})))
+				.Cast<object>().ToArray();
+		}
+
+		protected object[] ExtCSVResource(DataTable data, string filename)
+		{
+			var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+			VectoCSVFile.Write(filename, data);
+			return new object[] {
+				new XElement(
+					tns + XMLNames.ExternalResource,
+					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
+					new XAttribute(XMLNames.ExtResource_File_Attr, filename))
+			};
+		}
+
+		protected virtual XElement ExtComponent(XDocument document, string component, string filename)
+		{
+			var writer = new XmlTextWriter(filename, Encoding.UTF8) {
+				Formatting = Formatting.Indented
+			};
+			document.WriteTo(writer);
+			writer.Flush();
+			writer.Close();
+			var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+			var retVal = new XElement(
+				tns + XMLNames.ExternalResource,
+				new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_XML),
+				new XAttribute(XMLNames.ExtResource_Component_Attr, component),
+				new XAttribute(XMLNames.ExtResource_File_Attr, filename));
+			return retVal;
+		}
+
+		public virtual IXMLEngineeringWriter Writer { protected get; set; }
+
+		public virtual object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius)
+		{
+			return null;
+		}
+
+		public virtual object[] WriteXML(ITransmissionInputData inputData, int i)
+		{
+			return null;
+		}
+
+		public virtual object[] WriteXML(IDriverModelData inputData)
+		{
+			return null;
+		}
+
+		public virtual object[] WriteXML(IComponentInputData inputData)
+		{
+			return null;
+		}
+
+		
+		public virtual object[] WriteXML(IEngineeringInputDataProvider inputData)
+		{
+			return null;
+		}
+
+		public virtual object[] WriteXML(IAuxiliaryEngineeringInputData inputData)
+		{
+			return null;
+		}
+
+		public abstract XNamespace ComponentDataNamespace { get; }
+
+		public virtual XAttribute GetXMLTypeAttribute()
+		{
+			var xsns = Writer.RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE);
+			return new XAttribute(
+				xsns + "type", string.Format("{0}:{1}", Writer.GetNSPrefix(ComponentDataNamespace.NamespaceName), XMLDataType));
+		}
+
+		public virtual object[] WriteXML(IAdvancedDriverAssistantSystemsEngineering inputData)
+		{
+			return null;
+		}
+	}
+
+
+	public abstract class AbstractComponentWriter<T> : AbstractXMLWriter where T : class, IComponentInputData
+	{
+		protected AbstractComponentWriter(string xmlType) : base(xmlType) { }
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(IComponentInputData inputData)
+		{
+			var componentData = inputData as T;
+			if (Writer == null) {
+				throw new VectoException("no main writer set!");
+			}
+
+			if (componentData == null) {
+				throw new VectoException("input Data is not of type IEngineEngineeringInputData");
+			}
+
+			return DoWriteXML(componentData);
+		}
+
+		#endregion
+
+		protected abstract object[] DoWriteXML(T inputData);
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs
new file mode 100644
index 0000000000..111392a037
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLAccelerationDataWriter.cs
@@ -0,0 +1,64 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLAccelerationDataWriterV10 : AbstractXMLWriter, IXMLAccelerationDataWriter
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		private XNamespace _componentDataNamespace;
+		public XMLAccelerationDataWriterV10() : base("DriverAccelerationCurveEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(IDriverModelData inputData)
+		{
+			var acc = inputData as IDriverAccelerationData;
+			
+			if (acc == null) {
+				return new object[] { };
+			}
+
+			if (acc.AccelerationCurve.SourceType == DataSourceType.Embedded &&
+				acc.AccelerationCurve.Source.StartsWith(DeclarationData.DeclarationDataResourcePrefix)) {
+
+				var filename = acc.AccelerationCurve.Source.Replace(DeclarationData.DeclarationDataResourcePrefix + ".VACC.", "")
+								.Replace(Constants.FileExtensions.DriverAccelerationCurve, "");
+				var tns = Writer.RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+				return new object[] {
+					new XElement(
+						tns + XMLNames.ExternalResource,
+						new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
+						new XAttribute(XMLNames.ExtResource_File_Attr, filename))
+				};
+			}
+
+			return new object[] {
+				Writer.Configuration.SingleFile
+					? EmbedDataTable(acc.AccelerationCurve, AttributeMappings.DriverAccelerationCurveMapping)
+					: ExtCSVResource(
+						acc.AccelerationCurve,
+						Path.GetFileName(acc.AccelerationCurve.Source ?? "Driver.vacc"))
+			};
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs
new file mode 100644
index 0000000000..9bfeda37e5
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringLookaheadDataWriter.cs
@@ -0,0 +1,74 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringLookaheadDataWriterV10 : AbstractXMLWriter, IXMLLookaheadDataWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringLookaheadDataWriterV10() : base("LookAheadCoastingEngineeringType") { }
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(IDriverModelData inputData)
+		{
+			var lookahead = inputData as ILookaheadCoastingInputData;
+			var ns = ComponentDataNamespace;
+			if (lookahead == null) {
+				return new object[] { };
+			}
+
+			return new object[] {
+				new XElement(ns + XMLNames.DriverModel_LookAheadCoasting_Enabled, lookahead.Enabled),
+				new XElement(ns + XMLNames.DriverModel_LookAheadCoasting_MinSpeed, lookahead.MinSpeed.AsKmph),
+				new XElement(ns + XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor, lookahead.LookaheadDistanceFactor),
+				new XElement(
+					ns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset,
+					lookahead.CoastingDecisionFactorOffset),
+				new XElement(
+					ns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling,
+					lookahead.CoastingDecisionFactorScaling),
+				lookahead.CoastingDecisionFactorTargetSpeedLookup == null
+					? null
+					: new XElement(
+						ns + XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor,
+						Writer.Configuration.SingleFile
+							? EmbedDataTable(
+								lookahead.CoastingDecisionFactorTargetSpeedLookup,
+								AttributeMappings.CoastingDFTargetSpeedLookupMapping)
+							: ExtCSVResource(
+								lookahead.CoastingDecisionFactorTargetSpeedLookup,
+								Path.Combine(
+									Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("Driver_LAC_TargetspeedLookup.csv")))),
+				lookahead.CoastingDecisionFactorVelocityDropLookup == null
+					? null
+					: new XElement(
+						ns + XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor,
+						Writer.Configuration.SingleFile
+							? EmbedDataTable(
+								lookahead.CoastingDecisionFactorVelocityDropLookup,
+								AttributeMappings.CoastingDFVelocityDropLookupMapping)
+							: ExtCSVResource(
+								lookahead.CoastingDecisionFactorVelocityDropLookup,
+								Path.Combine(
+									Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("Driver_LAC_VelocityDropLookup.csv"))))
+			};
+		}
+
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs
new file mode 100644
index 0000000000..d6a09011d9
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLEngineeringOverspeedDataWriter.cs
@@ -0,0 +1,53 @@
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringOverspeedDataWriterV10 : AbstractXMLWriter, IXMLOverspeedDataWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringOverspeedDataWriterV10() : base("OverspeedEngineeringType") { }
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(IDriverModelData inputData)
+		{
+			var overspeed = inputData as IOverSpeedEcoRollEngineeringInputData;
+			var ns = ComponentDataNamespace;
+			if (overspeed == null) {
+				return new object[] { };
+			}
+
+			if (overspeed.Mode != DriverMode.Off) {
+				return new object[] {
+					new XElement(ns + XMLNames.DriverModel_Overspeed_Mode, overspeed.Mode),
+					new XElement(ns + XMLNames.DriverModel_Overspeed_MinSpeed, overspeed.MinSpeed.AsKmph),
+					new XElement(ns + XMLNames.DriverModel_Overspeed_AllowedOverspeed, overspeed.OverSpeed.AsKmph),
+					new XElement(ns + XMLNames.DriverModel_Overspeed_AllowedUnderspeed, overspeed.UnderSpeed.AsKmph)
+				};
+			}
+
+			return new object[] {
+				new XElement(ns + XMLNames.DriverModel_Overspeed_Mode, overspeed.Mode),
+			};
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs
new file mode 100644
index 0000000000..029c2e38d4
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/DriverData/XMLShiftParmeterDataWriter.cs
@@ -0,0 +1,58 @@
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLShiftParmeterDataWriterV10 : AbstractXMLWriter, IXMLGearshiftDataWriter
+	{
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		private XNamespace _componentDataNamespace;
+		public XMLShiftParmeterDataWriterV10() : base("ShiftStrategyParametersEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(IDriverModelData inputData)
+		{
+			var gearshift = inputData as IGearshiftEngineeringInputData;
+			var tns = ComponentDataNamespace;
+			if (gearshift == null) {
+				return new object[] { };
+			}
+
+			return new object[] {
+				new XElement(
+					tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration,
+					gearshift.UpshiftMinAcceleration.Value()),
+				new XElement(
+					tns + XMLNames.DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay,
+					gearshift.DownshiftAfterUpshiftDelay.Value()),
+				new XElement(
+					tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay,
+					gearshift.UpshiftAfterDownshiftDelay.Value()),
+				new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve, gearshift.TorqueReserve),
+				new XElement(
+					tns + XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift,
+					gearshift.MinTimeBetweenGearshift.Value()),
+				new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed, gearshift.StartSpeed.Value()),
+				new XElement(
+					tns + XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration, gearshift.StartAcceleration.Value()),
+				new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve, gearshift.StartTorqueReserve)
+			};
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs
new file mode 100644
index 0000000000..406041579b
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringADASWriterV10.cs
@@ -0,0 +1,35 @@
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer {
+	internal class XMLEngineeringADASWriterV10 : AbstractXMLWriter,
+		IXMLEngineeringADASWriter
+	{
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringADASWriterV10() : base("AdvancedDriverAssistEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override object[] WriteXML(IAdvancedDriverAssistantSystemsEngineering inputData)
+		{
+			var adas = inputData as IAdvancedDriverAssistantSystemsEngineering;
+			if (adas == null) {
+				return null;
+			}
+			// todo: write different ADAS options
+			return null;
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace { get { return Writer.RegisterNamespace(NAMESPACE_URI); } }
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs
new file mode 100644
index 0000000000..73b91d6fd5
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAirdragWriter.cs
@@ -0,0 +1,69 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringAirdragWriterV10 : AbstractComponentWriter<IAirdragEngineeringInputData>,
+		IXMLEngineeringAirdragWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+		public XMLEngineeringAirdragWriterV10() : base("AirDragDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Overrides of AbstractComponentWriter<IAirdragEngineeringInputData>
+
+		protected override object[] DoWriteXML(IAirdragEngineeringInputData data)
+		{
+			var tns = ComponentDataNamespace;
+			var id = string.Format("Airdrag-{0}", data.Model);
+			return new object[] {
+					new XAttribute(XMLNames.Component_ID_Attr, id),
+					GetXMLTypeAttribute(),
+					GetDefaultComponentElements(data),
+					new XElement(tns + XMLNames.Vehicle_CrossWindCorrectionMode, data.CrossWindCorrectionMode.ToXMLFormat()),
+					new XElement(tns + XMLNames.Vehicle_AirDragArea, data.AirDragArea.Value().ToXMLFormat(2)),
+				GetCrossWindCorrectionData(data)
+			};
+		}
+
+		#endregion
+
+		protected virtual XElement GetCrossWindCorrectionData(IAirdragEngineeringInputData airdrag)
+		{
+			if (airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.NoCorrection ||
+				airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.DeclarationModeCorrection) {
+				return null;
+			}
+
+			var correctionMap = new XElement(ComponentDataNamespace + XMLNames.Vehicle_CrosswindCorrectionData);
+
+			if (Writer.Configuration.SingleFile) {
+				correctionMap.Add(EmbedDataTable(airdrag.CrosswindCorrectionMap, AttributeMappings.CrossWindCorrectionMapping));
+			} else {
+				var ext = airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.SpeedDependentCorrectionFactor
+					? "vcdv"
+					: "vcdb";
+				correctionMap.Add(ExtCSVResource(airdrag.CrosswindCorrectionMap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("CrossWindCorrection." + ext))));
+			}
+
+			return correctionMap;
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs
new file mode 100644
index 0000000000..5700382ddc
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAngledriveWriter.cs
@@ -0,0 +1,61 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringAngledriveWriterV10 : AbstractComponentWriter<IAngledriveInputData>,
+		IXMLEngineeringAngledriveWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAngledriveWriterV10() : base("AngledriveDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Overrides of AbstractComponentWriter<IAxleGearInputData>
+
+		protected override object[] DoWriteXML(IAngledriveInputData data)
+		{
+			var tns = ComponentDataNamespace;
+			var typeId = string.Format("ANGLDRV-{0:0.000}", data.Ratio);
+			return new object[] {
+				GetXMLTypeAttribute(),
+				new XAttribute(XMLNames.Component_ID_Attr, typeId),
+
+				GetDefaultComponentElements(data),
+				new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)),
+				data.LossMap == null
+					? new XElement(
+						tns + XMLNames.Axlegear_TorqueLossMap,
+						new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency))
+					: new XElement(tns + XMLNames.Axlegear_TorqueLossMap, GetTransmissionLossMap(data.LossMap))
+			};
+		}
+
+		#endregion
+
+		protected virtual object[] GetTransmissionLossMap(TableData lossmap)
+		{
+			if (Writer.Configuration.SingleFile) {
+				return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping);
+			}
+
+			return ExtCSVResource(lossmap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(lossmap.Source))));
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs
new file mode 100644
index 0000000000..af88ecd735
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliariesWriter.cs
@@ -0,0 +1,22 @@
+using System.Xml.Linq;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer {
+	internal class XMLEngineeringAuxiliariesWriterV10 : AbstractXMLWriter, IXMLAuxiliariesWriter
+	{
+		private XNamespace _componentDataNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAuxiliariesWriterV10() : base("AuxiliariesDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs
new file mode 100644
index 0000000000..eb0ead0d91
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAuxiliaryWriter.cs
@@ -0,0 +1,22 @@
+using System.Xml.Linq;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer {
+	internal class XMLEngineeringAuxiliaryWriterV10 : AbstractXMLWriter, IXMLAuxiliaryWriter
+	{
+		private XNamespace _componentDataNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAuxiliaryWriterV10() : base("AuxiliaryEntryEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs
new file mode 100644
index 0000000000..960fb8571c
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxleWriter.cs
@@ -0,0 +1,113 @@
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringAxleWriterV10 : AbstractXMLWriter, IXMLEngineeringAxleWriter
+	{
+		protected XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		[Inject]
+		public IEngineeringWriterFactory Factory { protected get; set; }
+
+		public XMLEngineeringAxleWriterV10() : base("AxleDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#region Overrides of AbstractXMLWriter
+
+		public override object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius)
+		{
+			var tns = ComponentDataNamespace;
+			return new object[] {
+				new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, idx),
+				new XElement(
+					tns + XMLNames.AxleWheels_Axles_Axle_AxleType,
+					idx == 2 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()),
+				new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres),
+				new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Steered, idx == 1),
+				new XElement(tns + XMLNames.AxleWheels_Axles_Axle_WeightShare, axle.AxleWeightShare),
+				CreateTyre(axle.Tyre, idx)
+			};
+		}
+
+		protected virtual XElement CreateTyre(ITyreEngineeringInputData tyre, int idx)
+		{
+			var component = XMLNames.AxleWheels_Axles_Axle_Tyre;
+			if (Writer.Configuration.SingleFile) {
+				var tns = ComponentDataNamespace;
+				var tyreWriter = Factory.GetWriter(tyre, Writer);
+				return new XElement(
+					tns + component,
+					new XElement(
+						tns + XMLNames.ComponentDataWrapper,
+						tyreWriter.WriteXML(tyre)));
+			}
+
+			var document = Writer.WriteComponent(tyre);
+			return ExtComponent(document, component, Writer.GetFilename(tyre, tyre.Dimension ?? idx.ToString()));
+		}
+
+		#endregion
+
+		#endregion
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		#endregion
+	}
+
+
+	internal class XMLEngineeringAxleWriterV10TEST : XMLEngineeringAxleWriterV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST;
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		public override object[] WriteXML(IAxleEngineeringInputData axle, int idx, Meter dynamicTyreRadius)
+		{
+			var tns = ComponentDataNamespace;
+			return new object[] {
+				new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, idx),
+				new XElement(tns + "WeightShare", axle.AxleWeightShare),
+				new XElement(tns + "TwinTires", axle.TwinTyres),
+				CreateTyre(axle.Tyre, idx)
+			};
+		}
+
+		protected override XElement CreateTyre(ITyreEngineeringInputData tyre, int idx)
+		{
+			var component = "Tire";
+			if (Writer.Configuration.SingleFile) {
+				var tns = ComponentDataNamespace;
+				var v10 = Writer.RegisterNamespace(XMLEngineeringAxleWriterV10.NAMESPACE_URI);
+				var tyreWriter = Factory.GetWriter(tyre, Writer);
+				return new XElement(
+					tns + component,
+					new XElement(
+						v10 + XMLNames.ComponentDataWrapper,
+						tyreWriter.WriteXML(tyre)));
+			}
+
+			var document = Writer.WriteComponent(tyre);
+			return ExtComponent(document, component, Writer.GetFilename(tyre, tyre.Dimension ?? idx.ToString()));
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs
new file mode 100644
index 0000000000..acc83a1332
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlegearWriter.cs
@@ -0,0 +1,62 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringAxlegearWriterV10 : AbstractComponentWriter<IAxleGearInputData>,
+		IXMLEngineeringAxlegearWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringAxlegearWriterV10() : base("AxlegearDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Overrides of AbstractComponentWriter<IAxleGearInputData>
+
+		protected override object[] DoWriteXML(IAxleGearInputData data)
+		{
+			var tns = ComponentDataNamespace;
+			var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio);
+			return new object[] {
+				GetXMLTypeAttribute(),
+				new XAttribute(XMLNames.Component_ID_Attr, typeId),
+				GetDefaultComponentElements(data),
+				new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)),
+				data.LossMap == null
+					? new XElement(
+						tns + XMLNames.Axlegear_TorqueLossMap,
+						new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency))
+					: new XElement(tns + XMLNames.Axlegear_TorqueLossMap, GetTransmissionLossMap(data.LossMap))
+			};
+		}
+
+		#endregion
+
+		protected virtual object[] GetTransmissionLossMap(TableData lossmap)
+		{
+			if (Writer.Configuration.SingleFile) {
+				return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping);
+			}
+
+			return ExtCSVResource(
+				lossmap,
+				Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(lossmap.Source))));
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs
new file mode 100644
index 0000000000..cb1df233e6
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringAxlesWriter.cs
@@ -0,0 +1,67 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringAxlesWriterV10 : AbstractXMLWriter, IXMLEngineeringAxlesWriter
+	{
+		private XNamespace _componentDataNamespace;
+		private object[] _axles;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		[Inject]
+		public IEngineeringWriterFactory Factory { protected get; set; }
+
+		public XMLEngineeringAxlesWriterV10() : base("AxleComponentEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		#region Overrides of AbstractXMLWriter
+
+		public override object[] WriteXML(IComponentInputData vehicle)
+		{
+			return _axles ?? (_axles = CreateAxles(vehicle));
+		}
+
+		private object[] CreateAxles(IComponentInputData inputData)
+		{
+			var vehicle = inputData as IVehicleEngineeringInputData;
+			if (vehicle == null) {
+				return null;
+			}
+			var retVal = new List<object>();
+			var tns = ComponentDataNamespace;
+			var idx = 1;
+			foreach (var axle in vehicle.Components.AxleWheels.AxlesEngineering) {
+				var writer = Factory.GetWriter(axle, Writer, axle.DataSource);
+				retVal.Add(
+					new XElement(
+						tns + XMLNames.AxleWheels_Axles_Axle,
+						writer.GetXMLTypeAttribute(),
+						writer.WriteXML(axle, idx++, vehicle.DynamicTyreRadius)
+					));
+			}
+
+			return new object[] { new XElement(tns + XMLNames.AxleWheels_Axles, retVal.ToArray()) };
+		}
+
+		#endregion
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs
new file mode 100644
index 0000000000..271868d89b
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringComponentsWriter.cs
@@ -0,0 +1,122 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	public interface IXMLEngineeringComponentsWriter : IXMLEngineeringComponentWriter { }
+
+	public class XMLEngineeringComponentsWriterV10 : AbstractComponentWriter<IVehicleEngineeringInputData>,
+		IXMLEngineeringComponentsWriter
+	{
+		private XNamespace _componentDataNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+
+		[Inject]
+		public IEngineeringWriterFactory Factory { protected get; set; }
+
+
+		public XMLEngineeringComponentsWriterV10() : base("VehicleComponentsType") { }
+
+		#region Overrides of AbstractComponentWriter<IVehicleEngineeringInputData>
+
+		protected override object[] DoWriteXML(IVehicleEngineeringInputData inputData)
+		{
+			var retVal = new List<object>() {
+				GetXMLTypeAttribute(),
+				CreateComponent(inputData.Components.EngineInputData, XMLNames.Component_Engine),
+				CreateComponent(inputData.Components.GearboxInputData, XMLNames.Component_Gearbox),
+			};
+			var singleFile = Writer.Configuration.SingleFile;
+			Writer.Configuration.SingleFile = true;
+
+			if (inputData.Components.AngledriveInputData.Type == AngledriveType.SeparateAngledrive) {
+				retVal.Add(CreateComponent(inputData.Components.AngledriveInputData, XMLNames.Component_Angledrive));
+			}
+
+			if (inputData.Components.RetarderInputData.Type.IsDedicatedComponent()) {
+				retVal.Add(
+					CreateComponent(inputData.Components.RetarderInputData, XMLNames.Component_Retarder)
+				);
+			}
+
+			Writer.Configuration.SingleFile = singleFile;
+			retVal.AddRange(new object[] {
+				CreateComponent(inputData.Components.AxleGearInputData, XMLNames.Component_Axlegear),
+				CreateAxles(inputData),
+				CreateAuxiliaries(inputData),
+				CreateComponent(inputData.Components.AirdragInputData, XMLNames.Component_AirDrag)
+			});
+			return retVal.ToArray();
+		}
+
+		protected virtual XElement CreateAuxiliaries(IVehicleEngineeringInputData inputData)
+		{
+			var v10 = ComponentDataNamespace;
+			var auxData = inputData.Components.AuxiliaryInputData;
+			var componentWriter = Factory.GetWriter(
+				auxData, Writer, inputData.DataSource);
+			return new XElement(
+				v10 + XMLNames.Component_Auxiliaries,
+				new XElement(
+					v10 + XMLNames.ComponentDataWrapper,
+					componentWriter.GetXMLTypeAttribute(),
+					auxData.Auxiliaries.Select(a => Factory.GetWriter(a, Writer, a.DataSource).WriteXML(a)).ToArray()
+				)
+			);
+		}
+
+		protected virtual XElement CreateAxles(IVehicleEngineeringInputData inputData)
+		{
+			var v10 = ComponentDataNamespace;
+			var componentWriter = Factory.GetWriter(
+				inputData.Components.AxleWheels, Writer, inputData.Components.AxleWheels.DataSource);
+			return new XElement(
+				v10 + XMLNames.Component_AxleWheels,
+				new XElement(
+					v10 + XMLNames.ComponentDataWrapper,
+					componentWriter.GetXMLTypeAttribute(),
+					componentWriter.WriteXML(inputData)
+				)
+			);
+		}
+
+
+		protected virtual XElement CreateComponent<T>(T componentData, string component) where T : class, IComponentInputData
+		{
+			if (Writer.Configuration.SingleFile) {
+				var v10 = ComponentDataNamespace;
+				var componentWriter = Factory.GetWriter(componentData, Writer);
+				return new XElement(
+					v10 + component,
+					new XElement(
+						v10 + XMLNames.ComponentDataWrapper,
+						componentWriter.WriteXML(componentData)
+					)
+				);
+			}
+
+			var document = Writer.WriteComponent(componentData);
+			return ExtComponent(document, component, Writer.GetFilename(componentData));
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs
new file mode 100644
index 0000000000..f13cb97f16
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringDriverDataWriter.cs
@@ -0,0 +1,67 @@
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringDriverDataWriterV10 : AbstractXMLWriter, IXMLEngineeringDriverDataWriter
+	{
+		private XNamespace _componentDataNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		[Inject]
+		public IEngineeringWriterFactory Factory { protected get; set; }
+
+		public XMLEngineeringDriverDataWriterV10() : base("DriverModelEngineeringType") { }
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(IEngineeringInputDataProvider inputData)
+		{
+			var driverData = inputData.DriverInputData;
+			var v10 = ComponentDataNamespace;
+
+			var lacWriter = Factory.GetWriter(driverData.Lookahead, Writer, inputData.DataSource);
+			var overspeedWriter = Factory.GetWriter(driverData.OverSpeedEcoRoll, Writer, inputData.DataSource);
+			var accWriter = Factory.GetWriter(driverData.AccelerationCurve, Writer, inputData.DataSource);
+			var gearshiftWriter = Factory.GetWriter(driverData.GearshiftInputData, Writer, inputData.DataSource);
+			return new object[] {
+				new XElement(
+					v10 + XMLNames.DriverModel_LookAheadCoasting,
+					lacWriter.GetXMLTypeAttribute(),
+					lacWriter.WriteXML(driverData.Lookahead)
+				),
+				new XElement(
+					v10 + XMLNames.DriverModel_Overspeed,
+					overspeedWriter.GetXMLTypeAttribute(),
+					overspeedWriter.WriteXML(driverData.OverSpeedEcoRoll)
+				),
+				new XElement(
+					v10 + XMLNames.DriverModel_DriverAccelerationCurve,
+					accWriter.GetXMLTypeAttribute(),
+					accWriter.WriteXML(driverData.AccelerationCurve)
+				),
+				new XElement(
+					v10 + XMLNames.DriverModel_ShiftStrategyParameters,
+					gearshiftWriter.GetXMLTypeAttribute(),
+					gearshiftWriter.WriteXML(driverData.GearshiftInputData)
+				)
+			};
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs
new file mode 100644
index 0000000000..29b1036355
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringEngineWriter.cs
@@ -0,0 +1,102 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringEngineWriterV10 : AbstractComponentWriter<IEngineEngineeringInputData>,
+		IXMLEngineeringEngineWriter
+	{
+		protected XNamespace _componentNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+
+		public XMLEngineeringEngineWriterV10() : base("EngineDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLEngineeringEngineWriter
+
+		protected override object[] DoWriteXML(IEngineEngineeringInputData data)
+		{
+			var ns = ComponentDataNamespace;
+			return new object[] {
+				GetXMLTypeAttribute(),
+				GetDefaultComponentElements(data),
+				new XElement(ns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)),
+				new XElement(ns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)),
+				data.Inertia != null ? new XElement(ns + XMLNames.Engine_Inertia, data.Inertia.Value()) : null,
+				new XElement(ns + XMLNames.Engine_FCCorrection, data.WHTCEngineering.ToXMLFormat(4)),
+				new XElement(ns + XMLNames.Engine_FuelType, data.FuelType.ToXMLFormat()),
+				new XElement(ns + XMLNames.Engine_FuelConsumptionMap, GetFuelConsumptionMap(ns, data)),
+				new XElement(ns + XMLNames.Engine_FullLoadAndDragCurve, GetFullLoadDragCurve(ns, data))
+			};
+		}
+
+		#endregion
+
+		protected virtual object[] GetFullLoadDragCurve(XNamespace ns, IEngineEngineeringInputData data)
+		{
+			if (Writer.Configuration.SingleFile) {
+				return EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping);
+			}
+
+			var filename = Path.Combine(
+				Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(string.Format("ENG_{0}.vfld", data.Model)));
+			return ExtCSVResource(data.FullLoadCurve, filename);
+		}
+
+		protected virtual object[] GetFuelConsumptionMap(XNamespace ns, IEngineEngineeringInputData data)
+		{
+			if (Writer.Configuration.SingleFile) {
+				return EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping);
+			}
+
+			var filename = Path.Combine(
+				Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(string.Format("ENG_{0}.vmap", data.Model)));
+			return ExtCSVResource(data.FuelConsumptionMap, filename);
+		}
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentNamespace ?? (_componentNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+
+	internal class XMLEngineeringEngineWriterV10TEST : XMLEngineeringEngineWriterV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST;
+
+		protected override object[] DoWriteXML(IEngineEngineeringInputData data)
+		{
+			var v10 = Writer.RegisterNamespace(XMLEngineeringEngineWriterV10.NAMESPACE_URI);
+			var v11 = ComponentDataNamespace;
+			return new object[] {
+				GetXMLTypeAttribute(),
+				GetDefaultComponentElements(data),
+				new XElement(v10 + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)),
+				new XElement(v10 + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)),
+				data.Inertia != null ? new XElement(v10 + XMLNames.Engine_Inertia, data.Inertia.Value()) : null,
+				new XElement(v10 + XMLNames.Engine_FCCorrection, data.WHTCEngineering.ToXMLFormat(4)),
+				new XElement(v10 + XMLNames.Engine_FuelType, data.FuelType.ToXMLFormat()),
+				new XElement(v10 + XMLNames.Engine_FuelConsumptionMap, GetFuelConsumptionMap(v10, data)),
+				new XElement(v10 + XMLNames.Engine_FullLoadAndDragCurve, GetFullLoadDragCurve(v10, data)),
+				new XElement(v11 + XMLNames.Engine_RatedPower, data.RatedPowerDeclared?.Value().ToXMLFormat(0) ?? "xxx kW"),
+				new XElement(v11 + XMLNames.Engine_RatedSpeed, data.RatedSpeedDeclared?.AsRPM.ToXMLFormat(0) ?? "yyy rpm")
+			};
+		}
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentNamespace ?? (_componentNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs
new file mode 100644
index 0000000000..183bc4e82e
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearDataWriter.cs
@@ -0,0 +1,80 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringGearDataWriterV10 : AbstractXMLWriter, IXMLEngineeringGearWriter
+	{
+		private XNamespace _componentDataNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringGearDataWriterV10() : base("GearEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(ITransmissionInputData gearData, int i)
+		{
+			var tns = ComponentDataNamespace;
+			var gear = new XElement(
+				tns + XMLNames.Gearbox_Gears_Gear,
+				new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, i),
+				GetXMLTypeAttribute(),
+				new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio.ToXMLFormat(3)),
+				gearData.MaxTorque != null
+					? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, gearData.MaxTorque.Value())
+					: null,
+				gearData.MaxInputSpeed != null
+					? new XElement(tns + XMLNames.Gearbox_Gear_MaxSpeed, gearData.MaxInputSpeed.AsRPM)
+					: null);
+
+			if (gearData.LossMap != null) {
+				gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap, GetTransmissionLossMap(tns, gearData.LossMap)));
+			} else {
+				gear.Add(
+					new XElement(
+						tns + XMLNames.Gearbox_Gear_TorqueLossMap,
+						new XElement(tns + XMLNames.Gearbox_Gear_Efficiency, gearData.Efficiency)));
+			}
+			if (gearData.ShiftPolygon != null) {
+				gear.Add(
+					new XElement(tns + XMLNames.Gearbox_Gears_Gear_ShiftPolygon, CreateShiftPolygon(tns, gearData.ShiftPolygon)));
+			}
+			return new object[] { gear };
+		}
+
+		#endregion
+
+		private object[] GetTransmissionLossMap(XNamespace tns, TableData lossmap)
+		{
+			if (Writer.Configuration.SingleFile) {
+				return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping);
+			}
+
+			return ExtCSVResource(lossmap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(lossmap.Source))));
+		}
+
+		private object[] CreateShiftPolygon(XNamespace tns, TableData shiftPolygon)
+		{
+			if (Writer.Configuration.SingleFile) {
+				return EmbedDataTable(shiftPolygon, AttributeMappings.ShiftPolygonMapping);
+			}
+
+			return ExtCSVResource(shiftPolygon, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(shiftPolygon.Source))));
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs
new file mode 100644
index 0000000000..2595000945
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringGearboxWriter.cs
@@ -0,0 +1,66 @@
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	public interface IXMLEngineeringGearboxWriter : IXMLEngineeringComponentWriter { }
+
+	internal class XMLEngineeringGearboxWriterV10 : AbstractComponentWriter<IGearboxEngineeringInputData>,
+		IXMLEngineeringGearboxWriter
+	{
+		private XNamespace _componentNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		[Inject]
+		public IEngineeringWriterFactory Factory { protected get; set; }
+
+		public XMLEngineeringGearboxWriterV10() : base("GearboxDataEngineeringType") { }
+
+		#region Overrides of AbstractComponentWriter<IGearboxEngineeringInputData>
+
+		protected override object[] DoWriteXML(IGearboxEngineeringInputData data)
+		{
+			var tns = Writer.RegisterNamespace(NAMESPACE_URI);
+			var gears = new XElement(tns + XMLNames.Gearbox_Gears);
+			var i = 1;
+
+			foreach (var gearData in data.Gears) {
+				var gearWriter = Factory.GetWriter(gearData, Writer, gearData.DataSource);
+				var gear = gearWriter.WriteXML(gearData, i++);
+
+				gears.Add(gear);
+			}
+
+			return new object[] {
+				GetXMLTypeAttribute(),
+				new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", data.Model)),
+
+				GetDefaultComponentElements(data),
+				new XElement(tns + XMLNames.Gearbox_TransmissionType, data.Type.ToXMLFormat()),
+				new XElement(tns + XMLNames.Gearbox_Inertia, data.Inertia.Value()),
+				new XElement(tns + XMLNames.Gearbox_TractionInterruption, data.TractionInterruption.Value()), gears
+			};
+		}
+
+		#endregion
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentNamespace ?? (_componentNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs
new file mode 100644
index 0000000000..fd92a31b6c
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringJobWriter.cs
@@ -0,0 +1,128 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Writer;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Writer
+{
+	internal class XMLEngineeringJobWriterV10 : AbstractXMLWriter, IXMLEngineeringJobWriter
+	{
+		private XNamespace _componentDataNamespace;
+		
+		public IEngineeringInputDataProvider InputData { protected get; set; }
+
+		[Inject]
+		public IEngineeringWriterFactory Factory { protected get; set; }
+
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringJobWriterV10() : base("VectoJobEngineeringType") { }
+
+
+		public virtual object[] WriteXML()
+		{
+			if (InputData.JobInputData.EngineOnlyMode) {
+				return WriteEngineOnlyXML();
+			}
+
+			return WriteFullPowertrainXML();
+		}
+
+		protected virtual object[] WriteFullPowertrainXML()
+		{
+			var v10 = ComponentDataNamespace;
+
+			var driverDataWriter = Factory.GetWriter(
+				InputData.DriverInputData, Writer, InputData.JobInputData.Vehicle.DataSource);
+			
+			return new object[] {
+				new XElement(v10 + XMLNames.VectoJob_EngineOnlyMode, InputData.JobInputData.EngineOnlyMode),
+				CreateVehicle(InputData.JobInputData.Vehicle),
+				new XElement(
+					v10 + XMLNames.Component_DriverModel,
+					driverDataWriter.GetXMLTypeAttribute(),
+					driverDataWriter.WriteXML(InputData)),
+				CreateMissions(v10, InputData.JobInputData.Cycles)
+			};
+		}
+
+		protected virtual object[] WriteEngineOnlyXML()
+		{
+			var v10 = ComponentDataNamespace;
+			return new object[] {
+				new XElement(v10 + XMLNames.VectoJob_EngineOnlyMode, InputData.JobInputData.EngineOnlyMode),
+				new XElement(
+					v10 + XMLNames.Component_Engine,
+					new XElement(v10 + XMLNames.ComponentDataWrapper, 
+					Factory.GetWriter(InputData.JobInputData.EngineOnly, Writer).WriteXML(InputData.JobInputData.EngineOnly)
+					)
+				),
+				CreateMissions(v10, InputData.JobInputData.Cycles)
+			};
+		}
+
+		
+
+		protected virtual XElement CreateVehicle(IVehicleEngineeringInputData vehicle)
+		{
+			if (Writer.Configuration.SingleFile) {
+				var v10 = ComponentDataNamespace;
+				var vehicleDataWriter = Factory.GetWriter(vehicle, Writer);
+				return new XElement(
+					v10 + XMLNames.Component_Vehicle,
+					vehicleDataWriter.WriteXML(vehicle)
+				);
+			}
+
+			var document = Writer.WriteComponent(vehicle);
+			return ExtComponent(document , XMLNames.Component_Vehicle, Writer.GetFilename(vehicle));		
+		}
+
+
+		protected virtual XElement CreateMissions(XNamespace tns, IEnumerable<ICycleData> data)
+		{
+			var retVal = new XElement(tns + XMLNames.VectoJob_MissionCycles);
+			foreach (var cycle in data) {
+				var filename = cycle.CycleData.Source;
+				if (filename == null) {
+					continue;
+				}
+
+				if (cycle.CycleData.SourceType == DataSourceType.Embedded &&
+					filename.StartsWith(DeclarationData.DeclarationDataResourcePrefix)) {
+					filename = filename.Replace(DeclarationData.DeclarationDataResourcePrefix + ".MissionCycles.", "")
+										.Replace(Constants.FileExtensions.CycleFile, "");
+				} else {
+					VectoCSVFile.Write(Path.Combine(Writer.Configuration.BasePath, Path.GetFileName(filename)), cycle.CycleData);
+				}
+				retVal.Add(
+					new XElement(
+						tns + XMLNames.Missions_Cycle,
+						new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
+						new XAttribute(XMLNames.ExtResource_File_Attr, Path.GetFileName(filename))
+					)
+				);
+			}
+
+			return retVal;
+		}
+
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs
new file mode 100644
index 0000000000..9ef1fb70ba
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringRetarderWriter.cs
@@ -0,0 +1,52 @@
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringRetarderWriterV10 : AbstractComponentWriter<IRetarderInputData>,
+		IXMLEngineeringRetarderWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+		public XMLEngineeringRetarderWriterV10() : base("RetarderDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Overrides of AbstractComponentWriter<IRetarderInputData>
+
+		protected override object[] DoWriteXML(IRetarderInputData data)
+		{
+			var tns = ComponentDataNamespace;
+			var retarder = new object[] {
+				GetXMLTypeAttribute(),
+				new XAttribute(XMLNames.Component_ID_Attr, "RET-none"),
+				GetDefaultComponentElements(data),
+				new XElement(
+					tns + XMLNames.Retarder_RetarderLossMap,
+					Writer.Configuration.SingleFile
+						? EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping)
+						: ExtCSVResource(
+							data.LossMap,
+							Path.Combine(
+								Writer.Configuration.BasePath,
+								Writer.RemoveInvalidFileCharacters(string.Format("RET_{0}.vrlm", data.Model)))))
+			};
+			return retarder;
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs
new file mode 100644
index 0000000000..d839bd1c08
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTorqueconverterWriter.cs
@@ -0,0 +1,60 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringTorqueconverterWriterV10 : AbstractComponentWriter<ITorqueConverterEngineeringInputData>,
+		IXMLEngineeringTorqueconverterWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		public XMLEngineeringTorqueconverterWriterV10() : base("TorqueConverterEngineeringDataType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Overrides of AbstractComponentWriter<ITorqueConverterEngineeringInputData>
+
+		protected override object[] DoWriteXML(ITorqueConverterEngineeringInputData data)
+		{
+			var tns = ComponentDataNamespace;
+			return new object[] {
+				GetXMLTypeAttribute(),
+				new XAttribute(XMLNames.Component_ID_Attr, string.Format("TC-{0}", data.Model)),
+				GetDefaultComponentElements(data),
+				new XElement(tns + XMLNames.TorqueConverter_ReferenceRPM, data.ReferenceRPM.AsRPM.ToXMLFormat()),
+				new XElement(
+					tns + XMLNames.TorqueConverter_Characteristics,
+					Writer.Configuration.SingleFile
+						? EmbedDataTable(
+							data.TCData, AttributeMappings.TorqueConverterDataMapping,
+							precision: new Dictionary<string, uint>() {
+								{ TorqueConverterDataReader.Fields.SpeedRatio, 4 }
+							})
+						: ExtCSVResource(
+							data.TCData,
+							Path.Combine(
+								Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters(Path.GetFileName(data.TCData.Source))))),
+				new XElement(tns + XMLNames.TorqueConverter_Inertia, data.Inertia.Value())
+			};
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs
new file mode 100644
index 0000000000..c249573424
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringTyreWriter.cs
@@ -0,0 +1,56 @@
+using System.Collections.Generic;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	internal class XMLEngineeringTyreWriterV10 : AbstractComponentWriter<ITyreEngineeringInputData>,
+		IXmlEngineeringTyreWriter
+	{
+		private XNamespace _componentDataNamespace;
+
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+		public XMLEngineeringTyreWriterV10() : base("TyreDataEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Overrides of AbstractComponentWriter<ITyreEngineeringInputData>
+
+		protected override object[] DoWriteXML(ITyreEngineeringInputData inputData)
+		{
+			var tns = ComponentDataNamespace;
+
+			//var retVal = new list<object> {
+			var tyre = new List<object> { 
+				GetXMLTypeAttribute(),
+				GetDefaultComponentElements(inputData)
+				
+			};
+
+			if (string.IsNullOrWhiteSpace(inputData.Dimension)) {
+				tyre.Add(new XElement(
+							tns + XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius, inputData.DynamicTyreRadius.Value() * 1000));
+				tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Inertia, inputData.Inertia.Value()));
+			} else {
+				tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, inputData.Dimension));
+			}
+			tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, inputData.RollResistanceCoefficient.ToXMLFormat(4)));
+			tyre.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, inputData.TyreTestLoad.Value().ToXMLFormat(0)));
+
+			return tyre.ToArray();
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs
new file mode 100644
index 0000000000..bf18416897
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/Writer/XMLEngineeringVehicleDataWriter.cs
@@ -0,0 +1,119 @@
+using System.IO;
+using System.Linq;
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.IVT.VectoXML;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering.Writer
+{
+	public class XMLEngineeringVehicleDataWriterV10 : AbstractXMLWriter, IXMLVehicleDataWriter
+	{
+		private XNamespace _componentDataNamespace;
+		public const string NAMESPACE_URI = XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10;
+
+		[Inject]
+		public IEngineeringWriterFactory Factory { protected get; set; }
+
+		public XMLEngineeringVehicleDataWriterV10() : base("VehicleEngineeringType") { }
+
+		#region Overrides of AbstractXMLWriter
+
+		public override XNamespace ComponentDataNamespace
+		{
+			get { return _componentDataNamespace ?? (_componentDataNamespace = Writer.RegisterNamespace(NAMESPACE_URI)); }
+		}
+
+		#endregion
+
+		#region Implementation of IXMLEngineeringComponentWriter
+
+		public override object[] WriteXML(IComponentInputData inputData)
+		{
+			var vehicle = inputData as IVehicleEngineeringInputData;
+			var ns = ComponentDataNamespace;
+
+			if (vehicle == null) {
+				return null;
+			}
+			var pto = vehicle.Components.PTOTransmissionInputData;
+
+			var componentsWriter = Factory.GetWriter(vehicle.Components, Writer, vehicle.DataSource);
+			var retVal =  new object[] {
+				GetXMLTypeAttribute(),
+				GetDefaultComponentElements(vehicle),
+				vehicle.VehicleCategory != VehicleCategory.Unknown ?  new XElement(ns + XMLNames.Vehicle_VehicleCategory, vehicle.VehicleCategory.ToXMLFormat()) : null,
+				new XElement(ns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()),
+				new XElement(ns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.Value().ToXMLFormat(0)),
+				new XElement(ns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value().ToXMLFormat(0)),
+
+				//new XElement(tns + XMLNames.Vehicle_AirDragArea, airdrag.AirDragArea.Value()),
+				new XElement(ns + XMLNames.Vehicle_RetarderType, vehicle.Components.RetarderInputData.Type.ToXMLFormat()),
+				vehicle.Components.RetarderInputData.Type.IsDedicatedComponent()
+					? new XElement(ns + XMLNames.Vehicle_RetarderRatio, vehicle.Components.RetarderInputData.Ratio.ToXMLFormat(3))
+					: null,
+				new XElement(ns + XMLNames.Vehicle_AngledriveType, vehicle.Components.AngledriveInputData.Type.ToXMLFormat()),
+				new XElement(ns + XMLNames.Vehicle_PTOType, pto.PTOTransmissionType),
+				GetPTOData(ns, pto),
+				CreateTorqueLimits(ns, vehicle),
+				new XElement(ns + XMLNames.Vehicle_CurbMassExtra, vehicle.CurbMassExtra.Value()),
+				new XElement(ns + XMLNames.Vehicle_Loading, vehicle.Loading.Value()),
+				new XElement(
+					ns + XMLNames.Vehicle_Components,
+					componentsWriter.WriteXML(vehicle)
+				),
+				vehicle.ADAS == null ? null : 
+				new XElement(ns + XMLNames.Vehicle_AdvancedDriverAssist,
+							Factory.GetWriter(vehicle.ADAS, Writer, vehicle.ADAS.DataSource).WriteXML(vehicle)
+				), 
+			};
+			return retVal;
+		}
+
+		#endregion
+
+		protected virtual object[] GetPTOData(XNamespace tns, IPTOTransmissionInputData pto)
+		{
+			if (pto.PTOTransmissionType == "None") {
+				return null;
+			}
+
+			var ptoLossMap = new XElement(tns + XMLNames.Vehicle_PTOIdleLossMap);
+			ptoLossMap.Add(
+				Writer.Configuration.SingleFile
+					? EmbedDataTable(pto.PTOLossMap, AttributeMappings.PTOLossMap)
+					: ExtCSVResource(pto.PTOLossMap, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("PTO_LossMap.vptol"))));
+			var ptoCycle = new XElement(tns + XMLNames.Vehicle_PTOCycle);
+			ptoCycle.Add(
+				Writer.Configuration.SingleFile
+					? EmbedDataTable(pto.PTOCycle, AttributeMappings.PTOCycleMap)
+					: ExtCSVResource(pto.PTOCycle, Path.Combine(Writer.Configuration.BasePath, Writer.RemoveInvalidFileCharacters("PTO_cycle.vptoc"))));
+
+			return new object[] { ptoLossMap, ptoCycle };
+		}
+
+		protected virtual XElement CreateTorqueLimits(XNamespace tns, IVehicleDeclarationInputData vehicle)
+		{
+			return vehicle.TorqueLimits.Count == 0
+				? null
+				: new XElement(
+					tns + XMLNames.Vehicle_TorqueLimits,
+					vehicle.TorqueLimits
+							.OrderBy(x => x.Gear)
+							.Select(
+								entry => new XElement(
+									tns + XMLNames.Vehicle_TorqueLimits_Entry,
+									new XAttribute(XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr, entry.Gear),
+									new XAttribute(XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr, entry.MaxTorque.ToXMLFormat(0))
+								)
+							)
+				);
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs
new file mode 100644
index 0000000000..0e618246a9
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs
@@ -0,0 +1,176 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Xml.Linq;
+using Ninject;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering
+{
+	internal class XMLEngineeringWriter : IXMLEngineeringWriter
+	{
+		protected readonly Dictionary<string, string> NamespaceLocationMap = new Dictionary<string, string>() {
+			{ XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10, XMLDefinitions.SCHEMA_BASE_LOCATION + "VectoEngineeringInput.1.0.xsd" },
+			{ XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10, XMLDefinitions.SCHEMA_BASE_LOCATION + "VectoEngineeringDefinitions.1.0.xsd"},
+			{ XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10_TEST, XMLDefinitions.SCHEMA_BASE_LOCATION + "VectoEngineeringDefinitionsTEST.1.1.xsd"},
+		};
+
+		protected Dictionary<string, XNamespace> _namespaces = new Dictionary<string, XNamespace>();
+
+
+
+		[Inject]
+		public IEngineeringWriterFactory WriterFactory { protected get; set; }
+
+		public XMLEngineeringWriter()
+		{
+			RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE);
+			RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+			_namespaces.Add("", XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+
+			Configuration = new WriterConfiguration { SingleFile = true, BasePath = "" };
+		}
+
+		public XDocument Write(IInputDataProvider inputData)
+		{
+			return Write(inputData as IEngineeringInputDataProvider);
+		}
+
+		public XDocument Write(IEngineeringInputDataProvider inputData)
+		{
+			var version = "1.0";
+			var jobWriter = WriterFactory.CreateJobWriter(version, this, inputData);
+
+			var retVal = new XDocument();
+			var v10 = RegisterNamespace(XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10);
+
+			var jobXML = jobWriter.WriteXML();
+			retVal.Add(
+				new XElement(
+					v10 + XMLNames.VectoInputEngineering,
+					GetNamespaceAttributes(),
+					GetSchemaLocations(),
+					jobXML
+				)
+			);
+			return retVal;
+		}
+
+		public XDocument WriteComponent<T>(T componentInputData) where T : class, IComponentInputData
+		{
+			var retVal = new XDocument();
+
+			var v10Inp = RegisterNamespace(XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10);
+			var v10Def = RegisterNamespace(XMLDefinitions.ENGINEERING_DEFINITONS_NAMESPACE_V10);
+			var xsns = RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE);
+			var writer = WriterFactory.GetWriter(componentInputData, this);
+
+			// wrap every component except the vehicle in a Data element
+			var componentXML = writer?.WriteXML(componentInputData);
+			if (typeof(T) != typeof(IVehicleEngineeringInputData)) {
+				componentXML = new object[] {new XElement(
+					v10Def + XMLNames.ComponentDataWrapper,
+					componentXML)};
+			}
+			retVal.Add(
+				new XElement(
+					v10Inp + XMLNames.VectoComponentEngineering,
+					new XAttribute(
+						xsns + "type", string.Format("{0}:VectoComponentEngineeringType", GetNSPrefix(v10Def.NamespaceName))),
+					GetNamespaceAttributes(),
+					GetSchemaLocations(),
+					new XElement(
+						v10Def + XMLWriterMapping.GetXMLTag(typeof(T)),
+						 componentXML )
+				)
+			);
+			return retVal;
+		}
+
+		private XAttribute GetSchemaLocations()
+		{
+			var xsns = RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE);
+
+			return new XAttribute(
+				xsns + "schemaLocation",
+				string.Join(" ", NamespaceLocationMap.Where(x => _namespaces.ContainsKey(x.Key)).Select(x => $"{x.Key} {x.Value}")));
+		}
+
+		public WriterConfiguration Configuration { get; set; }
+
+		public string GetFilename<T>(T componentData, string suffix = null) where T : IComponentInputData
+		{
+			var formatString = XMLWriterMapping.GetFilenameTemplate(typeof(T));
+
+			return
+				Path.Combine(
+					Configuration.BasePath,
+					RemoveInvalidFileCharacters(
+						string.Format(
+							formatString, componentData.Manufacturer ?? "N.A.", componentData.Model ?? "N.A.",
+							suffix != null ? "_" + suffix : null)));
+		}
+
+
+		public XNamespace RegisterNamespace(string namespaceUri)
+		{
+			if (_namespaces.ContainsKey(namespaceUri)) {
+				return _namespaces[namespaceUri];
+			}
+
+			var ns = XNamespace.Get(namespaceUri);
+			_namespaces.Add(namespaceUri, ns);
+			return ns;
+		}
+
+		#region Implementation of IXMLEngineeringWriter
+
+		#endregion
+
+		protected virtual object[] GetNamespaceAttributes()
+		{
+			return _namespaces
+				.Select(x => new XAttribute(x.Key == "" ? "xmlns" : XNamespace.Xmlns + GetNSPrefix(x.Key), x.Value)).Cast<object>()
+				.ToArray();
+		}
+
+		public string GetNSPrefix(string xmlns)
+		{
+			if (xmlns == XMLDefinitions.XML_SCHEMA_NAMESPACE) {
+				return "xsi";
+			}
+			if (xmlns == XMLDefinitions.ENGINEERING_INPUT_NAMESPACE_URI_V10) {
+				return "tns";
+			}
+
+			if (xmlns.StartsWith("urn:tugraz:ivt:VectoAPI")) {
+				var parts = xmlns.Split(':');
+				return parts.Last();
+			}
+
+			throw new VectoException("unknown namespace!");
+		}
+
+		public string GetComponentFilename(IComponentInputData component)
+		{
+			string formatString = null;
+			component.Switch()
+					.Case<IEngineEngineeringInputData>(c => formatString = "ENG_{0}.xml");
+
+			return RemoveInvalidFileCharacters(string.Format(formatString ?? "{0}", component.Model));
+		}
+
+		public string RemoveInvalidFileCharacters(string filename)
+		{
+			string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
+			Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
+			return r.Replace(filename, "");
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs
new file mode 100644
index 0000000000..5cc8a54dce
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriterInjectModule.cs
@@ -0,0 +1,36 @@
+using Ninject.Extensions.Factory;
+using Ninject.Modules;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
+using TUGraz.VectoCore.OutputData.XML.Engineering;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Factory;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Writer;
+using TUGraz.VectoCore.OutputData.XML.Factory;
+using TUGraz.VectoCore.OutputData.XML.NinjectModules;
+using TUGraz.VectoCore.OutputData.XML.Writer;
+using TUGraz.VectoCore.Utils;
+using TUGraz.VectoCore.Utils.Ninject;
+
+namespace TUGraz.VectoCore.OutputData.XML
+{
+	public class XMLEngineeringWriterInjectModule : NinjectModule
+	{
+		#region Overrides of NinjectModule
+
+		public override void Load()
+		{
+			Bind<IEngineeringWriterInjectFactory>().ToFactory(() => new UseFirstArgumentAsInstanceProvider());
+
+			Bind<IEngineeringWriterFactory>().To<EngineeringWriterFactory>();
+
+			Bind<IXMLEngineeringWriter>().To<XMLEngineeringWriter>();
+
+			
+			Kernel?.Load(new [] {
+				new XMLEngineeringWriterV10InjectModule()
+			});
+		}
+
+		#endregion
+	}
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs
new file mode 100644
index 0000000000..0ef3c95af5
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLWriterMapping.cs
@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Writer;
+
+namespace TUGraz.VectoCore.OutputData.XML.Engineering {
+	internal static class XMLWriterMapping
+	{
+		static Dictionary<Type, Entry> mapping = new Dictionary<Type, Entry>() {
+			
+			{
+				typeof(IEngineEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringEngineWriter),
+					XMLTag = XMLNames.Component_Engine,
+					FilenameTemplate = "Engine-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(IVehicleEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXMLVehicleDataWriter),
+					XMLTag = XMLNames.Component_Vehicle,
+					FilenameTemplate = "Vehicle-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(IVehicleComponentsEngineering),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringComponentWriter),
+				}
+			}, {
+				typeof(IGearboxEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringGearboxWriter),
+					XMLTag = XMLNames.Component_Gearbox,
+					FilenameTemplate = "Gearbox-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(ITransmissionInputData),
+				new Entry { WriterType = typeof(IXMLEngineeringGearWriter) }
+			}, {
+				typeof(IDriverEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringDriverDataWriter),
+				}
+			}, {
+				typeof(IRetarderInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringRetarderWriter),
+					XMLTag = XMLNames.Component_Retarder,
+					FilenameTemplate = "Retarder-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(IAxleGearInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringAxlegearWriter),
+					XMLTag = XMLNames.Component_Axlegear,
+					FilenameTemplate = "Axlegear-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(IAxlesEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringAxlesWriter),
+					XMLTag = XMLNames.Component_AxleWheels,
+				}
+			}, {
+				typeof(IAxleEngineeringInputData),
+				new Entry { WriterType = typeof(IXMLEngineeringAxleWriter) }
+			}, {
+				typeof(ITyreEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXmlEngineeringTyreWriter),
+					XMLTag = XMLNames.AxleWheels_Axles_Axle_Tyre,
+					FilenameTemplate = "Tyre-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(ITorqueConverterEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringTorqueconverterWriter),
+					XMLTag = XMLNames.Component_TorqueConverter,
+					FilenameTemplate = "TorqueConverter-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(IAirdragEngineeringInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringAirdragWriter),
+					XMLTag = XMLNames.Component_AirDrag,
+					FilenameTemplate = "Airdrag-{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(IAngledriveInputData),
+				new Entry {
+					WriterType = typeof(IXMLEngineeringAngledriveWriter),
+					XMLTag = XMLNames.Component_Angledrive,
+					FilenameTemplate = "Angledrive{0}_{1}{2}.xml"
+				}
+			}, {
+				typeof(ILookaheadCoastingInputData),
+				new Entry { WriterType = typeof(IXMLLookaheadDataWriter) }
+			}, {
+				typeof(IOverSpeedEcoRollEngineeringInputData),
+				new Entry { WriterType = typeof(IXMLOverspeedDataWriter) }
+			}, {
+				typeof(IDriverAccelerationData),
+				new Entry { WriterType = typeof(IXMLAccelerationDataWriter) }
+			}, {
+				typeof(IGearshiftEngineeringInputData),
+				new Entry { WriterType = typeof(IXMLGearshiftDataWriter) }
+			}, {
+				typeof(IAuxiliariesEngineeringInputData),
+				new Entry { WriterType = typeof(IXMLAuxiliariesWriter) }
+			}, {
+				typeof(IAuxiliaryEngineeringInputData),
+				new Entry { WriterType = typeof(IXMLAuxiliaryWriter)}
+			}, {
+				typeof(IAdvancedDriverAssistantSystemsEngineering), new Entry() {WriterType = typeof(IXMLEngineeringADASWriter), XMLTag = XMLNames.Vehicle_AdvancedDriverAssist}
+			}
+
+		};
+
+		public class Entry
+		{
+			public Type WriterType { get; set; }
+
+			public string XMLTag { get; set; }
+
+			public string FilenameTemplate { get; set; }
+		}
+
+		public static Type GetWriterType(Type inputType)
+		{
+			return mapping.ContainsKey(inputType) ? mapping[inputType].WriterType : null;
+		}
+
+		public static string GetXMLTag(Type inputType)
+		{
+			return mapping.ContainsKey(inputType) ? mapping[inputType].XMLTag : null;
+		}
+
+		public static string GetFilenameTemplate(Type inputType)
+		{
+			return mapping.ContainsKey(inputType) ? mapping[inputType].FilenameTemplate : "{0}_{1}.xml";
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
deleted file mode 100644
index abfc5edfcd..0000000000
--- a/VectoCore/VectoCore/OutputData/XML/XMLEngineeringWriter.cs
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
-* This file is part of VECTO.
-*
-* Copyright © 2012-2019 European Union
-*
-* Developed by Graz University of Technology,
-*              Institute of Internal Combustion Engines and Thermodynamics,
-*              Institute of Technical Informatics
-*
-* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved
-* by the European Commission - subsequent versions of the EUPL (the "Licence");
-* You may not use VECTO except in compliance with the Licence.
-* You may obtain a copy of the Licence at:
-*
-* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
-*
-* Unless required by applicable law or agreed to in writing, VECTO
-* distributed under the Licence is distributed on an "AS IS" basis,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the Licence for the specific language governing permissions and
-* limitations under the Licence.
-*
-* Authors:
-*   Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology
-*   Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology
-*   Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology
-*   Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology
-*   Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology
-*   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.IO;
-using System.Text.RegularExpressions;
-using System.Xml;
-using System.Xml.Linq;
-using TUGraz.IVT.VectoXML;
-using TUGraz.IVT.VectoXML.Writer;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Configuration;
-using TUGraz.VectoCore.InputData.Reader.ComponentData;
-using TUGraz.VectoCore.Utils;
-
-namespace TUGraz.VectoCore.OutputData.XML
-{
-	public class XMLEngineeringWriter : AbstractXMLWriter
-	{
-		private readonly bool _singleFile;
-		private readonly XNamespace _declarationNamespace;
-
-
-		public XMLEngineeringWriter(string basePath, bool singleFile, string vendor) : base(basePath, vendor)
-		{
-			_singleFile = singleFile;
-			SchemaVersion = "0.7";
-			tns = Constants.XML.VectoEngineeringDefinitionsNS; // "urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.6";
-			rootNamespace = Constants.XML.VectoEngineeringInputNS; // "urn:tugraz:ivt:VectoAPI:EngineeringInput:v0.6";
-			_declarationNamespace = Constants.XML.VectoDeclarationDefinitionsNS;
-			//"urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v0.6";
-		}
-
-		public XDocument GenerateVectoJob(IEngineeringInputDataProvider data)
-		{
-			var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
-
-			var job = new XDocument();
-			job.Add(new XElement(rootNamespace + XMLNames.VectoInputEngineering,
-				new XAttribute("schemaVersion", SchemaVersion),
-				new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
-				new XAttribute("xmlns", tns),
-				new XAttribute(XNamespace.Xmlns + "tns", rootNamespace),
-				new XAttribute(XNamespace.Xmlns + "vdecdef", _declarationNamespace),
-				new XAttribute(xsi + "schemaLocation",
-					string.Format("{0} {1}VectoEngineeringInput.xsd", rootNamespace, SchemaLocationBaseUrl)),
-				data.JobInputData.EngineOnlyMode
-					? CreateEngineOnly(data)
-					: CreateEngineeringJob(data))
-				);
-			return job;
-		}
-
-		public XDocument GenerateVectoComponent(IGearboxEngineeringInputData gearbox,
-			ITorqueConverterEngineeringInputData torqueConverter)
-		{
-			return GenerateComponentDocument(CreateGearbox(gearbox, torqueConverter));
-		}
-
-		public XDocument GenerateVectoComponent(IAxleGearInputData data)
-		{
-			return GenerateComponentDocument(CreateAxlegear(data));
-		}
-
-		protected XDocument GenerateComponentDocument(XElement content)
-		{
-			var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
-
-			var component = new XDocument();
-			component.Add(new XElement(rootNamespace + XMLNames.VectoComponentEngineering,
-				new XAttribute("schemaVersion", SchemaVersion),
-				new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
-				new XAttribute("xmlns", tns),
-				new XAttribute(XNamespace.Xmlns + "tns", rootNamespace),
-				new XAttribute(XNamespace.Xmlns + "vdecdef", _declarationNamespace),
-				new XAttribute(xsi + "schemaLocation",
-					string.Format("{0} {1}VectoEngineeringInput.xsd", rootNamespace, SchemaLocationBaseUrl)),
-				content)
-				);
-			return component;
-		}
-
-		protected XElement[] CreateEngineOnly(IEngineeringInputDataProvider data)
-		{
-			return new[] {
-				new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, true),
-				CreateEngine(data.JobInputData.EngineOnly, false),
-				CreateMissions(data.JobInputData.Cycles)
-			};
-		}
-
-		protected XElement[] CreateEngineeringJob(IEngineeringInputDataProvider data)
-		{
-			return new[] {
-				new XElement(tns + XMLNames.VectoJob_EngineOnlyMode, false),
-				CreateVehicle(data),
-				CreateDriverModel(data),
-				CreateMissions(data.JobInputData.Cycles)
-			};
-		}
-
-		private XElement CreateMissions(IEnumerable<ICycleData> data)
-		{
-			var retVal = new XElement(tns + XMLNames.VectoJob_MissionCycles);
-			foreach (var cycle in data) {
-				var filename = cycle.CycleData.Source;
-				if (filename == null) {
-					continue;
-				}
-				VectoCSVFile.Write(Path.Combine(BasePath, Path.GetFileName(filename)), cycle.CycleData);
-				retVal.Add(new XElement(tns + XMLNames.Missions_Cycle,
-					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
-					new XAttribute(XMLNames.ExtResource_File_Attr, Path.GetFileName(filename))
-					)
-					);
-			}
-			return retVal;
-		}
-
-		private XElement CreateDriverModel(IEngineeringInputDataProvider engineering)
-		{
-			var driver = engineering.DriverInputData;
-			var gbx = engineering.JobInputData.Vehicle.Components.GearboxInputData;
-			var lookahead = driver.Lookahead;
-			var overspeed = driver.OverSpeedEcoRoll;
-
-			return new XElement(tns + XMLNames.Component_DriverModel,
-				new XElement(tns + XMLNames.DriverModel_LookAheadCoasting,
-					new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_Enabled, lookahead.Enabled),
-					new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_MinSpeed, lookahead.MinSpeed.AsKmph),
-					new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_PreviewDistanceFactor, lookahead.LookaheadDistanceFactor),
-					new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorOffset,
-						lookahead.CoastingDecisionFactorOffset),
-					new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_DecisionFactorScaling,
-						lookahead.CoastingDecisionFactorScaling),
-					lookahead.CoastingDecisionFactorTargetSpeedLookup == null
-						? null
-						: new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_SpeedDependentDecisionFactor,
-							_singleFile
-								? EmbedDataTable(lookahead.CoastingDecisionFactorTargetSpeedLookup,
-									AttributeMappings.CoastingDFTargetSpeedLookupMapping)
-								: ExtCSVResource(lookahead.CoastingDecisionFactorTargetSpeedLookup, "Driver_LAC_TargetspeedLookup.csv")),
-					lookahead.CoastingDecisionFactorVelocityDropLookup == null
-						? null
-						: new XElement(tns + XMLNames.DriverModel_LookAheadCoasting_VelocityDropDecisionFactor,
-							_singleFile
-								? EmbedDataTable(lookahead.CoastingDecisionFactorVelocityDropLookup,
-									AttributeMappings.CoastingDFVelocityDropLookupMapping)
-								: ExtCSVResource(lookahead.CoastingDecisionFactorVelocityDropLookup, "Driver_LAC_VelocityDropLookup.csv"))
-					),
-				new XElement(tns + XMLNames.DriverModel_Overspeed,
-					new XElement(tns + XMLNames.DriverModel_Overspeed_Mode, driver.OverSpeedEcoRoll.Mode),
-					new XElement(tns + XMLNames.DriverModel_Overspeed_MinSpeed, overspeed.MinSpeed.AsKmph),
-					new XElement(tns + XMLNames.DriverModel_Overspeed_AllowedOverspeed, overspeed.OverSpeed.AsKmph),
-					new XElement(tns + XMLNames.DriverModel_Overspeed_AllowedUnderspeed, overspeed.UnderSpeed.AsKmph)
-					),
-				driver.AccelerationCurve == null
-					? null
-					: new XElement(tns + XMLNames.DriverModel_DriverAccelerationCurve,
-						_singleFile
-							? EmbedDataTable(driver.AccelerationCurve, AttributeMappings.DriverAccelerationCurveMapping)
-							: ExtCSVResource(driver.AccelerationCurve,
-								Path.GetFileName(driver.AccelerationCurve.Source ?? "Driver.vacc"))
-						),
-				new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters,
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftMinAcceleration,
-						gbx.UpshiftMinAcceleration.Value()),
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_DownshiftAfterUpshiftDelay,
-						gbx.DownshiftAfterUpshiftDelay.Value()),
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_UpshiftAfterDownshiftDelay,
-						gbx.UpshiftAfterDownshiftDelay.Value()),
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_TorqueReserve, gbx.TorqueReserve),
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_TimeBetweenGearshift,
-						gbx.MinTimeBetweenGearshift.Value()),
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartSpeed, gbx.StartSpeed.Value()),
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartAcceleration, gbx.StartAcceleration.Value()),
-					new XElement(tns + XMLNames.DriverModel_ShiftStrategyParameters_StartTorqueReserve, gbx.StartTorqueReserve))
-				);
-		}
-
-		protected XElement CreateVehicle(IEngineeringInputDataProvider data)
-		{
-			var retarder = data.JobInputData.Vehicle.Components.RetarderInputData;
-			var gearbox = data.JobInputData.Vehicle.Components.GearboxInputData;
-			var vehicle = data.JobInputData.Vehicle;
-			var angledrive = data.JobInputData.Vehicle.Components.AngledriveInputData;
-			var pto = data.JobInputData.Vehicle.Components.PTOTransmissionInputData;
-
-			return new XElement(tns + XMLNames.Component_Vehicle,
-				new XAttribute(XMLNames.Component_ID_Attr, "VEH-" + vehicle.Model),
-				GetDefaultComponentElements(vehicle.Model),
-				new XElement(tns + XMLNames.Vehicle_VehicleCategory, vehicle.VehicleCategory.ToXMLFormat()),
-				new XElement(tns + XMLNames.Vehicle_AxleConfiguration, vehicle.AxleConfiguration.GetName()),
-				new XElement(tns + XMLNames.Vehicle_CurbMassChassis, vehicle.CurbMassChassis.Value().ToXMLFormat(0)),
-				new XElement(tns + XMLNames.Vehicle_GrossVehicleMass, vehicle.GrossVehicleMassRating.Value().ToXMLFormat(0)),
-				//new XElement(tns + XMLNames.Vehicle_AirDragArea, airdrag.AirDragArea.Value()),
-				new XElement(tns + XMLNames.Vehicle_RetarderType, retarder.Type.ToXMLFormat()),
-				retarder.Type.IsDedicatedComponent()
-					? new XElement(tns + XMLNames.Vehicle_RetarderRatio, retarder.Ratio.ToXMLFormat(3))
-					: null,
-				new XElement(tns + XMLNames.Vehicle_AngledriveType, angledrive.Type.ToXMLFormat()),
-				new XElement(tns + XMLNames.Vehicle_PTOType, pto.PTOTransmissionType),
-				GetPTOData(pto),
-				CreateTorqueLimits(vehicle),
-				new XElement(tns + XMLNames.Vehicle_CurbMassExtra, vehicle.CurbMassExtra.Value()),
-				new XElement(tns + XMLNames.Vehicle_Loading, vehicle.Loading.Value()),
-				new XElement(tns + XMLNames.Vehicle_Components,
-					CreateEngine(vehicle.Components.EngineInputData),
-					CreateGearbox(gearbox, gearbox.TorqueConverter),
-					angledrive.Type == AngledriveType.SeparateAngledrive ? CreateAngleDrive(angledrive) : null,
-					retarder.Type.IsDedicatedComponent() ? CreateRetarder(retarder) : null,
-					CreateAxlegear(vehicle.Components.AxleGearInputData),
-					CreateAxleWheels(vehicle),
-					CreateAuxiliaries(vehicle.Components.AuxiliaryInputData, RemoveInvalidFileCharacters(vehicle.Model)),
-					CreateAirdrag(vehicle.Components.AirdragInputData)
-					),
-				new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist,
-					new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop,
-						new XElement(tns + XMLNames.Vehicle_AdvancedDriverAssist_EngineStartStop_Enabled, false))
-					));
-		}
-
-
-		private object[] GetPTOData(IPTOTransmissionInputData pto)
-		{
-			if (pto.PTOTransmissionType == "None") {
-				return null;
-			}
-			var ptoLossMap = new XElement(tns + XMLNames.Vehicle_PTOIdleLossMap);
-			ptoLossMap.Add(_singleFile
-				? EmbedDataTable(pto.PTOLossMap, AttributeMappings.PTOLossMap)
-				: ExtCSVResource(pto.PTOLossMap, "PTO_LossMap.vptol"));
-			var ptoCycle = new XElement(tns + XMLNames.Vehicle_PTOCycle);
-			ptoCycle.Add(_singleFile
-				? EmbedDataTable(pto.PTOCycle, AttributeMappings.PTOCycleMap)
-				: ExtCSVResource(pto.PTOCycle, "PTO_cycle.vptoc"));
-
-			return new object[] { ptoLossMap, ptoCycle };
-		}
-
-		private XElement GetCrossWindCorrectionData(IAirdragEngineeringInputData airdrag)
-		{
-			if (airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.NoCorrection ||
-				airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.DeclarationModeCorrection) {
-				return null;
-			}
-
-			var correctionMap = new XElement(tns + XMLNames.Vehicle_CrosswindCorrectionData);
-
-			if (_singleFile) {
-				correctionMap.Add(EmbedDataTable(airdrag.CrosswindCorrectionMap, AttributeMappings.CrossWindCorrectionMapping));
-			} else {
-				var ext = airdrag.CrossWindCorrectionMode == CrossWindCorrectionMode.SpeedDependentCorrectionFactor
-					? "vcdv"
-					: "vcdb";
-				correctionMap.Add(ExtCSVResource(airdrag.CrosswindCorrectionMap, "CrossWindCorrection." + ext));
-			}
-
-			return correctionMap;
-		}
-
-		private XElement CreateAngleDrive(IAngledriveInputData data)
-		{
-			var angledrive = new XElement(tns + XMLNames.Component_Angledrive,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, "ANGL-" + data.Model),
-					GetDefaultComponentElements(data.Model),
-					new XElement(tns + XMLNames.AngleDrive_Ratio, data.Ratio.ToXMLFormat(3)),
-					data.LossMap == null
-						? new XElement(tns + XMLNames.AngleDrive_TorqueLossMap,
-							new XElement(tns + XMLNames.AngleDrive_Efficiency, data.Efficiency))
-						: new XElement(tns + XMLNames.AngleDrive_TorqueLossMap, GetTransmissionLossMap(data.LossMap))));
-			//if (_singleFile) {
-			return angledrive;
-			//}
-			//return ExtComponent(XMLNames.Component_Angledrive, angledrive,
-			//	string.Format("ANGL_{0}.xml", RemoveInvalidFileCharacters(data.ModelName)));
-		}
-
-		private string RemoveInvalidFileCharacters(string filename)
-		{
-			string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
-			Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
-			return r.Replace(filename, "");
-		}
-
-		public XElement CreateAuxiliaries(IAuxiliariesEngineeringInputData data, string fileSuffix)
-		{
-			var auxList = new List<XElement>();
-			foreach (var auxData in data.Auxiliaries) {
-				var entry = new XElement(tns + XMLNames.Auxiliaries_Auxiliary,
-					new XAttribute(XMLNames.Auxiliaries_Auxiliary_ID_Attr, auxData.ID));
-				if (auxData.ConstantPowerDemand > 0) {
-					entry.Add(new XElement(tns + XMLNames.Auxiliaries_Auxiliary_ConstantAuxLoad, auxData.ConstantPowerDemand.Value()));
-					auxList.Add(entry);
-					continue;
-				}
-				if (_singleFile) {
-					entry.Add(new XElement(tns + XMLNames.Auxiliaries_Auxiliary_TransmissionRatioToEngine, auxData.TransmissionRatio),
-						new XElement(tns + XMLNames.Auxiliaries_Auxiliary_EfficiencyToEngine, auxData.EfficiencyToEngine),
-						new XElement(tns + XMLNames.Auxiliaries_Auxiliary_EfficiencyAuxSupply, auxData.EfficiencyToSupply),
-						new XElement(tns + XMLNames.Auxiliaries_Auxiliary_AuxMap,
-							EmbedDataTable(auxData.DemandMap, AttributeMappings.AuxMapMapping)));
-				} else {
-					entry.Add(ExtCSVResource(auxData.DemandMap, Path.GetFileName(auxData.DemandMap.Source)));
-				}
-			}
-
-			var aux = new XElement(tns + XMLNames.Component_Auxiliaries,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					//new XAttribute(XMLNames.Component_ID_Attr, "AUX-none"), 
-					auxList));
-			if (_singleFile) {
-				return aux;
-			}
-			return ExtComponent(XMLNames.Component_Auxiliaries, aux, string.Format("AUX_{0}.xml", fileSuffix));
-		}
-
-		public XElement CreateAxleWheels(IVehicleEngineeringInputData data)
-		{
-			var axleData = data.Components.AxleWheels.AxlesEngineering;
-			var numAxles = axleData.Count;
-			var axles = new List<XElement>(numAxles);
-			for (var i = 0; i < numAxles; i++) {
-				var axle = axleData[i];
-				axles.Add(new XElement(tns + XMLNames.AxleWheels_Axles_Axle,
-					new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, i + 1),
-					GetDefaultComponentElements(axle.Tyre.Dimension),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_AxleType,
-						i == 1 ? AxleType.VehicleDriven.ToString() : AxleType.VehicleNonDriven.ToString()),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_TwinTyres_Attr, axle.TwinTyres),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Steered, i == 0),
-					string.IsNullOrWhiteSpace(axle.Tyre.Dimension)
-						? null
-						: new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Tyre.Dimension),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, axle.Tyre.RollResistanceCoefficient),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.Tyre.TyreTestLoad.Value()),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_WeightShare, axle.AxleWeightShare),
-					new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Inertia, axle.Tyre.Inertia.Value()),
-					i == 1
-						? new XElement(tns + XMLNames.AxleWheels_Axles_Axle_DynamicTyreRadius, data.DynamicTyreRadius.Value() * 1000)
-						: null));
-			}
-
-			var axleWheels = new XElement(tns + XMLNames.Component_AxleWheels,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, string.Format("AXLWHL-{0}", data.AxleConfiguration.GetName())),
-					new XElement(tns + XMLNames.AxleWheels_Axles, axles)));
-			if (_singleFile) {
-				return axleWheels;
-			}
-			return ExtComponent(XMLNames.Component_AxleWheels, axleWheels,
-				String.Format("AXLWHL-{0}.xml", data.AxleConfiguration.GetName()));
-		}
-
-		//private XElement CreateTyre(IAxleDeclarationInputData axle)
-		//{
-		//	var id = string.Format("TYRE-{0}", axle.Wheels).RemoveWhitespace().Replace("/", "_");
-		//	return new XElement(tns + "Tyre",
-		//		new XAttribute(XMLNames.Component_CertificationNumber, id),
-		//		new XElement(tns + XMLNames.ComponentDataWrapper,
-		//			GetDefaultComponentElements(string.Format("TYRE-{0}", axle.Wheels), axle.Wheels),
-		//			string.IsNullOrWhiteSpace(axle.Wheels)
-		//				? null
-		//				: new XElement(tns + XMLNames.AxleWheels_Axles_Axle_Dimension, axle.Wheels),
-		//			new XElement(tns + XMLNames.AxleWheels_Axles_Axle_RRCISO, axle.RollResistanceCoefficient.ToXMLFormat(4)),
-		//			new XElement(tns + XMLNames.AxleWheels_Axles_Axle_FzISO, axle.TyreTestLoad.Value().ToXMLFormat(0))
-		//			)
-		//		);
-		//}
-
-		public XElement CreateAxlegear(IAxleGearInputData data)
-		{
-			var typeId = string.Format("AXLGEAR-{0:0.000}", data.Ratio);
-			var axl = new XElement(tns + XMLNames.Component_Axlegear,
-				new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, typeId),
-					GetDefaultComponentElements("N.A."),
-					new XElement(tns + XMLNames.Axlegear_Ratio, data.Ratio.ToXMLFormat(3)),
-					data.LossMap == null
-						? new XElement(tns + XMLNames.Axlegear_TorqueLossMap,
-							new XElement(tns + XMLNames.Axlegear_Efficiency, data.Efficiency))
-						: new XElement(tns + XMLNames.Axlegear_TorqueLossMap, GetTransmissionLossMap(data.LossMap))));
-			if (_singleFile) {
-				return axl;
-			}
-			return ExtComponent(XMLNames.Component_Axlegear, axl, string.Format("AXL_{0:0.00}.xml", data.Ratio));
-		}
-
-
-		public XElement CreateRetarder(IRetarderInputData data)
-		{
-			var retarder = new XElement(tns + XMLNames.Component_Retarder,
-				new XElement(tns + XMLNames.ComponentDataWrapper, new XAttribute(XMLNames.Component_ID_Attr, "RET-none"),
-					GetDefaultComponentElements(data.Model),
-					new XElement(tns + XMLNames.Retarder_RetarderLossMap,
-						_singleFile
-							? EmbedDataTable(data.LossMap, AttributeMappings.RetarderLossmapMapping)
-							: ExtCSVResource(data.LossMap, string.Format("RET_{0}.vrlm", RemoveInvalidFileCharacters(data.Model))))));
-			//if (_singleFile) {
-			return retarder;
-			//}
-			//return ExtComponent(XMLNames.Component_Retarder, retarder,
-			//	string.Format("RET_{0}.xml", RemoveInvalidFileCharacters(data.ModelName)));
-		}
-
-		protected XElement CreateGearbox(IGearboxEngineeringInputData data, ITorqueConverterEngineeringInputData tcData)
-		{
-			var gears = new XElement(tns + XMLNames.Gearbox_Gears);
-			var i = 1;
-			foreach (var gearData in data.Gears) {
-				var gear = new XElement(tns + XMLNames.Gearbox_Gears_Gear,
-					new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, i++),
-					new XElement(tns + XMLNames.Gearbox_Gear_Ratio, gearData.Ratio.ToXMLFormat(3)),
-					gearData.MaxTorque != null
-						? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, gearData.MaxTorque.Value())
-						: null,
-					gearData.MaxInputSpeed != null
-						? new XElement(tns + XMLNames.Gearbox_Gear_MaxSpeed, gearData.MaxInputSpeed.AsRPM)
-						: null);
-
-				if (gearData.LossMap != null) {
-					gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap, GetTransmissionLossMap(gearData.LossMap)));
-				} else {
-					gear.Add(new XElement(tns + XMLNames.Gearbox_Gear_TorqueLossMap,
-						new XElement(tns + XMLNames.Gearbox_Gear_Efficiency, gearData.Efficiency)));
-				}
-				if (gearData.ShiftPolygon != null) {
-					gear.Add(new XElement(tns + XMLNames.Gearbox_Gears_Gear_ShiftPolygon, CreateShiftPolygon(gearData.ShiftPolygon)));
-				}
-
-				gears.Add(gear);
-			}
-			var gbx = new XElement(tns + XMLNames.Component_Gearbox,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, string.Format("GBX-{0}", data.Model)),
-					GetDefaultComponentElements(data.Model),
-					new XElement(tns + XMLNames.Gearbox_TransmissionType, data.Type.ToXMLFormat()),
-					new XElement(tns + XMLNames.Gearbox_Inertia, data.Inertia.Value()),
-					new XElement(tns + XMLNames.Gearbox_TractionInterruption, data.TractionInterruption.Value()), gears),
-				data.Type.AutomaticTransmission() ? CreateTorqueConverter(tcData) : null);
-
-			if (_singleFile) {
-				return gbx;
-			}
-			return ExtComponent(XMLNames.Component_Gearbox, gbx, string.Format("GBX-{0}.xml", data.Model));
-		}
-
-		private XElement CreateTorqueConverter(ITorqueConverterEngineeringInputData torqueConverterData)
-		{
-			var tc = new XElement(tns + XMLNames.Component_TorqueConverter,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, string.Format("TC-{0}", torqueConverterData.Model)),
-					GetDefaultComponentElements(torqueConverterData.Model),
-					new XElement(tns + XMLNames.TorqueConverter_ReferenceRPM, torqueConverterData.ReferenceRPM.AsRPM.ToXMLFormat()),
-					new XElement(tns + XMLNames.TorqueConverter_Characteristics,
-						_singleFile
-							? EmbedDataTable(torqueConverterData.TCData, AttributeMappings.TorqueConverterDataMapping,
-								precision: new Dictionary<string, uint>() {
-									{ TorqueConverterDataReader.Fields.SpeedRatio, 4 }
-								})
-							: ExtCSVResource(torqueConverterData.TCData, Path.GetFileName(torqueConverterData.TCData.Source))),
-					new XElement(tns + XMLNames.TorqueConverter_Inertia, torqueConverterData.Inertia.Value())));
-			if (_singleFile) {
-				return tc;
-			}
-			return new XElement(tns + XMLNames.Component_TorqueConverter,
-				ExtComponent(XMLNames.Component_TorqueConverter, tc, "TorqueConverter.xml"));
-		}
-
-		private object[] GetTransmissionLossMap(TableData lossmap)
-		{
-			if (_singleFile) {
-				return EmbedDataTable(lossmap, AttributeMappings.TransmissionLossmapMapping);
-			}
-			return ExtCSVResource(lossmap, Path.GetFileName(lossmap.Source));
-		}
-
-		private object[] CreateShiftPolygon(TableData shiftPolygon)
-		{
-			if (_singleFile) {
-				return EmbedDataTable(shiftPolygon, AttributeMappings.ShiftPolygonMapping);
-			}
-			return ExtCSVResource(shiftPolygon, Path.GetFileName(shiftPolygon.Source));
-		}
-
-		public XElement CreateEngine(IEngineEngineeringInputData data, bool allowSeparateFile = true)
-		{
-			var engine = new XElement(tns + XMLNames.Component_Engine,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, string.Format("ENG-{0}", data.Model)),
-					GetDefaultComponentElements(data.Model),
-					new XElement(tns + XMLNames.Engine_Displacement, (data.Displacement.Value() * 1000 * 1000).ToXMLFormat(0)),
-					new XElement(tns + XMLNames.Engine_IdlingSpeed, data.IdleSpeed.AsRPM.ToXMLFormat(0)),
-					new XElement(tns + XMLNames.Engine_Inertia, data.Inertia.Value()),
-					new XElement(tns + XMLNames.Engine_WHTCEngineering, data.WHTCEngineering.ToXMLFormat(4)),
-					new XElement(tns + XMLNames.Engine_FuelConsumptionMap, GetFuelConsumptionMap(data)),
-					new XElement(tns + XMLNames.Engine_FullLoadAndDragCurve, GetFullLoadDragCurve(data))));
-			if (!allowSeparateFile || _singleFile) {
-				return engine;
-			}
-			return ExtComponent(XMLNames.Component_Engine, engine, string.Format("ENG-{0}.xml", data.Model));
-		}
-
-		private XElement CreateAirdrag(IAirdragEngineeringInputData data)
-		{
-			var id = string.Format("Airdrag-{0}", data.Model);
-			return new XElement(tns + XMLNames.Component_AirDrag,
-				new XElement(tns + XMLNames.ComponentDataWrapper,
-					new XAttribute(XMLNames.Component_ID_Attr, id),
-					GetDefaultComponentElements("N.A."),
-					new XElement(tns + XMLNames.Vehicle_CrossWindCorrectionMode, data.CrossWindCorrectionMode.ToXMLFormat()),
-					new XElement(tns + XMLNames.Vehicle_AirDragArea, data.AirDragArea.Value().ToXMLFormat(2))),
-				GetCrossWindCorrectionData(data)
-				);
-		}
-
-		private XElement ExtComponent(string component, XElement componentXML, string filename)
-		{
-			GenerateComponentDocument(componentXML).Save(Path.Combine(BasePath, filename));
-
-			var retVal = new XElement(tns + XMLNames.ExternalResource,
-				new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_XML),
-				new XAttribute(XMLNames.ExtResource_Component_Attr, component),
-				new XAttribute(XMLNames.ExtResource_File_Attr, filename));
-			return retVal;
-		}
-
-		private object[] GetFullLoadDragCurve(IEngineEngineeringInputData data)
-		{
-			if (_singleFile) {
-				return EmbedDataTable(data.FullLoadCurve, AttributeMappings.EngineFullLoadCurveMapping);
-			}
-			var filename = string.Format("ENG_{0}.vfld", data.Model);
-			return ExtCSVResource(data.FullLoadCurve, filename);
-		}
-
-		private object[] GetFuelConsumptionMap(IEngineEngineeringInputData data)
-		{
-			if (_singleFile) {
-				return EmbedDataTable(data.FuelConsumptionMap, AttributeMappings.FuelConsumptionMapMapping);
-			}
-
-			var filename = string.Format("ENG_{0}.vmap", data.Model);
-			return ExtCSVResource(data.FuelConsumptionMap, filename);
-		}
-
-
-		private object[] ExtCSVResource(DataTable data, string filename)
-		{
-			VectoCSVFile.Write(Path.Combine(BasePath, filename), data);
-			return new object[] {
-				new XElement(tns + XMLNames.ExternalResource,
-					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
-					new XAttribute(XMLNames.ExtResource_File_Attr, filename))
-			};
-		}
-
-		protected XElement[] GetDefaultComponentElements(string makeAndModel)
-		{
-			return new[] {
-				new XElement(tns + XMLNames.Component_Manufacturer, Vendor),
-				new XElement(tns + XMLNames.Component_Model, makeAndModel),
-				new XElement(tns + XMLNames.Component_Creator, Creator),
-				new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)),
-				new XElement(tns + XMLNames.Component_AppVersion, "VectoCore"),
-			};
-		}
-	}
-}
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd
index cfa978ec14..1eee48c0fe 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationJob.xsd
@@ -6,6 +6,7 @@
          This is a convienience file that imports the schema for declaration input (i.e., job data) and all supported declaration definitions
 
  -->
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" schemaLocation="VectoInput.1.0.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" schemaLocation="VectoInput.2.0.xsd"/>
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/>
 </xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd
deleted file mode 100644
index b068d76c2c..0000000000
--- a/VectoCore/VectoCore/Resources/XSD/VectoDefinitions.xsd
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2016 rel. 2 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
-<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:ParameterDefinitions" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:vengdef="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.6" xmlns:ns1="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.7" xmlns:ns2="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified">
-	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v0.7" schemaLocation="VectoEngineeringDefinitions.0.7.xsd"/>
-	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/>
-	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v1.0" schemaLocation="VectoComponent.xsd"/>
-	<!--	<xs:include schemaLocation="VectoInput.xsd"/>
-	<xs:include schemaLocation="VectoEngineeringInput.xsd"/>-->
-</xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd
new file mode 100644
index 0000000000..57072e026f
--- /dev/null
+++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.1.0.xsd
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
+<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:vc1.0="urn:tugraz:ivt:VectoAPI:EngineeringComponent:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringComponent:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd">
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/>
+	<xs:element name="VectoComponentEngineering" type="v1.0:AbstractVectoComponentEngineeringType">
+		<xs:annotation>
+			<xs:documentation>Root Node Engineering Component Data</xs:documentation>
+		</xs:annotation>
+	</xs:element>
+</xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd
new file mode 100644
index 0000000000..f58eb98331
--- /dev/null
+++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringComponent.xsd
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+		<!-- 
+
+         This is a convienience file that imports the schema for declaration input (i.e., job data) and all supported declaration definitions
+
+ -->
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringComponent:v1.0" schemaLocation="VectoEngineeringComponent.1.0.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions" schemaLocation="VectoEngineeringDefinitions.xsd"/>
+</xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd
new file mode 100644
index 0000000000..8b563a945b
--- /dev/null
+++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
+<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:ve1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd">
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/>
+	<xs:complexType name="EngineDataEngineeringType">
+		<xs:complexContent>
+			<xs:extension base="ve1.0:EngineDataEngineeringType">
+				<xs:sequence>
+					<xs:element name="RatedPower"/>
+					<xs:element name="RatedSpeed"/>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="AxleDataEngineeringType">
+		<xs:complexContent>
+			<xs:extension base="ve1.0:AbstractAxleDataEngineeringType">
+				<xs:sequence>
+					<xs:element name="WeightShare">
+						<xs:simpleType>
+							<xs:restriction base="xs:double">
+								<xs:minInclusive value="0"/>
+								<xs:maxInclusive value="1"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>
+					<xs:element name="TwinTires" type="vdecdef:AxleTwinTyresType"/>
+					<xs:element name="Tire" type="ve1.0:TyreComponentEngineeringType"/>
+				</xs:sequence>
+				<xs:attribute name="axleNumber" use="required">
+					<xs:simpleType>
+						<xs:restriction base="xs:int">
+							<xs:minInclusive value="1"/>
+							<xs:maxInclusive value="4"/>
+						</xs:restriction>
+					</xs:simpleType>
+				</xs:attribute>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="TyreDataEngineeringType">
+		<xs:complexContent>
+			<xs:extension base="ve1.0:TyreDataEngineeringType">
+				<xs:sequence>
+					<xs:element name="ProfileDepth">
+						<xs:simpleType>
+							<xs:restriction base="xs:double">
+								<xs:minInclusive value="0"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+</xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd
new file mode 100644
index 0000000000..e05d7abd16
--- /dev/null
+++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.xsd
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:v1.0TEST="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions">
+	<!-- 
+
+         This is a convienience file that imports all supported declaration definitions
+
+ -->
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/>
+	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" schemaLocation="VectoEngineeringDefinitions.1.0.TEST.xsd"/>
+</xs:schema>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd
index 519e95ea1b..e6bc4ace62 100644
--- a/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd
+++ b/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd
@@ -2,11 +2,6 @@
 <!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
 <xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:vengdef="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd">
 	<xs:import namespace="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" schemaLocation="VectoEngineeringDefinitions.1.0.xsd"/>
-	<xs:element name="VectoComponentEngineering" type="vengdef:AbstractVectoComponentEngineeringType">
-		<xs:annotation>
-			<xs:documentation>Root Node Engineering Component Data</xs:documentation>
-		</xs:annotation>
-	</xs:element>
 	<xs:element name="VectoInputEngineering" type="vengdef:VectoJobEngineeringType">
 		<xs:annotation>
 			<xs:documentation>Root Node Engineering Job</xs:documentation>
diff --git a/VectoCore/VectoCore/Resources/XSD/VectoInput.xsd b/VectoCore/VectoCore/Resources/XSD/VectoInput.xsd
deleted file mode 100644
index bafee4d8c7..0000000000
--- a/VectoCore/VectoCore/Resources/XSD/VectoInput.xsd
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2016 rel. 2 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) -->
-<xs:schema xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vectoParam="urn:tugraz:ivt:VectoAPI:ParameterDocumentation" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationInput:v1.0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd">
-	<xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/>
-	<xs:element name="VectoInputDeclaration" type="vdecdef:VectoDeclarationJobType">
-		<xs:annotation>
-			<xs:documentation>Root Node Declaration Data</xs:documentation>
-		</xs:annotation>
-	</xs:element>
-</xs:schema>
diff --git a/VectoCore/VectoCore/Utils/XMLDefinitions.cs b/VectoCore/VectoCore/Utils/XMLDefinitions.cs
index 3df538d0cb..d529e82c06 100644
--- a/VectoCore/VectoCore/Utils/XMLDefinitions.cs
+++ b/VectoCore/VectoCore/Utils/XMLDefinitions.cs
@@ -55,14 +55,14 @@ namespace TUGraz.VectoCore.Utils
 		// mapping of document type + version => supported schema files (+version)
 		//private static Dictionary<Tuple<XmlDocumentType, string>, IList<string>> schemaFilenames = new Dictionary<Tuple<XmlDocumentType, string>, IList<string>>();
 
-		private static Dictionary<XmlDocumentType, Tuple<string, string[]>> schemaFilenames = new Dictionary<XmlDocumentType, Tuple<string, string[]>>() {
-			{XmlDocumentType.DeclarationJobData, Tuple.Create("VectoInput{0}.xsd", new [] {"1.0"}) },
-			{XmlDocumentType.DeclarationComponentData, Tuple.Create("VectoComponent{0}.xsd", new [] {"1.0"}) },
-			{XmlDocumentType.EngineeringJobData, Tuple.Create("VectoEngineeringInput{0}.xsd", new [] {"0.7"}) },
-			{XmlDocumentType.EngineeringComponentData, Tuple.Create("VectoEngineeringInput{0}.xsd", new [] {"0.7"}) },
-			{XmlDocumentType.ManufacturerReport, Tuple.Create("VectoOutputManufacturer{0}.xsd", new [] {"0.4", "0.5", "0.6", "0.7"}) },
-			{XmlDocumentType.CustomerReport , Tuple.Create("VectoOutputCustomer{0}.xsd", new [] {"0.4", "0.5", "0.7"})},
-			{XmlDocumentType.MonitoringReport , Tuple.Create("VectoMonitoring{0}.xsd", new [] {"0.7"})},
+		private static Dictionary<XmlDocumentType, string> schemaFilenames = new Dictionary<XmlDocumentType, string>() {
+			{XmlDocumentType.DeclarationJobData, "VectoDeclarationJob.xsd"},
+			{XmlDocumentType.DeclarationComponentData, "VectoComponent.xsd"},
+			{XmlDocumentType.EngineeringJobData, "VectoEngineeringInput.xsd" },
+			{XmlDocumentType.EngineeringComponentData, "VectoEngineeringComponent.xsd" },
+			{XmlDocumentType.ManufacturerReport, "VectoOutputManufacturer{0}.xsd" },
+			{XmlDocumentType.CustomerReport , "VectoOutputCustomer{0}.xsd"},
+			{XmlDocumentType.MonitoringReport , "VectoMonitoring{0}.xsd"},
 		};
 
 
@@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.Utils
 				throw new Exception(string.Format("Invalid argument {0} - only use single flags", type));
 			}
 			var entry = schemaFilenames[type];
-			return !entry.Item2.Contains(version) ? null : string.Format(entry.Item1, string.IsNullOrWhiteSpace(version) ? "" : "." + version);
+			return string.Format(entry, string.IsNullOrWhiteSpace(version) ? "" : "." + version);
 		}
 
 	}
diff --git a/VectoCore/VectoCore/Utils/XMLHelper.cs b/VectoCore/VectoCore/Utils/XMLHelper.cs
index a7c32df04f..150f6f49fb 100644
--- a/VectoCore/VectoCore/Utils/XMLHelper.cs
+++ b/VectoCore/VectoCore/Utils/XMLHelper.cs
@@ -31,6 +31,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Xml;
 using System.Xml.Linq;
@@ -206,6 +207,52 @@ namespace TUGraz.VectoCore.Utils
 			return table;
 		}
 
+		public static TableData ReadEntriesOrResource(XmlNode baseNode, string basePath, string baseElement, string entryElement, Dictionary<string, string> mapping)
+		{
+			var entries = baseNode.SelectNodes(
+				QueryLocalName(baseElement, entryElement));
+			if (entries != null && entries.Count > 0) {
+				return ReadTableData(mapping, entries);
+			}
+
+			return ReadCSVResource(baseNode, baseElement, basePath);
+		}
+
+		public static TableData ReadCSVResource(XmlNode baseNode, string xmlElement, string basePath)
+		{
+			var resourceNode = baseNode.SelectSingleNode(
+				XMLHelper.QueryLocalName(xmlElement) + ExtCSVResourceQuery);
+			var filename = string.Empty;
+			if (resourceNode != null) {
+				filename = resourceNode.Attributes?.GetNamedItem(XMLNames.ExtResource_File_Attr).InnerText;
+				if (filename == null) {
+					throw new VectoException("{0} No filename provided!", xmlElement);
+				}
+
+				if (basePath == null) {
+					throw new VectoException("cannot read referenced file - job passed as stream!");
+				}
+
+				var fullFilename = Path.Combine(basePath, filename);
+				if (!File.Exists(fullFilename)) {
+					throw new VectoException("{1} file not found: {0}", filename, xmlElement);
+				}
+
+				return VectoCSVFile.Read(fullFilename);
+			}
+
+			return null;// new TableData(Path.Combine(basePath ?? "", filename), DataSourceType.Missing);
+		}
+
+		private static string ExtCSVResourceQuery
+		{
+			get {
+				return string.Format(
+					"/*[local-name()='{0}' and @{1}='{2}']", XMLNames.ExternalResource, XMLNames.ExtResource_Type_Attr,
+					XMLNames.ExtResource_Type_Value_CSV);
+			}
+		}
+
 		private static IEnumerable<T> Shim<T>(XmlNodeList nodes)
 		{
 			foreach (var node in nodes) {
diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs
index 0e20748ac5..d8360e207a 100644
--- a/VectoCore/VectoCore/Utils/XMLValidator.cs
+++ b/VectoCore/VectoCore/Utils/XMLValidator.cs
@@ -78,6 +78,7 @@ namespace TUGraz.VectoCore.Utils
 			}
 
 			var version = XMLHelper.GetSchemaVersion(_doc.DocumentElement);
+			
 			_doc.Schemas = GetXMLSchema(docType, version);
 			_doc.Validate(ValidationCallBack);
 			return _valid;
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 9648a93484..bb67b6da9d 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -183,31 +183,114 @@
     <Compile Include="InputData\FileIO\XML\Declaration\Reader\Impl\XMLJobDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\Reader\IXMLJobDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\Reader\IXMLPTOReader.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\Factory\IEngineeringInjectFactory.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractCommonComponentType.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractEngineeringXMLComponentDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractVehicleEngineeringType.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\AbstractXMLType.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLCyclesDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLDriverAcceleration.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAirdragDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAngledriveDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAuxiliariesDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAxlegearDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringAxlesDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringDriverDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringDriverLookAhead.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringEngineDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringGearboxDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringGearshiftData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringInputDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringJobInputDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringOverspeed.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringRetarderDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringTorqueConverterDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringVehicleComponentsDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLEngineeringVehicleDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\DataProvider\XMLTyreEngineeringDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Factory\IEngineeringReaderInjectFactory.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAirdragData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAngledriveData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAuxiliairesData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAuxiliaryData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAxleEngineeringData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAxlegearData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLAxlesData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLCyclesDataProvider.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLDriverAcceleration.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringDriverData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringGearshiftData.cs" />
     <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringInputData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringJobInputData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringVehicleComponentsData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLEngineeringVehicleData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLGearboxData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLGearData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLLookaheadData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLOverspeedData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLRetarderData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLTorqueconverterData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Interfaces\IXMLTyreData.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\IXMLComponentsReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\IXMLDriverDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\Engineering\IXMLEngineeringInputReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\IXMLJobDataReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\NinjectModules\XMLEngineeringReaderTestOverrides.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\NinjectModules\XMLEngineeringReaderV07InjectModule.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\NinjectModules\XMLEngineeringReaderV10InjectModule.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Reader\AbstractExternalResourceReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLComponentsEngineeringReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLDriverDataReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLEngineeringInputReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\Reader\XMLJobDataReader.cs" />
+    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringReaderInjectModule.cs" />
     <Compile Include="InputData\FileIO\XML\IXMLResource.cs" />
     <Compile Include="InputData\FileIO\XML\XMLInputDataFactory.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\IXMLDeclarationInputDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\IXMLInputDataReader.cs" />
+    <Compile Include="InputData\FileIO\XML\XMLInputDataNinjectModule.cs" />
+    <Compile Include="Models\Simulation\ISimulatorFactory.cs" />
+    <Compile Include="Models\Simulation\ISimulatorFactoryFactory.cs" />
+    <Compile Include="Models\Simulation\SimulationFactoryNinjectModule.cs" />
+    <Compile Include="OutputData\XML\Engineering\Factory\EngineeringWriterFactory.cs" />
+    <Compile Include="OutputData\XML\Engineering\Factory\IEngineeringWriterInjectFactory.cs" />
+    <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringComponentWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringEngineWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringJobWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\NinjectModules\XMLEngineeringWriterTestOverrides.cs" />
+    <Compile Include="OutputData\XML\Engineering\NinjectModules\XMLEngineeringWriterV10InjectModule.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\AbstractComponentWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLAccelerationDataWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLEngineeringLookaheadDataWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLEngineeringOverspeedDataWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\DriverData\XMLShiftParmeterDataWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringADASWriterV10.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAirdragWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAngledriveWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAuxiliariesWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAuxiliaryWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAxlegearWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAxlesWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringAxleWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringComponentsWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringDriverDataWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringEngineWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringGearboxWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringGearDataWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringJobWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringRetarderWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringTorqueconverterWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringTyreWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\Writer\XMLEngineeringVehicleDataWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriter.cs" />
+    <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriterInjectModule.cs" />
+    <Compile Include="OutputData\XML\Engineering\XMLWriterMapping.cs" />
     <Compile Include="Utils\Ninject\UseFirstArgumentAsInstanceProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\XMLDeclarationReaderInjectModule.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationVehicleDataProvider.cs" />
     <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationInputDataProvider.cs" />
     <Compile Include="InputData\FileIO\XMLReports\XMLManufacturerReportReader.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\AbstractEngineeringXMLComponentDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAirdragDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAngledriveDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAuxiliaryDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringAxlegearDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringDriverDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringEngineDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringGearboxDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringInputDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringJobInputDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringRetarderDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringTorqueConverterDataProvider.cs" />
-    <Compile Include="InputData\FileIO\XML\Engineering\XMLEngineeringVehicleDataProvider.cs" />
     <Compile Include="InputData\FileIO\JSON\JSONEngineData.cs" />
     <Compile Include="InputData\FileIO\JSON\JSONGearboxData.cs" />
     <Compile Include="InputData\FileIO\JSON\JSONInputData.cs" />
@@ -282,7 +365,6 @@
     <Compile Include="OutputData\XML\XMLCustomerReport.cs" />
     <Compile Include="OutputData\XML\XMLDeclarationReport.cs" />
     <Compile Include="OutputData\XML\XMLDeclarationWriter.cs" />
-    <Compile Include="OutputData\XML\XMLEngineeringWriter.cs" />
     <Compile Include="OutputData\XML\XMLManufacturerReport.cs" />
     <Compile Include="Utils\DataIntegrityHelper.cs" />
     <Compile Include="Utils\MeanShiftClustering.cs" />
@@ -497,10 +579,6 @@
       <SubType>Designer</SubType>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </EmbeddedResource>
-    <EmbeddedResource Include="Resources\XSD\VectoInput.xsd">
-      <SubType>Designer</SubType>
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </EmbeddedResource>
     <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.xsd">
       <SubType>Designer</SubType>
     </EmbeddedResource>
@@ -584,6 +662,18 @@
     <EmbeddedResource Include="Resources\XSD\VectoInput.2.0.xsd">
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Resources\XSD\VectoEngineeringDefinitions.1.0.TEST.xsd">
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Resources\XSD\VectoEngineeringComponent.1.0.xsd">
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Resources\XSD\VectoEngineeringComponent.xsd">
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Resources\XSD\VTPReport.0.1.xsd">
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <None Include="Utils\VectoVersionCore.tt">
       <Generator>TextTemplatingFileGenerator</Generator>
       <LastGenOutput>VectoVersionCore.cs</LastGenOutput>
diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs
index b6f91ba080..4e2a9c7767 100644
--- a/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs
+++ b/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs
@@ -172,7 +172,8 @@ namespace TUGraz.VectoCore.Tests.FileIO
 				Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio);
 			}
 			var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider,
-				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1,
+				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0),
+				(IGearshiftEngineeringInputData)inputProvider, 2.1,
 				0.5.SI<Meter>(), VehicleCategory.RigidTruck);
 			Assert.AreEqual(ratios.Length, gbxData.Gears.Count);
 
@@ -196,7 +197,8 @@ namespace TUGraz.VectoCore.Tests.FileIO
 				Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio);
 			}
 			var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider,
-				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1,
+				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0),
+				(IGearshiftEngineeringInputData)inputProvider, 2.1,
 				0.5.SI<Meter>(), VehicleCategory.RigidTruck);
 			Assert.AreEqual(ratios.Length, gbxData.Gears.Count);
 
@@ -222,7 +224,8 @@ namespace TUGraz.VectoCore.Tests.FileIO
 				Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio);
 			}
 			var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider,
-				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1,
+				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0),
+				(IGearshiftEngineeringInputData)inputProvider, 2.1,
 				0.5.SI<Meter>(), VehicleCategory.RigidTruck);
 			Assert.AreEqual(ratios.Length, gbxData.Gears.Count);
 
@@ -247,7 +250,8 @@ namespace TUGraz.VectoCore.Tests.FileIO
 				Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio);
 			}
 			var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider,
-				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1,
+				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0),
+				(IGearshiftEngineeringInputData)inputProvider, 2.1,
 				0.5.SI<Meter>(), VehicleCategory.RigidTruck);
 			Assert.AreEqual(ratios.Length, gbxData.Gears.Count);
 
@@ -274,7 +278,8 @@ namespace TUGraz.VectoCore.Tests.FileIO
 				Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio);
 			}
 			var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider,
-				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1,
+				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0),
+				(IGearshiftEngineeringInputData)inputProvider, 2.1,
 				0.5.SI<Meter>(), VehicleCategory.InterurbanBus);
 			Assert.AreEqual(ratios.Length, gbxData.Gears.Count);
 
@@ -301,7 +306,8 @@ namespace TUGraz.VectoCore.Tests.FileIO
 				Assert.AreEqual(ratios[i], inputProvider.Gears[i].Ratio);
 			}
 			var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider,
-				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), 2.1,
+				MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0),
+				(IGearshiftEngineeringInputData)inputProvider, 2.1,
 				0.5.SI<Meter>(), VehicleCategory.InterurbanBus);
 			Assert.AreEqual(ratios.Length, gbxData.Gears.Count);
 
diff --git a/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs
index f2e7bd9ba6..287a5b112c 100644
--- a/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs
+++ b/VectoCore/VectoCoreTest/FileIO/JsonWriteTest.cs
@@ -107,20 +107,20 @@ namespace TUGraz.VectoCore.Tests.FileIO
 			var inputProvider = input as IEngineeringInputDataProvider;
 			Assert.NotNull(inputProvider);
 
-			var vehicleInputData = inputProvider.JobInputData.Vehicle;
+			var components = inputProvider.JobInputData.Vehicle.Components;
 
 			var writer = JSONFileWriter.Instance;
 
 			VECTO_Global.Cfg = new VECTO.Configuration() { DeclMode = true };
-			writer.SaveGearbox(vehicleInputData.Components.GearboxInputData, vehicleInputData.Components.AxleGearInputData, outFile);
+			writer.SaveGearbox(components.GearboxInputData, components.AxleGearInputData, (IGearshiftEngineeringInputData)components.GearboxInputData, outFile);
 
 			var savedData = JSONInputDataFactory.ReadComponentData(outFile);
 			var savedInprovider = savedData as IEngineeringInputDataProvider;
 			Assert.NotNull(savedInprovider);
 
-			AssertHelper.PublicPropertiesEqual(typeof(IGearboxDeclarationInputData), vehicleInputData.Components.GearboxInputData, savedInprovider.JobInputData.Vehicle.Components.GearboxInputData,
+			AssertHelper.PublicPropertiesEqual(typeof(IGearboxDeclarationInputData), components.GearboxInputData, savedInprovider.JobInputData.Vehicle.Components.GearboxInputData,
 				new[] { "Source" });
-			AssertHelper.PublicPropertiesEqual(typeof(IAxleDeclarationInputData), vehicleInputData.Components.AxleGearInputData, savedInprovider.JobInputData.Vehicle.Components.AxleGearInputData,
+			AssertHelper.PublicPropertiesEqual(typeof(IAxleDeclarationInputData), components.AxleGearInputData, savedInprovider.JobInputData.Vehicle.Components.AxleGearInputData,
 				new[] { "Source" });
 		}
 
diff --git a/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml
new file mode 100644
index 0000000000..cbaaedb721
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tns:VectoInputEngineering xmlns="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:ve1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0 file:///E:/QUAM/Workspace/VECTO_quam/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd">
+	<EngineOnlyMode>false</EngineOnlyMode>
+	<Vehicle xsi:type="ve1.0:VehicleEngineeringType">
+		<Manufacturer>Generic Manufacturer</Manufacturer>
+		<ManufacturerAddress/>
+		<Model>Generic Truck</Model>
+		<VIN>N.A.</VIN>
+		<Date>2018-06-14T14:00:00Z</Date>
+		<AxleConfiguration>4x2</AxleConfiguration>
+		<CurbMassChassis>6500</CurbMassChassis>
+		<GrossVehicleMass>14000</GrossVehicleMass>
+		<RetarderType>None</RetarderType>
+		<AngledriveType>None</AngledriveType>
+		<PTOType>None</PTOType>
+		<CurbMassExtra>0</CurbMassExtra>
+		<Loading>0</Loading>
+		<AdvancedDriverAssist xsi:type="ve1.0:AdvancedDriverAssistEngineeringType">
+			<EngineStartStop xsi:type="ve1.0:EngineStartStopEngineeringType">
+				<Enabled>false</Enabled>
+			</EngineStartStop>
+		</AdvancedDriverAssist>
+		<Components xsi:type="ve1.0:VehicleComponentsType">
+			<Engine>
+				<Data xsi:type="ve1.0:EngineDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Eninge</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<Displacement>12750</Displacement>
+					<IdlingSpeed>600</IdlingSpeed>
+					<FCCorrection>1.0000</FCCorrection>
+					<FuelType>Diesel CI</FuelType>
+					<FuelConsumptionMap>
+						<Entry engineSpeed="550.00" torque="-200.00" fuelConsumption="0.00"/>
+						<Entry engineSpeed="550.00" torque="1500.00" fuelConsumption="200.00"/>
+						<Entry engineSpeed="2500.00" torque="-200.00" fuelConsumption="0.00"/>
+						<Entry engineSpeed="2500.00" torque="1500.00" fuelConsumption="200.00"/>
+					</FuelConsumptionMap>
+					<FullLoadAndDragCurve>
+						<Entry engineSpeed="550.00" maxTorque="1450.00" dragTorque="-150.00"/>
+						<Entry engineSpeed="2500.00" maxTorque="1450.00" dragTorque="-150.00"/>
+					</FullLoadAndDragCurve>
+				</Data>
+			</Engine>
+			<Gearbox>
+				<Data xsi:type="ve1.0:GearboxDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Gearbox</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<TransmissionType>AMT</TransmissionType>
+					<Inertia>0.0</Inertia>
+					<TractionInterruption>1.0</TractionInterruption>
+					<Gears>
+						<Gear xsi:type="ve1.0:GearEngineeringType" number="1">
+							<Ratio>1.000</Ratio>
+							<TorqueLossMap>
+								<Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+								<Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/>
+								<Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/>
+								<Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+								<Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/>
+								<Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/>
+							</TorqueLossMap>
+						</Gear>
+					</Gears>
+				</Data>
+			</Gearbox>
+			<Axlegear>
+				<Data xsi:type="ve1.0:AxlegearDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Axlegear</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<Ratio>1.000</Ratio>
+					<TorqueLossMap>
+						<Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+						<Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/>
+						<Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/>
+						<Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+						<Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/>
+						<Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/>
+					</TorqueLossMap>
+				</Data>
+			</Axlegear>
+			<AxleWheels>
+				<Data xsi:type="ve1.0:AxleComponentEngineeringType">
+					<Axles>
+						<Axle xsi:type="ve1.0:AxleDataEngineeringType" axleNumber="1">
+							<AxleType>VehicleNonDriven</AxleType>
+							<TwinTyres>false</TwinTyres>
+							<Steered>true</Steered>
+							<WeightShare>0.4</WeightShare>
+							<Tyre>
+								<Data xsi:type="ve1.0:TyreDataEngineeringType">
+									<Manufacturer>Generic Manufacturer</Manufacturer>
+									<Model>Generic Tyre</Model>
+									<Date>2018-06-14T14:00:00Z</Date>
+									<Dimension>245/70 R17.5</Dimension>
+									<RRCISO>0.0055</RRCISO>
+									<FzISO>33500</FzISO>
+								</Data>
+							</Tyre>
+						</Axle>
+						<Axle xsi:type="ve1.0:AxleDataEngineeringType" axleNumber="2">
+							<AxleType>VehicleDriven</AxleType>
+							<TwinTyres>true</TwinTyres>
+							<Steered>false</Steered>
+							<WeightShare>0.6</WeightShare>
+							<Tyre>
+								<Data xsi:type="ve1.0:TyreDataEngineeringType">
+									<Manufacturer>Generic Manufacturer</Manufacturer>
+									<Model>Generic Tyre</Model>
+									<Date>2018-06-14T14:00:00Z</Date>
+									<DynamicTyreRadius>452</DynamicTyreRadius>
+									<Inertia>16.3</Inertia>
+									<RRCISO>0.0055</RRCISO>
+									<FzISO>33500</FzISO>
+								</Data>
+							</Tyre>
+						</Axle>
+					</Axles>
+				</Data>
+			</AxleWheels>
+			<Auxiliaries>
+				<Data xsi:type="ve1.0:AuxiliariesDataEngineeringType"/>
+			</Auxiliaries>
+			<AirDrag>
+				<Data xsi:type="ve1.0:AirDragDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Model</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<CrossWindCorrectionMode>Declaration Mode Correction</CrossWindCorrectionMode>
+					<CdxA>4.51</CdxA>
+				</Data>
+			</AirDrag>
+		</Components>
+	</Vehicle>
+	<DriverModel xsi:type="ve1.0:DriverModelEngineeringType">
+		<LookAheadCoasting xsi:type="ve1.0:LookAheadCoastingEngineeringType">
+			<Enabled>false</Enabled>
+		</LookAheadCoasting>
+		<Overspeed xsi:type="ve1.0:OverspeedEngineeringType">
+			<Mode>Off</Mode>
+		</Overspeed>
+	</DriverModel>
+	<MissionCycles>
+		<Cycle type="csv" file="Construction"/>
+	</MissionCycles>
+</tns:VectoInputEngineering>
diff --git a/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml
new file mode 100644
index 0000000000..5fff878916
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tns:VectoInputEngineering schemaVersion="1.0" xmlns="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0" xmlns:ve1.0="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0" xmlns:ve1.0TEST="urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:EngineeringInput:v1.0 file:///E:/QUAM/Workspace/VECTO_quam/VectoCore/VectoCore/Resources/XSD/VectoEngineeringInput.1.0.xsd urn:tugraz:ivt:VectoAPI:EngineeringDefinitions:v1.0TEST file:///E:/QUAM/Workspace/VECTO_quam/VectoCore/VectoCore/Resources/XSD/VectoEngineeringDefinitions.1.0.TEST.xsd">
+	<EngineOnlyMode>false</EngineOnlyMode>
+	<Vehicle xsi:type="ve1.0:VehicleEngineeringType">
+		<Manufacturer>Generic Manufacturer</Manufacturer>
+		<ManufacturerAddress/>
+		<Model>Generic Truck</Model>
+		<VIN>N.A.</VIN>
+		<Date>2018-06-14T14:00:00Z</Date>
+		<AxleConfiguration>4x2</AxleConfiguration>
+		<CurbMassChassis>6500</CurbMassChassis>
+		<GrossVehicleMass>14000</GrossVehicleMass>
+		<RetarderType>None</RetarderType>
+		<AngledriveType>None</AngledriveType>
+		<PTOType>None</PTOType>
+		<CurbMassExtra>0</CurbMassExtra>
+		<Loading>0</Loading>
+		<AdvancedDriverAssist xsi:type="ve1.0:AdvancedDriverAssistEngineeringType">
+			<EngineStartStop xsi:type="ve1.0:EngineStartStopEngineeringType">
+				<Enabled>false</Enabled>
+			</EngineStartStop>
+		</AdvancedDriverAssist>
+		<Components xsi:type="VehicleComponentsType">
+			<Engine>
+				<Data xsi:type="ve1.0TEST:EngineDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Eninge</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<Displacement>12750</Displacement>
+					<IdlingSpeed>600</IdlingSpeed>
+					<FCCorrection>1.0000</FCCorrection>
+					<FuelType>Diesel CI</FuelType>
+					<FuelConsumptionMap>
+						<Entry engineSpeed="550.00" torque="-200.00" fuelConsumption="0.00"/>
+						<Entry engineSpeed="550.00" torque="1500.00" fuelConsumption="200.00"/>
+						<Entry engineSpeed="2500.00" torque="-200.00" fuelConsumption="0.00"/>
+						<Entry engineSpeed="2500.00" torque="1500.00" fuelConsumption="200.00"/>
+					</FuelConsumptionMap>
+					<FullLoadAndDragCurve>
+						<Entry engineSpeed="550.00" maxTorque="1450.00" dragTorque="-150.00"/>
+						<Entry engineSpeed="2500.00" maxTorque="1450.00" dragTorque="-150.00"/>
+					</FullLoadAndDragCurve>
+					<ve1.0TEST:RatedPower>220kW</ve1.0TEST:RatedPower>
+					<ve1.0TEST:RatedSpeed>2200rpm</ve1.0TEST:RatedSpeed>
+				</Data>
+			</Engine>
+			<Gearbox>
+				<Data xsi:type="ve1.0:GearboxDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Gearbox</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<TransmissionType>AMT</TransmissionType>
+					<Inertia>0.0</Inertia>
+					<TractionInterruption>1.0</TractionInterruption>
+					<Gears>
+						<Gear number="1" xsi:type="GearEngineeringType">
+							<Ratio>1.000</Ratio>
+							<TorqueLossMap>
+								<Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+								<Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/>
+								<Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/>
+								<Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+								<Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/>
+								<Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/>
+							</TorqueLossMap>
+						</Gear>
+					</Gears>
+				</Data>
+			</Gearbox>
+			<Axlegear>
+				<Data xsi:type="ve1.0:AxlegearDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Axlegear</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<Ratio>1.000</Ratio>
+					<TorqueLossMap>
+						<Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+						<Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/>
+						<Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/>
+						<Entry inputSpeed="5000.00" inputTorque="-10000.00" torqueLoss="100.00"/>
+						<Entry inputSpeed="5000.00" inputTorque="0.00" torqueLoss="10.00"/>
+						<Entry inputSpeed="5000.00" inputTorque="10000.00" torqueLoss="100.00"/>
+					</TorqueLossMap>
+				</Data>
+			</Axlegear>
+			<AxleWheels>
+				<Data xsi:type="ve1.0:AxleComponentEngineeringType">
+					<Axles>
+						<Axle xsi:type="ve1.0TEST:AxleDataEngineeringType" axleNumber="1">
+							<ve1.0TEST:WeightShare>0.4</ve1.0TEST:WeightShare>
+							<ve1.0TEST:TwinTires>false</ve1.0TEST:TwinTires>
+							<ve1.0TEST:Tire>
+								<Data xsi:type="ve1.0:TyreDataEngineeringType">
+									<Manufacturer>Generic Manufacturer</Manufacturer>
+									<Model>Generic Tyre</Model>
+									<Date>2018-06-14T14:00:00Z</Date>
+									<Dimension>245/70 R17.5</Dimension>
+									<RRCISO>0.0055</RRCISO>
+									<FzISO>33500</FzISO>
+								</Data>
+							</ve1.0TEST:Tire>
+						</Axle>
+						<Axle xsi:type="ve1.0:AxleDataEngineeringType" axleNumber="2">
+							<AxleType>VehicleDriven</AxleType>
+							<TwinTyres>true</TwinTyres>
+							<Steered>false</Steered>
+							<WeightShare>0.6</WeightShare>
+							<Tyre>
+								<Data xsi:type="ve1.0TEST:TyreDataEngineeringType">
+									<Manufacturer>Generic Manufacturer</Manufacturer>
+									<Model>Generic Tyre</Model>
+									<Date>2018-06-14T14:00:00Z</Date>
+									<DynamicTyreRadius>452</DynamicTyreRadius>
+									<Inertia>16.3</Inertia>
+									<RRCISO>0.0055</RRCISO>
+									<FzISO>33500</FzISO>
+									<ve1.0TEST:ProfileDepth>10</ve1.0TEST:ProfileDepth>
+								</Data>
+							</Tyre>
+						</Axle>
+					</Axles>
+				</Data>
+			</AxleWheels>
+			<Auxiliaries>
+				<Data xsi:type="ve1.0:AuxiliariesDataEngineeringType"/>
+			</Auxiliaries>
+			<AirDrag>
+				<Data xsi:type="ve1.0:AirDragDataEngineeringType">
+					<Manufacturer>Generic Manufacturer</Manufacturer>
+					<Model>Generic Model</Model>
+					<Date>2018-06-14T14:00:00Z</Date>
+					<CrossWindCorrectionMode>Declaration Mode Correction</CrossWindCorrectionMode>
+					<CdxA>4.51</CdxA>
+				</Data>
+			</AirDrag>
+		</Components>
+	</Vehicle>
+	<DriverModel xsi:type="ve1.0:DriverModelEngineeringType">
+		<LookAheadCoasting xsi:type="ve1.0:LookAheadCoastingEngineeringType">
+			<Enabled>false</Enabled>
+		</LookAheadCoasting>
+		<Overspeed xsi:type="ve1.0:OverspeedEngineeringType">
+			<Mode>Off</Mode>
+		</Overspeed>
+	</DriverModel>
+	<MissionCycles>
+		<Cycle type="csv" file="LongHaul"/>
+	</MissionCycles>
+</tns:VectoInputEngineering>
diff --git a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
index 3ecd6a4ed5..7d22f05116 100644
--- a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs
@@ -61,7 +61,8 @@ namespace TUGraz.VectoCore.Tests.Utils
 			} else {
 				var dao = new EngineeringDataAdapter();
 				var engineData = dao.CreateEngineData(engineInput, gearboxInput, new List<ITorqueLimitInputData>());
-				return dao.CreateGearboxData(gearboxInput, engineData, ((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(),
+				return dao.CreateGearboxData(gearboxInput, engineData, (IGearshiftEngineeringInputData)gearboxInput, 
+					((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(),
 					VehicleCategory.RigidTruck);
 			}
 		}
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 74dbc81805..595e8dc3c1 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -2828,6 +2828,12 @@
     <Content Include="TestData\Jobs\Tractor_4x2_vehicle-class-5_Generic vehicle.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\XML\EngineeringJob\SampleJobEngineering1.0.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="TestData\XML\EngineeringJob\SampleJobEngineering1.1.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\XML\XMLReaderDeclaration\Tractor_4x2_vehicle-class-5_5_t_0.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs
index 4e2e25bf50..506c0b258c 100644
--- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputRefTest.cs
@@ -1,7 +1,7 @@
 /*
 * This file is part of VECTO.
 *
-* Copyright © 2012-2019 European Union
+* Copyright © 2012-2017 European Union
 *
 * Developed by Graz University of Technology,
 *              Institute of Internal Combustion Engines and Thermodynamics,
@@ -31,6 +31,7 @@
 
 using System.IO;
 using System.Linq;
+using Ninject;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
@@ -44,6 +45,9 @@ using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
 using TUGraz.VectoCore.Utils;
 using NUnit.Framework;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.Models.Simulation;
+
 
 namespace TUGraz.VectoCore.Tests.XML
 {
@@ -52,10 +56,16 @@ namespace TUGraz.VectoCore.Tests.XML
 	{
 		public const string EngineeringSampleFile = "TestData/XML/XMLReaderEngineering/engineering_job-sample_ref.xml";
 
+		protected IXMLInputDataReader xmlInputReader;
+		private IKernel _kernel;
+
 		[OneTimeSetUp]
 		public void RunBeforeAnyTests()
 		{
 			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+
+			_kernel = new StandardKernel(new VectoNinjectModule());
+			xmlInputReader = _kernel.Get<IXMLInputDataReader>();
 		}
 
 		[TestCase]
@@ -63,14 +73,14 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			AssertHelper.Exception<VectoException>(() => {
 				var reader = File.OpenRead(EngineeringSampleFile);
-				var foo = new XMLEngineeringInputDataProvider(reader, true);
+				var foo = xmlInputReader.CreateEngineering(reader, true);
 			});
 		}
 
 		[TestCase]
 		public void TestXMLInputEngReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 
 			var engineDataProvider = inputDataProvider.JobInputData.Vehicle.Components.EngineInputData;
 
@@ -92,7 +102,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			Assert.AreEqual("560", fcMapTable.Rows[0][0]);
 			var fcMap = FuelConsumptionMapReader.Create(fcMapTable);
-            Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), 
+			Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), 
 				fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value());
 
 			var fldTable = engineDataProvider.FullLoadCurve;
@@ -106,7 +116,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMLInputGbxReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 			var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData;
 
 			Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model);
@@ -136,7 +146,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMLInputGbxTCReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 			var tcInputDataProvider = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.TorqueConverter;
 
 
@@ -154,7 +164,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMLInputAngledriveReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 			var angledriveInputData = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData;
 
 			Assert.AreEqual("Generic Angledrive", angledriveInputData.Model);
@@ -171,7 +181,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMLInputAxlGReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 			var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData;
 
 			Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model);
@@ -188,7 +198,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMLInputRetarderReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 			var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.Components.RetarderInputData;
 
 			Assert.AreEqual("Generic Retarder", retarderDataProvider.Model);
@@ -206,8 +216,8 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMLInputAxleWheelsReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			var axles = vehicleDataProvider.Components.AxleWheels.AxlesEngineering;
 
@@ -222,13 +232,13 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(31300, tyre.TyreTestLoad.Value());
 
 			//AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; });
-			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value());
+			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value(), 1e-6);
 		}
 
 		[TestCase]
 		public void TestXMLInputAuxiliariesReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 			var auxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData;
 
 			var aux = auxDataProvider.Auxiliaries;
@@ -251,7 +261,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			//var reader = XmlReader.Create(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 
 			var adas = inputDataProvider.DriverInputData;
 
@@ -261,9 +271,9 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestVehicleInputReferencedFile()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
 			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
@@ -278,7 +288,6 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.Components.RetarderInputData.Ratio);
 		}
 
-		[Category("LongRunning")]
 		[TestCase]
 		public void TestXMLPowertrainGenerationReferencedFile()
 		{
@@ -286,9 +295,9 @@ namespace TUGraz.VectoCore.Tests.XML
 			var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml");
 			var sumData = new SummaryDataContainer(sumWriter);
 			var jobContainer = new JobContainer(sumData);
-			var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var dataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
+			var runsFactory = _kernel.Get<ISimulatorFactoryFactory>().Factory(ExecutionMode.Engineering, dataProvider, fileWriter);
 			runsFactory.WriteModalResults = true;
 
 			jobContainer.AddRuns(runsFactory);
@@ -300,7 +309,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMEngineering_DriverModelLACExt()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 
 			var driverDataProvider = inputDataProvider.DriverInputData;
 
@@ -314,7 +323,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestXMEngineering_PTO()
 		{
-			var inputDataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var inputDataProvider = xmlInputReader.CreateEngineering(EngineeringSampleFile, true);
 
 			var ptoData = inputDataProvider.JobInputData.Vehicle.Components.PTOTransmissionInputData;
 
diff --git a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs
index c1687e57ba..a3008cc19d 100644
--- a/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLEngineeringInputSingleTest.cs
@@ -1,7 +1,7 @@
 /*
 * This file is part of VECTO.
 *
-* Copyright © 2012-2019 European Union
+* Copyright © 2012-2017 European Union
 *
 * Developed by Graz University of Technology,
 *              Institute of Internal Combustion Engines and Thermodynamics,
@@ -33,6 +33,7 @@ using System.IO;
 using System.Linq;
 using System.Xml;
 using System.Xml.Linq;
+using Ninject;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
@@ -50,6 +51,9 @@ using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
 using TUGraz.VectoCore.Utils;
 using NUnit.Framework;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.NinjectModules;
+using TUGraz.VectoCore.Models.Simulation;
 
 namespace TUGraz.VectoCore.Tests.XML
 {
@@ -60,10 +64,19 @@ namespace TUGraz.VectoCore.Tests.XML
 
 		public const string EngineeringSampleFileFull = "TestData/XML/XMLReaderEngineering/engineering_job-sample_FULL.xml";
 
+		public const string EngineeringSampleFile_10_Full = "TestData/XML/EngineeringJob/SampleJobEngineering1.0.xml";
+		public const string EngineeringSampleFile_10TestExtensions_Full = "TestData/XML/EngineeringJob/SampleJobEngineering1.1.xml";
+
+		protected IXMLInputDataReader XMLInputReader;
+		private IKernel _kernel;
+
 		[OneTimeSetUp]
 		public void RunBeforeAnyTests()
 		{
 			Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
+
+			_kernel = new StandardKernel(new VectoNinjectModule());
+			XMLInputReader = _kernel.Get<IXMLInputDataReader>();
 		}
 
 		[TestCase]
@@ -71,7 +84,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var engineDataProvider = inputDataProvider.JobInputData.Vehicle.Components.EngineInputData;
 
@@ -93,7 +106,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			Assert.AreEqual("560.00", fcMapTable.Rows[0][0]);
 			var fcMap = FuelConsumptionMapReader.Create(fcMapTable);
-            Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), 
+			Assert.AreEqual(1256.SI(Unit.SI.Gramm.Per.Hour).Value(), 
 				fcMap.GetFuelConsumption(0.SI<NewtonMeter>(), 560.RPMtoRad()).Value.Value());
 
 			var fldTable = engineDataProvider.FullLoadCurve;
@@ -109,7 +122,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 			var gearboxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData;
 
 			Assert.AreEqual("Generic 40t Long Haul Truck Gearbox", gearboxDataProvider.Model);
@@ -138,7 +151,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 			var axlegearDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData;
 
 			Assert.AreEqual("Generic 40t Long Haul Truck AxleGear", axlegearDataProvider.Model);
@@ -160,15 +173,12 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
+			
 
-			var axleglosses = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			var axleglosses = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear,
-				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager);
+				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap));
 			//accData.DeleteSelf();
 			axleglosses.ReplaceSelf(
 				new XElement(XMLNames.Axlegear_TorqueLossMap, new XElement(XMLNames.Axlegear_Efficiency, "0.9123")).ToString());
@@ -180,7 +190,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
 
 			var axleGear = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData;
 			Assert.AreEqual(0.9123, axleGear.Efficiency);
@@ -191,7 +201,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 			var retarderDataProvider = inputDataProvider.JobInputData.Vehicle.Components.RetarderInputData;
 
 			Assert.AreEqual("Generic Retarder", retarderDataProvider.Model);
@@ -211,8 +221,8 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			var axles = vehicleDataProvider.Components.AxleWheels.AxlesEngineering;
 
@@ -227,7 +237,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(31300, tyre.TyreTestLoad.Value());
 
 			//AssertHelper.Exception<VectoException>(() => { var tmp = vehicleDataProvider.Rim; });
-			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value());
+			Assert.AreEqual(0.488822, vehicleDataProvider.DynamicTyreRadius.Value(), 1e-6);
 		}
 
 		[TestCase]
@@ -238,19 +248,16 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			
+			var firstAxle = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_Vehicle,
 				XMLNames.Vehicle_Components,
 				XMLNames.Component_AxleWheels,
 				XMLNames.ComponentDataWrapper,
-				XMLNames.AxleWheels_Axles,
-				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
-				), manager);
+				XMLNames.AxleWheels_Axles) +
+				string.Format("/*[@{0}={1}]", XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "1")
+				);
 			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
 			firstAxle.SetTypedValue(2);
 
@@ -261,9 +268,9 @@ namespace TUGraz.VectoCore.Tests.XML
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
 
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			AssertHelper.Exception<VectoException>(() => { var axles = vehicleDataProvider.Components.AxleWheels.AxlesEngineering; });
 		}
@@ -276,19 +283,17 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
+			
 
-			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			var firstAxle = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_Vehicle,
 				XMLNames.Vehicle_Components,
 				XMLNames.Component_AxleWheels,
 				XMLNames.ComponentDataWrapper,
-				XMLNames.AxleWheels_Axles,
-				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
-				), manager);
+				XMLNames.AxleWheels_Axles) +
+				string.Format("/*[@{0}={1}]", XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "1")
+				);
 			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
 			firstAxle.SetTypedValue(0);
 
@@ -300,8 +305,8 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			AssertHelper.Exception<VectoException>(
 				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-					var axles = inputDataProvider.VehicleInputData.Components.AxleWheels.AxlesEngineering;
+					var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
+					var axles = inputDataProvider.JobInputData.Vehicle.Components.AxleWheels.AxlesEngineering;
 				});
 		}
 
@@ -313,19 +318,16 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-			var firstAxle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			
+			var firstAxle = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_Vehicle,
 				XMLNames.Vehicle_Components,
 				XMLNames.Component_AxleWheels,
 				XMLNames.ComponentDataWrapper,
-				XMLNames.AxleWheels_Axles,
-				helper.QueryConstraint(XMLNames.AxleWheels_Axles_Axle, "1", null, string.Empty)
-				), manager);
+				XMLNames.AxleWheels_Axles) + 
+				string.Format("/*[@{0}={1}]", XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, "1")
+				);
 			firstAxle.MoveToAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, string.Empty);
 			firstAxle.SetTypedValue(3);
 
@@ -338,8 +340,8 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			AssertHelper.Exception<VectoException>(
 				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-					var axles = inputDataProvider.VehicleInputData.Components.AxleWheels.AxlesEngineering;
+					var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
+					var axles = inputDataProvider.JobInputData.Vehicle.Components.AxleWheels.AxlesEngineering;
 				});
 		}
 
@@ -348,7 +350,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 			var auxDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData;
 
 			var aux = auxDataProvider.Auxiliaries;
@@ -369,7 +371,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var adas = inputDataProvider.DriverInputData;
 
@@ -379,11 +381,9 @@ namespace TUGraz.VectoCore.Tests.XML
 		[TestCase]
 		public void TestVehicleInputSingleFile()
 		{
-			var reader = File.OpenRead(EngineeringSampleFile);
+			var inputDataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile, true);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
-
-			var vehicleDataProvider = inputDataProvider.VehicleInputData;
+			var vehicleDataProvider = inputDataProvider.JobInputData.Vehicle;
 
 			Assert.AreEqual(VehicleCategory.Tractor, vehicleDataProvider.VehicleCategory);
 			Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleDataProvider.AxleConfiguration);
@@ -403,7 +403,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFile);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var driverDataProvider = inputDataProvider.DriverInputData;
 
@@ -417,7 +417,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6);
 			Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6);
 
-			var driverAcc = driverDataProvider.AccelerationCurve;
+			var driverAcc = driverDataProvider.AccelerationCurve.AccelerationCurve;
 			Assert.AreEqual(2, driverAcc.Rows.Count);
 			Assert.AreEqual("100", driverAcc.Rows[1][0]);
 			Assert.AreEqual("1", driverAcc.Rows[1][1]);
@@ -426,7 +426,8 @@ namespace TUGraz.VectoCore.Tests.XML
 			var declarationDriverDataProvider = (IDriverDeclarationInputData)inputDataProvider.DriverInputData;
 
 
-			var shiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData;
+			var shiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData;
+			var gearboxData = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData;
 
 			Assert.AreEqual(DeclarationData.Gearbox.UpshiftMinAcceleration.Value(), shiftStrategy.UpshiftMinAcceleration.Value(),
 				1e-6);
@@ -442,10 +443,10 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(DeclarationData.Gearbox.StartAcceleration.Value(), shiftStrategy.StartAcceleration.Value(), 1e-6);
 			Assert.AreEqual(DeclarationData.Gearbox.TorqueReserveStart, shiftStrategy.StartTorqueReserve, 1e-6);
 
-			AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, shiftStrategy.PowershiftShiftTime);
-
-			var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.TorqueConverter;
+			AssertHelper.AreRelativeEqual(Constants.DefaultPowerShiftTime, gearboxData.PowershiftShiftTime);
 
+			var tcShiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData;
+			
 			AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CCUpshiftMinAcceleration,
 				tcShiftStrategy.CCUpshiftMinAcceleration);
 			AssertHelper.AreRelativeEqual(DeclarationData.TorqueConverter.CLUpshiftMinAcceleration,
@@ -460,15 +461,11 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var accData = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			
+			var accData = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_DriverModel,
-				XMLNames.DriverModel_DriverAccelerationCurve), manager);
+				XMLNames.DriverModel_DriverAccelerationCurve));
 			accData.DeleteSelf();
 
 			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
@@ -478,17 +475,16 @@ namespace TUGraz.VectoCore.Tests.XML
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
 
 			var driverDataProvider = inputDataProvider.DriverInputData;
 
-			var driverAcc = driverDataProvider.AccelerationCurve;
+			var driverAcc = driverDataProvider.AccelerationCurve.AccelerationCurve;
 			Assert.AreEqual("TUGraz.VectoCore.Resources.Declaration.VACC.Truck.vacc", driverAcc.Source);
 			Assert.AreEqual(5, driverAcc.Rows.Count);
 		}
 
 
-		[Category("LongRunning")]
 		[TestCase]
 		public void TestXMLPowertrainGenerationSingleFile()
 		{
@@ -496,9 +492,9 @@ namespace TUGraz.VectoCore.Tests.XML
 			var sumWriter = new FileOutputWriter("vecto_vehicle-sample_xml");
 			var sumData = new SummaryDataContainer(sumWriter);
 			var jobContainer = new JobContainer(sumData);
-			var dataProvider = new XMLEngineeringInputDataProvider(EngineeringSampleFile, true);
+			var dataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile, true);
 
-			var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, dataProvider, fileWriter);
+			var runsFactory = _kernel.Get<ISimulatorFactoryFactory>().Factory(ExecutionMode.Engineering, dataProvider, fileWriter);
 			runsFactory.WriteModalResults = true;
 
 			jobContainer.AddRuns(runsFactory);
@@ -511,7 +507,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFileFull);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var tcDataProvider = inputDataProvider.JobInputData.Vehicle.Components.TorqueConverterInputData;
 
@@ -534,7 +530,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFileFull);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var angledriveDataProvider = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData;
 
@@ -549,7 +545,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFileFull);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var driverDataProvider = inputDataProvider.DriverInputData;
 
@@ -570,13 +566,14 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(5, overspeed.OverSpeed.AsKmph, 1e-6);
 			Assert.AreEqual(5, overspeed.UnderSpeed.AsKmph, 1e-6);
 
-			var driverAcc = driverDataProvider.AccelerationCurve;
+			var driverAcc = driverDataProvider.AccelerationCurve.AccelerationCurve;
 			Assert.AreEqual(2, driverAcc.Rows.Count);
 			Assert.AreEqual("100", driverAcc.Rows[1][0]);
 			Assert.AreEqual("1", driverAcc.Rows[1][1]);
 			Assert.AreEqual("-1", driverAcc.Rows[1][2]);
 
-			var shiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData;
+			var shiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData;
+			var gearboxData = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData;
 
 			Assert.AreEqual(0.133, shiftStrategy.UpshiftMinAcceleration.Value(), 1e-6);
 			Assert.AreEqual(12, shiftStrategy.DownshiftAfterUpshiftDelay.Value(), 1e-6);
@@ -588,10 +585,10 @@ namespace TUGraz.VectoCore.Tests.XML
 			Assert.AreEqual(0.211, shiftStrategy.StartAcceleration.Value(), 1e-6);
 			Assert.AreEqual(0.212, shiftStrategy.StartTorqueReserve, 1e-6);
 
-			Assert.AreEqual(0.811, shiftStrategy.PowershiftShiftTime.Value(), 1e-6);
-
-			var tcShiftStrategy = inputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.TorqueConverter;
+			Assert.AreEqual(0.811, gearboxData.PowershiftShiftTime.Value(), 1e-6);
 
+			var tcShiftStrategy = inputDataProvider.DriverInputData.GearshiftInputData;
+			
 			Assert.AreEqual(0.134, tcShiftStrategy.CCUpshiftMinAcceleration.Value(), 1e-6);
 			Assert.AreEqual(0.133, tcShiftStrategy.CLUpshiftMinAcceleration.Value(), 1e-6);
 		}
@@ -601,7 +598,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFileFull);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var airdragData = inputDataProvider.JobInputData.Vehicle.Components.AirdragInputData;
 			Assert.AreEqual(CrossWindCorrectionMode.SpeedDependentCorrectionFactor, airdragData.CrossWindCorrectionMode);
@@ -615,7 +612,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFileFull);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 
 			var ptoData = inputDataProvider.JobInputData.Vehicle.Components.PTOTransmissionInputData;
 
@@ -636,7 +633,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var reader = File.OpenRead(EngineeringSampleFileFull);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(reader, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(reader, true);
 			var angledriveInputData = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData;
 
 			Assert.AreEqual("Generic Angledrive", angledriveInputData.Model);
@@ -658,15 +655,12 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
+			
 
-			var angledrivelosses = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			var angledrivelosses = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Angledrive,
-				XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap), manager);
+				XMLNames.ComponentDataWrapper, XMLNames.AngleDrive_TorqueLossMap));
 			//accData.DeleteSelf();
 			angledrivelosses.ReplaceSelf(
 				new XElement(XMLNames.AngleDrive_TorqueLossMap, new XElement(XMLNames.AngleDrive_Efficiency, "0.9124")).ToString());
@@ -678,7 +672,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
 
 			var angledrive = inputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData;
 			Assert.AreEqual(0.9124, angledrive.Efficiency);
@@ -692,15 +686,11 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var aux = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			
+			var aux = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering, 
 				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries,
-				XMLNames.ComponentDataWrapper), manager);
+				XMLNames.ComponentDataWrapper));
 			//accData.DeleteSelf();
 			//angledrivelosses.ReplaceSelf(new XElement(XMLNames.AngleDrive_Efficiency, "0.9124").ToString());
 			aux.InnerXml =
@@ -714,7 +704,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
 
 			var auxInput = inputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData.Auxiliaries;
 
@@ -731,35 +721,33 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
+			
 
-			var retarderType = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			var retarderType = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_Vehicle,
-				XMLNames.Vehicle_RetarderType), manager);
+				XMLNames.Vehicle_RetarderType));
 			retarderType.SetValue("None");
 
-			var retarder = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			var retarder = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering, 
 				XMLNames.Component_Vehicle,
 				XMLNames.Vehicle_Components,
-				XMLNames.Component_Retarder), manager);
+				XMLNames.Component_Retarder));
 			retarder.DeleteSelf();
 
 			//modify cycle & remove AUX to make simulation valid
-			var cycle = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.VectoJob_MissionCycles), manager);
+			var cycle = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
+				XMLNames.VectoJob_MissionCycles));
 			cycle.InnerXml =
 				new XElement(XMLNames.Missions_Cycle,
 					new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
 					new XAttribute(XMLNames.ExtResource_File_Attr, "LongHaul")).ToString();
-			var aux = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			var aux = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering, 
 				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Auxiliaries,
-				XMLNames.ComponentDataWrapper), manager);
+				XMLNames.ComponentDataWrapper));
 			aux.InnerXml = "";
 
 			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
@@ -769,9 +757,9 @@ namespace TUGraz.VectoCore.Tests.XML
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
 
-			var factory = new SimulatorFactory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy"));
+			var factory = _kernel.Get<ISimulatorFactoryFactory>().Factory(ExecutionMode.Engineering, inputDataProvider, new FileOutputWriter("dummy"));
 			var jobContainer = new JobContainer(null);
 			jobContainer.AddRuns(factory);
 			jobContainer.Execute();
@@ -785,18 +773,12 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var engine = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine), manager);
-			//accData.DeleteSelf();
+			
+			var engine = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
+				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Engine));
 			engine.DeleteSelf();
 
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
 			var stream = new MemoryStream();
 			var writer = new StreamWriter(stream);
 			writer.Write(nav.OuterXml);
@@ -804,7 +786,7 @@ namespace TUGraz.VectoCore.Tests.XML
 			stream.Seek(0, SeekOrigin.Begin);
 
 			AssertHelper.Exception<VectoException>(
-				() => { var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true); });
+				() => { var inputDataProvider = XMLInputReader.CreateEngineering(stream, true); });
 		}
 
 
@@ -816,14 +798,10 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var cycles = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.VectoJob_MissionCycles), manager);
+			
+			var cycles = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
+				XMLNames.VectoJob_MissionCycles));
 			//accData.DeleteSelf();
 			cycles.InnerXml =
 				new XElement(XMLNames.Missions_Cycle,
@@ -839,7 +817,7 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			AssertHelper.Exception<VectoException>(
 				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
+					var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
 					var cyclesList = inputDataProvider.JobInputData.Cycles;
 				});
 		}
@@ -852,14 +830,10 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var driverAcceleration = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
-				XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve), manager);
+			
+			var driverAcceleration = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering, 
+				XMLNames.Component_DriverModel, XMLNames.DriverModel_DriverAccelerationCurve));
 			//accData.DeleteSelf();
 			driverAcceleration.InnerXml =
 				new XElement(XMLNames.ExternalResource,
@@ -873,11 +847,10 @@ namespace TUGraz.VectoCore.Tests.XML
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			AssertHelper.Exception<VectoException>(
-				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, true);
-					var cyclesList = inputDataProvider.DriverInputData.AccelerationCurve;
-				});
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, true);
+			var accelerationCurve = inputDataProvider.DriverInputData.AccelerationCurve;
+			//Assert.AreEqual(DataSourceType.Missing, accelerationCurve.AccelerationCurve.SourceType);
+			Assert.IsNull(accelerationCurve.AccelerationCurve);
 		}
 
 		[TestCase]
@@ -888,34 +861,59 @@ namespace TUGraz.VectoCore.Tests.XML
 			var doc = new XmlDocument();
 			doc.Load(reader);
 			var nav = doc.CreateNavigator();
-			var manager = new XmlNamespaceManager(nav.NameTable);
-			var helper = new XPathHelper(ExecutionMode.Engineering);
-			helper.AddNamespaces(manager);
-
-
-			var axlegearLossMap = nav.SelectSingleNode(helper.QueryAbs(
-				helper.NSPrefix(XMLNames.VectoInputEngineering, Constants.XML.RootNSPrefix),
+			
+			var axlegearLossMap = nav.SelectSingleNode(XMLHelper.QueryLocalName(
+				XMLNames.VectoInputEngineering,
 				XMLNames.Component_Vehicle, XMLNames.Vehicle_Components, XMLNames.Component_Axlegear,
-				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap), manager);
-			//accData.DeleteSelf();
+				XMLNames.ComponentDataWrapper, XMLNames.Axlegear_TorqueLossMap));
 			axlegearLossMap.InnerXml = "";
-			//InnerXml =
-			//new XElement(XMLNames.ExternalResource,
-			//	new XAttribute(XMLNames.ExtResource_Type_Attr, XMLNames.ExtResource_Type_Value_CSV),
-			//	new XAttribute(XMLNames.ExtResource_File_Attr, "invalid_acceleration.vacc")).ToString();
 
-			//var modified = XmlReader.Create(new StringReader(nav.OuterXml));
 			var stream = new MemoryStream();
 			var writer = new StreamWriter(stream);
 			writer.Write(nav.OuterXml);
 			writer.Flush();
 			stream.Seek(0, SeekOrigin.Begin);
 
-			AssertHelper.Exception<VectoException>(
-				() => {
-					var inputDataProvider = new XMLEngineeringInputDataProvider(stream, false);
-					var lossmap = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData.LossMap;
-				}, "Failed to read TorqueLossMap resource");
+			var inputDataProvider = XMLInputReader.CreateEngineering(stream, false);
+			var lossmap = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData.LossMap;
+
+			Assert.IsNull(lossmap);
+
+			var eff = inputDataProvider.JobInputData.Vehicle.Components.AxleGearInputData.Efficiency;
+			Assert.IsNaN(eff);
+		}
+
+
+		[TestCase]
+		public void TestXMLInputEngineeringVersion1_0()
+		{
+			var inputDataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile_10_Full, true);
+
+			Assert.NotNull(inputDataProvider);
+
+			Assert.AreEqual("Generic Eninge", inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.Model);
+			Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.WHTCEngineering, 1e-6);
+
+		}
+
+
+		[TestCase]
+		public void TestXMLInputEngineeringVersion1_0TestExtensions()
+		{
+			// load overrides of test xml types
+			if (!_kernel.HasModule(typeof(XMLEngineeringReaderTestOverrides).FullName)) {
+				_kernel.Load(new XMLEngineeringReaderTestOverrides());
+			}
+
+			var inputDataProvider = XMLInputReader.CreateEngineering(EngineeringSampleFile_10TestExtensions_Full, true);
+
+			Assert.NotNull(inputDataProvider);
+
+			Assert.AreEqual("Generic Eninge", inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.Model);
+			Assert.AreEqual(1.0, inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.WHTCEngineering, 1e-6);
+
+			Assert.AreEqual(2200, inputDataProvider.JobInputData.Vehicle.Components.EngineInputData.RatedSpeedDeclared.AsRPM, 1e-6);
+
 		}
 	}
 }
diff --git a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
index 4215790500..21fad5b89f 100644
--- a/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLWritingTest.cs
@@ -39,6 +39,8 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Engineering;
 using TUGraz.VectoCore.OutputData.XML;
 using NUnit.Framework;
 using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.OutputData.XML.Engineering;
+using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
 
 namespace TUGraz.VectoCore.Tests.XML
 {
@@ -79,12 +81,11 @@ namespace TUGraz.VectoCore.Tests.XML
 			}
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(EngineOnlyJob);
-			var job =
-				new XMLEngineeringWriter(".", true, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData);
+			var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData);
 			job.Save(outFile);
 
 			//var reader = XmlReader.Create(outFile);
-			var xml = new XMLEngineeringInputDataProvider(outFile, true);
+			var xml = xmlInputReader.CreateEngineering(outFile, true);
 
 			Assert.IsNotNull(xml);
 			Assert.AreEqual("175kW 6.8l Engine", xml.JobInputData.JobName);
@@ -97,14 +98,13 @@ namespace TUGraz.VectoCore.Tests.XML
 			var outFile = "EngineeringJobSingleFile.xml";
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJob);
-			var job =
-				new XMLEngineeringWriter(".", true, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData);
+			var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData);
 			job.Save(outFile);
 
-			var xml = new XMLEngineeringInputDataProvider(outFile, true);
+			var xml = xmlInputReader.CreateEngineering(outFile, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
+			Assert.AreEqual("N.A. N/A", xml.JobInputData.JobName);
 		}
 
 		[Category("LongRunning")]
@@ -114,14 +114,13 @@ namespace TUGraz.VectoCore.Tests.XML
 			var outFile = "EngineeringJobSingleFileFull.xml";
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJobFull);
-			var job =
-				new XMLEngineeringWriter(".", true, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData);
+			var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData);
 			job.Save(outFile);
 
-			var xml = new XMLEngineeringInputDataProvider(outFile, true);
+			var xml = xmlInputReader.CreateEngineering(outFile, true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
+			Assert.AreEqual("N.A. N/A", xml.JobInputData.JobName);
 		}
 
 		[Category("LongRunning")]
@@ -133,14 +132,13 @@ namespace TUGraz.VectoCore.Tests.XML
 			Directory.CreateDirectory(outDir);
 
 			var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJobFull);
-			var job =
-				new XMLEngineeringWriter(outDir, false, "TU Graz, IVT").GenerateVectoJob((IEngineeringInputDataProvider)inputData);
+			var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData);
 			job.Save(Path.Combine(outDir, outFile));
 
-			var xml = new XMLEngineeringInputDataProvider(Path.Combine(outDir, outFile), true);
+			var xml = xmlInputReader.CreateEngineering(Path.Combine(outDir, outFile), true);
 
 			Assert.IsNotNull(xml);
-			Assert.AreEqual("VEH-N.A.", xml.JobInputData.JobName);
+			Assert.AreEqual("N.A. N/A", xml.JobInputData.JobName);
 		}
 
 		[Category("LongRunning")]
@@ -149,9 +147,7 @@ namespace TUGraz.VectoCore.Tests.XML
 		{
 			var inputData = JSONInputDataFactory.ReadJsonJob(EngineeringJob);
 			Directory.CreateDirectory("Engineering_MultipleFiles");
-			var job =
-				new XMLEngineeringWriter("Engineering_MultipleFiles", false, "TU Graz, IVT").GenerateVectoJob(
-					(IEngineeringInputDataProvider)inputData);
+			var job = _kernel.Get<IXMLEngineeringWriter>().Write(inputData);
 			job.Save("Engineering_MultipleFiles/EngineeringJobMultipleFiles.xml");
 
 			//var xml = new XMLEngineeringInputDataProvider(outFile, true);
diff --git a/VectoCore/VectoXML.spp b/VectoCore/VectoXML.spp
index 17b6a96aea..d36050dd06 100644
--- a/VectoCore/VectoXML.spp
+++ b/VectoCore/VectoXML.spp
@@ -33,34 +33,45 @@
 	<Folder FolderName="XQuery Files" ExtStr="xq;xql;xquery;xqu"/>
 	<Folder FolderName="HTML Files" ExtStr="html;htm;xhtml;asp"/>
 	<Folder FolderName="DTD/Schemas" ExtStr="dtd;dcd;xdr;biz;xsd">
-		<File FilePath="VectoCore\Resources\XSD\ParameterDocumentation.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoComponent.1.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoComponent.2.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationComponent.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.6.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.8.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.1.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.1.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.2.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoDeclarationJob.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.6.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.7.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.1.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.1.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoInput.1.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoInput.2.0.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoMonitoring.0.7.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.4.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.5.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.7.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.5.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.6.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.7.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\VTPReport.0.1.xsd" HomeFolder="Yes"/>
-		<File FilePath="VectoCore\Resources\XSD\xmldsig-core-schema.xsd" HomeFolder="Yes"/>
+		<Folder FolderName="Declaration">
+			<File FilePath="VectoCore\Resources\XSD\VectoComponent.1.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoComponent.2.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationComponent.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.6.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.0.8.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.1.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.1.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.2.2.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationDefinitions.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoDeclarationJob.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoInput.1.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoInput.2.0.xsd" HomeFolder="Yes"/>
+		</Folder>
+		<Folder FolderName="Common">
+			<File FilePath="VectoCore\Resources\XSD\ParameterDocumentation.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\xmldsig-core-schema.xsd" HomeFolder="Yes"/>
+		</Folder>
+		<Folder FolderName="Engineering">
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringComponent.1.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.6.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.0.7.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.1.0.TEST.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.1.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringDefinitions.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.1.0.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoEngineeringInput.xsd" HomeFolder="Yes"/>
+		</Folder>
+		<Folder FolderName="Reports">
+			<File FilePath="VectoCore\Resources\XSD\VectoMonitoring.0.7.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.4.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.5.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoOutputCustomer.0.7.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.5.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.6.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.7.xsd" HomeFolder="Yes"/>
+			<File FilePath="VectoCore\Resources\XSD\VTPReport.0.1.xsd" HomeFolder="Yes"/>
+		</Folder>
 	</Folder>
 	<Folder FolderName="Entities" ExtStr="ent"/>
 </Project>
-- 
GitLab