diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs
index 3c001b436f53135563b14093ca367572409e7010..730ef22f1f7cc801f67f2bd1601e0f7061d541b3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLAuxiliaryDeclarationDataProvider.cs
@@ -19,14 +19,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IAuxiliaryDeclarationInputData
 
-		public AuxiliaryType Type
+		public virtual AuxiliaryType Type
 		{
 			get {
 				return _type ?? (_type = BaseNode.LocalName.ParseEnum<AuxiliaryType>()).Value;
 			}
 		}
 
-		public IList<string> Technology
+		public virtual IList<string> Technology
 		{
 			get {
 				if (_technology != null) {
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs
index 0303045574034e6dd41b0175f565b34b1efa250c..f72f28048efa59dbce46a9eb6fa2286abe1b4321 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs
@@ -31,22 +31,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IAdvancedDriverAssistantSystemDeclarationInputData
 
-		public bool EngineStopStart
+		public virtual bool EngineStopStart
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EngineStopStart)); }
 		}
 
-		public bool EcoRollWitoutEngineStop
+		public virtual bool EcoRollWitoutEngineStop
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop)); }
 		}
 
-		public bool EcoRollWithEngineStop
+		public virtual bool EcoRollWithEngineStop
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart)); }
 		}
 
-		public PredictiveCruiseControlType PredictiveCruiseControl
+		public virtual PredictiveCruiseControlType PredictiveCruiseControl
 		{
 			get { return PredictiveCruiseControlTypeHelper.Parse(GetString(XMLNames.Vehicle_ADAS_PCC)); }
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs
index 75c8c99488ea9963092ceced97e1a18868ae2147..2e888eb6298d1405839835310539d0606534d958 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs
@@ -20,7 +20,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IAirdragDeclarationInputData
 
-		public SquareMeter AirDragArea
+		public virtual SquareMeter AirDragArea
 		{
 			get {
 				return ElementExists(XMLNames.AirDrag_DeclaredCdxA)
@@ -29,7 +29,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public new CertificationMethod CertificationMethod
+		public override CertificationMethod CertificationMethod
 		{
 			get { return CertificationMethod.Measured; }
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs
index 92b6847892172da99a4ca84af7b0d1d8028adbfc..b909ab80f09e5c3c7b74d7378b4cdb19b7de361a 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAngledriveDataProvider.cs
@@ -26,17 +26,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IAngledriveInputData
 
-		public AngledriveType Type
+		public virtual AngledriveType Type
 		{
 			get { return Vehicle.AngledriveType; }
 		}
 
-		public double Ratio
+		public virtual double Ratio
 		{
 			get { return GetDouble(XMLNames.AngleDrive_Ratio); }
 		}
 
-		public TableData LossMap
+		public virtual TableData LossMap
 		{
 			get {
 				return ReadTableData(
@@ -45,7 +45,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public double Efficiency
+		public virtual double Efficiency
 		{
 			get { throw new VectoException("Efficiency not supported in Declaration Mode!"); }
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs
index f6f23d39914979520cd3d10236441fc465669d8f..1ec5ab6e902a6e6e8649db8aa8ccd07f6cbab0e9 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAuxiliariesDataProvider.cs
@@ -21,12 +21,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IAuxiliariesDeclarationInputData
 
-		public bool SavedInDeclarationMode
+		public virtual bool SavedInDeclarationMode
 		{
 			get { return true; }
 		}
 
-		public IList<IAuxiliaryDeclarationInputData> Auxiliaries
+		public virtual IList<IAuxiliaryDeclarationInputData> Auxiliaries
 		{
 			get {
 				if (_auxiliaries != null) {
@@ -52,7 +52,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IXMLAuxiliariesDeclarationInputData
 
-		public IXMLComponentReader Reader { protected get; set; }
+		public virtual IXMLComponentReader Reader { protected get; set; }
 
 		#endregion
 	}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs
index af2db27e1922aad3daa1c75be894aaacb47607eb..4c6550c7fd18efb76220013c66806010930fb0c2 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxleDataProvider.cs
@@ -13,9 +13,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 	{
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
-		private ITyreDeclarationInputData _tyre;
-		private bool? _twinTyre;
-		private AxleType? _axleType;
+		protected ITyreDeclarationInputData _tyre;
+		protected bool? _twinTyre;
+		protected AxleType? _axleType;
 
 		public XMLDeclarationAxleDataProviderV10(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode, sourceFile)
 		{
@@ -24,21 +24,21 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IAxleDeclarationInputData
 
-		public bool TwinTyres
+		public virtual bool TwinTyres
 		{
 			get {
 				return _twinTyre ?? (_twinTyre = XmlConvert.ToBoolean(GetString(XMLNames.AxleWheels_Axles_Axle_TwinTyres))).Value;
 			}
 		}
 
-		public AxleType AxleType
+		public virtual AxleType AxleType
 		{
 			get {
 				return _axleType ?? (_axleType = GetString(XMLNames.AxleWheels_Axles_Axle_AxleType).ParseEnum<AxleType>()).Value;
 			}
 		}
 
-		public ITyreDeclarationInputData Tyre
+		public virtual ITyreDeclarationInputData Tyre
 		{
 			get { return _tyre ?? (_tyre = Reader.Tyre); }
 		}
@@ -48,7 +48,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IXMLAxleDeclarationInputData
 
-		public IXMLComponentReader Reader { protected get; set; }
+		public virtual IXMLComponentReader Reader { protected get; set; }
 
 		#endregion
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs
index e9b9dfca67ede900979acd1614ccdda284ec6209..cf5f6847678efec2cb4ee2db4c41979c92fc5f0a 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlegearDataProvider.cs
@@ -22,12 +22,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IAxleGearInputData
 
-		public double Ratio
+		public virtual double Ratio
 		{
 			get { return GetDouble(XMLNames.Axlegear_Ratio); }
 		}
 
-		public TableData LossMap
+		public virtual TableData LossMap
 		{
 			get {
 				return ReadTableData(
@@ -36,12 +36,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public double Efficiency
+		public virtual double Efficiency
 		{
 			get { throw new VectoException("Efficiency not supported in Declaration Mode!"); }
 		}
 
-		public AxleLineType LineType
+		public virtual AxleLineType LineType
 		{
 			get {
 				var value = GetString(XMLNames.Axlegear_LineType);
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs
index a460257e7303af0a80c5356e4fc2acd7f9ec5870..3109365eb5cd79a46e3ff4fb5091eb26f92c5b8d 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAxlesDataProvider.cs
@@ -21,7 +21,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider {
 
 		#region Implementation of IAxlesDeclarationInputData
 
-		public IList<IAxleDeclarationInputData> AxlesDeclaration
+		public virtual IList<IAxleDeclarationInputData> AxlesDeclaration
 		{
 			get {
 				if (_axles != null) {
@@ -51,13 +51,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider {
 
 		#region Implementation of IXMLResource
 
-		public DataSource DataSource { get; }
+		public virtual DataSource DataSource { get; }
 
 		#endregion
 
 		#region Implementation of IXMLAxlesDeclarationInputData
 
-		public IXMLComponentReader Reader { protected get; set; }
+		public virtual IXMLComponentReader Reader { protected get; set; }
 
 		#endregion
 	}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
index 1c7f41f7bc7ba325767b38ecb383765af1faf8fe..8722547828422f6f4c946ec6caf0c4f71690cd13 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationComponentsDataProvider.cs
@@ -32,32 +32,32 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IVehicleComponentsDeclaration
 
-		public IAirdragDeclarationInputData AirdragInputData
+		public virtual IAirdragDeclarationInputData AirdragInputData
 		{
 			get { return _airdragInputData ?? (_airdragInputData = ComponentReader.AirdragInputData); }
 		}
 
-		public IGearboxDeclarationInputData GearboxInputData
+		public virtual IGearboxDeclarationInputData GearboxInputData
 		{
 			get { return _gearboxInputData ?? (_gearboxInputData = ComponentReader.GearboxInputData); }
 		}
 
-		public ITorqueConverterDeclarationInputData TorqueConverterInputData
+		public virtual ITorqueConverterDeclarationInputData TorqueConverterInputData
 		{
 			get { return GearboxInputData.TorqueConverter; }
 		}
 
-		public IAxleGearInputData AxleGearInputData
+		public virtual IAxleGearInputData AxleGearInputData
 		{
 			get { return _axleGearInputData ?? (_axleGearInputData = ComponentReader.AxleGearInputData); }
 		}
 
-		public IAngledriveInputData AngledriveInputData
+		public virtual IAngledriveInputData AngledriveInputData
 		{
 			get { return _angledriveInputData ?? (_angledriveInputData = ComponentReader.AngledriveInputData); }
 		}
 
-		public IEngineDeclarationInputData EngineInputData
+		public virtual IEngineDeclarationInputData EngineInputData
 		{
 			get { return _engineInputData ?? (_engineInputData = ComponentReader.EngineInputData); }
 		}
@@ -67,17 +67,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			get { return _auxInputData ?? (_auxInputData = ComponentReader.AuxiliaryData); }
 		}
 
-		public IRetarderInputData RetarderInputData
+		public virtual IRetarderInputData RetarderInputData
 		{
 			get { return _retarderInputData ?? (_retarderInputData = ComponentReader.RetarderInputData); }
 		}
 
-		public IPTOTransmissionInputData PTOTransmissionInputData
+		public virtual IPTOTransmissionInputData PTOTransmissionInputData
 		{
 			get { return _vehicle.PTOTransmissionInputData; }
 		}
 
-		public IAxlesDeclarationInputData AxleWheels
+		public virtual IAxlesDeclarationInputData AxleWheels
 		{
 			get { return _axleWheels ?? (_axleWheels = ComponentReader.AxlesDeclarationInputData); }
 		}
@@ -86,7 +86,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IXMLVehicleComponentsDeclaration
 
-		public IXMLComponentReader ComponentReader { protected get; set; }
+		public virtual IXMLComponentReader ComponentReader { protected get; set; }
 		
 		
 		#endregion
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs
index 0f4d66e78a3f319cc224b51546ab4e021ce77aef..a6e2083442fd0e83549201e10888aaed8e07fde7 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs
@@ -22,17 +22,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IEngineDeclarationInputData
 
-		public CubicMeter Displacement
+		public virtual CubicMeter Displacement
 		{
 			get { return GetDouble(XMLNames.Engine_Displacement).SI(Unit.SI.Cubic.Centi.Meter).Cast<CubicMeter>(); }
 		}
 
-		public PerSecond IdleSpeed
+		public virtual PerSecond IdleSpeed
 		{
 			get { return GetDouble(XMLNames.Engine_IdlingSpeed).RPMtoRad(); }
 		}
 
-		public FuelType FuelType
+		public virtual FuelType FuelType
 		{
 			get {
 				var value = GetString(XMLNames.Engine_FuelType);
@@ -47,56 +47,56 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public TableData FuelConsumptionMap
+		public virtual TableData FuelConsumptionMap
 		{
 			get {
 				return ReadTableData(XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry, AttributeMappings.FuelConsumptionMapMapping);
 			}
 		}
 
-		public TableData FullLoadCurve
+		public virtual TableData FullLoadCurve
 		{
 			get {
 				return ReadTableData(XMLNames.Engine_FullLoadAndDragCurve, XMLNames.Engine_FullLoadCurve_Entry, AttributeMappings.EngineFullLoadCurveMapping);
 			}
 		}
 
-		public Watt RatedPowerDeclared
+		public virtual Watt RatedPowerDeclared
 		{
 			get { return GetDouble(XMLNames.Engine_RatedPower).SI<Watt>(); }
 		}
 
-		public PerSecond RatedSpeedDeclared
+		public virtual PerSecond RatedSpeedDeclared
 		{
 			get { return GetDouble(XMLNames.Engine_RatedSpeed).RPMtoRad(); }
 		}
 
-		public NewtonMeter MaxTorqueDeclared
+		public virtual NewtonMeter MaxTorqueDeclared
 		{
 			get { return GetDouble(XMLNames.Engine_MaxTorque).SI<NewtonMeter>(); }
 		}
 
-		public double WHTCMotorway
+		public virtual double WHTCMotorway
 		{
 			get { return GetDouble(XMLNames.Engine_WHTCMotorway); }
 		}
 
-		public double WHTCRural
+		public virtual double WHTCRural
 		{
 			get { return GetDouble(XMLNames.Engine_WHTCRural); }
 		}
 
-		public double WHTCUrban
+		public virtual double WHTCUrban
 		{
 			get { return GetDouble(XMLNames.Engine_WHTCUrban); }
 		}
 
-		public double ColdHotBalancingFactor
+		public virtual double ColdHotBalancingFactor
 		{
 			get { return GetDouble(XMLNames.Engine_ColdHotBalancingFactor); }
 		}
 
-		public double CorrectionFactorRegPer
+		public virtual double CorrectionFactorRegPer
 		{
 			get { return GetDouble(XMLNames.Engine_CorrectionFactor_RegPer); }
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs
index 02bb69008f715e78b4f9671aa2ad3c737929c8f4..490d7ad3cbd16cccf8d2c5754a08b6ff00fcfc65 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationGearboxDataProvider.cs
@@ -16,7 +16,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
 		protected ITorqueConverterDeclarationInputData _torqueConverter;
-		private IList<ITransmissionInputData> _gears;
+		protected IList<ITransmissionInputData> _gears;
 
 		public XMLDeclarationGearboxDataProviderV10(
 			IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) :
@@ -38,33 +38,31 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IGearboxDeclarationInputData
 
-		public GearboxType Type
+		public virtual GearboxType Type
 		{
 			get {
 				var value = GetString(XMLNames.Gearbox_TransmissionType);
 				switch (value) {
 					case "MT":
-					case "SMT":
-						return GearboxType.MT;
-					case "AMT":
-						return GearboxType.AMT;
+					case "SMT": return GearboxType.MT;
+					case "AMT": return GearboxType.AMT;
 					case "APT-S":
-					case "AT - Serial":
-						return GearboxType.ATSerial;
+					case "AT - Serial": return GearboxType.ATSerial;
 					case "APT-P":
-					case "AT - PowerSplit":
-						return GearboxType.ATPowerSplit;
+					case "AT - PowerSplit": return GearboxType.ATPowerSplit;
 				}
+
 				throw new ArgumentOutOfRangeException("GearboxType", value);
 			}
 		}
 
-		public IList<ITransmissionInputData> Gears
+		public virtual IList<ITransmissionInputData> Gears
 		{
 			get {
 				if (_gears != null) {
 					return _gears;
 				}
+
 				_gears = new List<ITransmissionInputData>();
 
 				var gearNodes = GetNodes(new[] { XMLNames.Gearbox_Gears, XMLNames.Gearbox_Gears_Gear });
@@ -78,9 +76,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public ITorqueConverterDeclarationInputData TorqueConverter { get {
-			return _torqueConverter ?? (_torqueConverter = Reader.TorqueConverterInputData);
-		} }
+		public virtual ITorqueConverterDeclarationInputData TorqueConverter
+		{
+			get { return _torqueConverter ?? (_torqueConverter = Reader.TorqueConverterInputData); }
+		}
 
 		#endregion
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs
index e4b4cb65b419294a1ee9f480231577cca109171d..635e8770a78e7d47b4d908ed5195d30946d5306c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs
@@ -49,38 +49,47 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration
 	{
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
-		internal readonly XmlDocument Document;
+		protected readonly XmlDocument Document;
 		protected IDeclarationJobInputData JobData;
 
+		public XMLDeclarationInputDataProviderV10(XmlDocument xmlDoc, string fileName) : base(
+			xmlDoc.DocumentElement, fileName)
+		{
+			Document = xmlDoc;
+			SourceType = DataSourceType.XMLFile;
+		}
+
 		#region Overrides of AbstractXMLResource
 
-		protected override string SchemaNamespace { get { return NAMESPACE_URI; } }
+		protected override string SchemaNamespace
+		{
+			get { return NAMESPACE_URI; }
+		}
+
 		protected override DataSourceType SourceType { get; }
 
 		#endregion
 
 		#region Implementation of IXMLDeclarationInputData
 
-		public IXMLDeclarationInputDataReader Reader { protected get; set; }
+		public virtual IXMLDeclarationInputDataReader Reader { protected get; set; }
 
 		#endregion
 
-		public XMLDeclarationInputDataProviderV10(XmlDocument xmlDoc, string fileName) : base(xmlDoc.DocumentElement, fileName)
-		{		
-			Document = xmlDoc;
-			SourceType = DataSourceType.XMLFile;
-		}
-
 		
-		public IDeclarationJobInputData JobInputData
+
+		public virtual IDeclarationJobInputData JobInputData
 		{
 			get { return JobData ?? (JobData = Reader.JobData); }
 		}
 
 
-		public XElement XMLHash { get; private set; }
-
+		public virtual XElement XMLHash { get; private set; }
+	}
 
-		
+	public class XMLDeclarationInputDataProviderV20 : XMLDeclarationInputDataProviderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20;
+		public XMLDeclarationInputDataProviderV20(XmlDocument xmlDoc, string fileName) : base(xmlDoc, fileName) { }
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs
index 243b6597a2a3cf163dc102b9d3951a34e396598e..c5c3d0dfdca6fe494a46a3312a1cc5e615ac368c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationJobInputDataProvider.cs
@@ -8,7 +8,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 {
 	public class XMLDeclarationJobInputDataProviderV10 : AbstractXMLResource, IXMLDeclarationJobInputData
 	{
-		private IVehicleDeclarationInputData _vehicle;
+		protected IVehicleDeclarationInputData _vehicle;
 
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
@@ -34,24 +34,24 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IDeclarationJobInputData
 
-		public bool SavedInDeclarationMode
+		public virtual bool SavedInDeclarationMode
 		{
 			get { return true; }
 		}
 
-		public IVehicleDeclarationInputData Vehicle
+		public virtual IVehicleDeclarationInputData Vehicle
 		{
 			get { return _vehicle ?? (_vehicle = Reader.CreateVehicle); }
 		}
 
-		public string JobName { get { return Vehicle.Identifier; } }
+		public virtual string JobName { get { return Vehicle.Identifier; } }
 
 		#endregion
 
 		#region Implementation of IXMLDeclarationJobInputData
 
-		public IXMLJobDataReader Reader { protected get; set; }
-		public IXMLDeclarationInputData InputData { get; }
+		public virtual IXMLJobDataReader Reader { protected get; set; }
+		public virtual IXMLDeclarationInputData InputData { get; }
 
 		#endregion
 	}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationRetarderDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationRetarderDataProvider.cs
index fb091d2f34022b8e1ff2cadfc59e1d91541847be..630df24a9bae6e04452421cd95f44018f291cba5 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationRetarderDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationRetarderDataProvider.cs
@@ -23,17 +23,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of IRetarderInputData
 
-		public RetarderType Type
+		public virtual RetarderType Type
 		{
 			get { return Vehicle.RetarderType; }
 		}
 
-		public double Ratio
+		public virtual double Ratio
 		{
 			get { return Vehicle.RetarderRatio; }
 		}
 
-		public TableData LossMap
+		public virtual TableData LossMap
 		{
 			get {
 				return ReadTableData(XMLNames.Retarder_RetarderLossMap, XMLNames.Retarder_RetarderLossMap_Entry, AttributeMappings.RetarderLossmapMapping);
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTorqueConverterDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTorqueConverterDataProvider.cs
index d3935aff1370a357d0ba589ea73bdcf9670ddfe4..eb2c79b0a083e6fe715f0479d9372fb5b51c75d3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTorqueConverterDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTorqueConverterDataProvider.cs
@@ -21,7 +21,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of ITorqueconverterDeclarationInputData
 
-		public TableData TCData
+		public virtual TableData TCData
 		{
 			get {
 				return ReadTableData(
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTyreDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTyreDataProvider.cs
index e419cde543e7e3d799aa9dfd3e1069a68cb27128..bd5b7da7e72bd6bc736de1a63d775b990ff5857c 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTyreDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationTyreDataProvider.cs
@@ -11,9 +11,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 	{
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
-		private string _dimension;
-		private double? _rrc;
-		private Newton _fzIso;
+		protected string _dimension;
+		protected double? _rrc;
+		protected Newton _fzIso;
 
 		public XMLDeclarationTyreDataProviderV10(
 			IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) :
@@ -35,17 +35,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		#region Implementation of ITyreDeclarationInputData
 
-		public string Dimension
+		public virtual string Dimension
 		{
 			get { return _dimension ?? (_dimension = GetString(XMLNames.AxleWheels_Axles_Axle_Dimension)); }
 		}
 
-		public double RollResistanceCoefficient
+		public virtual double RollResistanceCoefficient
 		{
 			get { return _rrc ?? (_rrc = GetDouble(XMLNames.AxleWheels_Axles_Axle_RRCDeclared)).Value; }
 		}
 
-		public Newton TyreTestLoad
+		public virtual Newton TyreTestLoad
 		{
 			get { return _fzIso ?? (_fzIso = GetDouble(XMLNames.AxleWheels_Axles_Axle_FzISO).SI<Newton>()); }
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
index d7a4da5738ca25b64a68ed0a519a8d3b82227090..11336ae0c6990635fdfc7224243fcf163bcfd6c3 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
@@ -31,9 +31,7 @@
 
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using System.Xml;
-using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Resources;
@@ -41,7 +39,6 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
 using TUGraz.VectoCore.InputData.Impl;
-using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
@@ -50,16 +47,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 	{
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
-		public IXMLComponentReader ComponentReader { protected get; set; }
-
-		public IXMLPTOReader PTOReader { protected get; set; }
-
-		public IXMLADASReader ADASReader { protected get; set; }
-
-		private IVehicleComponentsDeclaration _components;
-		private IPTOTransmissionInputData _ptoData;
-
-
 		public XMLDeclarationVehicleDataProviderV10(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile)
 			: base(xmlNode, sourceFile)
 		{
@@ -67,29 +54,40 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			SourceType = DataSourceType.XMLFile;
 		}
 
-		public IXMLDeclarationJobInputData Job { get; }
+	
+		public virtual IXMLComponentReader ComponentReader { protected get; set; }
+
+		public virtual IXMLPTOReader PTOReader { protected get; set; }
+
+		public virtual IXMLADASReader ADASReader { protected get; set; }
+
+		protected IVehicleComponentsDeclaration _components;
+		protected IPTOTransmissionInputData _ptoData;
+
+
+			public IXMLDeclarationJobInputData Job { get; }
 
-		public string Identifier
+		public virtual string Identifier
 		{
 			get { return GetAttribute(BaseNode, XMLNames.Component_ID_Attr); }
 		}
 
-		public bool ExemptedVehicle
+		public virtual bool ExemptedVehicle
 		{
 			get { return ElementExists(XMLNames.Vehicle_HybridElectricHDV) && ElementExists(XMLNames.Vehicle_DualFuelVehicle); }
 		}
 
-		public string VIN
+		public virtual string VIN
 		{
 			get { return GetString(XMLNames.Vehicle_VIN); }
 		}
 
-		public LegislativeClass LegislativeClass
+		public virtual LegislativeClass LegislativeClass
 		{
 			get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); }
 		}
 
-		public VehicleCategory VehicleCategory
+		public virtual VehicleCategory VehicleCategory
 		{
 			get {
 				var val = GetString(XMLNames.Vehicle_VehicleCategory);
@@ -101,18 +99,18 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public Kilogram CurbMassChassis
+		public virtual Kilogram CurbMassChassis
 		{
 			get { return GetDouble(XMLNames.Vehicle_CurbMassChassis).SI<Kilogram>(); }
 		}
 
 
-		public Kilogram GrossVehicleMassRating
+		public virtual Kilogram GrossVehicleMassRating
 		{
 			get { return GetDouble(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); }
 		}
 
-		public IList<ITorqueLimitInputData> TorqueLimits
+		public virtual IList<ITorqueLimitInputData> TorqueLimits
 		{
 			get {
 				var retVal = new List<ITorqueLimitInputData>();
@@ -132,32 +130,32 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public AxleConfiguration AxleConfiguration
+		public virtual AxleConfiguration AxleConfiguration
 		{
 			get { return AxleConfigurationHelper.Parse(GetString(XMLNames.Vehicle_AxleConfiguration)); }
 		}
 
-		public string ManufacturerAddress
+		public virtual string ManufacturerAddress
 		{
 			get { return GetString(XMLNames.Component_ManufacturerAddress); }
 		}
 
-		public PerSecond EngineIdleSpeed
+		public virtual PerSecond EngineIdleSpeed
 		{
 			get { return GetDouble(XMLNames.Vehicle_IdlingSpeed).RPMtoRad(); }
 		}
 
-		public double RetarderRatio
+		public virtual double RetarderRatio
 		{
 			get { return GetDouble(XMLNames.Vehicle_RetarderRatio); }
 		}
 
-		public IPTOTransmissionInputData PTOTransmissionInputData
+		public virtual IPTOTransmissionInputData PTOTransmissionInputData
 		{
 			get { return _ptoData ?? (_ptoData = PTOReader.PTOInputData); }
 		}
 
-		public RetarderType RetarderType
+		public virtual RetarderType RetarderType
 		{
 			get {
 				var value = GetString(XMLNames.Vehicle_RetarderType); //.ParseEnum<RetarderType>(); 
@@ -173,22 +171,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public AngledriveType AngledriveType
+		public virtual AngledriveType AngledriveType
 		{
 			get { return GetString(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); }
 		}
 
-		public bool VocationalVehicle
+		public virtual bool VocationalVehicle
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_VocationalVehicle)); }
 		}
 
-		public bool SleeperCab
+		public virtual bool SleeperCab
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_SleeperCab)); }
 		}
 
-		public TankSystem? TankSystem
+		public virtual TankSystem? TankSystem
 		{
 			get {
 				return ElementExists(XMLNames.Vehicle_NgTankSystem)
@@ -197,27 +195,27 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public IAdvancedDriverAssistantSystemDeclarationInputData ADAS
+		public virtual IAdvancedDriverAssistantSystemDeclarationInputData ADAS
 		{
 			get { return ADASReader.ADASInputData; }
 		}
 
-		public bool ZeroEmissionVehicle
+		public virtual bool ZeroEmissionVehicle
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ZeroEmissionVehicle)); }
 		}
 
-		public bool HybridElectricHDV
+		public virtual bool HybridElectricHDV
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_HybridElectricHDV)); }
 		}
 
-		public bool DualFuelVehicle
+		public virtual bool DualFuelVehicle
 		{
 			get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_DualFuelVehicle)); }
 		}
 
-		public Watt MaxNetPower1
+		public virtual Watt MaxNetPower1
 		{
 			get {
 				return ElementExists(XMLNames.Vehicle_MaxNetPower1)
@@ -226,7 +224,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public Watt MaxNetPower2
+		public virtual Watt MaxNetPower2
 		{
 			get {
 				return ElementExists(XMLNames.Vehicle_MaxNetPower2)
@@ -235,7 +233,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			}
 		}
 
-		public IVehicleComponentsDeclaration Components
+		public virtual IVehicleComponentsDeclaration Components
 		{
 			get { return _components ?? (_components = ComponentReader.ComponentInputData); }
 		}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
index aa5ef90b44d70c1943575e79593186d8b8222703..44371b7488381b4a8c6ab2c05060efd9ccce2c68 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLGearData.cs
@@ -18,7 +18,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 			SourceFile = sourceFile;
 		}
 
-		public string SourceFile { get; }
+		public virtual string SourceFile { get; }
 
 		#region Implementation of ITransmissionInputData
 
@@ -69,6 +69,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		#endregion
 	}
 
+	// ---------------------------------------------------------------------------------------
+
 	public class XMLGearDataV10 : XMLAbstractGearData, IXMLGearData
 	{
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs
index 9014fc86664da38d84b00aea499c0d35236aafd5..221c95dd82f6f5241bf571650e08f0178c550b78 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs
@@ -27,17 +27,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		#region Implementation of IXMLADASReader
 
-		public IAdvancedDriverAssistantSystemDeclarationInputData ADASInputData
+		public virtual IAdvancedDriverAssistantSystemDeclarationInputData ADASInputData
 		{
 			get { return _adas ?? (_adas = CreateComponent(XMLNames.Vehicle_ADAS, ADASCreator)); }
 		}
 
 		#endregion
 
-		protected IAdvancedDriverAssistantSystemDeclarationInputData ADASCreator(
+		protected virtual IAdvancedDriverAssistantSystemDeclarationInputData ADASCreator(
 			string version, XmlNode componentNode, string sourceFile)
 		{
 			return Factory.CreateADASData(version, Vehicle, componentNode, sourceFile);
 		}
 	}
+
+	// ---------------------------------------------------------------------------------------
+
+	public class XMLADASReaderV20 : XMLADASReaderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20;
+
+		public XMLADASReaderV20(IXMLDeclarationVehicleData vehicle, XmlNode vehicleNode, bool verifyXML) : base(vehicle, vehicleNode, verifyXML) { }
+	}
 }
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 8a2e710ed0493158f218682b12646d82d283819e..d1433b4f1719c3a757d82012958f63cd996fb426 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLComponentReader.cs
@@ -18,16 +18,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		protected IXMLDeclarationVehicleData Vehicle;
 
-		private IVehicleComponentsDeclaration _components;
-		private IGearboxDeclarationInputData _gearboxInputData;
-		private IAxleGearInputData _axlegearInputData;
-		private IAngledriveInputData _angledriveInputData;
-		private IEngineDeclarationInputData _engineInputData;
-		private IRetarderInputData _retarderInputData;
-		private IAxlesDeclarationInputData _axlesInputData;
-		private IAirdragDeclarationInputData _airdragInputData;
-		private IAuxiliariesDeclarationInputData _auxiliaryInputData;
-		private ITorqueConverterDeclarationInputData _torqueConverterInputData;
+		protected IVehicleComponentsDeclaration _components;
+		protected IGearboxDeclarationInputData _gearboxInputData;
+		protected IAxleGearInputData _axlegearInputData;
+		protected IAngledriveInputData _angledriveInputData;
+		protected IEngineDeclarationInputData _engineInputData;
+		protected IRetarderInputData _retarderInputData;
+		protected IAxlesDeclarationInputData _axlesInputData;
+		protected IAirdragDeclarationInputData _airdragInputData;
+		protected IAuxiliariesDeclarationInputData _auxiliaryInputData;
+		protected ITorqueConverterDeclarationInputData _torqueConverterInputData;
 
 
 		[Inject]
@@ -45,26 +45,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		#region Implementation of IXMLComponentReader
 
-		public IVehicleComponentsDeclaration ComponentInputData
+		public virtual IVehicleComponentsDeclaration ComponentInputData
 		{
 			get { return _components ?? (_components = CreateComponent(XMLNames.Vehicle_Components, ComponentsCreator)); }
 		}
 
-		public IAirdragDeclarationInputData AirdragInputData
+		public virtual IAirdragDeclarationInputData AirdragInputData
 		{
 			get {
 				return _airdragInputData ?? (_airdragInputData = CreateComponent(XMLNames.Component_AirDrag, AirdragCreator, true));
 			}
 		}
-		
-		public IGearboxDeclarationInputData GearboxInputData
+
+		public virtual IGearboxDeclarationInputData GearboxInputData
 		{
 			get {
 				return _gearboxInputData ?? (_gearboxInputData = CreateComponent(XMLNames.Component_Gearbox, GearboxCreator));
 			}
 		}
 
-		public ITorqueConverterDeclarationInputData TorqueConverterInputData
+		public virtual ITorqueConverterDeclarationInputData TorqueConverterInputData
 		{
 			get {
 				return _torqueConverterInputData ?? (_torqueConverterInputData = CreateComponent(
@@ -72,7 +72,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
-		public ITransmissionInputData CreateGear(XmlNode gearNode)
+		public virtual ITransmissionInputData CreateGear(XmlNode gearNode)
 		{
 			var version = XMLHelper.GetSchemaVersion(gearNode);
 			try {
@@ -84,7 +84,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
-		public IAuxiliaryDeclarationInputData CreateAuxiliary(XmlNode auxNode)
+		public virtual IAuxiliaryDeclarationInputData CreateAuxiliary(XmlNode auxNode)
 		{
 			var version = XMLHelper.GetSchemaVersion(auxNode);
 			try {
@@ -94,7 +94,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
-		public IAxleDeclarationInputData CreateAxle(XmlNode axleNode)
+		public virtual IAxleDeclarationInputData CreateAxle(XmlNode axleNode)
 		{
 			var version = XMLHelper.GetSchemaVersion(axleNode);
 			try {
@@ -109,7 +109,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		public IAxleGearInputData AxleGearInputData
+		public virtual IAxleGearInputData AxleGearInputData
 		{
 			get {
 				return _axlegearInputData ?? (_axlegearInputData = CreateComponent(XMLNames.Component_Axlegear, AxlegearCreator));
@@ -117,7 +117,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		public IAngledriveInputData AngledriveInputData
+		public virtual IAngledriveInputData AngledriveInputData
 		{
 			get {
 				return _angledriveInputData ??
@@ -125,13 +125,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			}
 		}
 
-		public IEngineDeclarationInputData EngineInputData
+		public virtual IEngineDeclarationInputData EngineInputData
 		{
 			get { return _engineInputData ?? (_engineInputData = CreateComponent(XMLNames.Component_Engine, EngineCreator)); }
 		}
 
 
-		public IAuxiliariesDeclarationInputData AuxiliaryData
+		public virtual IAuxiliariesDeclarationInputData AuxiliaryData
 		{
 			get {
 				return _auxiliaryInputData ??
@@ -140,7 +140,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		public IRetarderInputData RetarderInputData
+		public virtual IRetarderInputData RetarderInputData
 		{
 			get {
 				return _retarderInputData ??
@@ -149,36 +149,39 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		public IAxlesDeclarationInputData AxlesDeclarationInputData
+		public virtual IAxlesDeclarationInputData AxlesDeclarationInputData
 		{
 			get {
 				return _axlesInputData ?? (_axlesInputData = CreateComponent(XMLNames.Component_AxleWheels, AxleWheelsCreator));
 			}
 		}
 
-		public ITyreDeclarationInputData Tyre
+		public virtual ITyreDeclarationInputData Tyre
 		{
 			get { return CreateComponent(XMLNames.AxleWheels_Axles_Axle_Tyre, TyreCreator); }
 		}
 
 		#endregion
 
-		protected IAirdragDeclarationInputData AirdragCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual IAirdragDeclarationInputData AirdragCreator(
+			string version, XmlNode componentNode, string sourceFile)
 		{
 			if (version == null) {
 				return new XMLDeclarationAirdragDataProviderV10(Vehicle, null, sourceFile);
 			}
+
 			return Factory.CreateAirdragData(version, Vehicle, componentNode, sourceFile);
 		}
 
-		protected IGearboxDeclarationInputData GearboxCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual IGearboxDeclarationInputData 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 ITorqueConverterDeclarationInputData TorqueConverterCreator(
+		protected virtual ITorqueConverterDeclarationInputData TorqueConverterCreator(
 			string version, XmlNode componentNode, string sourceFile)
 		{
 			if (version == null) {
@@ -188,12 +191,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return Factory.CreateTorqueconverterData(version, Vehicle, componentNode, sourceFile);
 		}
 
-		protected IAxleGearInputData AxlegearCreator(string version, XmlNode componentNode, string sourceFile)
+		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)
+		protected virtual IAngledriveInputData AngledriveCreator(string version, XmlNode componentNode, string sourceFile)
 		{
 			if (version == null) {
 				return new XMLDeclarationAngledriveDataProviderV10(Vehicle, componentNode, sourceFile);
@@ -202,12 +205,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return Factory.CreateAngledriveData(version, Vehicle, componentNode, sourceFile);
 		}
 
-		protected IEngineDeclarationInputData EngineCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual IEngineDeclarationInputData EngineCreator(string version, XmlNode componentNode, string sourceFile)
 		{
 			return Factory.CreateEngineData(version, Vehicle, componentNode, sourceFile);
 		}
 
-		protected IRetarderInputData RetarderCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual IRetarderInputData RetarderCreator(string version, XmlNode componentNode, string sourceFile)
 		{
 			if (version == null) {
 				return new XMLDeclarationRetarderDataProviderV10(Vehicle, componentNode, sourceFile);
@@ -216,7 +219,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			return Factory.CreateRetarderData(version, Vehicle, componentNode, sourceFile);
 		}
 
-		protected IAxlesDeclarationInputData AxleWheelsCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual IAxlesDeclarationInputData AxleWheelsCreator(
+			string version, XmlNode componentNode, string sourceFile)
 		{
 			var axles = Factory.CreateAxleWheels(version, Vehicle, componentNode, sourceFile);
 			axles.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML);
@@ -224,13 +228,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		protected ITyreDeclarationInputData TyreCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual ITyreDeclarationInputData TyreCreator(string version, XmlNode componentNode, string sourceFile)
 		{
 			return Factory.CreateTyre(version, Vehicle, componentNode, sourceFile);
 		}
 
 
-		protected IAuxiliariesDeclarationInputData AuxiliaryCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual IAuxiliariesDeclarationInputData AuxiliaryCreator(
+			string version, XmlNode componentNode, string sourceFile)
 		{
 			var aux = Factory.CreateAuxiliariesData(version, Vehicle, componentNode, sourceFile);
 			aux.Reader = Factory.CreateComponentReader(version, Vehicle, componentNode, VerifyXML);
@@ -238,11 +243,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		}
 
 
-		protected IVehicleComponentsDeclaration ComponentsCreator(string version, XmlNode componentNode, string sourcefile)
+		protected virtual IVehicleComponentsDeclaration 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;
 		}
 	}
+
+	// ---------------------------------------------------------------------------------------
+
+	public class XMLComponentReaderV20 : XMLComponentReaderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20;
+
+		public XMLComponentReaderV20(IXMLDeclarationVehicleData vehicle, XmlNode componentsNode, bool verifyXML) : base(
+			vehicle, componentsNode, verifyXML) { }
+	}
 }
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 a39bd6c35f21fc36d5c33e56939c0e97499bfb4c..75ab7c08f8dcd3a0f846f4b5075730da06423619 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationInputReader.cs
@@ -11,9 +11,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 {
 	public class XMLDeclarationInputReaderV10 : AbstractComponentReader, IXMLDeclarationInputDataReader
 	{
-		private XmlNode JobNode;
+		protected XmlNode JobNode;
 		protected IXMLDeclarationInputData InputData;
-		private IDeclarationJobInputData _jobData;
+		protected IDeclarationJobInputData _jobData;
 
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
@@ -29,19 +29,29 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		#region Implementation of IXMLDeclarationInputReader
 
-		public IDeclarationJobInputData JobData
+		public virtual IDeclarationJobInputData JobData
 		{
 			get { return _jobData ?? (_jobData = CreateComponent(XMLNames.VectoInputDeclaration, JobCreator)); }
 		}
 
 		#endregion
 
-		private IDeclarationJobInputData JobCreator(string version, XmlNode node, string arg3)
+		protected virtual IDeclarationJobInputData JobCreator(string version, XmlNode node, string arg3)
 		{
 			var job = Factory.CreateJobData(version, BaseNode, InputData, (InputData as IXMLResource).DataSource.SourceFile);
-			var jobNode = 
-			job.Reader = Factory.CreateJobReader(version, job, JobNode, VerifyXML);
+			var jobNode =
+				job.Reader = Factory.CreateJobReader(version, job, JobNode, VerifyXML);
 			return job;
 		}
 	}
+
+	// ---------------------------------------------------------------------------------------
+
+	public class XMLDeclarationInputReaderV20 : XMLDeclarationInputReaderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20;
+
+		public XMLDeclarationInputReaderV20(IXMLDeclarationInputData inputData, XmlNode baseNode, bool verifyXML) : base(inputData, baseNode, verifyXML) { }
+	}
+
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs
index 15cf87b1cc344c8c9bac29f0f3f413be0146b7c9..959a41b7a3248b3ac336e7fdcf085edcb169e0ef 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLJobDataReader.cs
@@ -13,13 +13,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		public const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V10;
 
 		protected IXMLDeclarationJobInputData JobData;
-		private XmlNode JobNode;
-		private IVehicleDeclarationInputData _vehicle;
+		protected XmlNode JobNode;
+		protected IVehicleDeclarationInputData _vehicle;
 
 		[Inject]
 		public IDeclarationInjectFactory Factory { protected get; set; }
 
-		public XMLJobDataReaderV10(IXMLDeclarationJobInputData jobData, XmlNode jobNode, bool verifyXML) : base (jobData, jobNode, verifyXML)
+		public XMLJobDataReaderV10(IXMLDeclarationJobInputData jobData, XmlNode jobNode, bool verifyXML) : base(
+			jobData, jobNode, verifyXML)
 		{
 			JobNode = jobNode;
 			JobData = jobData;
@@ -27,15 +28,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		#region Implementation of IXMLJobDataReader
 
-		public IVehicleDeclarationInputData CreateVehicle
+		public virtual IVehicleDeclarationInputData CreateVehicle
 		{
 			get { return _vehicle ?? (_vehicle = CreateComponent(XMLNames.Component_Vehicle, VehicleCreator)); }
 		}
 
-
 		#endregion
 
-		private IVehicleDeclarationInputData VehicleCreator(string version, XmlNode vehicleNode, string sourceFile)
+		protected virtual IVehicleDeclarationInputData VehicleCreator(string version, XmlNode vehicleNode, string sourceFile)
 		{
 			var vehicle = Factory.CreateVehicleData(version, JobData, vehicleNode, sourceFile);
 			vehicle.ComponentReader = Factory.CreateComponentReader(version, vehicle, vehicleNode, VerifyXML);
@@ -43,6 +43,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 			vehicle.PTOReader = Factory.CreatePTOReader(version, vehicle, vehicleNode, VerifyXML);
 			return vehicle;
 		}
+	}
+
+	// ---------------------------------------------------------------------------------------
+
+	public class XMLJobDataReaderV20 : XMLJobDataReaderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20;
 
+		public XMLJobDataReaderV20(IXMLDeclarationJobInputData jobData, XmlNode jobNode, bool verifyXML) : base(
+			jobData, jobNode, verifyXML) { }
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLPTOReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLPTOReader.cs
index 62a17a9da3a443539272208b0d8feb4ff416465f..17b0769c6a53f7ee882ac0f56c9cbce67de1ec78 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLPTOReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLPTOReader.cs
@@ -16,7 +16,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		public IDeclarationInjectFactory Factory { protected get; set; }
 
 		protected IXMLDeclarationVehicleData Vehicle;
-		private IPTOTransmissionInputData _ptoInputData;
+		protected IPTOTransmissionInputData _ptoInputData;
 
 
 		public XMLPTOReaderV10(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, bool verifyXML) : base(
@@ -27,16 +27,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 
 		#region Implementation of IXMLPTOReader
 
-		public IPTOTransmissionInputData PTOInputData
+		public virtual IPTOTransmissionInputData PTOInputData
 		{
 			get { return _ptoInputData ?? (_ptoInputData = CreateComponent(XMLNames.Vehicle_PTO, PTOCreator)); }
 		}
 
 		#endregion
 
-		protected IPTOTransmissionInputData PTOCreator(string version, XmlNode componentNode, string sourceFile)
+		protected virtual IPTOTransmissionInputData PTOCreator(string version, XmlNode componentNode, string sourceFile)
 		{
 			return Factory.CreatePTOData(version, Vehicle, componentNode, sourceFile);
 		}
 	}
+
+	// ---------------------------------------------------------------------------------------
+
+	public class XMLPTOReaderV20 : XMLPTOReaderV10
+	{
+		public new const string NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20;
+
+		public XMLPTOReaderV20(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, bool verifyXML) : base(
+			vehicle, componentNode, verifyXML) { }
+	}
 }