diff --git a/VECTO3GUI2020/Helper/XMLExtension.cs b/VECTO3GUI2020/Helper/XMLExtension.cs
index c8f11753b6efcad28890a9b62b4a4593d0dce88b..dec71f88112c2ef10db48cbf3605d66676ade156 100644
--- a/VECTO3GUI2020/Helper/XMLExtension.cs
+++ b/VECTO3GUI2020/Helper/XMLExtension.cs
@@ -6,12 +6,12 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.Utils;
 using VECTO3GUI2020.Util.XML;
-using VECTO3GUI2020.Util.XML.Interfaces;
+using VECTO3GUI2020.Util.XML.Components;
 
 
 namespace VECTO3GUI2020.Helper
 {
-	public static class XMLExtension
+    public static class XMLExtension
 	{
 		
 		public static XElement CreateSignatureElement(this IXMLComponentWriter componentWriter, XNamespace nameSpace, string uri, DigestData digestData, bool hash = false)
diff --git a/VECTO3GUI2020/Ninject/Factories/FactoryModule.cs b/VECTO3GUI2020/Ninject/Factories/FactoryModule.cs
index bbde4ae5a62a40f8113a32198cc66cfef56e445c..0cb0972c5f07f435817499fe39c5e93a7ce4a28b 100644
--- a/VECTO3GUI2020/Ninject/Factories/FactoryModule.cs
+++ b/VECTO3GUI2020/Ninject/Factories/FactoryModule.cs
@@ -1,16 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Ninject.Extensions.Factory;
-using Ninject.Modules;
+using Ninject.Extensions.Factory;
 using TUGraz.VectoCore;
 using VECTO3GUI2020.Ninject.Util;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Interfaces.Document;
 using VECTO3GUI2020.ViewModel.Interfaces.JobEdit;
-using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components;
 using VECTO3GUI2020.ViewModel.MultiStage.Interfaces;
 
 namespace VECTO3GUI2020.Ninject.Factories
diff --git a/VECTO3GUI2020/Ninject/Factories/MultiStageViewModelFactory.cs b/VECTO3GUI2020/Ninject/Factories/MultiStageViewModelFactory.cs
index 514e90305a4e9c8759d99e9ee833769bed3c7771..b60790bcd16fd8ded95b9825fcf61b46dcfa0a4c 100644
--- a/VECTO3GUI2020/Ninject/Factories/MultiStageViewModelFactory.cs
+++ b/VECTO3GUI2020/Ninject/Factories/MultiStageViewModelFactory.cs
@@ -70,6 +70,11 @@ namespace VECTO3GUI2020.Ninject.Factories
 			return _vehicleViewModelFactory.CreateVehicleViewModel(consolidatedVehicleData, null);
 		}
 
+		public IMultistageVehicleViewModel GetInterimStageVehicleViewModel(IVehicleDeclarationInputData inputData)
+		{
+			return _vehicleViewModelFactory.CreateVehicleViewModel(null, vehicleInput: inputData) as IMultistageVehicleViewModel;
+		}
+
         public IManufacturingStageViewModel GetManufacturingStageViewModel(
             IManufacturingStageInputData consolidatedManufacturingStageInputData, bool exempted)
         {
diff --git a/VECTO3GUI2020/Ninject/Factories/XMLWriterFactoryModule.cs b/VECTO3GUI2020/Ninject/Factories/XMLWriterFactoryModule.cs
index fa51e19417d7241a54d4ffc791dc42681abb2f67..f6ec58d25398b618f779c65dc8b4c3936c84773a 100644
--- a/VECTO3GUI2020/Ninject/Factories/XMLWriterFactoryModule.cs
+++ b/VECTO3GUI2020/Ninject/Factories/XMLWriterFactoryModule.cs
@@ -1,4 +1,5 @@
 using System;
+using System.Diagnostics;
 using System.Xml.Linq;
 using Ninject.Extensions.Factory;
 using Ninject.Modules;
@@ -6,19 +7,22 @@ using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCore.Utils;
 using TUGraz.VectoCore.Utils.Ninject;
 using VECTO3GUI2020.Ninject.Util;
-using VECTO3GUI2020.Util.XML.Implementation;
-using VECTO3GUI2020.Util.XML.Implementation.ComponentWriter;
-using VECTO3GUI2020.Util.XML.Implementation.DocumentWriter;
-using VECTO3GUI2020.Util.XML.Interfaces;
+using VECTO3GUI2020.Resources.XML;
+using VECTO3GUI2020.Util.XML;
+using VECTO3GUI2020.Util.XML.Components;
+
+using VECTO3GUI2020.Util.XML.Vehicle;
 
 namespace VECTO3GUI2020.Ninject.Factories
 {
     public class XMLWriterFactoryModule : NinjectModule
 	{
-		private const string scope = nameof(IXMLWriterFactoryInternal);
-        public override void Load()
+		private const string vehicleScope = nameof(IXMLWriterFactoryInternal);
+		public override void Load()
 		{
-			Bind<IXMLWriterFactory>().To<XMLWriterFactory>();
+			Bind<IXMLWriterFactory>().To<XMLWriterFactory>().InSingletonScope();
+
+
 			Bind<IXMLWriterFactoryInternal>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(false, new [] {
 				new CombineArgumentsToNameInstanceProvider.MethodSettings() {
 					combineToNameDelegate = ((args) => {
@@ -27,112 +31,147 @@ namespace VECTO3GUI2020.Ninject.Factories
 						}
 						throw new ArgumentException();
 					}),
-					methods = new []{typeof(IXMLWriterFactoryInternal).GetMethod(nameof(IXMLWriterFactoryInternal.CreateWriter))},
+					methods = new [] {
+						typeof(IXMLWriterFactoryInternal).GetMethod(nameof(IXMLWriterFactoryInternal.CreateWriter)),
+                        typeof(IXMLWriterFactoryInternal).GetMethod(nameof(IXMLWriterFactoryInternal.CreateComponentsWriter)),
+						typeof(IXMLWriterFactoryInternal).GetMethod(nameof(IXMLWriterFactoryInternal.CreateComponentWriter))
+                    },
 					skipArguments = 1,
 					takeArguments = 1,
 				}
-			})).Named(scope);
+			})).InSingletonScope().Named(vehicleScope);
 
-			//Array.ForEach(
-			//    XMLVehicleWriter_v2_10.SUPPORTEDVERSIONS,
-			//    sv =>
-			//        Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_10>().Named(sv));
-			Array.ForEach(XMLVehicleWriter_v2_10.SUPPORTEDVERSIONS,
-				sv => Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_10>().WhenParentNamed(scope).Named(GetName(sv.version, sv.type)));
+			Array.ForEach(XMLCompletedBusVehicleWriterConventional.SUPPORTEDVERSIONS, sv => AddVehicleWriterBinding<XMLCompletedBusVehicleWriterConventional>(sv.version, sv.type));
 
+			Array.ForEach(XMLCompletedBusVehicleWriterExempted.SUPPORTEDVERSIONS, sv => AddVehicleWriterBinding<XMLCompletedBusVehicleWriterExempted>(sv.version, sv.type));
+            #region Vehicle
+            AddVehicleWriterBinding<XMLCompletedBusVehicleWriterHEV>(XMLCompletedBusVehicleWriterHEV.VERSION);
+			AddVehicleWriterBinding<XMLCompletedBusVehicleWriterPEV>(XMLCompletedBusVehicleWriterPEV.VERSION);
+			AddVehicleWriterBinding<XMLCompletedBusVehicleWriterIEPC>(XMLCompletedBusVehicleWriterIEPC.VERSION);
 
+            #endregion Vehicle
 
-			#region
+            #region Components
+            AddComponentsWriterBinding<XMLCompletedBusComponentWriter_Conventional>(XMLCompletedBusComponentWriter_Conventional.VERSION);
+            AddComponentsWriterBinding<XMLCompletedBusComponentsWriter_xEV>(XMLCompletedBusComponentsWriter_xEV.VERSION);
 
-			//Array.ForEach(
-			//    XMLDeclarationJobWriter_v1_0.SUPPORTED_VERSIONS,
-			//    sv =>
-			//        Bind<IXMLDeclarationJobWriter>().To<XMLDeclarationJobWriter_v1_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLDeclarationJobWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv =>
-			//        Bind<IXMLDeclarationJobWriter>().To<XMLDeclarationJobWriter_v2_0>().Named(sv));
+            #endregion
 
-			//Array.ForEach(
-			//    XMLPTOWriter_v1_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLPTOWriter_v1_0>().Named(sv));
+            #region Airdrag
+            AddComponentWriterBinding<XMLAirDragWriter_v2_0>(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20, XMLTypes.AirDragDataDeclarationType);
 
-			//Array.ForEach(
-			//    XMLPTOWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLPTOWriter_v2_0>().Named(sv));
+            #endregion
 
-			//Array.ForEach(
-			//    XMLVehicleWriter_v1_0.SUPPORTEDVERSIONS,
-			//    (sv) =>
-			//        Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v1_0>().Named(sv));
+            #region BusAux
+			AddBusAuxWriterBinding<XMLCompletedBusAuxiliariesWriterConventional>(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.AUX_Conventional_CompletedBusType);
+            AddBusAuxWriterBinding<XMLCompletedBusAuxiliariesWriter_xEV>(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.AUX_xEV_CompletedBusType);
+			#endregion
 
-			//Array.ForEach(
-			//    XMLVehicleWriter_v2_0.SUPPORTEDVERSIONS,
-			//    sv =>
-			//        Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_0>().Named(sv));
 
+            #region
 
-			//Array.ForEach(
-			//    XMLComponentsWriter_v1_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v1_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLComponentsWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v2_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLEngineWriter_v1_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v1_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLEngineWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v2_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLGearboxWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLGearboxWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLComponentsWriter_v1_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v1_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLRetarderWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLRetarderWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLComponentsWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v2_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLAxleGearWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLAxleGearWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLEngineWriter_v1_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v1_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLAxleWheelsWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelsWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLEngineWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v2_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLAxleWheelWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLGearboxWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLGearboxWriter_v2_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLTyreWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLRetarderWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLRetarderWriter_v2_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLTyreWriter_v2_3.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_3>().Named(sv));
+            //Array.ForEach(
+            //    XMLAxleGearWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLAxleGearWriter_v2_0>().Named(sv));
 
-			//Array.ForEach(
-			//    XMLAuxiliariesWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLAuxiliariesWriter_v2_0>().Named(sv));
-			//Array.ForEach(
-			//    XMLAirDragWriter_v2_0.SUPPORTED_VERSIONS,
-			//    sv => Bind<IXMLComponentWriter>().To<XMLAirDragWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLAxleWheelsWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelsWriter_v2_0>().Named(sv));
 
-			//Bind<IXMLBusAuxiliariesWriter>().To<XMLBusAuxiliariesWriterMultistage>();
+            //Array.ForEach(
+            //    XMLAxleWheelWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelWriter_v2_0>().Named(sv));
 
-			#endregion
+            //Array.ForEach(
+            //    XMLTyreWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_0>().Named(sv));
 
-		}
+            //Array.ForEach(
+            //    XMLTyreWriter_v2_3.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_3>().Named(sv));
+
+            //Array.ForEach(
+            //    XMLAuxiliariesWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLAuxiliariesWriter_v2_0>().Named(sv));
+            //Array.ForEach(
+            //    XMLAirDragWriter_v2_0.SUPPORTED_VERSIONS,
+            //    sv => Bind<IXMLComponentWriter>().To<XMLAirDragWriter_v2_0>().Named(sv));
+
+            //Bind<IXMLBusAuxiliariesWriter>().To<XMLCompletedBusAuxiliariesWriterConventional>();
+
+            #endregion
+
+        }
 
         public string GetName(XNamespace version, string xsdType)
 		{
 			return XMLHelper.CombineNamespace(version, xsdType);
 		}
+
+		private void AddVehicleWriterBinding<TConcrete>((XNamespace ns, string xsdType) version) where TConcrete : class, IXMLVehicleWriter
+		{
+			Debug.WriteLine($"Create Binding for {typeof(TConcrete)} named '{GetName(version.ns, version.xsdType)}'");
+			Bind<IXMLVehicleWriter>().To<TConcrete>().WhenParentNamed(vehicleScope).Named(GetName(version.ns, version.xsdType));
+		}
+        private void AddVehicleWriterBinding<TConcrete>(XNamespace version, string xsdType) where TConcrete : class, IXMLVehicleWriter
+		{
+			Debug.WriteLine($"Create Binding for {typeof(TConcrete)} named '{GetName(version, xsdType)}'");
+			Bind<IXMLVehicleWriter>().To<TConcrete>().WhenParentNamed(vehicleScope).Named(GetName(version, xsdType));
+		}
+		private void AddComponentsWriterBinding<TConcrete>((XNamespace version, string xsdType) version)
+			where TConcrete : class, IXMLComponentsWriter
+		{
+			Debug.WriteLine($"Create Binding for {typeof(TConcrete)} named '{GetName(version.version, version.xsdType)}'");
+			Bind<IXMLComponentsWriter>().To<TConcrete>().WhenParentNamed(vehicleScope).Named(GetName(version.version, version.xsdType));
+		}
+
+        private void AddComponentsWriterBinding<TConcrete>(XNamespace version, string xsdType)
+			where TConcrete : class, IXMLComponentsWriter
+		{
+			Debug.WriteLine($"Create Binding for {typeof(TConcrete)} named '{GetName(version, xsdType)}'");
+			Bind<IXMLComponentsWriter>().To<TConcrete>().WhenParentNamed(vehicleScope).Named(GetName(version, xsdType));
+        }
+
+		private void AddComponentWriterBinding<TConcrete>(XNamespace version, string xsdType) where TConcrete : class, IXMLComponentWriter
+        {
+			Debug.WriteLine($"Create Binding for {typeof(TConcrete)} named '{GetName(version, xsdType)}'");
+			Bind<IXMLComponentWriter>().To<TConcrete>().WhenParentNamed(vehicleScope).Named(GetName(version, xsdType));
+		}
+
+		private void AddBusAuxWriterBinding<TConcrete>(XNamespace version, string xsdType)
+			where TConcrete : class, IXMLBusAuxiliariesWriter
+		{
+			Debug.WriteLine($"Create Binding for {typeof(TConcrete)} named '{GetName(version, xsdType)}'");
+			Bind<IXMLBusAuxiliariesWriter>().To<TConcrete>().WhenParentNamed(vehicleScope).Named(GetName(version, xsdType));
+        }
 	}
 }
diff --git a/VECTO3GUI2020/Ninject/IMultistageDependencies.cs b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs
index 80bbddff12525f9211678b13ef5a63c0c0ec26bd..f98350fd68c474485fc609526b5bc18ceb85e43b 100644
--- a/VECTO3GUI2020/Ninject/IMultistageDependencies.cs
+++ b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs
@@ -4,12 +4,12 @@ using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory;
 using TUGraz.VectoCore.Utils;
 using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
+using VECTO3GUI2020.Util.XML;
 using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components;
 
 namespace VECTO3GUI2020.Ninject
 {
-	public interface IMultistageDependencies
+    public interface IMultistageDependencies
 	{
 		Lazy<IDialogHelper> DialogHelperLazy { get; }
 
diff --git a/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs
index 567b55df86d62afaa788df08f056cc3449884b4c..f308a947b43678177f4cffe9b72d8b293f3e93b7 100644
--- a/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs
+++ b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs
@@ -3,13 +3,13 @@ using TUGraz.VectoCore.InputData.FileIO.XML;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory;
 using TUGraz.VectoCore.Utils;
 using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
+using VECTO3GUI2020.Util.XML;
 using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components;
 using VECTO3GUI2020.ViewModel.MultiStage.Interfaces;
 
 namespace VECTO3GUI2020.Ninject
 {
-	public class MultistageLazyDependencies : IMultistageDependencies
+    public class MultistageLazyDependencies : IMultistageDependencies
 	{
 		private readonly Lazy<IXMLWriterFactory> _xmlWriterFactory;
 		private readonly Lazy<IDeclarationInjectFactory> _injectFactory;
diff --git a/VECTO3GUI2020/Resources/XML/XMLTypes.cs b/VECTO3GUI2020/Resources/XML/XMLTypes.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2ef421619ca75f9ddc74482f223fb2d48b9073ba
--- /dev/null
+++ b/VECTO3GUI2020/Resources/XML/XMLTypes.cs
@@ -0,0 +1,28 @@
+namespace VECTO3GUI2020.Resources.XML
+{
+	public static class XMLTypes
+	{
+		
+
+		#region Components
+		public const string Components_xEV_CompletedBusType = "Components_xEV_CompletedBusType";
+		public const string Components_Conventional_CompletedBusType = "Components_Conventional_CompletedBusType";
+		#endregion 
+
+
+		#region Airdrag
+		public const string AirDragDataDeclarationType = "AirDragDataDeclarationType";
+
+
+		#endregion
+
+
+		#region BusAux
+
+		public const string AUX_Conventional_CompletedBusType = "AUX_Conventional_CompletedBusType";
+		public const string AUX_xEV_CompletedBusType = "AUX_xEV_CompletedBusType";
+
+        #endregion
+    }
+}
+
diff --git a/VECTO3GUI2020/Util/XML/Components/IXMLComponentWriter.cs b/VECTO3GUI2020/Util/XML/Components/IXMLComponentWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..245c2eb7eb79b6c718b2c51217757e0acbb87707
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/IXMLComponentWriter.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+
+namespace VECTO3GUI2020.Util.XML.Components
+{
+    public interface IXMLComponentWriter
+    {
+        XElement GetElement();
+		IXMLComponentWriter Init(IComponentInputData inputData);
+	}
+}
diff --git a/VECTO3GUI2020/Util/XML/Components/IXMLComponentsWriter.cs b/VECTO3GUI2020/Util/XML/Components/IXMLComponentsWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c63910bcbb5c108d5092cf3160f4383cde92c659
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/IXMLComponentsWriter.cs
@@ -0,0 +1,11 @@
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+
+namespace VECTO3GUI2020.Util.XML.Components
+{
+    public interface IXMLComponentsWriter
+    {
+        XElement GetComponents();
+		IXMLComponentsWriter Init(IVehicleComponentsDeclaration inputData);
+	}
+}
\ No newline at end of file
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLAirDragWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLAirDragWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..23f2bc795a0e31689c24ae3730158cd73ea5c6ed
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLAirDragWriter.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Linq;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using VECTO3GUI2020.Helper;
+using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
+
+namespace VECTO3GUI2020.Util.XML.Components
+{
+    public abstract class XMLAirDragWriter : IXMLComponentWriter
+    {
+        protected IAirdragDeclarationInputData _inputData;
+        protected XNamespace _defaultNamespace;
+        protected XElement _xElement;
+        protected string _uri = "ToDO-Add-id";
+
+        public XMLAirDragWriter()
+        {
+           
+            if (_uri == null)
+            {
+                _uri = "AirdragComponent" + Guid.NewGuid().ToString("n").Substring(0, 20);
+            }
+        }
+
+        public XElement GetElement()
+        {
+            
+            if (_xElement == null)
+            {
+
+                Initialize();
+                CreateDataElements();
+                var signatureElemnet = this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue);
+                _xElement.Add(signatureElemnet);
+            }
+
+            return _xElement;
+        }
+
+		public IXMLComponentWriter Init(IComponentInputData inputData)
+		{
+			_inputData = inputData as IAirdragDeclarationInputData;
+			_uri = inputData.DigestValue?.Reference?.Replace("#", "");
+
+			return this;
+		}
+
+		public XElement GetElement(XNamespace wrapperNamespace)
+        {
+            throw new NotImplementedException();
+        }
+
+        protected abstract void Initialize();
+        protected abstract void CreateDataElements();
+
+
+    }
+
+    public class XMLAirDragWriter_v2_0 : XMLAirDragWriter
+    {
+        public static readonly string[] SUPPORTED_VERSIONS = {
+            typeof(AirDragViewModel_v2_0).ToString(),
+            typeof(MultistageAirdragViewModel).ToString()
+        };
+        public XMLAirDragWriter_v2_0() : base() { }
+        protected override void CreateDataElements()
+        {
+            var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
+            _xElement.Add(dataElement);
+
+            dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri), new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, "v2.0:" +
+             XMLNames.AirDrag_Data_Type_Attr));
+
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date));
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion));
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_CdxA_0, _inputData.AirDragArea_0.ToXMLFormat(2)));
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_TransferredCDxA, _inputData.TransferredAirDragArea.ToXMLFormat(2)));
+            dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_DeclaredCdxA, _inputData.AirDragArea.ToXMLFormat(2)));
+
+
+            dataElement.DescendantsAndSelf().Where(e => string.IsNullOrEmpty(e.Value)).Remove();
+        }
+
+        protected override void Initialize()
+        {
+            _defaultNamespace = XMLNamespaces.V20;
+            _xElement = new XElement(XMLNames.Component_AirDrag);
+        }
+    }
+}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLAuxiliariesWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLAuxiliariesWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ba6af87999cfa0b0118edbe3a34bcbd15371cd8c
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLAuxiliariesWriter.cs
@@ -0,0 +1,70 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Resources;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLAuxiliariesWriter : IXMLComponentWriter
+//    {
+//        protected XNamespace _defaultNamespace;
+//        protected XElement _xElement;
+//        protected IAuxiliariesDeclarationInputData _inputData;
+
+//        public XMLAuxiliariesWriter(IAuxiliariesDeclarationInputData inputData)
+//        {
+//            _inputData = inputData;
+//        }
+
+//        public XElement GetElement()
+//        {
+//            if (_xElement == null)
+//            {
+//                Initialize();
+//                CreateElements();
+//            }
+
+//            return _xElement;
+//        }
+//        public abstract void Initialize();
+
+//        public abstract void CreateElements();
+//    }
+
+//    public class XMLAuxiliariesWriter_v2_0 : XMLAuxiliariesWriter
+//    {
+
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(AuxiliariesViewModel_v2_0).ToString()
+//        };
+
+//        public XMLAuxiliariesWriter_v2_0(IAuxiliariesDeclarationInputData inputData) : base(inputData) { }
+
+//        public override void CreateElements()
+//        {
+//            var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
+//            _xElement.Add(dataElement);
+
+//            dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Auxiliaries_Type_Attr_DataDeclarationType));
+
+//            foreach (var auxiliary in _inputData.Auxiliaries)
+//            {
+//                var auxElement = new XElement(_defaultNamespace + auxiliary.Type.ToString());
+//                auxElement.Add(new XElement(_defaultNamespace + XMLNames.Auxiliaries_Auxiliary_Technology,
+//                    auxiliary.Technology[0]));
+//                dataElement.Add(auxElement);
+//            }
+//        }
+
+//        public override void Initialize()
+//        {
+//            _defaultNamespace = XMLNamespaces.V20;
+//            _xElement = new XElement(_defaultNamespace + XMLNames.Component_Auxiliaries);
+//        }
+//    }
+//}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLAxleGearWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLAxleGearWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c8bbc355a394caa2598bbc9e5bad0a4dbb15d0a3
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLAxleGearWriter.cs
@@ -0,0 +1,93 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Data;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Models;
+//using TUGraz.VectoCommon.Resources;
+//using TUGraz.VectoCommon.Utils;
+//using VECTO3GUI2020.Helper;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+////    public abstract class XMLAxleGearWriter : IXMLComponentWriter
+////    {
+////        protected XElement _xElement;
+////        protected IAxleGearInputData _inputData;
+////        protected XNamespace _defaultNamespace;
+////        protected string _uri = "ToDO-ADD_URI";
+
+////        public XMLAxleGearWriter(IAxleGearInputData inputData)
+////        {
+////            _inputData = inputData;
+
+
+////        }
+
+////        public abstract void Initialize();
+////        public abstract void CreateDataElements();
+
+////        public XElement GetElement()
+////        {
+////            if (_xElement == null)
+////            {
+////                Initialize();
+////                CreateDataElements();
+////                _xElement.Add(this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue));
+////            }
+////            return _xElement;
+////        }
+////    }
+
+////    public class XMLAxleGearWriter_v2_0 : XMLAxleGearWriter
+////    {
+////        public static readonly string[] SUPPORTED_VERSIONS = {
+////            typeof(AxleGearViewModel_v2_0).ToString()
+////        };
+
+
+////        public XMLAxleGearWriter_v2_0(IAxleGearInputData inputData) : base(inputData)
+////        {
+
+////        }
+
+
+////        public override void Initialize()
+////        {
+////            _defaultNamespace = XMLNamespaces.V20;
+////            _xElement = new XElement(_defaultNamespace + XMLNames.Component_Axlegear);
+////        }
+
+////        public override void CreateDataElements()
+////        {
+////            var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
+////            _xElement.Add(dataElement);
+
+////            dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
+////            dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.AxleGear_Type_Attr));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Axlegear_LineType, _inputData.LineType.ToXMLFormat()));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.AngleDrive_Ratio, _inputData.Ratio.ToXMLFormat(3)));
+////            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationMethod, _inputData.CertificationMethod.ToXMLFormat()));
+
+////            var torqueLossMap = new XElement(_defaultNamespace + XMLNames.Axlegear_TorqueLossMap);
+////            dataElement.Add(torqueLossMap);
+////            foreach (DataRow row in _inputData.LossMap.Rows)
+////            {
+////                var entry = new XElement(_defaultNamespace + XMLNames.Axlegear_TorqueLossMap_Entry);
+////                entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputSpeed_Attr, row[0].ToString()));
+////                entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputTorque_Attr, row[1].ToString()));
+////                entry.Add(new XAttribute(XMLNames.TransmissionLossmap_TorqueLoss_Attr, row[2].ToString()));
+////                torqueLossMap.Add(entry);
+////            }
+////        }
+////    }
+////}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLAxleWheelWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLAxleWheelWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a8d313563490d22522820afc0bbb647440a06ee3
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLAxleWheelWriter.cs
@@ -0,0 +1,68 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Resources;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLAxleWheelWriter : IXMLComponentWriter
+//    {
+//        protected IXMLWriterFactory _writerFactory;
+//        protected IAxleDeclarationInputData _inputData;
+
+//        protected XNamespace _defaultNamespace;
+
+//        protected XElement _xElement;
+//        public XMLAxleWheelWriter(IAxleDeclarationInputData inputData, IXMLWriterFactory writerFactory)
+//        {
+//            _inputData = inputData;
+//            _writerFactory = writerFactory;
+//        }
+
+//        public XElement GetElement()
+//        {
+//            if (_xElement == null)
+//            {
+//                Initialize();
+//                CreateElement();
+//            }
+
+//            return _xElement;
+//        }
+
+//        protected abstract void CreateElement();
+//        protected abstract void Initialize();
+//    }
+
+
+//    public class XMLAxleWheelWriter_v2_0 : XMLAxleWheelWriter
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(AxleViewModel_v2_0).ToString()
+//        };
+//        public XMLAxleWheelWriter_v2_0(IAxleDeclarationInputData inputData, IXMLWriterFactory writerFactory) : base(inputData, writerFactory) { }
+
+//        protected override void CreateElement()
+//        {
+//            _xElement.Add(new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, 0));//_inputData.AxleNumber));
+//            _xElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Axle_Type_Attr_AxleDataDeclarationType));
+//            _xElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_AxleType, _inputData.AxleType));
+//            _xElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_TwinTyres, _inputData.TwinTyres));
+//            _xElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Steered, false)); //_inputData.Steered));
+
+//            _xElement.Add(_writerFactory.CreateComponentWriter(_inputData.Tyre).GetElement());
+//        }
+
+//        protected override void Initialize()
+//        {
+
+//            _defaultNamespace = XMLNamespaces.V20;
+//            _xElement = new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle);
+//        }
+//    }
+//}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLAxleWheelsWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLAxleWheelsWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7479de6ca35ea960237ecc15c0d42c3827ce34b6
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLAxleWheelsWriter.cs
@@ -0,0 +1,71 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Resources;
+//using VECTO3GUI2020.Helper;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLAxleWheelsWriter : IXMLComponentWriter
+//    {
+//        protected XElement _xElement;
+//        protected XNamespace _defaultNameSpace;
+//        protected IAxlesDeclarationInputData _inputData;
+//        protected IXMLWriterFactory _writerFactory;
+
+//        protected XMLAxleWheelsWriter(IAxlesDeclarationInputData inputData, IXMLWriterFactory writerFactory)
+//        {
+//            _inputData = inputData;
+//            _writerFactory = writerFactory;
+//        }
+
+//        public XElement GetElement()
+//        {
+//            if (_xElement == null)
+//            {
+//                Initialize();
+//                CreateDataElements();
+//            }
+
+//            return _xElement;
+//        }
+
+//        public abstract void CreateDataElements();
+//        public abstract void Initialize();
+//    }
+
+
+//    public class XMLAxleWheelsWriter_v2_0 : XMLAxleWheelsWriter
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(AxleWheelsViewModel_v2_0).ToString()
+//        };
+//        public override void CreateDataElements()
+//        {
+//            _xElement.Add(new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper));
+//            var dataElement = _xElement.LastNode as XElement;
+
+//            dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.AxleWheels_Type_Attr_AxleWheelsDeclarationType));
+
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.AxleWheels_Axles));
+//            var axles = dataElement.LastNode as XElement;
+//            foreach (var axle in _inputData.AxlesDeclaration)
+//            {
+//                axles.Add(_writerFactory.CreateComponentWriter(axle).GetElement());
+//            }
+//        }
+
+//        public override void Initialize()
+//        {
+//            _defaultNameSpace = XMLNamespaces.V20;
+//            _xElement = new XElement(_defaultNameSpace + XMLNames.Component_AxleWheels);
+//        }
+
+//        public XMLAxleWheelsWriter_v2_0(IAxlesDeclarationInputData inputData, IXMLWriterFactory writerFactory) : base(inputData, writerFactory) { }
+//    }
+//}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLCompletedBusAuxiliariesWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLCompletedBusAuxiliariesWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2137e9b6a4ec292aa66638ebf92df2c7220a5e49
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLCompletedBusAuxiliariesWriter.cs
@@ -0,0 +1,189 @@
+using System.Linq;
+using System.Xml.Linq;
+
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.OutputData.XML.GroupWriter;
+using TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration;
+using VECTO3GUI2020.Resources.XML;
+
+namespace VECTO3GUI2020.Util.XML.Components
+{
+    public interface IXMLBusAuxiliariesWriter
+	{
+		XElement GetElement();
+		IXMLBusAuxiliariesWriter Init(IBusAuxiliariesDeclarationData inputData);
+	}
+
+    public abstract class XMLCompletedBusAuxiliariesWriter : IXMLBusAuxiliariesWriter
+    {
+        protected IBusAuxiliariesDeclarationData _inputData;
+        protected XElement _xElement;
+		protected readonly IGroupWriterFactory _groupWriterFactory;
+
+		protected abstract string AuxType { get; }
+		protected XNamespace DefaultNamespace => XMLNamespaces.V24;
+
+		protected XMLCompletedBusAuxiliariesWriter(IGroupWriterFactory groupWriterFactory)
+		{
+			_groupWriterFactory = groupWriterFactory;
+		}
+
+        public XElement GetElement()
+        {
+            if (_xElement == null)
+            {
+				if (_inputData == null) {
+					throw new VectoException($"Writer not initialized call {nameof(Init)} first");
+				}
+                Initialize();
+                CreateElements();
+            }
+
+            return _xElement;
+        }
+
+		public IXMLBusAuxiliariesWriter Init(IBusAuxiliariesDeclarationData inputData)
+		{
+			_inputData = inputData;
+			return this;
+		}
+
+		public XElement GetElement(XNamespace wrapperNamespace)
+        {
+            throw new System.NotImplementedException();
+        }
+
+		protected void Initialize()
+		{
+			_xElement = new XElement(DefaultNamespace + XMLNames.Component_Auxiliaries);
+        }
+
+        public abstract void CreateElements();
+    }
+
+
+
+    public class XMLCompletedBusAuxiliariesWriterConventional : XMLCompletedBusAuxiliariesWriter
+    {
+		protected override string AuxType => XMLTypes.AUX_Conventional_CompletedBusType;
+
+		public XMLCompletedBusAuxiliariesWriterConventional(IGroupWriterFactory groupWriterFactory) : base(groupWriterFactory)
+        {
+
+        }
+
+        #region Overrides of XMLCompletedBusAuxiliariesWriter
+
+		public override void CreateElements()
+        {
+            CreateElementsWithGroupWriters();
+		}
+
+        private void CreateElementsWithGroupWriters()
+        {
+
+            var dataElement = new XElement(DefaultNamespace + XMLNames.ComponentDataWrapper,
+                new XAttribute("xmlns", XMLNamespaces.V24),
+                new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, AuxType));
+
+            if (_inputData.ElectricConsumers != null)
+            {
+                var electricSystemElement = new XElement(DefaultNamespace + XMLNames.BusAux_ElectricSystem);
+                var ledLightsElement = new XElement(DefaultNamespace + "LEDLights");
+                ledLightsElement.Add(
+                    // ReSharper disable once CoVariantArrayConversion
+                    _groupWriterFactory.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxElectricSystemLightsGroup, DefaultNamespace)
+                        .GetGroupElements(_inputData));
+                electricSystemElement.Add(ledLightsElement);
+                dataElement.Add(electricSystemElement);
+
+            }
+
+            if (_inputData.HVACAux != null)
+            {
+                var hvacElement = new XElement(DefaultNamespace + "HVAC");
+				hvacElement.Add(_groupWriterFactory
+					.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxHVACConventionalSequenceGroup,
+						DefaultNamespace)
+					.GetGroupElements(_inputData));
+				dataElement.Add(hvacElement);
+            }
+
+            _xElement.Add(dataElement);
+
+        }
+
+        private XElement GetHeatPumpTypeElement(string xmlName, string value)
+        {
+            if (value == "~null~")
+            {
+                value = null;
+            }
+            return new XElement(DefaultNamespace + xmlName, value);
+        }
+
+        private XElement GetHeatPumpGroupElement(string xmlNameWrapper, string xmlNameFirstComponent,
+            string xmlNameSecondComponent, string firstValue, string secondValue)
+        {
+            var element = new XElement(DefaultNamespace + xmlNameWrapper,
+                new XElement(DefaultNamespace + xmlNameFirstComponent, firstValue),
+                new XElement(DefaultNamespace + xmlNameSecondComponent, secondValue));
+
+            return element;
+        }
+
+
+        #endregion
+    }
+
+
+	public class XMLCompletedBusAuxiliariesWriter_xEV : XMLCompletedBusAuxiliariesWriter
+	{
+		public XMLCompletedBusAuxiliariesWriter_xEV(IGroupWriterFactory groupWriterFactory) : base(groupWriterFactory) { }
+        protected override string AuxType => XMLTypes.AUX_xEV_CompletedBusType;
+
+		public override void CreateElements()
+		{
+			CreateElementsWithGroupWriters();
+		}
+
+		private void CreateElementsWithGroupWriters()
+		{
+
+			var dataElement = new XElement(DefaultNamespace + XMLNames.ComponentDataWrapper,
+				new XAttribute("xmlns", XMLNamespaces.V24),
+				new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, AuxType));
+
+			if (_inputData.ElectricConsumers != null)
+			{
+				var electricSystemElement = new XElement(DefaultNamespace + XMLNames.BusAux_ElectricSystem);
+				var ledLightsElement = new XElement(DefaultNamespace + XMLNames.BusAux_LEDLights);
+				ledLightsElement.Add(
+					// ReSharper disable once CoVariantArrayConversion
+					_groupWriterFactory.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxElectricSystemLightsGroup, DefaultNamespace)
+						.GetGroupElements(_inputData));
+				electricSystemElement.Add(ledLightsElement);
+				dataElement.Add(electricSystemElement);
+
+			}
+
+			if (_inputData.HVACAux != null)
+			{
+				var hvacElement = new XElement(DefaultNamespace + XMLNames.BusAux_HVAC);
+				hvacElement.Add(_groupWriterFactory.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxHVACConventionalSequenceGroup, DefaultNamespace)
+					.GetGroupElements(_inputData));
+				hvacElement.Add(_groupWriterFactory.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxHVACxEVSequenceGroup, DefaultNamespace)
+					.GetGroupElements(_inputData));
+                dataElement.Add(hvacElement);
+			}
+
+			_xElement.Add(dataElement);
+
+		}
+
+
+	}
+}
\ No newline at end of file
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLComponentsWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLComponentsWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..70a8eb20e205f36eaf5b8e158d0b695f60a2ff9f
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLComponentsWriter.cs
@@ -0,0 +1,139 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using TUGraz.IVT.VectoXML.Writer;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
+using TUGraz.VectoCore.Utils;
+using VECTO3GUI2020.Resources.XML;
+using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components;
+using EnvironmentVariableTarget = System.EnvironmentVariableTarget;
+
+namespace VECTO3GUI2020.Util.XML.Components
+{
+
+
+	public abstract class XMLCompletedBusComponentsWriter : IXMLComponentsWriter
+	{
+		protected IVehicleComponentsDeclaration _inputData;
+		protected readonly IXMLWriterFactory _writerFactory;
+
+		public XMLCompletedBusComponentsWriter(IXMLWriterFactory writerFactory)
+		{
+			_writerFactory = writerFactory;
+		}
+
+
+		#region Implementation of IXMLComponentsWriter
+
+		public XElement GetComponents()
+		{
+			if (_inputData == null) {
+				throw new VectoException("Input data not initialized");
+			}
+
+			return DoCreateComponents();
+		}
+
+		protected abstract XElement DoCreateComponents();
+
+		public IXMLComponentsWriter Init(IVehicleComponentsDeclaration inputData)
+		{
+			_inputData = inputData;
+			return this;
+		}
+
+		#endregion
+	}
+
+	public class XMLCompletedBusComponentsWriter_xEV : XMLCompletedBusComponentsWriter
+	{
+
+		public static (XNamespace ns, string xsdType) VERSION = (
+			XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.Components_xEV_CompletedBusType);
+
+
+
+		public XMLCompletedBusComponentsWriter_xEV(IXMLWriterFactory writerFactory) : base(writerFactory) { }
+
+		#region Overrides of XMLCompletedBusComponentsWriter
+
+		protected override XElement DoCreateComponents()
+		{
+			var componentElement = new XElement(VERSION.ns + XMLNames.Vehicle_Components,
+				new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, VERSION.xsdType));
+
+
+			if (_inputData.AirdragInputData != null)
+			{
+				var airDragElement = _writerFactory.CreateComponentWriter(_inputData.AirdragInputData).GetElement();
+
+				var tempAirDragElement = new XElement(VERSION.ns + XMLNames.Component_AirDrag);
+
+				airDragElement.Name = tempAirDragElement.Name;
+				componentElement.Add(airDragElement);
+			}
+
+			if (_inputData.BusAuxiliaries != null)
+			{
+				var busAuxElement = _writerFactory.CreateComponentWriter(_inputData.BusAuxiliaries).GetElement();
+
+
+				componentElement.Add(busAuxElement);
+			}
+
+
+			return componentElement;
+        }
+
+		#endregion
+	}
+
+	public class XMLCompletedBusComponentWriter_Conventional : XMLCompletedBusComponentsWriter
+	{
+		public static (XNamespace ns, string xsdType) VERSION = (
+			XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.Components_Conventional_CompletedBusType);
+
+		public XMLCompletedBusComponentWriter_Conventional(IXMLWriterFactory writerFactory) : base(writerFactory) { }
+
+		#region Overrides of XMLCompletedBusComponentsWriter
+
+		protected override XElement DoCreateComponents()
+		{
+			
+			var componentElement = new XElement(VERSION.ns + XMLNames.Vehicle_Components,
+				new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, VERSION.xsdType));
+			
+
+			if (_inputData.AirdragInputData != null) {
+				var airDragElement = _writerFactory.CreateComponentWriter(_inputData.AirdragInputData).GetElement();
+				
+				var tempAirDragElement = new XElement(VERSION.ns + XMLNames.Component_AirDrag);
+
+				airDragElement.Name = tempAirDragElement.Name;
+				componentElement.Add(airDragElement);
+			}
+
+			if (_inputData.BusAuxiliaries != null) {
+				var busAuxElement = _writerFactory.CreateComponentWriter(_inputData.BusAuxiliaries).GetElement();
+				
+
+				componentElement.Add(busAuxElement);
+			}
+
+
+			return componentElement;
+
+        }
+
+		#endregion
+	}
+}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLEngineWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLEngineWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3c66ba8140dcf184ea6f6b6d3ea7eff2ffd2b960
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLEngineWriter.cs
@@ -0,0 +1,162 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Data;
+//using System.Diagnostics;
+//using System.Linq;
+//using System.Reflection;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Models;
+//using TUGraz.VectoCommon.Resources;
+//using TUGraz.VectoCommon.Utils;
+//using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
+//using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
+//using TUGraz.VectoCore.Utils;
+//using VECTO3GUI2020.Helper;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLEngineWriter : IXMLComponentWriter
+//    {
+//        protected XElement _xElement;
+//        protected XNamespace _defaultNameSpace;
+//        protected readonly IEngineDeclarationInputData _inputData;
+//        protected string id = "toDo-Add-Identifier";
+
+//        public XMLEngineWriter(IEngineDeclarationInputData inputData)
+//        {
+//            _inputData = inputData;
+//        }
+
+//        public virtual XElement GetElement()
+//        {
+//            if (_xElement == null)
+//            {
+//                Initialize();
+//                CreateDataElements();
+//                _xElement.Add(this.CreateSignatureElement(_defaultNameSpace, id, _inputData.DigestValue));
+//            }
+
+//            return _xElement;
+//        }
+
+//        protected abstract void Initialize();
+//        protected abstract void CreateDataElements();
+
+
+//    }
+
+//    public class XMLEngineWriter_v1_0 : XMLEngineWriter
+//    {
+
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(EngineViewModel_v1_0).ToString()
+//        };
+
+
+//        public override XElement GetElement()
+//        {
+//            throw new NotImplementedException();
+//        }
+
+//        protected override void Initialize()
+//        {
+//            throw new NotImplementedException();
+//        }
+
+//        protected override void CreateDataElements()
+//        {
+//            throw new NotImplementedException();
+//        }
+
+//        public XMLEngineWriter_v1_0(IEngineDeclarationInputData inputData) : base(inputData) { }
+//    }
+
+//    public class XMLEngineWriter_v2_0 : XMLEngineWriter
+//    {
+//        private static XNamespace _v20 = XMLNamespaces.V20;
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(EngineViewModel_v2_0).ToString(),
+//        };
+
+//        protected override void Initialize()
+//        {
+//            _defaultNameSpace = _v20;
+//            _xElement = new XElement(_defaultNameSpace + XMLNames.Component_Engine);
+//        }
+
+//        protected override void CreateDataElements()
+//        {
+//            var _dataXElement = new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper);
+//            _xElement.Add(_dataXElement);
+//            _dataXElement.Add(new XAttribute(XMLNames.Component_ID_Attr, id));
+//            _dataXElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Engine_Type_Attr));
+
+//            Debug.Assert(_xElement != null);
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Model, _inputData.Model));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationNumber,
+//                _inputData.CertificationNumber));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Date, _inputData.Date));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_AppVersion, _inputData.AppVersion));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_Displacement, _inputData.Displacement.ConvertToCubicCentiMeter().ToXMLFormat(0)));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_IdlingSpeed, "100"));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_RatedSpeed, _inputData.RatedSpeedDeclared.AsRPM.ToXMLFormat(0)));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_RatedPower, _inputData.RatedPowerDeclared.ToXMLFormat(0)));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_MaxTorque, _inputData.MaxTorqueDeclared.ToXMLFormat(0)));
+
+//            Debug.Assert(_inputData.EngineModes.Count == 1, "Only 1 Engine Mode supported in XMLEngineWriter_v2_0");
+//            var mode = _inputData.EngineModes[0];
+
+//            Debug.Assert(mode.Fuels.Count == 1, "Only one fuel supported in XMLEngineWriter_v2_0");
+//            var fuel = mode.Fuels[0];
+
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_WHTCUrban, fuel.WHTCUrban.ToXMLFormat(4)));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_WHTCRural, fuel.WHTCRural.ToXMLFormat(4)));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_WHTCMotorway, fuel.WHTCMotorway.ToXMLFormat(4)));
+
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_ColdHotBalancingFactor, fuel.ColdHotBalancingFactor.ToXMLFormat(4)));
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_CorrectionFactor_RegPer, fuel.CorrectionFactorRegPer.ToXMLFormat(4)));
+
+
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_CorrecionFactor_NCV, "1.0000"));
+
+//            _dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_FuelType, fuel.FuelType.ToXMLFormat()));
+
+//            var fuelConsumptionMapElement = new XElement(_defaultNameSpace + XMLNames.Engine_FuelConsumptionMap);
+//            var tableData = fuel.FuelConsumptionMap;
+
+//            foreach (DataRow fuelEntry in tableData.Rows)
+//            {
+//                var entry = new XElement(_defaultNameSpace + XMLNames.Engine_FuelConsumptionMap_Entry);
+//                entry.Add(new XAttribute(XMLNames.Engine_FuelConsumptionMap_EngineSpeed_Attr, fuelEntry.ItemArray[0]));
+//                entry.Add(new XAttribute(XMLNames.Engine_FuelConsumptionMap_Torque_Attr, fuelEntry.ItemArray[1]));
+//                entry.Add(new XAttribute(XMLNames.Engine_FuelConsumptionMap_FuelConsumption_Attr, fuelEntry.ItemArray[2]));
+//                fuelConsumptionMapElement.Add(entry);
+//            }
+//            _dataXElement.Add(fuelConsumptionMapElement);
+
+//            var fullLoadAndDragCurveElement = new XElement(_defaultNameSpace + XMLNames.Engine_FullLoadAndDragCurve);
+//            tableData = mode.FullLoadCurve;
+//            foreach (DataRow loadAndDragEntry in tableData.Rows)
+//            {
+//                var entry = new XElement(_defaultNameSpace + XMLNames.Engine_FullLoadCurve_Entry);
+//                entry.Add(new XAttribute(XMLNames.Engine_EngineFullLoadCurve_EngineSpeed_Attr, loadAndDragEntry.ItemArray[0]));
+//                entry.Add(new XAttribute(XMLNames.Engine_FullLoadCurve_MaxTorque_Attr, loadAndDragEntry.ItemArray[1]));
+//                entry.Add(new XAttribute(XMLNames.Engine_FullLoadCurve_DragTorque_Attr, loadAndDragEntry.ItemArray[2]));
+//                fullLoadAndDragCurveElement.Add(entry);
+//            }
+//            _dataXElement.Add(fullLoadAndDragCurveElement);
+//        }
+
+
+
+//        public XMLEngineWriter_v2_0(IEngineDeclarationInputData inputData) : base(inputData)
+//        {
+
+//        }
+//    }
+//}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLGearboxWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLGearboxWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..de7dd8888c90aa9c8c0cb7b35a72050baeda80a7
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLGearboxWriter.cs
@@ -0,0 +1,114 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Data;
+//using System.Diagnostics;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Models;
+//using TUGraz.VectoCommon.Resources;
+//using TUGraz.VectoCommon.Utils;
+//using VECTO3GUI2020.Helper;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLGearboxWriter : IXMLComponentWriter
+//    {
+//        protected IGearboxDeclarationInputData _inputData;
+//        protected XElement _xElement;
+//        protected XNamespace _defaultNameSpace;
+//        protected string _uri = "toDo-Adduri";
+
+//        public XMLGearboxWriter(IGearboxDeclarationInputData inputData)
+//        {
+
+//            _inputData = inputData;
+//        }
+
+//        public virtual XElement GetElement()
+//        {
+//            if (_xElement == null)
+//            {
+//                Initialize();
+//                CreateDataElements();
+//                _xElement.Add(this.CreateSignatureElement(_defaultNameSpace, _uri, _inputData.DigestValue));
+//            }
+//            return _xElement;
+//        }
+
+//        protected abstract void Initialize();
+//        protected abstract void CreateDataElements();
+//    }
+//    public class XMLGearboxWriter_v2_0 : XMLGearboxWriter
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(GearboxViewModel_v2_0).ToString()
+//        };
+
+//        public XMLGearboxWriter_v2_0(IGearboxDeclarationInputData inputData) : base(inputData)
+//        {
+//        }
+
+//        protected override void Initialize()
+//        {
+//            _defaultNameSpace = XMLNamespaces.V20;
+//            _xElement = new XElement(_defaultNameSpace + XMLNames.Component_Gearbox);
+//        }
+
+//        protected override void CreateDataElements()
+//        {
+//            var dataElement = new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper);
+//            _xElement.Add(dataElement);
+//            dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
+//            dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Gearbox_attr_GearboxDataDeclarationType));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Model, _inputData.Model));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Date, _inputData.Date));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_AppVersion, _inputData.AppVersion));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_TransmissionType, _inputData.Type.ToXMLFormat()));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Gearbox_CertificationMethod, _inputData.CertificationMethod.ToXMLFormat()));
+
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears));
+//            var gearsElement = dataElement.LastNode as XElement;
+//            gearsElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.Gearbox_Gears_Attr_GearsDeclarationType));
+//            foreach (var gear in _inputData.Gears)
+//            {
+//                gearsElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears_Gear));
+//                var gearElement = gearsElement.LastNode as XElement;
+//                //var gearElement = new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears_Gear);
+//                //gearsElement.Add(gearElement);
+//                gearElement.Add(new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, gear.Gear));
+//                gearElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_Ratio, gear.Ratio.ToXMLFormat(3)));
+
+//                if (gear.MaxTorque != null)
+//                {
+//                    gearElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears_MaxTorque, gear.MaxTorque));
+//                }
+
+//                if (gear.MaxInputSpeed != null)
+//                {
+//                    gearElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_MaxSpeed, gear.MaxInputSpeed));
+//                }
+
+//                var torqueLossMapElement = new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_TorqueLossMap);
+//                gearElement.Add(torqueLossMapElement);
+//                foreach (DataRow torquelossEntry in gear.LossMap.Rows)
+//                {
+//                    var entry = new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_TorqueLossMap_Entry);
+//                    torqueLossMapElement.Add(entry);
+//                    entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputSpeed_Attr, torquelossEntry[0].ToString()));
+//                    entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputTorque_Attr, torquelossEntry[1].ToString()));
+//                    entry.Add(new XAttribute(XMLNames.TransmissionLossmap_TorqueLoss_Attr, torquelossEntry[2].ToString()));
+
+//                }
+//            }
+//            Debug.WriteLine(_xElement.ToString());
+//        }
+
+
+//    }
+//}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLPTOWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLPTOWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a48091c3014b905f99d1b62210ec48728d2812bb
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLPTOWriter.cs
@@ -0,0 +1,84 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Resources;
+//using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLPTOWriter : IXMLComponentWriter
+//    {
+//        protected XElement _xElement;
+//        protected XNamespace _defaultNamespace;
+//        private IPTOTransmissionInputData _inputData;
+
+//        public XMLPTOWriter(IPTOTransmissionInputData inputData)
+//        {
+//            _inputData = inputData;
+//            Initialize();
+//            CreateElements();
+//        }
+
+
+
+//        public XElement GetElement()
+//        {
+//            return _xElement;
+//        }
+
+//        protected abstract void Initialize();
+//        protected abstract void CreateElements();
+//    }
+
+//    public class XMLPTOWriter_v1_0 : XMLPTOWriter
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(PTOViewModel_V1_0).ToString()
+//        };
+
+//        public XMLPTOWriter_v1_0(IPTOTransmissionInputData inputData) : base(inputData) { }
+
+//        protected override void Initialize()
+//        {
+
+//            throw new NotImplementedException();
+//        }
+
+//        protected override void CreateElements()
+//        {
+//            throw new NotImplementedException();
+//        }
+//    }
+
+
+
+
+//    public class XMLPTOWriter_v2_0 : XMLPTOWriter_v1_0
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(PTOViewModel_V2_0).ToString()
+//        };
+
+//        public XMLPTOWriter_v2_0(IPTOTransmissionInputData inputData) : base(inputData) { }
+
+//        protected override void Initialize()
+//        {
+//            _defaultNamespace = XMLNamespaces.V20;
+//            _xElement = new XElement(_defaultNamespace + XMLNames.Vehicle_PTO);
+//            _xElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.Component_Type_Attr_PTO));
+//        }
+
+//        protected override void CreateElements()
+//        {
+//            _xElement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_PTO_ShaftsGearWheels, "none"));
+//            _xElement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_PTO_OtherElements, "none"));
+//        }
+//    }
+
+
+//}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLRetarderWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLRetarderWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fb1c8be9e7e57c5583dce015ecd051df1b88bf80
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLRetarderWriter.cs
@@ -0,0 +1,106 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Data;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Models;
+//using TUGraz.VectoCommon.Resources;
+//using VECTO3GUI2020.Helper;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLRetarderWriter : IXMLComponentWriter
+//    {
+//        protected XElement _xElement;
+//        protected IRetarderInputData _inputData;
+//        protected XNamespace _defaultNameSpace;
+//        protected string _uri = "toTo-Add-URI";
+
+//        public XMLRetarderWriter(IRetarderInputData inputData)
+//        {
+//            _inputData = inputData;
+//        }
+
+//        protected abstract void Initialize();
+//        protected abstract void CreateDataElements();
+
+//        public XElement GetElement()
+//        {
+//            if (_xElement == null)
+//            {
+//                Initialize();
+//                CreateDataElements();
+//                _xElement.Add(this.CreateSignatureElement(_defaultNameSpace, _uri, _inputData.DigestValue));
+//            }
+//            return _xElement;
+//        }
+//    }
+
+//    public class XMLRetarderWriter_v1_0 : XMLRetarderWriter
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(RetarderViewModel_v1_0).ToString()
+//        };
+
+//        protected override void Initialize()
+//        {
+//            _defaultNameSpace = XMLNamespaces.V10;
+//            _xElement = new XElement(_defaultNameSpace + XMLNames.Component_Retarder);
+//        }
+
+//        protected override void CreateDataElements()
+//        {
+//            var dataElement = new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper);
+//            _xElement.Add(dataElement);
+
+//            dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
+//            dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.Retarder_Attr_DataDeclarationType));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Model, _inputData.Model));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Date, _inputData.Date));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_AppVersion, _inputData.AppVersion));
+//            dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationMethod, _inputData.CertificationMethod.ToXMLFormat()));
+
+//            var lossMapElement = new XElement(_defaultNameSpace + XMLNames.Retarder_RetarderLossMap);
+//            dataElement.Add(lossMapElement);
+
+//            foreach (DataRow lossMapRow in _inputData.LossMap.Rows)
+//            {
+//                var entryElement = new XElement(_defaultNameSpace + XMLNames.Retarder_RetarderLossMap_Entry);
+//                entryElement.Add(new XAttribute(XMLNames.Retarder_RetarderLossmap_RetarderSpeed_Attr, lossMapRow[0].ToString()));
+//                entryElement.Add(new XAttribute(XMLNames.Retarder_RetarderLossmap_TorqueLoss_Attr, lossMapRow[1].ToString()));
+//                lossMapElement.Add(entryElement);
+//            }
+//        }
+
+//        public XMLRetarderWriter_v1_0(IRetarderInputData inputData) : base(inputData) { }
+//    }
+
+
+
+//    public class XMLRetarderWriter_v2_0 : XMLRetarderWriter_v1_0
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(RetarderViewModel_v2_0).ToString()
+//        };
+
+
+//        public XMLRetarderWriter_v2_0(IRetarderInputData inputData) : base(inputData)
+//        {
+
+//        }
+
+
+
+//        protected override void Initialize()
+//        {
+//            _defaultNameSpace = XMLNamespaces.V20;
+//            _xElement = new XElement(_defaultNameSpace + XMLNames.Component_Retarder);
+//        }
+//    }
+//}
diff --git a/VECTO3GUI2020/Util/XML/Components/XMLTyreWriter.cs b/VECTO3GUI2020/Util/XML/Components/XMLTyreWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f94d276ae29debb772dcdb76bbf4e62f85740011
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Components/XMLTyreWriter.cs
@@ -0,0 +1,100 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using System.Xml.Linq;
+//using TUGraz.VectoCommon.InputData;
+//using TUGraz.VectoCommon.Resources;
+//using TUGraz.VectoCommon.Utils;
+//using VECTO3GUI2020.Helper;
+//using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
+
+//namespace VECTO3GUI2020.Util.XML.Components
+//{
+//    public abstract class XMLTyreWriter : IXMLComponentWriter
+//    {
+//        protected ITyreDeclarationInputData _inputData;
+
+//        protected XNamespace _defaultNamespace;
+//        protected XElement _xElement;
+//        protected string _uri = "ToDo-Add-Id";
+
+//        public XMLTyreWriter(ITyreDeclarationInputData inputData)
+//        {
+//            _inputData = inputData;
+//        }
+
+//        public XElement GetElement()
+//        {
+//            if (_xElement == null)
+//            {
+//                Initialize();
+//                CreateDataElements();
+//                _xElement.Add(this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue));
+//            }
+
+//            return _xElement;
+//        }
+//        protected abstract void Initialize();
+//        protected abstract void CreateDataElements();
+
+
+
+
+
+//    }
+
+//    public class XMLTyreWriter_v2_0 : XMLTyreWriter
+//    {
+//        public static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(TyreViewModel_v2_0).ToString()
+//        };
+
+//        public XMLTyreWriter_v2_0(ITyreDeclarationInputData inputData) : base(inputData) { }
+//        protected override void CreateDataElements()
+//        {
+//            var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
+//            _xElement.Add(dataElement);
+
+//            dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
+//            dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Tyre_Type_Attr_TyreDataDeclarationType));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Dimension, _inputData.Dimension));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_RRCDeclared, _inputData.RollResistanceCoefficient.ToXMLFormat(4)));
+//            dataElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_FzISO, _inputData.TyreTestLoad.ToXMLFormat(0)));
+//        }
+
+//        protected override void Initialize()
+//        {
+//            _defaultNamespace = XMLNamespaces.V20;
+//            _xElement = new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Tyre);
+//        }
+
+//    }
+
+//    public class XMLTyreWriter_v2_3 : XMLTyreWriter_v2_0
+//    {
+//        public new static readonly string[] SUPPORTED_VERSIONS = {
+//            typeof(TyreViewModel_v2_3).ToString()
+//        };
+//        public XMLTyreWriter_v2_3(ITyreDeclarationInputData inputData) : base(inputData) { }
+
+//        protected override void CreateDataElements()
+//        {
+//            base.CreateDataElements();
+
+//        }
+
+//        protected override void Initialize()
+//        {
+//            _defaultNamespace = XMLNamespaces.V23;
+//            _xElement = new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Tyre);
+//        }
+//    }
+
+//}
diff --git a/VECTO3GUI2020/Util/XML/Documents/IXMLDeclarationJobWriter.cs b/VECTO3GUI2020/Util/XML/Documents/IXMLDeclarationJobWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2d8dceabbe3e943ccbe0dced575c28ca391dd5b0
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Documents/IXMLDeclarationJobWriter.cs
@@ -0,0 +1,9 @@
+using System.Xml.Linq;
+
+namespace VECTO3GUI2020.Util.XML.Documents
+{
+    public interface IXMLDeclarationJobWriter
+    {
+        XDocument GetDocument();
+    }
+}
diff --git a/VECTO3GUI2020/Util/XML/Documents/XMLDeclarationJobWriter.cs b/VECTO3GUI2020/Util/XML/Documents/XMLDeclarationJobWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..59fa061e7e2fca06b67b1989caf1c76dda15ea1d
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Documents/XMLDeclarationJobWriter.cs
@@ -0,0 +1,97 @@
+using System;
+using System.Diagnostics;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
+using VECTO3GUI2020.ViewModel.Implementation.JobEdit;
+
+namespace VECTO3GUI2020.Util.XML.Documents
+{
+    public abstract class XMLDeclarationJobWriter : IXMLDeclarationJobWriter
+    {
+
+        protected XDocument _xDocument;
+        protected string _schemaVersion;
+        private IXMLWriterFactory _xmlWriterFactory;
+
+        protected string LocalSchemaLocation = @"V:\VectoCore\VectoCore\Resources\XSD\";
+
+        //Must be overwritten by subclasses;
+        protected abstract void Initialize();
+
+
+
+        public XMLDeclarationJobWriter(IDeclarationJobInputData inputData, IXMLWriterFactory xmlWriterFactory)
+        {
+            _xmlWriterFactory = xmlWriterFactory;
+            Initialize();
+
+            (_xDocument.FirstNode as XElement)?.Add(_xmlWriterFactory.CreateVehicleWriter(inputData.Vehicle).GetElement());
+            var rootElement = _xDocument.FirstNode as XElement;
+
+        }
+
+
+
+
+
+        public XDocument GetDocument()
+        {
+            return _xDocument;
+        }
+    }
+
+
+    public class XMLDeclarationJobWriter_v1_0 : XMLDeclarationJobWriter
+    {
+
+
+        public static readonly string[] SUPPORTED_VERSIONS = {
+            typeof(XMLDeclarationJobInputDataProviderV10).ToString()
+        };
+        public XMLDeclarationJobWriter_v1_0(IDeclarationJobInputData inputData, IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory)
+        {
+
+        }
+        protected override void Initialize()
+        {
+            throw new NotImplementedException();
+        }
+
+
+    }
+
+    public class XMLDeclarationJobWriter_v2_0 : XMLDeclarationJobWriter
+    {
+
+        public static readonly string[] SUPPORTED_VERSIONS = {
+            typeof(DeclarationJobEditViewModel_v2_0).ToString(),
+            typeof(XMLDeclarationJobInputDataProviderV20).ToString()
+        };
+
+        public XMLDeclarationJobWriter_v2_0(IDeclarationJobInputData inputData, IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory)
+        {
+
+        }
+
+        protected override void Initialize()
+        {
+            _schemaVersion = "2.0";
+            _xDocument = new XDocument();
+
+            var xElement = new XElement(XMLNamespaces.Tns_v20 + XMLNames.VectoInputDeclaration);
+            _xDocument.Add(xElement);
+
+            xElement.Add(new XAttribute("schemaVersion", _schemaVersion));
+            xElement.Add(new XAttribute("xmlns", XMLNamespaces.DeclarationDefinition + ":v" + _schemaVersion));
+            xElement.Add(new XAttribute(XNamespace.Xmlns + "xsi", XMLNamespaces.Xsi.NamespaceName));
+            xElement.Add(new XAttribute(XNamespace.Xmlns + "tns", XMLNamespaces.Tns_v20));
+            xElement.Add(new XAttribute(XMLNamespaces.Xsi + "schemaLocation",
+                $"{XMLNamespaces.DeclarationRootNamespace} {LocalSchemaLocation}VectoDeclarationJob.xsd"));
+
+            Debug.WriteLine(_xDocument.ToString());
+        }
+    }
+
+}
diff --git a/VECTO3GUI2020/Util/XML/IXMLWriterFactory.cs b/VECTO3GUI2020/Util/XML/IXMLWriterFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..950825ee930ef086949524c3908ff967f7514b71
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/IXMLWriterFactory.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Xml.Linq;
+using TUGraz.VectoCommon.InputData;
+using VECTO3GUI2020.Util.XML.Components;
+using VECTO3GUI2020.Util.XML.Documents;
+using VECTO3GUI2020.Util.XML.Vehicle;
+
+namespace VECTO3GUI2020.Util.XML
+{
+    public interface IXMLWriterFactory
+    {
+        IXMLDeclarationJobWriter CreateJobWriter(IDeclarationJobInputData inputData);
+        IXMLVehicleWriter CreateVehicleWriter(IVehicleDeclarationInputData inputData);
+
+
+
+        //IXMLComponentWriter CreateComponentWriter(IComponentInputData inputData);
+        //IXMLComponentWriter CreateComponentWriter(IAuxiliariesDeclarationInputData inputData);
+        //IXMLComponentWriter CreateComponentWriter(IAxlesDeclarationInputData inputData);
+        //IXMLComponentWriter CreateComponentWriter(IAxleDeclarationInputData inputData);
+
+
+        //IXMLComponentWriter CreateComponentWriter(IPTOTransmissionInputData inputData);
+        //IXMLComponentsWriter CreateComponentsWriter(IVehicleComponentsDeclaration inputData);
+
+        IXMLComponentsWriter CreateComponentsWriterWithVersion(XNamespace ns, string xsdType,
+            IVehicleComponentsDeclaration inputData);
+		IXMLComponentsWriter CreateComponentsWriterWithVersion(XNamespace ns, string xsdType);
+		//IXMLBusAuxiliariesWriter CreateBuxAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData);
+
+
+        #region Airdrag
+		IXMLComponentWriter CreateComponentWriter(IAirdragDeclarationInputData inputData);
+        #endregion
+
+        #region BusAux
+
+		IXMLBusAuxiliariesWriter CreateComponentWriter(IBusAuxiliariesDeclarationData inputData);
+        #endregion BusAux
+
+        TWriter CreateComponentWriterWithVersion<TWriter>(XNamespace ns, string xsdType);
+	}
+
+    public interface IXMLWriterFactoryInternal
+    {
+        TWriter CreateWriter<TWriter, TData>(DataSource source, TData inputData);
+		TWriter CreateComponentsWriter<TWriter>(DataSource source);
+		TWriter CreateComponentWriter<TWriter>(DataSource source);
+	}
+
+    public class XMLWriterFactory : IXMLWriterFactory
+    {
+        private IXMLWriterFactoryInternal _internalFactory;
+
+        public XMLWriterFactory(IXMLWriterFactoryInternal internalFactory)
+        {
+            _internalFactory = internalFactory;
+        }
+        private TWriter CreateWriter<TWriter, TData>(DataSource source, TData inputData)
+        {
+            return _internalFactory.CreateWriter<TWriter, TData>(source, inputData);
+        }
+
+
+
+
+        #region Implementation of IXMLWriterFactory
+
+        public IXMLDeclarationJobWriter CreateJobWriter(IDeclarationJobInputData inputData)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IXMLVehicleWriter CreateVehicleWriter(IVehicleDeclarationInputData inputData)
+        {
+            return _internalFactory.CreateWriter<IXMLVehicleWriter, IVehicleDeclarationInputData>(inputData.DataSource, inputData);
+            //throw new System.NotImplementedException();
+        }
+
+        public IXMLComponentWriter CreateComponentWriter(IComponentInputData inputData)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IXMLComponentWriter CreateComponentWriter(IAuxiliariesDeclarationInputData inputData)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IXMLComponentWriter CreateComponentWriter(IAxlesDeclarationInputData inputData)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IXMLComponentWriter CreateComponentWriter(IAxleDeclarationInputData inputData)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IXMLComponentWriter CreateComponentWriter(IAirdragDeclarationInputData inputData)
+		{
+			return _internalFactory.CreateComponentWriter<IXMLComponentWriter>(inputData.DataSource).Init(inputData);
+		}
+
+		public IXMLBusAuxiliariesWriter CreateComponentWriter(IBusAuxiliariesDeclarationData inputData)
+		{
+			return _internalFactory.CreateComponentWriter<IXMLBusAuxiliariesWriter>(inputData.DataSource).Init(inputData);
+		}
+
+
+		public TWriter CreateComponentWriterWithVersion<TWriter>(XNamespace ns, string xsdType)
+		{
+			return _internalFactory.CreateComponentWriter<TWriter>(new DataSource() {
+				TypeVersion = ns.ToString(),
+				Type = xsdType,
+			});
+		}
+
+        public IXMLComponentWriter CreateComponentWriter(IPTOTransmissionInputData inputData)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IXMLComponentsWriter CreateComponentsWriter(IVehicleComponentsDeclaration inputData)
+        {
+            throw new NotImplementedException();
+        }
+
+		public IXMLComponentsWriter CreateComponentsWriterWithVersion(XNamespace ns, string xsdType)
+		{
+			return _internalFactory.CreateComponentsWriter<IXMLComponentsWriter>(new DataSource()
+			{
+				TypeVersion = ns.ToString(),
+				Type = xsdType,
+			});
+        }
+
+		public IXMLComponentsWriter CreateComponentsWriterWithVersion(XNamespace ns, string xsdType,
+            IVehicleComponentsDeclaration inputData)
+		{
+			return CreateComponentsWriterWithVersion(ns, xsdType).Init(inputData);
+		}
+
+		//public IXMLBusAuxiliariesWriter CreateBuxAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData)
+  //      {
+  //          throw new NotImplementedException();
+  //      }
+
+
+		#endregion
+    }
+}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs
deleted file mode 100644
index 07e369e7a66d2915158042fa391d8354cf1665b9..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-using System.Linq;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLAirDragWriter : IXMLComponentWriter
-    {
-		protected IAirdragDeclarationInputData _inputData;
-		protected XNamespace _defaultNamespace;
-		protected XElement _xElement;
-		protected string _uri = "ToDO-Add-id";
-
-		public XMLAirDragWriter(IAirdragDeclarationInputData inputData)
-		{
-			_inputData = inputData;
-			_uri = inputData.DigestValue?.Reference?.Replace("#","");
-			if (_uri == null) {
-				_uri = "AirdragComponent" + Guid.NewGuid().ToString("n").Substring(0, 20);
-			}
-		}
-
-		public XElement GetElement()
-		{
-			if (_xElement == null) {
-
-				Initialize();
-				CreateDataElements();
-				var signatureElemnet = this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue);
-				_xElement.Add(signatureElemnet);
-			}
-
-			return _xElement;
-		}
-
-		public XElement GetElement(XNamespace wrapperNamespace)
-		{
-			throw new NotImplementedException();
-		}
-
-		protected abstract void Initialize();
-		protected abstract void CreateDataElements();
-
-
-	}
-
-	public class XMLAirDragWriter_v2_0 : XMLAirDragWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(AirDragViewModel_v2_0).ToString(),
-			typeof(MultistageAirdragViewModel).ToString()
-		};
-		public XMLAirDragWriter_v2_0(IAirdragDeclarationInputData inputData) : base(inputData) { }
-		protected override void CreateDataElements()
-		{
-			var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
-			_xElement.Add(dataElement);
-
-			dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri), new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, "v2.0:" +
-			 XMLNames.AirDrag_Data_Type_Attr));
-
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_CdxA_0, _inputData.AirDragArea_0.ToXMLFormat(2)));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_TransferredCDxA, _inputData.TransferredAirDragArea.ToXMLFormat(2)));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_DeclaredCdxA, _inputData.AirDragArea.ToXMLFormat(2)));
-
-
-			dataElement.DescendantsAndSelf().Where(e => string.IsNullOrEmpty(e.Value)).Remove();
-		}
-
-		protected override void Initialize()
-		{
-			_defaultNamespace = XMLNamespaces.V20;
-			_xElement = new XElement(XMLNames.Component_AirDrag);
-		}
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAuxiliariesWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAuxiliariesWriter.cs
deleted file mode 100644
index aadcf95e8de288c0e7d0fa61dbb3fe40cba2cc71..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAuxiliariesWriter.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLAuxiliariesWriter : IXMLComponentWriter
-	{
-		protected XNamespace _defaultNamespace;
-		protected XElement _xElement;
-		protected IAuxiliariesDeclarationInputData _inputData;
-
-		public XMLAuxiliariesWriter(IAuxiliariesDeclarationInputData inputData)
-		{
-			_inputData = inputData;
-		}
-
-		public XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateElements();
-			}
-
-			return _xElement;
-		}
-		public abstract void Initialize();
-
-		public abstract void CreateElements();
-	}
-
-	public class XMLAuxiliariesWriter_v2_0 : XMLAuxiliariesWriter
-	{
-
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(AuxiliariesViewModel_v2_0).ToString()
-		};
-
-		public XMLAuxiliariesWriter_v2_0(IAuxiliariesDeclarationInputData inputData) : base(inputData) { }
-		
-		public override void CreateElements()
-		{
-			var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
-			_xElement.Add(dataElement);
-
-			dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Auxiliaries_Type_Attr_DataDeclarationType));
-
-			foreach (var auxiliary in _inputData.Auxiliaries) {
-				var auxElement = new XElement(_defaultNamespace + auxiliary.Type.ToString());
-				auxElement.Add(new XElement(_defaultNamespace + XMLNames.Auxiliaries_Auxiliary_Technology,
-					auxiliary.Technology[0]));
-				dataElement.Add(auxElement);
-			}
-		}
-
-		public override void Initialize()
-		{
-			_defaultNamespace = XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNamespace + XMLNames.Component_Auxiliaries);
-		}
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleGearWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleGearWriter.cs
deleted file mode 100644
index d687eb07adb2732548f1aa3ebf22b92144a04d35..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleGearWriter.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-	public abstract class XMLAxleGearWriter : IXMLComponentWriter
-	{
-		protected XElement _xElement;
-		protected IAxleGearInputData _inputData;
-		protected XNamespace _defaultNamespace;
-		protected string _uri = "ToDO-ADD_URI";
-
-		public XMLAxleGearWriter(IAxleGearInputData inputData)
-		{
-			_inputData = inputData;
-
-			
-		}
-
-		public abstract void Initialize();
-		public abstract void CreateDataElements();
-
-		public XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateDataElements();
-				_xElement.Add(this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue));
-			}
-			return _xElement;
-		}
-	}
-
-	public class XMLAxleGearWriter_v2_0 : XMLAxleGearWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(AxleGearViewModel_v2_0).ToString()
-		};
-		
-
-		public XMLAxleGearWriter_v2_0(IAxleGearInputData inputData) : base(inputData)
-		{
-						
-		}
-
-
-		public override void Initialize()
-		{
-			_defaultNamespace = XML.XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNamespace + XMLNames.Component_Axlegear);
-		}
-
-		public override void CreateDataElements()
-		{
-			var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
-			_xElement.Add(dataElement);
-
-			dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
-			dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.AxleGear_Type_Attr));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Axlegear_LineType, _inputData.LineType.ToXMLFormat()));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.AngleDrive_Ratio, _inputData.Ratio.ToXMLFormat(3)));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationMethod, _inputData.CertificationMethod.ToXMLFormat()));
-
-			var torqueLossMap = new XElement(_defaultNamespace + XMLNames.Axlegear_TorqueLossMap);
-			dataElement.Add(torqueLossMap);
-			foreach (DataRow row in _inputData.LossMap.Rows) {
-				var entry = new XElement(_defaultNamespace + XMLNames.Axlegear_TorqueLossMap_Entry);
-				entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputSpeed_Attr, row[0].ToString()));
-				entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputTorque_Attr, row[1].ToString()));
-				entry.Add(new XAttribute(XMLNames.TransmissionLossmap_TorqueLoss_Attr, row[2].ToString()));
-				torqueLossMap.Add(entry);
-			}
-		}
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleWheelWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleWheelWriter.cs
deleted file mode 100644
index f52ba462826299b408bb0f7ef5b2fc9e6ea5e585..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleWheelWriter.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLAxleWheelWriter : IXMLComponentWriter
-    {
-		protected IXMLWriterFactory _writerFactory;
-		protected IAxleDeclarationInputData _inputData;
-
-		protected XNamespace _defaultNamespace;
-
-		protected XElement _xElement;
-		public XMLAxleWheelWriter(IAxleDeclarationInputData inputData, IXMLWriterFactory writerFactory)
-		{
-			_inputData = inputData;
-			_writerFactory = writerFactory;
-		}
-
-		public XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateElement();
-			}
-
-			return _xElement;
-		}
-
-		protected abstract void CreateElement();
-		protected abstract void Initialize();
-	}
-
-
-	public class XMLAxleWheelWriter_v2_0 : XMLAxleWheelWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(AxleViewModel_v2_0).ToString()
-		};
-		public XMLAxleWheelWriter_v2_0(IAxleDeclarationInputData inputData, IXMLWriterFactory writerFactory) : base(inputData, writerFactory) { }
-
-		protected override void CreateElement()
-		{
-			_xElement.Add(new XAttribute(XMLNames.AxleWheels_Axles_Axle_AxleNumber_Attr, 0));//_inputData.AxleNumber));
-			_xElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Axle_Type_Attr_AxleDataDeclarationType));
-			_xElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_AxleType, _inputData.AxleType));
-			_xElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_TwinTyres, _inputData.TwinTyres));
-			_xElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Steered, false)); //_inputData.Steered));
-
-			_xElement.Add(_writerFactory.CreateComponentWriter(_inputData.Tyre).GetElement());
-		}
-
-		protected override void Initialize()
-		{
-
-			_defaultNamespace = XML.XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle);
-		}
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleWheelsWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleWheelsWriter.cs
deleted file mode 100644
index 9692c640c49e5768fbef6a98b2272a12016c933a..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAxleWheelsWriter.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLAxleWheelsWriter : IXMLComponentWriter
-	{
-		protected XElement _xElement;
-		protected XNamespace _defaultNameSpace;
-		protected IAxlesDeclarationInputData _inputData;
-		protected IXMLWriterFactory _writerFactory;
-
-		protected XMLAxleWheelsWriter(IAxlesDeclarationInputData inputData, IXMLWriterFactory writerFactory)
-		{
-			_inputData = inputData;
-			_writerFactory = writerFactory;
-		}
-
-		public XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateDataElements();
-			}
-
-			return _xElement;
-		}
-
-		public abstract void CreateDataElements();
-		public abstract void Initialize();
-	}
-
-
-	public class XMLAxleWheelsWriter_v2_0 : XMLAxleWheelsWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(AxleWheelsViewModel_v2_0).ToString()
-		};
-		public override void CreateDataElements()
-		{
-			_xElement.Add(new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper));
-			var dataElement = _xElement.LastNode as XElement;
-
-			dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.AxleWheels_Type_Attr_AxleWheelsDeclarationType));
-
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.AxleWheels_Axles));
-			var axles = dataElement.LastNode as XElement;
-			foreach (var axle in _inputData.AxlesDeclaration) {
-				axles.Add(_writerFactory.CreateComponentWriter(axle).GetElement());
-			}
-		}
-
-		public override void Initialize()
-		{
-			_defaultNameSpace = XML.XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNameSpace + XMLNames.Component_AxleWheels);
-		}
-
-		public XMLAxleWheelsWriter_v2_0(IAxlesDeclarationInputData inputData, IXMLWriterFactory writerFactory) : base(inputData, writerFactory) { }
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs
deleted file mode 100644
index d26aba13d57821cf8ebdb23559612c6f983273ab..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-using System.Linq;
-using System.Xml.Linq;
-
-using TUGraz.VectoCommon.BusAuxiliaries;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCore.OutputData.XML.GroupWriter;
-using VECTO3GUI2020.Util.XML.Interfaces;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-	public interface IXMLBusAuxiliariesWriter : IXMLComponentWriter
-	{
-
-	}
-
-	public abstract class XMLBusAuxiliariesWriter : IXMLBusAuxiliariesWriter
-	{
-		protected readonly IBusAuxiliariesDeclarationData _inputData;
-		protected XElement _xElement;
-
-		protected XMLBusAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData)
-		{
-			_inputData = inputData;
-		}
-
-		public XElement GetElement()
-		{
-			if (_xElement == null)
-			{
-				Initialize();
-				CreateElements();
-			}
-
-			return _xElement;
-		}
-
-		public XElement GetElement(XNamespace wrapperNamespace)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public abstract void Initialize();
-
-		public abstract void CreateElements();
-	}
-
-
-
-	public class XMLBusAuxiliariesWriterMultistage : XMLBusAuxiliariesWriter
-	{
-
-
-		private XNamespace _defaultNamespace;
-		private readonly IGroupWriterFactory _groupWriterFactory;
-
-		public XMLBusAuxiliariesWriterMultistage(IBusAuxiliariesDeclarationData inputData,
-			IGroupWriterFactory groupWriterFactory) : base(inputData)
-		{
-			_groupWriterFactory = groupWriterFactory;
-		}
-
-		#region Overrides of XMLBusAuxiliariesWriter
-
-		public override void Initialize()
-		{
-			_defaultNamespace = XMLNamespaces.V24; 
-			_xElement = new XElement(_defaultNamespace + XMLNames.Component_Auxiliaries);
-		}
-
-		public override void CreateElements()
-		{
-			CreateElementsWithGroupWriters();
-			return;
-			
-
-			var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper, 
-				new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, "CompletedVehicleAuxiliaryDataDeclarationType"));
-			_xElement.Add(dataElement);
-
-
-			if (_inputData.ElectricConsumers != null) {
-				var electricSystemElement = new XElement(_defaultNamespace + XMLNames.BusAux_ElectricSystem);
-				var ledLightsElement = new XElement(_defaultNamespace + "LEDLights");
-				ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Interiorlights, _inputData.ElectricConsumers.InteriorLightsLED));
-				ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Dayrunninglights, _inputData.ElectricConsumers.DayrunninglightsLED));
-				ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Positionlights, _inputData.ElectricConsumers.PositionlightsLED));
-				ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Brakelights, _inputData.ElectricConsumers.BrakelightsLED));
-				ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Headlights, _inputData.ElectricConsumers.HeadlightsLED));
-				electricSystemElement.Add(ledLightsElement);
-				dataElement.Add(electricSystemElement);
-			}
-
-			if (_inputData.HVACAux != null) {
-				var hvacElement = new XElement(_defaultNamespace + "HVAC");
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_SystemConfiguration, _inputData.HVACAux.SystemConfiguration.ToXmlFormat()));
-
-				hvacElement.Add(GetHeatPumpGroupElement(
-					xmlNameWrapper:XMLNames.Bus_HeatPumpTypeDriver,
-					xmlNameFirstComponent:XMLNames.BusHVACHeatPumpCooling, 
-					firstValue:_inputData.HVACAux.HeatPumpTypeCoolingDriverCompartment.GetLabel(),
-					xmlNameSecondComponent:XMLNames.BusHVACHeatPumpHeating,
-					secondValue:_inputData.HVACAux.HeatPumpTypeHeatingDriverCompartment.GetLabel()));
-
-				hvacElement.Add(GetHeatPumpGroupElement(
-					xmlNameWrapper: XMLNames.Bus_HeatPumpTypePassenger,
-					xmlNameFirstComponent: XMLNames.BusHVACHeatPumpCooling,
-					firstValue: _inputData.HVACAux.HeatPumpTypeCoolingPassengerCompartment.GetLabel(),
-					xmlNameSecondComponent: XMLNames.BusHVACHeatPumpHeating,
-					secondValue: _inputData.HVACAux.HeatPumpTypeHeatingPassengerCompartment.GetLabel()));
-
-
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AuxiliaryHeaterPower, _inputData.HVACAux.AuxHeaterPower?.ToXMLFormat(0)));
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_DoubleGlazing, _inputData.HVACAux.DoubleGlazing));
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AdjustableAuxiliaryHeater, _inputData.HVACAux.AdjustableAuxiliaryHeater));
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_SeparateAirDistributionDucts, _inputData.HVACAux.SeparateAirDistributionDucts));
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_WaterElectricHeater, _inputData.HVACAux.WaterElectricHeater));
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AirElectricHeater, _inputData.HVACAux.AirElectricHeater));
-				hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_OtherHeatingTechnology, _inputData.HVACAux.OtherHeatingTechnology));
-				dataElement.Add(hvacElement);
-			}
-
-			dataElement.DescendantsAndSelf().Where(e => string.IsNullOrEmpty(e.Value)).Remove();
-		}
-
-		private void CreateElementsWithGroupWriters()
-		{
-
-			var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper,
-				new XAttribute("xmlns" , XMLNamespaces.V24),
-				new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, "AUX_Conventional_CompletedBusType"));
-
-			if (_inputData.ElectricConsumers != null) {
-				var electricSystemElement = new XElement(_defaultNamespace + XMLNames.BusAux_ElectricSystem);
-				var ledLightsElement = new XElement(_defaultNamespace + "LEDLights");
-				ledLightsElement.Add(
-					// ReSharper disable once CoVariantArrayConversion
-					_groupWriterFactory.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxElectricSystemLightsGroup, _defaultNamespace)
-						.GetGroupElements(_inputData));
-				electricSystemElement.Add(ledLightsElement);
-				dataElement.Add(electricSystemElement);
-
-			}
-
-			if (_inputData.HVACAux != null) {
-				var hvacElement = new XElement(_defaultNamespace + "HVAC");
-				hvacElement.Add(_groupWriterFactory.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxHVACConventionalSequenceGroup, _defaultNamespace)
-						.GetGroupElements(_inputData));
-				dataElement.Add(hvacElement);
-			}
-
-			_xElement.Add(dataElement);
-			
-		}
-
-		private XElement GetHeatPumpTypeElement(string xmlName, string value)
-		{
-			if (value == "~null~")
-			{
-				value = null;
-			}
-			return new XElement(_defaultNamespace + xmlName, value);
-		}
-
-		private XElement GetHeatPumpGroupElement(string xmlNameWrapper, string xmlNameFirstComponent,
-			string xmlNameSecondComponent, string firstValue, string secondValue)
-		{
-			var element = new XElement(_defaultNamespace + xmlNameWrapper, 
-				new XElement(_defaultNamespace + xmlNameFirstComponent, firstValue),
-				new XElement(_defaultNamespace + xmlNameSecondComponent, secondValue));
-
-			return element;
-		}
-
-
-		#endregion
-	}
-}
\ No newline at end of file
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLComponentsWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLComponentsWriter.cs
deleted file mode 100644
index db6943a1f19d80c5993e1b9ad340085ac11eef99..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLComponentsWriter.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.IVT.VectoXML.Writer;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components;
-using EnvironmentVariableTarget = System.EnvironmentVariableTarget;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLComponentsWriter : IXMLComponentsWriter
-    {
-		protected IXMLWriterFactory _xMLWriterFactory;
-
-		protected XElement _xElement;
-
-		protected static string _name = "Components";
-		protected static readonly string _declarationDefinition = "urn:tugraz:ivt:VectoAPI:DeclarationDefinitions";
-		protected static readonly XNamespace _xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
-		protected static readonly XNamespace _v10 = _declarationDefinition + ":v1.0";
-		protected static readonly XNamespace _v20 = _declarationDefinition + ":v2.0";
-		protected XNamespace _defaultNamespace;
-		protected IVehicleComponentsDeclaration _inputData;
-
-
-		public XMLComponentsWriter(IVehicleComponentsDeclaration inputData, IXMLWriterFactory xMLWriterFactory)
-		{
-			_inputData = inputData;
-			_xMLWriterFactory = xMLWriterFactory;
-			Initialize();
-			CreateComponents();
-		}
-
-
-		protected abstract void CreateComponents();
-		public abstract XElement GetComponents();
-		public abstract void Initialize();
-
-
-	}
-
-	public class XMLComponentsWriter_v1_0 : XMLComponentsWriter
-	{
-
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(ComponentsViewModel_v1_0).ToString()
-		};
-		public XMLComponentsWriter_v1_0(IVehicleComponentsDeclaration inputData, IXMLWriterFactory xMLWriterFactory) :
-			base(inputData, xMLWriterFactory)
-		{
-			
-		}
-
-		protected override void CreateComponents()
-		{
-			throw new NotImplementedException();
-		}
-
-		public override XElement GetComponents()
-		{
-			throw new NotImplementedException();
-		}
-
-		public override void Initialize()
-		{
-			_defaultNamespace = _v10;
-		}
-	}
-
-
-	public class XMLComponentsWriter_v2_0 : XMLComponentsWriter_v1_0
-	{
-		public new static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(ComponentsViewModel_v2_0).ToString()
-		};
-
-		public XMLComponentsWriter_v2_0(IVehicleComponentsDeclaration inputData, IXMLWriterFactory xMLWriterFactory) :
-			base(inputData, xMLWriterFactory)
-		{
-
-		}
-
-
-		protected override void CreateComponents()
-		{
-			Debug.Assert(_inputData is IComponentsViewModel);
-			IXMLComponentWriter writer;
-			if (_inputData.EngineInputData != null) {
-				writer = _xMLWriterFactory.CreateComponentWriter(_inputData.EngineInputData);
-				_xElement.Add(writer.GetElement());
-			}
-
-			if (_inputData.GearboxInputData != null) {
-				writer = _xMLWriterFactory.CreateComponentWriter(_inputData.GearboxInputData);
-				_xElement.Add(writer.GetElement());
-			}
-
-			if (_inputData.RetarderInputData != null) {
-				writer = _xMLWriterFactory.CreateComponentWriter(_inputData.RetarderInputData);
-				_xElement.Add(writer.GetElement());
-			}
-
-			if (_inputData.AxleGearInputData != null) {
-				writer = _xMLWriterFactory.CreateComponentWriter(_inputData.AxleGearInputData);
-				_xElement.Add(writer.GetElement());
-			}
-
-			if (_inputData.AxleWheels != null) {
-				writer = _xMLWriterFactory.CreateComponentWriter(_inputData.AxleWheels);
-				_xElement.Add(writer.GetElement());
-			}
-
-			if (_inputData.AuxiliaryInputData != null) {
-				writer = _xMLWriterFactory.CreateComponentWriter(_inputData.AuxiliaryInputData);
-				_xElement.Add(writer.GetElement());
-			}
-
-			if (_inputData.AirdragInputData != null) {
-				writer = _xMLWriterFactory.CreateComponentWriter(_inputData.AirdragInputData);
-				_xElement.Add(writer.GetElement());
-			}
-		}
-
-		public override XElement GetComponents()
-		{
-			return _xElement;
-		}
-
-		public override void Initialize()
-		{
-			_defaultNamespace = XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNamespace + XMLNames.Vehicle_Components);
-			_xElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.Components_type_attr));
-		}
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLEngineWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLEngineWriter.cs
deleted file mode 100644
index e4a5e37542bc1d543feda92d6e24ebf6e8939969..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLEngineWriter.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Diagnostics;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
-using TUGraz.VectoCore.Utils;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLEngineWriter : IXMLComponentWriter
-	{
-		protected XElement _xElement;
-		protected XNamespace _defaultNameSpace;
-		protected readonly IEngineDeclarationInputData _inputData;
-		protected string id = "toDo-Add-Identifier";
-
-		public XMLEngineWriter(IEngineDeclarationInputData inputData)
-		{
-			_inputData = inputData;
-		}
-
-		public virtual XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateDataElements();
-				_xElement.Add(this.CreateSignatureElement(_defaultNameSpace, id, _inputData.DigestValue));
-			}
-
-			return _xElement;
-		}
-
-		protected abstract void Initialize();
-		protected abstract void CreateDataElements();
-
-
-	}
-
-	public class XMLEngineWriter_v1_0 : XMLEngineWriter
-	{
-
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(EngineViewModel_v1_0).ToString()
-		};
-
-
-		public override XElement GetElement()
-		{
-			throw new NotImplementedException();
-		}
-
-		protected override void Initialize()
-		{
-			throw new NotImplementedException();
-		}
-
-		protected override void CreateDataElements()
-		{
-			throw new NotImplementedException();
-		}
-
-		public XMLEngineWriter_v1_0(IEngineDeclarationInputData inputData) : base(inputData) { }
-	}
-
-	public class XMLEngineWriter_v2_0 : XMLEngineWriter
-	{
-		private static XNamespace _v20 = XML.XMLNamespaces.V20;
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(EngineViewModel_v2_0).ToString(),
-		};
-
-		protected override void Initialize()
-		{
-			_defaultNameSpace = _v20;
-			_xElement = new XElement(_defaultNameSpace + XMLNames.Component_Engine);
-		}
-
-		protected override void CreateDataElements()
-		{
-			var _dataXElement = new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper);
-			_xElement.Add(_dataXElement);
-			_dataXElement.Add(new XAttribute(XMLNames.Component_ID_Attr, id));
-			_dataXElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Engine_Type_Attr));
-			
-			Debug.Assert(_xElement != null);
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Model, _inputData.Model));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationNumber,
-				_inputData.CertificationNumber));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Date, _inputData.Date));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_AppVersion, _inputData.AppVersion));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_Displacement, _inputData.Displacement.ConvertToCubicCentiMeter().ToXMLFormat(0)));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_IdlingSpeed, "100"));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_RatedSpeed, _inputData.RatedSpeedDeclared.AsRPM.ToXMLFormat(0)));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_RatedPower, _inputData.RatedPowerDeclared.ToXMLFormat(0)));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_MaxTorque, _inputData.MaxTorqueDeclared.ToXMLFormat(0)));
-
-			Debug.Assert(_inputData.EngineModes.Count == 1, "Only 1 Engine Mode supported in XMLEngineWriter_v2_0");
-			var mode = _inputData.EngineModes[0];
-
-			Debug.Assert(mode.Fuels.Count == 1, "Only one fuel supported in XMLEngineWriter_v2_0");
-			var fuel = mode.Fuels[0];
-
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_WHTCUrban, fuel.WHTCUrban.ToXMLFormat(4)));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_WHTCRural, fuel.WHTCRural.ToXMLFormat(4)));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_WHTCMotorway, fuel.WHTCMotorway.ToXMLFormat(4)));
-
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_ColdHotBalancingFactor, fuel.ColdHotBalancingFactor.ToXMLFormat(4)));
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_CorrectionFactor_RegPer, fuel.CorrectionFactorRegPer.ToXMLFormat(4)));
-
-			
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_CorrecionFactor_NCV, "1.0000"));
-
-			_dataXElement.Add(new XElement(_defaultNameSpace + XMLNames.Engine_FuelType, fuel.FuelType.ToXMLFormat()));
-
-			var fuelConsumptionMapElement = new XElement(_defaultNameSpace + XMLNames.Engine_FuelConsumptionMap);
-			var tableData = fuel.FuelConsumptionMap;
-
-			foreach (DataRow fuelEntry in tableData.Rows) {
-				var entry = new XElement(_defaultNameSpace + XMLNames.Engine_FuelConsumptionMap_Entry);
-				entry.Add(new XAttribute(XMLNames.Engine_FuelConsumptionMap_EngineSpeed_Attr, fuelEntry.ItemArray[0]));
-				entry.Add(new XAttribute(XMLNames.Engine_FuelConsumptionMap_Torque_Attr, fuelEntry.ItemArray[1]));
-				entry.Add(new XAttribute(XMLNames.Engine_FuelConsumptionMap_FuelConsumption_Attr, fuelEntry.ItemArray[2]));
-				fuelConsumptionMapElement.Add(entry);
-			}
-			_dataXElement.Add(fuelConsumptionMapElement);
-
-			var fullLoadAndDragCurveElement = new XElement(_defaultNameSpace + XMLNames.Engine_FullLoadAndDragCurve);
-			tableData = mode.FullLoadCurve;
-			foreach (DataRow loadAndDragEntry in tableData.Rows) {
-				var entry = new XElement(_defaultNameSpace + XMLNames.Engine_FullLoadCurve_Entry);
-				entry.Add(new XAttribute(XMLNames.Engine_EngineFullLoadCurve_EngineSpeed_Attr, loadAndDragEntry.ItemArray[0]));
-				entry.Add(new XAttribute(XMLNames.Engine_FullLoadCurve_MaxTorque_Attr, loadAndDragEntry.ItemArray[1]));
-				entry.Add(new XAttribute(XMLNames.Engine_FullLoadCurve_DragTorque_Attr, loadAndDragEntry.ItemArray[2]));
-				fullLoadAndDragCurveElement.Add(entry);
-			}
-			_dataXElement.Add(fullLoadAndDragCurveElement);
-		}
-
-
-
-		public XMLEngineWriter_v2_0(IEngineDeclarationInputData inputData) : base(inputData)
-		{
-			
-		}
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLGearboxWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLGearboxWriter.cs
deleted file mode 100644
index 4fed42688b1d8666740e171164e99f0e9d930e58..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLGearboxWriter.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLGearboxWriter : IXMLComponentWriter
-    {
-		protected IGearboxDeclarationInputData _inputData;
-		protected XElement _xElement;
-		protected XNamespace _defaultNameSpace;
-		protected string _uri = "toDo-Adduri";
-
-		public XMLGearboxWriter(IGearboxDeclarationInputData inputData)
-		{
-
-			_inputData = inputData;
-		}
-
-		public virtual XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateDataElements();
-				_xElement.Add(this.CreateSignatureElement(_defaultNameSpace, _uri, _inputData.DigestValue));
-			}
-			return _xElement;
-		}
-
-		protected abstract void Initialize();
-		protected abstract void CreateDataElements();
-	}
-	public class XMLGearboxWriter_v2_0 : XMLGearboxWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(GearboxViewModel_v2_0).ToString()
-		};
-
-		public XMLGearboxWriter_v2_0(IGearboxDeclarationInputData inputData) : base(inputData)
-		{
-		}
-
-		protected override void Initialize()
-		{
-			_defaultNameSpace = XML.XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNameSpace + XMLNames.Component_Gearbox);
-		}
-
-		protected override void CreateDataElements()
-		{
-			var dataElement = new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper);
-			_xElement.Add(dataElement);
-			dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
-			dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Gearbox_attr_GearboxDataDeclarationType));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Model, _inputData.Model));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Date, _inputData.Date));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_AppVersion, _inputData.AppVersion));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_TransmissionType, _inputData.Type.ToXMLFormat()));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Gearbox_CertificationMethod, _inputData.CertificationMethod.ToXMLFormat()));
-
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears));
-			var gearsElement = dataElement.LastNode as XElement;
-			gearsElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.Gearbox_Gears_Attr_GearsDeclarationType));
-			foreach (var gear in _inputData.Gears) {
-				gearsElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears_Gear));
-				var gearElement = gearsElement.LastNode as XElement;
-				//var gearElement = new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears_Gear);
-				//gearsElement.Add(gearElement);
-				gearElement.Add(new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, gear.Gear));
-				gearElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_Ratio, gear.Ratio.ToXMLFormat(3)));
-
-				if (gear.MaxTorque != null) {
-					gearElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gears_MaxTorque, gear.MaxTorque));
-				}
-
-				if (gear.MaxInputSpeed != null) {
-					gearElement.Add(new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_MaxSpeed, gear.MaxInputSpeed));
-				}
-
-				var torqueLossMapElement = new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_TorqueLossMap);
-				gearElement.Add(torqueLossMapElement);
-				foreach (DataRow torquelossEntry in gear.LossMap.Rows) {
-					var entry = new XElement(_defaultNameSpace + XMLNames.Gearbox_Gear_TorqueLossMap_Entry);
-					torqueLossMapElement.Add(entry);
-					entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputSpeed_Attr, torquelossEntry[0].ToString()));
-					entry.Add(new XAttribute(XMLNames.TransmissionLossmap_InputTorque_Attr, torquelossEntry[1].ToString()));
-					entry.Add(new XAttribute(XMLNames.TransmissionLossmap_TorqueLoss_Attr, torquelossEntry[2].ToString()));
-					
-				}
-			}
-			Debug.WriteLine(_xElement.ToString());
-		}
-
-		
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLPTOWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLPTOWriter.cs
deleted file mode 100644
index e6794a06e0ff0fee1ae506af44980f96bcb6186b..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLPTOWriter.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-	public abstract class XMLPTOWriter : IXMLComponentWriter
-	{
-		protected XElement _xElement;
-		protected XNamespace _defaultNamespace;
-		private IPTOTransmissionInputData _inputData;
-
-		public XMLPTOWriter(IPTOTransmissionInputData inputData)
-		{
-			_inputData = inputData;
-			Initialize();
-			CreateElements();
-		}
-
-
-
-		public XElement GetElement()
-		{
-			return _xElement;
-		}
-
-		protected abstract void Initialize();
-		protected abstract void CreateElements();
-	}
-
-	public class XMLPTOWriter_v1_0 : XMLPTOWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(PTOViewModel_V1_0).ToString()
-		};
-
-		public XMLPTOWriter_v1_0(IPTOTransmissionInputData inputData) : base(inputData) { }
-
-		protected override void Initialize()
-		{
-			
-			throw new NotImplementedException();
-		}
-
-		protected override void CreateElements()
-		{
-			throw new NotImplementedException();
-		}
-	}
-
-
-
-
-	public class XMLPTOWriter_v2_0 : XMLPTOWriter_v1_0
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(PTOViewModel_V2_0).ToString()
-		};
-
-		public XMLPTOWriter_v2_0(IPTOTransmissionInputData inputData) : base(inputData) { }
-
-		protected override void Initialize()
-		{
-			_defaultNamespace = XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNamespace + XMLNames.Vehicle_PTO);
-			_xElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.Component_Type_Attr_PTO));
-		}
-
-		protected override void CreateElements()
-		{
-			_xElement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_PTO_ShaftsGearWheels, "none"));
-			_xElement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_PTO_OtherElements, "none"));
-		}
-	}
-
-	
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLRetarderWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLRetarderWriter.cs
deleted file mode 100644
index f75d43a420b938fe62e3b6c374b85842c7b4999c..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLRetarderWriter.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-	public abstract class XMLRetarderWriter : IXMLComponentWriter
-	{
-		protected XElement _xElement;
-		protected IRetarderInputData _inputData;
-		protected XNamespace _defaultNameSpace;
-		protected string _uri = "toTo-Add-URI";
-
-		public XMLRetarderWriter(IRetarderInputData inputData)
-		{
-			_inputData = inputData;
-		}
-
-		protected abstract void Initialize();
-		protected abstract void CreateDataElements();
-
-		public XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateDataElements();
-				_xElement.Add(this.CreateSignatureElement(_defaultNameSpace, _uri, _inputData.DigestValue));
-			}
-			return _xElement;
-		}
-	}
-
-	public class XMLRetarderWriter_v1_0 : XMLRetarderWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(RetarderViewModel_v1_0).ToString()
-		};
-
-		protected override void Initialize()
-		{
-			_defaultNameSpace = XML.XMLNamespaces.V10;
-			_xElement = new XElement(_defaultNameSpace + XMLNames.Component_Retarder);
-		}
-
-		protected override void CreateDataElements()
-		{
-			var dataElement = new XElement(_defaultNameSpace + XMLNames.ComponentDataWrapper);
-			_xElement.Add(dataElement);
-
-			dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
-			dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.Retarder_Attr_DataDeclarationType));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Model, _inputData.Model));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_Date, _inputData.Date));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_AppVersion, _inputData.AppVersion));
-			dataElement.Add(new XElement(_defaultNameSpace + XMLNames.Component_CertificationMethod, _inputData.CertificationMethod.ToXMLFormat()));
-
-			var lossMapElement = new XElement(_defaultNameSpace + XMLNames.Retarder_RetarderLossMap);
-			dataElement.Add(lossMapElement);
-
-			foreach (DataRow lossMapRow in _inputData.LossMap.Rows)
-			{
-				var entryElement = new XElement(_defaultNameSpace + XMLNames.Retarder_RetarderLossMap_Entry);
-				entryElement.Add(new XAttribute(XMLNames.Retarder_RetarderLossmap_RetarderSpeed_Attr, lossMapRow[0].ToString()));
-				entryElement.Add(new XAttribute(XMLNames.Retarder_RetarderLossmap_TorqueLoss_Attr, lossMapRow[1].ToString()));
-				lossMapElement.Add(entryElement);
-			}
-		}
-
-		public XMLRetarderWriter_v1_0(IRetarderInputData inputData) : base(inputData) { }
-	}
-
-
-
-	public class XMLRetarderWriter_v2_0 : XMLRetarderWriter_v1_0
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(RetarderViewModel_v2_0).ToString()
-		};
-
-
-		public XMLRetarderWriter_v2_0(IRetarderInputData inputData) : base(inputData)
-		{
-			
-		}
-
-
-
-		protected override void Initialize()
-		{
-			_defaultNameSpace = XML.XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNameSpace + XMLNames.Component_Retarder);
-		}
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLTyreWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLTyreWriter.cs
deleted file mode 100644
index 7e10b6ed70f53fca7a91ffceefed4773135c57ff..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLTyreWriter.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLTyreWriter : IXMLComponentWriter
-    {
-		protected ITyreDeclarationInputData _inputData;
-
-		protected XNamespace _defaultNamespace;
-		protected XElement _xElement;
-		protected string _uri = "ToDo-Add-Id";
-
-		public XMLTyreWriter(ITyreDeclarationInputData inputData)
-		{
-			_inputData = inputData;
-		}
-
-		public XElement GetElement()
-		{
-			if (_xElement == null) {
-				Initialize();
-				CreateDataElements();
-				_xElement.Add(this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue));
-			}
-
-			return _xElement;
-		}
-		protected abstract void Initialize();
-		protected abstract void CreateDataElements();
-
-
-
-
-
-	}
-
-	public class XMLTyreWriter_v2_0 : XMLTyreWriter
-	{
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(TyreViewModel_v2_0).ToString()
-		};
-	
-		public XMLTyreWriter_v2_0(ITyreDeclarationInputData inputData) : base(inputData) { }
-		protected override void CreateDataElements()
-		{
-			var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper);
-			_xElement.Add(dataElement);
-
-			dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri));
-			dataElement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.Tyre_Type_Attr_TyreDataDeclarationType));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Dimension, _inputData.Dimension));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_RRCDeclared, _inputData.RollResistanceCoefficient.ToXMLFormat(4)));
-			dataElement.Add(new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_FzISO, _inputData.TyreTestLoad.ToXMLFormat(0)));
-		}
-
-		protected override void Initialize()
-		{
-			_defaultNamespace = XML.XMLNamespaces.V20;
-			_xElement = new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Tyre);
-		}
-
-	}
-
-	public class XMLTyreWriter_v2_3 : XMLTyreWriter_v2_0
-	{
-		public new static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(TyreViewModel_v2_3).ToString()
-		};
-		public XMLTyreWriter_v2_3(ITyreDeclarationInputData inputData) : base(inputData) { }
-
-		protected override void CreateDataElements()
-		{
-			base.CreateDataElements();
-			
-		}
-
-		protected override void Initialize()
-		{
-			_defaultNamespace = XML.XMLNamespaces.V23;
-			_xElement = new XElement(_defaultNamespace + XMLNames.AxleWheels_Axles_Axle_Tyre);
-		}
-	}
-
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs
deleted file mode 100644
index 90534113aba3fa3fba4ee1e0bb4f43ce8f5479aa..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs
+++ /dev/null
@@ -1,436 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Linq;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.BusAuxiliaries;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24;
-using TUGraz.VectoCore.OutputData.XML.ComponentWriter;
-using TUGraz.VectoCore.OutputData.XML.GroupWriter;
-using TUGraz.VectoCore.Utils;
-using VECTO3GUI2020.Helper;
-using VECTO3GUI2020.Properties;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle;
-using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle;
-using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
-{
-    public abstract class XMLVehicleWriter : IXMLVehicleWriter
-    {
-
-
-
-        #region XML
-		protected XElement _Xelement;
-
-		protected XNamespace _defaultNamespace;
-		#endregion
-
-        //Template Methods
-        protected abstract void Initialize();
-		protected abstract void CreateElements();
-
-        protected readonly IVehicleDeclarationInputData _inputData;
-		protected IXMLWriterFactory _xmlWriterFactory;
-
-		public XMLVehicleWriter(IVehicleDeclarationInputData inputData, IXMLWriterFactory xmlWriterFactory)
-        {
-            Debug.Assert(inputData != null);
-            this._inputData = inputData;
-			_xmlWriterFactory = xmlWriterFactory;
-		}
-
-
-
-		public XElement GetElement()
-        {
-			if (_Xelement == null) {
-				Initialize();
-				CreateElements();
-			}
-			return _Xelement;
-        }
-	}
-	public  class XMLVehicleWriter_v1_0 : XMLVehicleWriter
-	{
-		public static readonly string[] SUPPORTEDVERSIONS = {
-			typeof(XMLDeclarationVehicleDataProviderV10).ToString(),
-            typeof(VehicleViewModel_v1_0).ToString()
-		};
-		
-		public XMLVehicleWriter_v1_0(IVehicleDeclarationInputData inputData, IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory)
-        {
-            
-        }
-
-		protected override void CreateElements()
-		{
-			throw new NotImplementedException();
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer),
-				new XElement(_defaultNamespace + XMLNames.Component_ManufacturerAddress,
-					_inputData.ManufacturerAddress),
-				new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model),
-				new XElement(_defaultNamespace + XMLNames.Vehicle_VIN, _inputData.VIN),
-				new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date),
-				new XElement(_defaultNamespace + XMLNames.Vehicle_LegislativeClass, _inputData.LegislativeClass),
-				new XElement(_defaultNamespace + XMLNames.Vehicle_AxleConfiguration,
-					AxleConfigurationHelper.ToXMLFormat(_inputData.AxleConfiguration)),
-				new XElement(_defaultNamespace + XMLNames.Vehicle_CurbMassChassis,
-					_inputData.CurbMassChassis.ToXMLFormat()),
-				new XElement(_defaultNamespace + XMLNames.Vehicle_GrossVehicleMass,
-					_inputData.GrossVehicleMassRating.ToXMLFormat()),
-				new XElement(_defaultNamespace + XMLNames.Vehicle_IdlingSpeed,
-					_inputData.EngineIdleSpeed.ToXMLFormat()));
-
-			//new XElement(_defaultNamespace + XMLNames.Vehicle_RetarderType, _inputData.RetarderType.ToXMLFormat()),
-
-			//_inputData.RetarderRatio == null ? null : new XElement(_defaultNamespace + XMLNames.Vehicle_RetarderRatio, _inputData.RetarderRatio),
-
-			//new XElement(_defaultNamespace + XMLNames.Vehicle_AngledriveType, _inputData.AngledriveType.ToXMLFormat()),
-
-
-			//https://stackoverflow.com/questions/24743916/how-to-convert-xmlnode-into-xelement
-			//Remove this when PTOType is handled correct.
-			//XElement.Load(_inputData.PTONode.CreateNavigator().ReadSubtree()),
-
-			//new XElement(_defaultNamespace + XMLNames.Vehicle_Components, 
-			//  new XAttribute(_xsi + "type", ComponentsXSD))
-
-
-			//);
-
-
-		}
-
-		protected override void Initialize()
-        {
-            throw new NotImplementedException();
-		}
-    }
-
-
-    public class XMLVehicleWriter_v2_0 : XMLVehicleWriter_v1_0
-    {
-		public new static readonly string[] SUPPORTEDVERSIONS = {
-			typeof(XMLDeclarationVehicleDataProviderV10).ToString(),
-            typeof(VehicleViewModel_v2_0).ToString()
-		};
-
-		public XMLVehicleWriter_v2_0(IVehicleDeclarationInputData inputData,
-			IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory)
-        {
-
-
-        }
-
-        protected override void CreateElements()
-		{
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_ManufacturerAddress,
-				_inputData.ManufacturerAddress));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_VIN, _inputData.VIN));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_LegislativeClass,
-				_inputData.LegislativeClass));
-            _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_VehicleCategory, _inputData.VehicleCategory));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_AxleConfiguration,
-				_inputData.AxleConfiguration.ToXMLFormat()));
-
-            _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_CurbMassChassis, _inputData.CurbMassChassis.ToXMLFormat(0)));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_GrossVehicleMass,
-				_inputData.GrossVehicleMassRating.ToXMLFormat(0)));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_IdlingSpeed,
-				_inputData.EngineIdleSpeed.AsRPM.ToXMLFormat(0)));
-
-            //TODO: Remove when IVehicleDeclarationInputData is updated
-			if (_inputData is IVehicleViewModel viewModelInputData) {
-				_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_RetarderType,
-					viewModelInputData.RetarderType.ToXMLFormat()));
-				_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_RetarderRatio, viewModelInputData.RetarderRatio.ToXMLFormat(3)));
-				_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_AngledriveType,
-					viewModelInputData.AngledriveType.ToXMLFormat()));
-				_Xelement.Add(_xmlWriterFactory.CreateComponentWriter(viewModelInputData.PTOTransmissionInputData)
-					.GetElement());
-			} else {
-				_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_RetarderType,
-					RetarderType.None.ToXMLFormat()));
-				//_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_RetarderRatio, "1.000")); 
-				_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_AngledriveType,
-					AngledriveType.None.ToXMLFormat()));
-				_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_PTO, 
-					new XElement(_defaultNamespace + XMLNames.Vehicle_PTO_ShaftsGearWheels, "none"), 
-					new XElement(_defaultNamespace + XMLNames.Vehicle_PTO_OtherElements, "none")));
-			}
-
-			
-
-			_Xelement.Add(_xmlWriterFactory.CreateComponentsWriter(_inputData.Components).GetComponents());
-		}
-
-		protected override void Initialize()
-		{
-			_defaultNamespace = XMLNamespaces.V20;
-			_Xelement = new XElement(_defaultNamespace + XMLNames.Component_Vehicle);
-			_Xelement.Add(new XAttribute(XMLNames.Component_ID_Attr, _inputData.Identifier));
-			_Xelement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, XMLNames.VehicleAttr_VehicleDeclarationType));
-		}
-    }
-
-    public class XMLVehicleWriter_v2_1 { }
-
-	public class XMLVehicleWriter_v2_7 { }
-
-	public class XMLVehicleWriter_PrimaryBus_v2_6 {}
-	
-    public class XMLVehicleWriter_ExcemptedVehicle_v2_2 { }
-
-
-	public class XMLVehicleWriter_v2_10 : XMLVehicleWriter
-	{
-		private readonly bool _exempted;
-		public static readonly (XNamespace version, string type)[] SUPPORTEDVERSIONS = {
-			(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)
-
-			//typeof(InterimStageBusVehicleViewModel).ToString(),
-			//typeof(StageInputViewModel).ToString()
-		};
-
-		private readonly IGroupWriterFactory _groupWriterFactory;
-		private readonly bool _conventional;
-		private readonly IComponentWriterFactory _componentWriterFactory;
-
-		public XMLVehicleWriter_v2_10(IVehicleDeclarationInputData inputData, 
-			IXMLWriterFactory xmlWriterFactory, 
-			IGroupWriterFactory groupWriterFactory, 
-			IComponentWriterFactory componentWriterFactory) : base(inputData, xmlWriterFactory)
-		{
-			
-			
-			_exempted = inputData.ExemptedVehicle;
-
-			_conventional = !_exempted;
-			_groupWriterFactory = groupWriterFactory;
-			_componentWriterFactory = componentWriterFactory;
-		}
-
-		#region Overrides of XMLVehicleWriter
-
-		protected override void Initialize()
-		{
-			_defaultNamespace = XMLNamespaces.V24;
-
-			_Xelement = new XElement(XMLNamespaces.V20 + XMLNames.Component_Vehicle, 
-				new XAttribute("xmlns",  _defaultNamespace));
-			
-			_Xelement.Add(new XAttribute(XMLNames.Component_ID_Attr, _inputData.Identifier ?? ("VEH-" + Guid.NewGuid().ToString("n").Substring(0, 20))));
-			if (_conventional) {
-				_Xelement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, "Vehicle_Conventional_CompletedBusDeclarationType"));
-			} else if(_exempted) {
-				_Xelement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, "Vehicle_Exempted_CompletedBusDeclarationType"));
-			}
-			
-		}
-
-		protected override void CreateElements()
-		{
-			if (_conventional) {
-				CreateConventionalElements();
-				return;
-			}
-
-			if (_exempted) {
-				CreateExemptedElements();
-				return;
-			}
-
-			throw new NotImplementedException("Old Implementation");
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_ManufacturerAddress,
-				_inputData.ManufacturerAddress));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_VIN, _inputData.VIN));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, XMLExtension.ToXmlFormat(DateTime.Today)));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_LegislativeCategory, _inputData.LegislativeClass.ToXMLFormat()));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.CorrectedActualMass, _inputData.CurbMassChassis?.ToXMLFormat(0)));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_TPMLM,
-				_inputData.GrossVehicleMassRating?.ToXMLFormat(0)));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AirdragModifiedMultistep, _inputData.AirdragModifiedMultistep));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem, _inputData.TankSystem));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_RegisteredClass, _inputData.RegisteredClass.ToXMLFormat()));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengerSeatsLowerDeck, _inputData.NumberPassengerSeatsLowerDeck));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengersStandingLowerDeck, _inputData.NumberPassengersStandingLowerDeck));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengerSeatsUpperDeck, _inputData.NumberPassengerSeatsUpperDeck));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengersStandingUpperDeck, _inputData.NumberPassengersStandingUpperDeck));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode, _inputData.VehicleCode.ToXMLFormat()));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_HeightIntegratedBody, _inputData.Height?.ConvertToMilliMeter()));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleLength, _inputData.Length?.ConvertToMilliMeter()));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleWidth, _inputData.Width?.ConvertToMilliMeter()));
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_EntranceHeight, _inputData.EntranceHeight?.ConvertToMilliMeter()));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology, 
-				_inputData.DoorDriveTechnology != null 
-					? _inputData.DoorDriveTechnology.ToXMLFormat()
-					: null));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleDeclarationType, _inputData.VehicleDeclarationType));
-
-			if (_inputData.ADAS != null) {
-				var adasNamespace = XMLNamespaces.V23;
-				var aDASElement = new XElement(_defaultNamespace + XMLNames.Vehicle_ADAS);
-				_Xelement.Add(aDASElement);
-				aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EngineStopStart, _inputData.ADAS.EngineStopStart));
-
-				bool ecoRollWithoutEngineStop = _inputData.ADAS.EcoRoll == EcoRollType.WithoutEngineStop;
-				bool ecoRollWithEngineStop = _inputData.ADAS.EcoRoll == EcoRollType.WithEngineStop;
-
-				aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, ecoRollWithoutEngineStop));
-				aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, ecoRollWithEngineStop));
-				aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_PCC,
-					_inputData.ADAS.PredictiveCruiseControl.ToXMLFormat()));
-				aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_ATEcoRollReleaseLockupClutch, _inputData.ADAS?.ATEcoRollReleaseLockupClutch ));
-			}
-			_Xelement.DescendantsAndSelf().Where(e => string.IsNullOrEmpty(e.Value)).Remove();
-
-			if (_inputData.Components != null) {
-				var componentElement = new XElement(
-					_defaultNamespace + XMLNames.Vehicle_Components,
-					new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type,
-						"CompletedVehicleComponentsDeclarationType"));
-
-				//Airdrag
-				if (_inputData.Components.AirdragInputData != null) {
-					var airDragElement = _xmlWriterFactory.CreateComponentWriter(_inputData.Components.AirdragInputData)
-						.GetElement();
-					var tempAirDragElement = new XElement(_defaultNamespace + XMLNames.Component_AirDrag);
-
-					airDragElement.Name = tempAirDragElement.Name;
-					componentElement.Add(airDragElement);
-				}
-
-				//auxiliaries
-				if (_inputData.Components.BusAuxiliaries != null) {
-					var auxiliaryElement = _xmlWriterFactory.CreateBuxAuxiliariesWriter(_inputData.Components.BusAuxiliaries)
-						.GetElement();
-					
-					componentElement.Add(auxiliaryElement);
-
-				}
-				_Xelement.Add(componentElement);
-
-			}
-		}
-
-		private void CreateConventionalElements()
-		{
-			_Xelement.Add(
-				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
-					GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup, _defaultNamespace).GetGroupElements(_inputData),
-				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
-					GroupNames.Vehicle_CompletedBusParametersSequenceGroup, _defaultNamespace).GetGroupElements(_inputData)
-			);
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem, _inputData.TankSystem));
-
-			// ReSharper disable once CoVariantArrayConversion
-			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
-				GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, _defaultNamespace).GetGroupElements(_inputData));
-
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode, _inputData.VehicleCode.ToXMLFormat()));
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
-
-
-			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
-					GroupNames.Vehicle_CompletedBus_DimensionsSequenceGroup, _defaultNamespace)
-				.GetGroupElements(_inputData));
-
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology,
-			_inputData.DoorDriveTechnology != null
-				? _inputData.DoorDriveTechnology.ToXMLFormat()
-				: null));
-
-			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleDeclarationType, _inputData.VehicleDeclarationType));
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.VehicleTypeApprovalNumber, _inputData.VehicleTypeApprovalNumber));
-
-			if (_inputData.ADAS != null) {
-				_Xelement.Add(_componentWriterFactory.getDeclarationAdasWriter(GroupNames.ADAS_Conventional_Type, _defaultNamespace).GetComponent(_inputData.ADAS));
-			}
-
-
-			if (_inputData.Components != null)
-			{
-				var componentElement = new XElement(
-					_defaultNamespace + XMLNames.Vehicle_Components,
-					new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type,
-						GUILabels.Components_Conventional_CompletedBusType));
-
-				//Airdrag
-				if (_inputData.Components.AirdragInputData != null)
-				{
-					var airDragElement = _xmlWriterFactory.CreateComponentWriter(_inputData.Components.AirdragInputData)
-						.GetElement();
-					var tempAirDragElement = new XElement(_defaultNamespace + XMLNames.Component_AirDrag);
-
-					airDragElement.Name = tempAirDragElement.Name;
-					componentElement.Add(airDragElement);
-				}
-
-				//auxiliaries
-				if (_inputData.Components.BusAuxiliaries != null)
-				{
-					var auxiliaryElement = _xmlWriterFactory.CreateBuxAuxiliariesWriter(_inputData.Components.BusAuxiliaries)
-						.GetElement();
-
-					componentElement.Add(auxiliaryElement);
-
-				}
-				_Xelement.Add(componentElement);
-
-			}
-
-		}
-
-
-		private void CreateExemptedElements()
-		{
-
-
-			// ReSharper disable once CoVariantArrayConversion
-			_Xelement.Add(_groupWriterFactory
-				.GetVehicleDeclarationGroupWriter(GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup,
-					_defaultNamespace).GetGroupElements(_inputData));
-
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
-            _Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_LegislativeCategory, _inputData.LegislativeClass.ToXMLFormat()));
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.CorrectedActualMass, _inputData.CurbMassChassis?.ToXMLFormat(0)));
-            _Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_TPMLM,
-                _inputData.GrossVehicleMassRating?.ToXMLFormat(0)));
-
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_RegisteredClass, _inputData.RegisteredClass.ToXMLFormat()));
-
-			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, _defaultNamespace).GetGroupElements(_inputData));
-			
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode, _inputData.VehicleCode.ToXMLFormat()));
-
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
-
-			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_HeightIntegratedBody, _inputData.Height?.ConvertToMilliMeter()));
-		}
-
-		#endregion
-	}
-
-}
diff --git a/VECTO3GUI2020/Util/XML/Implementation/DocumentWriter/XMLDeclarationJobWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/DocumentWriter/XMLDeclarationJobWriter.cs
deleted file mode 100644
index 53a6380c3f41c1a4d2f5e0c81d26c5c9d737d8d5..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Implementation/DocumentWriter/XMLDeclarationJobWriter.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Xml.Linq;
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCommon.Resources;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
-using VECTO3GUI2020.Util.XML.Interfaces;
-using VECTO3GUI2020.ViewModel.Implementation.JobEdit;
-
-namespace VECTO3GUI2020.Util.XML.Implementation.DocumentWriter
-{
-    public abstract class XMLDeclarationJobWriter : IXMLDeclarationJobWriter
-    {
-
-		protected XDocument _xDocument;
-		protected string _schemaVersion;
-		private IXMLWriterFactory _xmlWriterFactory;
-
-		protected string LocalSchemaLocation = @"V:\VectoCore\VectoCore\Resources\XSD\";
-
-		//Must be overwritten by subclasses;
-		protected abstract void Initialize();
-
-
-
-		public XMLDeclarationJobWriter(IDeclarationJobInputData inputData, IXMLWriterFactory xmlWriterFactory)
-		{
-			_xmlWriterFactory = xmlWriterFactory;
-			Initialize();
-
-			(_xDocument.FirstNode as XElement)?.Add(_xmlWriterFactory.CreateVehicleWriter(inputData.Vehicle).GetElement());
-			var rootElement = _xDocument.FirstNode as XElement;
-			
-		}
-
-
-
-
-
-        public XDocument GetDocument()
-        {
-            return _xDocument;
-        }
-    }
-
-
-    public class XMLDeclarationJobWriter_v1_0 : XMLDeclarationJobWriter
-	{
-		
-
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(XMLDeclarationJobInputDataProviderV10).ToString()
-		};
-		public XMLDeclarationJobWriter_v1_0(IDeclarationJobInputData inputData, IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory)
-        {
-            
-        }
-		protected override void Initialize()
-		{
-			throw new NotImplementedException();
-		}
-
-
-    }
-
-    public class XMLDeclarationJobWriter_v2_0 : XMLDeclarationJobWriter
-	{
-
-		public static readonly string[] SUPPORTED_VERSIONS = {
-			typeof(DeclarationJobEditViewModel_v2_0).ToString(),
-            typeof(XMLDeclarationJobInputDataProviderV20).ToString()
-		};
-
-		public XMLDeclarationJobWriter_v2_0(IDeclarationJobInputData inputData, IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory)
-        {
-
-        }
-
-        protected override void Initialize()
-		{
-			_schemaVersion = "2.0";
-			_xDocument = new XDocument();
-
-			var xElement = new XElement(XMLNamespaces.Tns_v20 + XMLNames.VectoInputDeclaration);
-			_xDocument.Add(xElement);
-
-			xElement.Add(new XAttribute("schemaVersion", _schemaVersion));
-			xElement.Add(new XAttribute("xmlns", XMLNamespaces.DeclarationDefinition + ":v" + _schemaVersion));
-			xElement.Add(new XAttribute(XNamespace.Xmlns + "xsi", XMLNamespaces.Xsi.NamespaceName));
-			xElement.Add(new XAttribute(XNamespace.Xmlns + "tns", XMLNamespaces.Tns_v20));
-			xElement.Add(new XAttribute(XMLNamespaces.Xsi + "schemaLocation",
-				$"{XMLNamespaces.DeclarationRootNamespace} {LocalSchemaLocation}VectoDeclarationJob.xsd"));
-
-			Debug.WriteLine(_xDocument.ToString());
-		}
-    }
-
-}
diff --git a/VECTO3GUI2020/Util/XML/Interfaces/IXMLComponentWriter.cs b/VECTO3GUI2020/Util/XML/Interfaces/IXMLComponentWriter.cs
deleted file mode 100644
index ac5bf9d65c69cbaa91fd525c159c953264fbfc2b..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Interfaces/IXMLComponentWriter.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Xml.Linq;
-
-namespace VECTO3GUI2020.Util.XML.Interfaces
-{
-    public interface IXMLComponentWriter
-	{
-		XElement GetElement();
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Interfaces/IXMLComponentsWriter.cs b/VECTO3GUI2020/Util/XML/Interfaces/IXMLComponentsWriter.cs
deleted file mode 100644
index 5ac14496747748a0b6138f2d71985a60969ca752..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Interfaces/IXMLComponentsWriter.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Xml.Linq;
-
-namespace VECTO3GUI2020.Util.XML.Interfaces
-{
-	public interface IXMLComponentsWriter
-	{
-		XElement GetComponents();
-	}
-}
\ No newline at end of file
diff --git a/VECTO3GUI2020/Util/XML/Interfaces/IXMLDeclarationJobWriter.cs b/VECTO3GUI2020/Util/XML/Interfaces/IXMLDeclarationJobWriter.cs
deleted file mode 100644
index b9854e0d632f9153a06c453001a5550d1655ab0f..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Interfaces/IXMLDeclarationJobWriter.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Xml.Linq;
-
-namespace VECTO3GUI2020.Util.XML.Interfaces
-{
-    public interface IXMLDeclarationJobWriter
-	{
-		XDocument GetDocument();
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Interfaces/IXMLVehicleWriter.cs b/VECTO3GUI2020/Util/XML/Interfaces/IXMLVehicleWriter.cs
deleted file mode 100644
index 6af7fe70e31c41004a7aaf81af669baabdbd809f..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Interfaces/IXMLVehicleWriter.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Xml.Linq;
-
-namespace VECTO3GUI2020.Util.XML.Interfaces
-{
-    public interface IXMLVehicleWriter
-    {
-		XElement GetElement();
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Interfaces/IXMLWriterFactory.cs b/VECTO3GUI2020/Util/XML/Interfaces/IXMLWriterFactory.cs
deleted file mode 100644
index 8641d7754bb528ad264146cb991f4dbb49ebea29..0000000000000000000000000000000000000000
--- a/VECTO3GUI2020/Util/XML/Interfaces/IXMLWriterFactory.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using TUGraz.VectoCommon.InputData;
-using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
-using TUGraz.VectoCore.Models.Connector.Ports;
-using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
-using TUGraz.VectoCore.OutputData.XML.Engineering.Writer;
-using VECTO3GUI2020.Util.XML.Implementation.ComponentWriter;
-
-namespace VECTO3GUI2020.Util.XML.Interfaces
-{
-    public interface IXMLWriterFactory
-	{
-		IXMLDeclarationJobWriter CreateJobWriter(IDeclarationJobInputData inputData);
-		IXMLVehicleWriter CreateVehicleWriter(IVehicleDeclarationInputData inputData);
-		IXMLComponentWriter CreateComponentWriter(IComponentInputData inputData);
-		IXMLComponentWriter CreateComponentWriter(IAuxiliariesDeclarationInputData inputData);
-		IXMLComponentWriter CreateComponentWriter(IAxlesDeclarationInputData inputData);
-		IXMLComponentWriter CreateComponentWriter(IAxleDeclarationInputData inputData);
-		IXMLComponentWriter CreateComponentWriter(IAirdragDeclarationInputData inputData);
-
-		IXMLComponentWriter CreateComponentWriter(IPTOTransmissionInputData inputData);
-		IXMLComponentsWriter CreateComponentsWriter(IVehicleComponentsDeclaration inputData);
-
-		IXMLBusAuxiliariesWriter CreateBuxAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData);
-	}
-
-	public interface IXMLWriterFactoryInternal
-	{
-		TWriter CreateWriter<TWriter, TData>(DataSource source, TData inputData);
-	}
-
-	public class XMLWriterFactory : IXMLWriterFactory
-	{
-		private IXMLWriterFactoryInternal _internalFactory;
-
-		private TWriter CreateWriter<TWriter, TData>(DataSource source, TData inputData)
-		{
-			return _internalFactory.CreateWriter<TWriter, TData>(source, inputData);
-		}
-
-
-		#region Implementation of IXMLWriterFactory
-
-		public IXMLDeclarationJobWriter CreateJobWriter(IDeclarationJobInputData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLVehicleWriter CreateVehicleWriter(IVehicleDeclarationInputData inputData)
-		{
-			return _internalFactory.CreateWriter<IXMLVehicleWriter, IVehicleDeclarationInputData>(inputData.DataSource, inputData);
-			//throw new System.NotImplementedException();
-		}
-
-		public IXMLComponentWriter CreateComponentWriter(IComponentInputData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLComponentWriter CreateComponentWriter(IAuxiliariesDeclarationInputData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLComponentWriter CreateComponentWriter(IAxlesDeclarationInputData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLComponentWriter CreateComponentWriter(IAxleDeclarationInputData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLComponentWriter CreateComponentWriter(IAirdragDeclarationInputData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLComponentWriter CreateComponentWriter(IPTOTransmissionInputData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLComponentsWriter CreateComponentsWriter(IVehicleComponentsDeclaration inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		public IXMLBusAuxiliariesWriter CreateBuxAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData)
-		{
-			throw new System.NotImplementedException();
-		}
-
-		#endregion
-	}
-}
diff --git a/VECTO3GUI2020/Util/XML/Vehicle/IXMLVehicleWriter.cs b/VECTO3GUI2020/Util/XML/Vehicle/IXMLVehicleWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4e1cd3d484eb156afbacd86b0b7a7081c0af6ddf
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Vehicle/IXMLVehicleWriter.cs
@@ -0,0 +1,9 @@
+using System.Xml.Linq;
+
+namespace VECTO3GUI2020.Util.XML.Vehicle
+{
+    public interface IXMLVehicleWriter
+    {
+        XElement GetElement();
+    }
+}
diff --git a/VECTO3GUI2020/Util/XML/Vehicle/XMLVehicleWriter.cs b/VECTO3GUI2020/Util/XML/Vehicle/XMLVehicleWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2433ac4345df363ec760fe38ba09dfedcd3e9be7
--- /dev/null
+++ b/VECTO3GUI2020/Util/XML/Vehicle/XMLVehicleWriter.cs
@@ -0,0 +1,459 @@
+using System;
+using System.Diagnostics;
+using System.Linq;
+using System.Security.RightsManagement;
+using System.Xml;
+using System.Xml.Linq;
+using System.Xml.Serialization;
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.OutputData.XML.ComponentWriter;
+using TUGraz.VectoCore.OutputData.XML.GroupWriter;
+using TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration;
+using TUGraz.VectoCore.Utils;
+using VECTO3GUI2020.Helper;
+using VECTO3GUI2020.Properties;
+using VECTO3GUI2020.Resources.XML;
+using VECTO3GUI2020.Util.XML;
+using VECTO3GUI2020.Util.XML.Vehicle;
+using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle;
+using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle;
+using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
+
+namespace VECTO3GUI2020.Util.XML.Vehicle
+{
+	public abstract class XMLVehicleWriter : IXMLVehicleWriter
+	{
+		#region XML
+
+		protected XElement _Xelement;
+
+		protected XNamespace _defaultNamespace;
+
+		#endregion
+
+		//Template Methods
+		protected abstract void Initialize();
+		protected abstract void CreateElements();
+
+		protected readonly IVehicleDeclarationInputData _inputData;
+		protected IXMLWriterFactory _xmlWriterFactory;
+
+		public XMLVehicleWriter(IVehicleDeclarationInputData inputData, IXMLWriterFactory xmlWriterFactory)
+		{
+			Debug.Assert(inputData != null);
+			_inputData = inputData;
+			_xmlWriterFactory = xmlWriterFactory;
+		}
+
+
+		public XElement GetElement()
+		{
+			if (_Xelement == null) {
+				Initialize();
+				CreateElements();
+			}
+
+			return _Xelement;
+		}
+	}
+
+	public abstract class XMLCompletedBusVehicleWriter : XMLVehicleWriter
+	{
+		protected readonly IComponentWriterFactory _componentWriterFactory;
+		protected readonly IGroupWriterFactory _groupWriterFactory;
+		public abstract string VehicleType { get; }
+
+
+		protected XMLCompletedBusVehicleWriter(IVehicleDeclarationInputData inputData,
+			IXMLWriterFactory xmlWriterFactory, IGroupWriterFactory groupWriterFactory,
+			IComponentWriterFactory componentWriterFactory) : base(inputData, xmlWriterFactory)
+		{
+			_groupWriterFactory = groupWriterFactory;
+			_componentWriterFactory = componentWriterFactory;
+		}
+
+		protected override void Initialize()
+		{
+			_defaultNamespace = XMLNamespaces.V24;
+
+			var type = new XmlTypeAttribute();
+			type.Namespace = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24;
+			type.TypeName = VehicleType;
+
+			XNamespace v20 = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20;
+			_Xelement = new XElement(v20 + XMLNames.Component_Vehicle,
+				new XAttribute(XMLNames.Component_ID_Attr,
+					_inputData.Identifier ?? "VEH-" + Guid.NewGuid().ToString("n").Substring(0, 20)),
+				new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, VehicleType),
+				new XAttribute("xmlns", _defaultNamespace));
+		}
+	}
+
+	public class XMLCompletedBusVehicleWriterExempted : XMLCompletedBusVehicleWriter
+	{
+		public static readonly (XNamespace version, string type)[] SUPPORTEDVERSIONS = {
+			(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24,
+				XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE)
+		};
+
+		#region Overrides of XMLCompletedBusVehicleWriter
+
+		public override string VehicleType => XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE;
+
+		#endregion
+
+
+		#region Overrides of XMLVehicleWriter
+
+		public XMLCompletedBusVehicleWriterExempted(IVehicleDeclarationInputData inputData,
+			IXMLWriterFactory xmlWriterFactory, IGroupWriterFactory groupWriterFactory,
+			IComponentWriterFactory componentWriterFactory) : base(inputData, xmlWriterFactory, groupWriterFactory,
+			componentWriterFactory) { }
+
+		protected override void CreateElements()
+		{
+			// ReSharper disable once CoVariantArrayConversion
+			_Xelement.Add(_groupWriterFactory
+				.GetVehicleDeclarationGroupWriter(GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup,
+					_defaultNamespace).GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_LegislativeCategory,
+				_inputData.LegislativeClass.ToXMLFormat()));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.CorrectedActualMass,
+				_inputData.CurbMassChassis?.ToXMLFormat(0)));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_TPMLM,
+				_inputData.GrossVehicleMassRating?.ToXMLFormat(0)));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_RegisteredClass,
+				_inputData.RegisteredClass.ToXMLFormat()));
+
+			_Xelement.Add(_groupWriterFactory
+				.GetVehicleDeclarationGroupWriter(GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup,
+					_defaultNamespace).GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode,
+				_inputData.VehicleCode.ToXMLFormat()));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_HeightIntegratedBody,
+				_inputData.Height?.ConvertToMilliMeter()));
+		}
+
+		#endregion
+	}
+
+	public class XMLCompletedBusVehicleWriterConventional : XMLCompletedBusVehicleWriter
+	{
+		public static readonly (XNamespace version, string type)[] SUPPORTEDVERSIONS = {
+			(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24,
+				XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)
+		};
+
+		private readonly IGroupWriterFactory _groupWriterFactory;
+		private readonly bool _conventional;
+		private readonly IComponentWriterFactory _componentWriterFactory;
+
+		public override string VehicleType => XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE;
+
+		public XMLCompletedBusVehicleWriterConventional(IVehicleDeclarationInputData inputData,
+			IXMLWriterFactory xmlWriterFactory,
+			IGroupWriterFactory groupWriterFactory,
+			IComponentWriterFactory componentWriterFactory) : base(inputData, xmlWriterFactory, groupWriterFactory,
+			componentWriterFactory)
+		{
+			_groupWriterFactory = groupWriterFactory;
+			_componentWriterFactory = componentWriterFactory;
+		}
+
+		#region Overrides of XMLVehicleWriter
+
+		protected override void CreateElements()
+		{
+			CreateConventionalElements();
+		}
+
+		private void CreateConventionalElements()
+		{
+			_Xelement.Add(
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData),
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBusParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData)
+			);
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem,
+				_inputData.TankSystem));
+
+			// ReSharper disable once CoVariantArrayConversion
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode,
+				_inputData.VehicleCode.ToXMLFormat()));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
+
+
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_DimensionsSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(
+				_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology,
+				_inputData.DoorDriveTechnology != null
+					? _inputData.DoorDriveTechnology.ToXMLFormat()
+					: null));
+
+			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleDeclarationType,
+				_inputData.VehicleDeclarationType));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.VehicleTypeApprovalNumber,
+				_inputData.VehicleTypeApprovalNumber));
+
+			if (_inputData.ADAS != null) {
+				_Xelement.Add(_componentWriterFactory
+					.getDeclarationAdasWriter(GroupNames.ADAS_Conventional_Type, _defaultNamespace)
+					.GetComponent(_inputData.ADAS));
+			}
+
+			if (_inputData.Components != null) {
+				_Xelement.Add(_xmlWriterFactory.CreateComponentsWriterWithVersion(
+					XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24,
+					XMLTypes.Components_Conventional_CompletedBusType,
+					_inputData.Components).GetComponents());
+            }
+		}
+
+		#endregion
+	}
+
+	public class XMLCompletedBusVehicleWriterHEV : XMLCompletedBusVehicleWriter
+	{
+		public static (XNamespace version, string type) VERSION = (
+			XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24,
+			XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE);
+
+		#region Overrides of XMLCompletedBusVehicleWriter
+
+		public override string VehicleType => XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE;
+
+		#endregion
+
+		public XMLCompletedBusVehicleWriterHEV(IVehicleDeclarationInputData inputData,
+			IXMLWriterFactory xmlWriterFactory, IGroupWriterFactory groupWriterFactory,
+			IComponentWriterFactory componentWriterFactory) : base(inputData, xmlWriterFactory, groupWriterFactory,
+			componentWriterFactory) { }
+
+		#region Overrides of XMLVehicleWriter
+
+		protected override void CreateElements()
+		{
+			_Xelement.Add(
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData),
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBusParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData)
+			);
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem,
+				_inputData.TankSystem));
+
+			// ReSharper disable once CoVariantArrayConversion
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode,
+				_inputData.VehicleCode.ToXMLFormat()));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
+
+
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_DimensionsSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(
+				_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology,
+				_inputData.DoorDriveTechnology != null
+					? _inputData.DoorDriveTechnology.ToXMLFormat()
+					: null));
+
+			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleDeclarationType,
+				_inputData.VehicleDeclarationType));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.VehicleTypeApprovalNumber,
+				_inputData.VehicleTypeApprovalNumber));
+
+			if (_inputData.ADAS != null) {
+
+				_Xelement.Add(_componentWriterFactory
+					.getDeclarationAdasWriter(GroupNames.ADAS_HEV_Type, _defaultNamespace)
+					.GetComponent(_inputData.ADAS));
+			}
+
+			if (_inputData.Components != null) {
+				_Xelement.Add(_xmlWriterFactory.CreateComponentsWriterWithVersion(
+					XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.Components_xEV_CompletedBusType,
+					_inputData.Components).GetComponents());
+            }
+		}
+
+		#endregion
+	}
+
+	public class XMLCompletedBusVehicleWriterPEV : XMLCompletedBusVehicleWriter
+	{
+		public static (XNamespace version, string type) VERSION = (
+			XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24,
+			XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE);
+
+		#region Overrides of XMLCompletedBusVehicleWriter
+
+		public override string VehicleType => XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE;
+
+		#endregion
+
+		public XMLCompletedBusVehicleWriterPEV(IVehicleDeclarationInputData inputData,
+			IXMLWriterFactory xmlWriterFactory, IGroupWriterFactory groupWriterFactory,
+			IComponentWriterFactory componentWriterFactory) : base(inputData, xmlWriterFactory, groupWriterFactory,
+			componentWriterFactory) { }
+
+		#region Overrides of XMLVehicleWriter
+
+		protected override void CreateElements()
+		{
+			_Xelement.Add(
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData),
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBusParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData)
+			);
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem,
+				_inputData.TankSystem));
+
+			// ReSharper disable once CoVariantArrayConversion
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode,
+				_inputData.VehicleCode.ToXMLFormat()));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
+
+
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_DimensionsSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(
+				_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology,
+				_inputData.DoorDriveTechnology != null
+					? _inputData.DoorDriveTechnology.ToXMLFormat()
+					: null));
+
+			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleDeclarationType,
+				_inputData.VehicleDeclarationType));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.VehicleTypeApprovalNumber,
+				_inputData.VehicleTypeApprovalNumber));
+
+			if (_inputData.ADAS != null) {
+				_Xelement.Add(_componentWriterFactory
+					.getDeclarationAdasWriter(GroupNames.ADAS_PEV_Type, _defaultNamespace)
+					.GetComponent(_inputData.ADAS));
+			}
+
+			if (_inputData.Components != null) {
+				_Xelement.Add(_xmlWriterFactory.CreateComponentsWriterWithVersion(
+					XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.Components_xEV_CompletedBusType,
+					_inputData.Components).GetComponents());
+            }
+
+		}
+	}
+
+	#endregion
+
+	public class XMLCompletedBusVehicleWriterIEPC : XMLCompletedBusVehicleWriter
+	{
+		public static (XNamespace version, string type) VERSION = (
+			XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24,
+			XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE);
+
+		#region Overrides of XMLCompletedBusVehicleWriter
+
+		public override string VehicleType => XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE;
+
+		#endregion
+
+		public XMLCompletedBusVehicleWriterIEPC(IVehicleDeclarationInputData inputData,
+			IXMLWriterFactory xmlWriterFactory,
+			IGroupWriterFactory groupWriterFactory, IComponentWriterFactory componentWriterFactory) : base(inputData,
+			xmlWriterFactory, groupWriterFactory, componentWriterFactory) { }
+
+		#region Overrides of XMLVehicleWriter
+
+		protected override void CreateElements()
+		{
+			_Xelement.Add(
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData),
+				_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+						GroupNames.Vehicle_CompletedBusParametersSequenceGroup, _defaultNamespace)
+					.GetGroupElements(_inputData)
+			);
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem,
+				_inputData.TankSystem));
+
+			// ReSharper disable once CoVariantArrayConversion
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Vehicle_BodyworkCode,
+				_inputData.VehicleCode.ToXMLFormat()));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry));
+
+
+			_Xelement.Add(_groupWriterFactory.GetVehicleDeclarationGroupWriter(
+					GroupNames.Vehicle_CompletedBus_DimensionsSequenceGroup, _defaultNamespace)
+				.GetGroupElements(_inputData));
+
+			_Xelement.AddIfContentNotNull(new XElement(
+				_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology,
+				_inputData.DoorDriveTechnology != null
+					? _inputData.DoorDriveTechnology.ToXMLFormat()
+					: null));
+
+			_Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleDeclarationType,
+				_inputData.VehicleDeclarationType));
+			_Xelement.AddIfContentNotNull(new XElement(_defaultNamespace + XMLNames.VehicleTypeApprovalNumber,
+				_inputData.VehicleTypeApprovalNumber));
+
+			if (_inputData.ADAS != null) {
+				_Xelement.Add(_componentWriterFactory
+					.getDeclarationAdasWriter(GroupNames.ADAS_IEPC_Type, _defaultNamespace)
+					.GetComponent(_inputData.ADAS));
+            }
+
+			if (_inputData.Components != null) {
+				_Xelement.Add(_xmlWriterFactory.CreateComponentsWriterWithVersion(
+					XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.Components_xEV_CompletedBusType,
+					_inputData.Components).GetComponents());
+			}
+		}
+	}
+}
+
+#endregion
\ No newline at end of file
diff --git a/VECTO3GUI2020/VECTO3GUI2020.csproj b/VECTO3GUI2020/VECTO3GUI2020.csproj
index 7391cfdddf0f9b764ab60933f67ad83abf3d02ab..31403c6cfc1af0797592ee1f5f80fab85094505e 100644
--- a/VECTO3GUI2020/VECTO3GUI2020.csproj
+++ b/VECTO3GUI2020/VECTO3GUI2020.csproj
@@ -113,6 +113,10 @@
     </Page>
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Util\XML\Implementation\DocumentWriter\" />
+  </ItemGroup>
+
 
     <!--Workauround for build error-->
 	<!--https://github.com/dotnet/wpf/pull/6680-->
diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs
index 04eb90dc0ef20e40e282d097e52f5a46e686f6ea..94738786e2785883ab84862372713af4f980b089 100644
--- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs
@@ -17,12 +17,12 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
 using VECTO3GUI2020.Helper;
 using VECTO3GUI2020.Properties;
-using VECTO3GUI2020.Util.XML.Interfaces;
 using VECTO3GUI2020.ViewModel.Implementation.Common;
 using VECTO3GUI2020.ViewModel.Interfaces;
 using VECTO3GUI2020.ViewModel.Interfaces.JobEdit;
 using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle;
 using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components;
+using VECTO3GUI2020.Util.XML;
 
 namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit
 {
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel.cs
index cdb42f0413ed05ff281ca415d074b15d6d66796a..813df32c9a351a28ad05b07511e9a63342bf79a4 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel.cs
@@ -68,6 +68,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 		public static string VERSION = INPUTPROVIDERTYPE.ToString();
 		public static string VERSION_EXEMPTED = INPUTPROVIDERTYPEEXEMPTED.ToString();
 
+		public abstract StageInputViewModel.CompletedBusArchitecture Architecture { get; }
 
 		private readonly IMultiStageViewModelFactory _multiStageViewModelFactory;
 
@@ -239,12 +240,9 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 				MultistageAirdragViewModel = _multiStageViewModelFactory.GetMultistageAirdragViewModel(consolidatedVehicleData?.Components?.AirdragInputData);
 
 				MultistageAirdragViewModel.AirdragViewModelChanged += ((sender, args) => {
-					if (sender is IMultistageAirdragViewModel vm)
-					{
-						if (AirdragModifiedMultistepMandatory)
-						{
-							if (vm.AirDragViewModel != null)
-							{
+					if (sender is IMultistageAirdragViewModel vm) {
+						if (AirdragModifiedMultistepMandatory) {
+							if (vm.AirDragViewModel != null) {
 								AirdragModifiedMultistep = true;
 							}
 						}
@@ -1299,7 +1297,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		}
 		public InterimStageConventionalBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
-    }
+
+		#region Overrides of InterimStageBusVehicleViewModel
+
+		public override StageInputViewModel.CompletedBusArchitecture Architecture =>
+			StageInputViewModel.CompletedBusArchitecture.Conventional;
+
+		#endregion
+	}
 	
 
     public class InterimStageExemptedBusVehicleViewModel : InterimStageBusVehicleViewModel
@@ -1316,6 +1321,13 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			
 		}
 
+
+		#region Overrides of InterimStageBusVehicleViewModel
+
+		public override StageInputViewModel.CompletedBusArchitecture Architecture =>
+			StageInputViewModel.CompletedBusArchitecture.Exempted;
+
+		#endregion
 	}
 
 	public class InterimStageHevBusVehicleViewModel : InterimStageBusVehicleViewModel
@@ -1328,6 +1340,11 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 		}
 
 		public InterimStageHevBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
+
+		public override StageInputViewModel.CompletedBusArchitecture Architecture
+		{
+			get => StageInputViewModel.CompletedBusArchitecture.HEV;
+		}
 	}
 
 	public class InterimStagePevBusVehicleViewModel : InterimStageBusVehicleViewModel
@@ -1339,7 +1356,16 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		}
 		public InterimStagePevBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
-    }
+
+		#region Overrides of InterimStageBusVehicleViewModel
+
+		public override StageInputViewModel.CompletedBusArchitecture Architecture
+		{
+			get { return StageInputViewModel.CompletedBusArchitecture.PEV; }
+		}
+
+		#endregion
+	}
 
 	public class InterimStageIEPCBusVehicleViewModel : InterimStageBusVehicleViewModel
 	{
@@ -1350,6 +1376,13 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		}
 		public InterimStageIEPCBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
-    }
+
+		#region Overrides of InterimStageBusVehicleViewModel
+
+		public override StageInputViewModel.CompletedBusArchitecture Architecture =>
+			StageInputViewModel.CompletedBusArchitecture.IEPC;
+
+		#endregion
+	}
 
 }
\ No newline at end of file
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
index 4093dcb66c7d84beea74d21f38cd0d0577598762..918e5b32ab4dd579c5fb84d6a180ce47950bea56 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
@@ -536,6 +536,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		#region Implementation of interfaces (unused Properties);
 
+		public DataSource DataSource { get; }
 		public XmlNode XMLSource => throw new NotImplementedException();
 
 		public string FanTechnology => throw new NotImplementedException();
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs
index a72db4c74fede1f9c21f051eede2d53578136320..aed04bc9a615eaab96bc90fbd13de6de8bf9c332 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs
@@ -52,6 +52,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
                 if (SetProperty(ref _architecture, value))
                 {
                     UpdateVehicleViewModel();
+                    OnPropertyChanged(nameof(SwitchComponentViewCommand));
                 }
             }
         }
@@ -101,11 +102,12 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
         public StageInputViewModel(IDeclarationInputDataProvider inputData, IMultiStageViewModelFactory multiStageViewModelFactory, IAdditionalJobInfoViewModel additionalJobInfoViewModel) : this(multiStageViewModelFactory, additionalJobInfoViewModel)
         {
             _documentName = inputData.JobInputData.JobName;
-
+            
+			_vehicleViewModel = _viewModelFactory.GetInterimStageVehicleViewModel(inputData.JobInputData.Vehicle);
             //_vehicleViewModel =
             //	_viewModelFactory.CreateStageInputVehicleViewModel(inputData.JobInputData.Vehicle) as IMultistageVehicleViewModel;
             //	(_vehicleViewModel as InterimStageBusVehicleViewModel).ShowConsolidatedData = false;
-
+			_architecture = _vehicleViewModel.Architecture;
             _dataSource = inputData.DataSource;
             VehicleInputDataFilePath = _dataSource.SourceFile;
 
@@ -144,12 +146,13 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
             Components["auxiliaries"] = VehicleViewModel.MultistageAuxiliariesViewModel as IViewModelBase;
             Components["airdrag"] = VehicleViewModel.MultistageAirdragViewModel as IViewModelBase;
 
-			
+
+			CurrentView = null;
 			if (prevKey != null) {
 				CurrentView = Components[prevKey];
-			} else {
-				CurrentView = VehicleViewModel as IViewModelBase;
-            }
+			}
+			CurrentView = CurrentView ?? VehicleViewModel as IViewModelBase;
+            
             
 
 
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs
index 5fa7479e285b5b77ce674e3f271a75da187025a0..f184661710a2142ea2c103852bc7407924a05058 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs
@@ -22,6 +22,7 @@ IMultistageViewModelFactoryFirstParameterAsNameInstanceProvider
     {
 		//IVehicleViewModel GetInterimStageVehicleViewModel(StageInputViewModel.CompletedBusArchitecture arch);
 		IMultistageVehicleViewModel GetInterimStageVehicleViewModel(StageInputViewModel.CompletedBusArchitecture arch);
+		IMultistageVehicleViewModel GetInterimStageVehicleViewModel(IVehicleDeclarationInputData inputData);
 	}
 
 
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageVehicleViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageVehicleViewModel.cs
index c2349ca4cffa52814b41d11b820e3b29634b1da5..01cbeefad06fb61014e98dbb61d1a7cec5610fba 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageVehicleViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageVehicleViewModel.cs
@@ -14,6 +14,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Interfaces
 		IMultistageAuxiliariesViewModel MultistageAuxiliariesViewModel { get; set; }
 		bool PrimaryVehicleHybridElectric { get; set; }
 		bool ShowConsolidatedData { get; set; }
+		StageInputViewModel.CompletedBusArchitecture Architecture { get; }
 		void SetVehicleInputData(IVehicleDeclarationInputData vehicleInputData, bool checkExempted);
 	}
 }
diff --git a/Vecto3GUI2020Test/MockInput/MockDocument.cs b/Vecto3GUI2020Test/MockInput/MockDocument.cs
index 5a8343aded3adfb98d1f528a16f4606038a46edb..b21146d679aee40875a4c4d7ffd47b9f702b6fed 100644
--- a/Vecto3GUI2020Test/MockInput/MockDocument.cs
+++ b/Vecto3GUI2020Test/MockInput/MockDocument.cs
@@ -25,7 +25,7 @@ public static class MockDocument
 
     public static IDeclarationInputDataProvider GetDeclarationJob()
     {
-        var mock = new Mock<IDeclarationInputDataProvider>();
+        var mock = new Mock<IDeclarationInputDataProvider>(MockBehavior.Strict);
         mock.SetupGet(i => i.DataSource).Returns(MockInput.GetMockDataSource("VectoInputDeclaration",
             XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20));
 		mock.SetupGet(i => i.JobInputData).Returns(GetDeclarationJobInputData());
@@ -36,7 +36,8 @@ public static class MockDocument
 
 	public static IMultistepBusInputDataProvider GetMultistepInput(XNamespace stepInputVersion, string stepInputType, int nrOfStages)
 	{
-		var mock = new Mock<IMultistepBusInputDataProvider>();
+		
+		var mock = new Mock<IMultistepBusInputDataProvider>(MockBehavior.Strict);
 		mock.SetupGet(m => m.JobInputData).Returns(GetMultistageJobInputData(version:stepInputVersion, type:stepInputType, nrOfStages:nrOfStages));
 		mock.SetupGet(m => m.DataSource).Returns(MockInput.GetMockDataSource(XMLDeclarationInputDataProviderMultistageV01.XSD_TYPE, XMLDefinitions.DECLARATION_MULTISTAGE_BUS_VEHICLE_NAMESPACE_VO1));
         
diff --git a/Vecto3GUI2020Test/ViewModelTests/FactoryTests/DocumentViewModelFactoryTest.cs b/Vecto3GUI2020Test/ViewModelTests/FactoryTests/DocumentViewModelFactoryTest.cs
index 83dacbfbd9f7a2f39c487948ceee6203be441f46..a13ac69973c1f33e4d6858661ccc3b4c589bf1b2 100644
--- a/Vecto3GUI2020Test/ViewModelTests/FactoryTests/DocumentViewModelFactoryTest.cs
+++ b/Vecto3GUI2020Test/ViewModelTests/FactoryTests/DocumentViewModelFactoryTest.cs
@@ -35,10 +35,10 @@ namespace Vecto3GUI2020Test.ViewModelTests.FactoryTests
 		}
 
 		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
+		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE)]
+		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE)]
+		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE)]
+		[TestCase( XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE)]
         public void StepInputDocument(string version, string type)
 		{
 			XNamespace ns = version;
@@ -47,7 +47,32 @@ namespace Vecto3GUI2020Test.ViewModelTests.FactoryTests
 				version);
 			var document = _documentViewModelFactory.CreateDocumentViewModel(vehicleInput);
 			var stepInputViewModel = document as StageInputViewModel;
-			Assert.NotNull(stepInputViewModel);
+
+			var arch = stepInputViewModel.Architecture;
+			if (type == XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE) {
+				Assert.AreEqual(arch, StageInputViewModel.CompletedBusArchitecture.Conventional);
+			}
+
+			if (type == XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE) {
+				Assert.AreEqual(arch, StageInputViewModel.CompletedBusArchitecture.PEV);
+			}
+
+			if (type == XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE)
+			{
+				Assert.AreEqual(arch, StageInputViewModel.CompletedBusArchitecture.HEV);
+			}
+
+			if (type == XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE)
+			{
+				Assert.AreEqual(arch, StageInputViewModel.CompletedBusArchitecture.IEPC);
+			}
+
+			if (type == XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE)
+			{
+				Assert.AreEqual(arch, StageInputViewModel.CompletedBusArchitecture.Exempted);
+			}
+
+            Assert.NotNull(stepInputViewModel);
 		}
 
 		[TestCase]
@@ -59,15 +84,20 @@ namespace Vecto3GUI2020Test.ViewModelTests.FactoryTests
 		}
 
 
-		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)]
-        public void MultistepInput(string version, string type)
+		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE, VectoSimulationJobType.ConventionalVehicle)]
+		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE, VectoSimulationJobType.SerialHybridVehicle)]
+		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE, VectoSimulationJobType.ParallelHybridVehicle)]
+        [TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE, VectoSimulationJobType.BatteryElectricVehicle)]
+		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE, VectoSimulationJobType.IEPC_E)]
+		[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE, VectoSimulationJobType.EngineOnlySimulation)]
+        public void MultistepInput(string version, string type, VectoSimulationJobType jobType)
 		{
 			var ns = version;
 			IMultistepBusInputDataProvider multistepInput = MockDocument.GetMultistepInput(ns, type, 3);
+			var mock = Mock.Get(multistepInput);
+			mock.SetupGet(c => c.JobInputData.ConsolidateManufacturingStage.Vehicle.VehicleType).Returns(jobType);
+			mock.SetupGet(c => c.JobInputData.ConsolidateManufacturingStage.Vehicle.ExemptedVehicle)
+				.Returns(type == XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE);
 			var doc = _documentViewModelFactory.CreateDocumentViewModel(multistepInput);
 			Assert.NotNull(doc);
 			var multistepViewModel = doc as MultiStageJobViewModel_v0_1;
diff --git a/Vecto3GUI2020Test/ViewModelTests/StepViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/StepViewModelTests.cs
index 64fc411655169a1fffd42f4622b1ea6914d62794..2525fa144741e040c820ccea287b2dc53802fc4b 100644
--- a/Vecto3GUI2020Test/ViewModelTests/StepViewModelTests.cs
+++ b/Vecto3GUI2020Test/ViewModelTests/StepViewModelTests.cs
@@ -175,7 +175,6 @@ namespace Vecto3GUI2020Test.ViewModelTests
 			var oldVm = stepInput.VehicleViewModel;
 			Assert.NotNull(stepInput.VehicleViewModel);
 
-
 			stepInput.Architecture = to;
 			var newVm = stepInput.VehicleViewModel;
 			Assert.NotNull(newVm);
diff --git a/Vecto3GUI2020Test/XML/XMLWritingTest/XMLCompletedBusVehicleWriterTest.cs b/Vecto3GUI2020Test/XML/XMLWritingTest/XMLCompletedBusVehicleWriterTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..098d1fc90f6cc8eaa9b5fa7e9c8336da9b337f9c
--- /dev/null
+++ b/Vecto3GUI2020Test/XML/XMLWritingTest/XMLCompletedBusVehicleWriterTest.cs
@@ -0,0 +1,262 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Windows.Documents;
+using System.Xml;
+using System.Xml.Linq;
+using Castle.Components.DictionaryAdapter.Xml;
+using Ninject;
+using NUnit.Framework;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCore.InputData.FileIO.XML;
+using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24;
+using TUGraz.VectoCore.Utils;
+using VECTO3GUI2020.Util.XML;
+using VECTO3GUI2020.Util.XML.Vehicle;
+using Vecto3GUI2020Test.MockInput;
+using Vecto3GUI2020Test.Utils;
+
+namespace Vecto3GUI2020Test.XML.XMLWritingTest;
+
+[TestFixture]
+public class XMLCompletedBusVehicleWriterTest
+{
+	private MockDialogHelper _mockDialogHelper;
+	private IKernel _kernel;
+	private IXMLWriterFactory _xmlWriterFactory;
+
+
+	
+
+    [OneTimeSetUp()]
+	public void Setup()
+	{
+		_kernel = TestHelper.GetKernel(out _mockDialogHelper, out _);
+		_xmlWriterFactory = _kernel.Get<IXMLWriterFactory>();
+		_xmlInputDataReader = _kernel.Get<IXMLInputDataReader>();
+	}
+
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE, typeof(XMLCompletedBusVehicleWriterConventional))]
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE, typeof(XMLCompletedBusVehicleWriterExempted))]
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE, typeof(XMLCompletedBusVehicleWriterHEV))]
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE, typeof(XMLCompletedBusVehicleWriterPEV))]
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE, typeof(XMLCompletedBusVehicleWriterIEPC))]
+    public void WriteVehicle(string version, string type, Type expectedWriter)
+	{
+
+		var vehicleData = MockVehicle.GetMockVehicle(type, version);
+		var writer = _xmlWriterFactory.CreateVehicleWriter(vehicleData);
+		Assert.NotNull(writer);
+		Assert.AreEqual(expectedWriter, writer.GetType());
+
+		var xElement = writer.GetElement();
+
+
+
+
+
+		var doc = CreateDocumentWithVehicle(xElement);
+		WriteDocument(doc, out _);
+
+    }
+	protected string LocalSchemaLocation = @"V:\VectoCore\VectoCore\Resources\XSD\";
+	private IXMLInputDataReader _xmlInputDataReader;
+
+	public XDocument CreateDocumentWithVehicle(XElement vehicleElement)
+	{
+
+		var schemaVersion = "2.0";
+		var xDocument = new XDocument();
+
+		var xElement = new XElement(XMLNamespaces.Tns_v20 + XMLNames.VectoInputDeclaration);
+		xDocument.Add(xElement);
+
+		xElement.Add(new XAttribute("schemaVersion", schemaVersion));
+		xElement.Add(new XAttribute(XNamespace.Xmlns + "xsi", XMLNamespaces.Xsi.NamespaceName));
+		xElement.Add(new XAttribute(XNamespace.Xmlns + "tns", XMLNamespaces.Tns_v20));
+		xElement.Add(new XAttribute(XNamespace.Xmlns + "v2.0", XMLNamespaces.V20));
+		xElement.Add(new XAttribute(XMLNamespaces.Xsi + "schemaLocation",
+			$"{XMLNamespaces.DeclarationRootNamespace} {LocalSchemaLocation}VectoDeclarationJob.xsd"));
+		xElement.Add(vehicleElement);
+		return xDocument;
+	}
+
+
+	public static List<string> GetXMLJobs(params string[] path)
+	{
+		List<string> files = new List<string>();
+		foreach (var pathItem in path) {
+			files.AddRange(GetFiles(pathItem, "*.xml"));
+		}
+
+		return files;
+	}
+
+	public static List<string> GetFiles(string path, string searchPattern)
+	{
+		var dirPath = Path.GetFullPath(path);
+		List<string> vectoJobs = new List<string>();
+		foreach (var fileName in Directory.EnumerateFiles(dirPath, searchPattern, SearchOption.AllDirectories))
+		{
+			vectoJobs.Add(fileName);
+		}
+		return vectoJobs;
+	}
+
+
+
+	[TestCaseSource(nameof(GetDistributedCompletedVehicleFiles))]
+	[TestCaseSource(nameof(GetCompletedBusDistributedSchema24))]
+	[TestCase("TestData\\XML\\SchemaVersion2.4\\Distributed\\CompletedBus\\Conventional_completedBus_1.xml", TestName="Conventional")]
+    public void LoadAndWriteFiles(string file)
+	{
+		var stepInput = _xmlInputDataReader.CreateDeclaration(file);
+		Assert.NotNull(stepInput);
+
+		var writer = _xmlWriterFactory.CreateVehicleWriter(stepInput.JobInputData.Vehicle);
+		Assert.NotNull(writer);
+		
+
+		var document = CreateDocumentWithVehicle(writer.GetElement());
+		WriteDocument(document, out var result);
+
+		IDeclarationInputDataProvider writtenInput;
+		using (var tr = new StringReader(result)) {
+			using (var xmlReader = new XmlTextReader(tr))
+				writtenInput = _xmlInputDataReader.CreateDeclaration(xmlReader);
+		}
+		
+
+		Compare(stepInput, writtenInput);
+    }
+
+	public void Compare(IDeclarationInputDataProvider a, IDeclarationInputDataProvider b)
+	{
+		var vehA = a.JobInputData.Vehicle;
+		var vehB = b.JobInputData.Vehicle;
+		Assert.AreEqual(vehA.Manufacturer, vehB.Manufacturer);
+		Assert.AreEqual(vehA.ManufacturerAddress, vehB.ManufacturerAddress);
+		//TODO: add all relevant properties
+
+
+		Assert.AreEqual(vehA.Components?.AirdragInputData?.DigestValue.DigestValue, vehB.Components?.AirdragInputData?.DigestValue.DigestValue);
+
+
+		CompareBusAux(vehA.Components?.BusAuxiliaries, vehB.Components?.BusAuxiliaries);
+	}
+
+	private void CompareBusAux(IBusAuxiliariesDeclarationData busAuxA, IBusAuxiliariesDeclarationData busAuxB)
+	{
+		if (busAuxA == null && busAuxB == null) {
+			return;
+		}
+
+		Assert.NotNull(busAuxB);
+		Assert.NotNull(busAuxA);
+
+		CompareHVAC(busAuxA?.HVACAux, busAuxB?.HVACAux);
+		CompareElectricConsumers( busAuxA?.ElectricConsumers, busAuxB?.ElectricConsumers);
+	}
+
+	private static void CompareElectricConsumers(IElectricConsumersDeclarationData consumerA, IElectricConsumersDeclarationData consumerB)
+	{
+		if (consumerA == null && consumerB == null) {
+			return;
+		}
+		Assert.AreEqual(consumerA.BrakelightsLED, consumerB.BrakelightsLED);
+		Assert.AreEqual(consumerA.DayrunninglightsLED, consumerB.DayrunninglightsLED);
+		Assert.AreEqual(consumerA.HeadlightsLED, consumerB.HeadlightsLED);
+		Assert.AreEqual(consumerA.InteriorLightsLED, consumerB.InteriorLightsLED);
+		Assert.AreEqual(consumerA.PositionlightsLED, consumerB.PositionlightsLED);
+	}
+
+	private static void CompareHVAC(IHVACBusAuxiliariesDeclarationData hvacA, IHVACBusAuxiliariesDeclarationData hvacB)
+	{
+		if (hvacA == null && hvacB == null) {
+			return;
+		}
+
+		Assert.AreEqual(hvacA.SystemConfiguration, hvacB.SystemConfiguration);
+		Assert.AreEqual(hvacA.HeatPumpTypeCoolingDriverCompartment, hvacB.HeatPumpTypeCoolingDriverCompartment);
+		Assert.AreEqual(hvacA.HeatPumpTypeHeatingDriverCompartment, hvacB.HeatPumpTypeHeatingDriverCompartment);
+		Assert.AreEqual(hvacA.HeatPumpTypeCoolingPassengerCompartment, hvacB.HeatPumpTypeCoolingPassengerCompartment);
+		Assert.AreEqual(hvacA.HeatPumpTypeHeatingPassengerCompartment, hvacB.HeatPumpTypeHeatingPassengerCompartment);
+		Assert.AreEqual(hvacA.AuxHeaterPower, hvacB.AuxHeaterPower);
+		Assert.AreEqual(hvacA.DoubleGlazing, hvacB.DoubleGlazing);
+		Assert.AreEqual(hvacA.AdjustableAuxiliaryHeater, hvacB.AdjustableAuxiliaryHeater);
+		Assert.AreEqual(hvacA.SeparateAirDistributionDucts, hvacB.SeparateAirDistributionDucts);
+    }
+
+
+	public static void WriteDocument(XDocument document, out string writtenXml)
+	{
+		string documentString = "";
+		using (var memoryWriter = new MemoryStream())
+		{
+			using (var xmlWriter = new XmlTextWriter(memoryWriter, Encoding.UTF8))
+			{
+				xmlWriter.Formatting = Formatting.Indented;
+				xmlWriter.Namespaces = true;
+				document.WriteTo(xmlWriter);
+
+				xmlWriter.Flush();
+
+				memoryWriter.Seek(0, SeekOrigin.Begin);
+				using (var streamReader = new StreamReader(memoryWriter)) {
+					writtenXml = streamReader.ReadToEnd();
+					TestContext.WriteLine(writtenXml);
+				}
+
+				xmlWriter.Close();
+
+			}
+
+		}
+    }
+
+
+	public static string[] GetDistributedCompletedVehicleFiles()
+	{
+		var _completedBusDistributed = "TestData\\XML\\SchemaVersion2.4\\Distributed\\CompletedBus";
+		return GetFiles(Path.GetFullPath(_completedBusDistributed), "*.xml").ToArray();
+	}
+	[DebuggerStepThrough]
+	public static string[] GetCompletedBusDistributedSchema24()
+	{
+		var _completedBusDistributed = "TestData\\XML\\SchemaVersion2.4";
+		var inputDataReader = TestHelper.GetKernel().Get<IXMLInputDataReader>();
+		var files = GetFiles(Path.GetFullPath(_completedBusDistributed), "*.xml").ToArray();
+		var completedBusFiles = new List<string>();
+		foreach (var file in files) {
+			try {
+				var completedInput = inputDataReader.CreateDeclaration(file);
+				if(completedInput.JobInputData.Vehicle is AbstractXMLDeclarationCompletedBusDataProviderV24)
+				{
+					completedBusFiles.Add(file);
+				}
+			} catch (Exception ex) {
+				//ignore;
+			}
+		}
+
+		return completedBusFiles.ToArray();
+	}
+
+
+    [TearDown]
+	public void AfterTestChecks()
+	{
+		_mockDialogHelper.AssertNoErrorDialogs();
+	}
+
+
+	
+
+
+
+
+}
\ No newline at end of file
diff --git a/Vecto3GUI2020Test/XML/XMLWritingTest/XMLComponentsWriterFactoryTest.cs b/Vecto3GUI2020Test/XML/XMLWritingTest/XMLComponentsWriterFactoryTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0702d317b59c20c82afd9cef05f91afc41768019
--- /dev/null
+++ b/Vecto3GUI2020Test/XML/XMLWritingTest/XMLComponentsWriterFactoryTest.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Security.RightsManagement;
+using System.Xml.Linq;
+using Castle.Components.DictionaryAdapter.Xml;
+using Ninject;
+using NUnit.Framework;
+using TUGraz.VectoCore.Utils;
+using VECTO3GUI2020.Resources.XML;
+using VECTO3GUI2020.Util.XML;
+using VECTO3GUI2020.Util.XML.Components;
+using Vecto3GUI2020Test.Utils;
+
+namespace Vecto3GUI2020Test.XML.XMLWritingTest;
+
+[TestFixture]
+public class XMLComponentsWriterFactoryTest
+{
+	private MockDialogHelper _mockDialogHelper;
+	private IKernel _kernel;
+	private IXMLWriterFactory _xmlWriterFactory;
+
+
+	[SetUp]
+	public void Setup()
+	{
+		_kernel = TestHelper.GetKernel(out _mockDialogHelper, out _);
+		_xmlWriterFactory = _kernel.Get<IXMLWriterFactory>();
+	}
+
+
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.Components_Conventional_CompletedBusType, typeof(XMLCompletedBusComponentWriter_Conventional))]
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.Components_xEV_CompletedBusType, typeof(XMLCompletedBusComponentsWriter_xEV))]
+    public void CreateComponentsWriter(string version, string type, Type expectedType)
+	{
+		XNamespace ns = version;
+
+
+		var writer = _xmlWriterFactory.CreateComponentsWriterWithVersion(ns, type);
+		Assert.AreEqual(expectedType, writer.GetType());
+
+
+	}
+
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V20, XMLTypes.AirDragDataDeclarationType, typeof(XMLAirDragWriter_v2_0))]
+	public void CreateAirdragComponentWriter(string version, string type, Type expectedType)
+	{
+
+		XNamespace ns = version;
+		var writer = _xmlWriterFactory.CreateComponentWriterWithVersion<IXMLComponentWriter>(ns, type);
+
+		Assert.AreEqual(expectedType, writer.GetType());
+	}
+
+
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.AUX_Conventional_CompletedBusType, typeof(XMLCompletedBusAuxiliariesWriterConventional))]
+	[TestCase(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLTypes.AUX_xEV_CompletedBusType, typeof(XMLCompletedBusAuxiliariesWriter_xEV))]
+    public void CreateBusAuxiliariesWriter(string version, string type, Type expectedType)
+	{
+
+		XNamespace ns = version;
+		var writer = _xmlWriterFactory.CreateComponentWriterWithVersion<IXMLBusAuxiliariesWriter>(ns, type);
+
+		Assert.AreEqual(expectedType, writer.GetType());
+	}
+
+}
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index eed8e7c671bbeb7983ae718bccf9397c68a2cb8c..d43fa8cda3174874abdc699d9f38362e282a6fca 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -1018,6 +1018,8 @@ namespace TUGraz.VectoCommon.InputData
 
 	public interface IBusAuxiliariesDeclarationData
 	{
+		DataSource DataSource { get; }
+
 		XmlNode XMLSource { get; }
 
 		string FanTechnology { get; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLResource.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLResource.cs
index 648e5b7baafe2fee607329a27f614d6dbff12792..71abcfde418c7601e20a512e6d7415dd76f21f22 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLResource.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLResource.cs
@@ -46,6 +46,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Common {
 		}
 
 		public virtual DataSource DataSource => new DataSource() { 
+
+
 			Type = SchemaType,
 			TypeVersion = QualifiedName.Namespace,
 			SourceFile = SourceFile, 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs
index 039cc71206abef51a354af0bf86a807d4bd4e048..afafc12f6c3fdc5790e6bae964ecb50a87363343 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs
@@ -47,8 +47,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Common {
 		protected readonly XmlQualifiedName QualifiedName;
 		protected AbstractXMLType(XmlNode node)
 		{
-			SchemaType = node.SchemaInfo?.SchemaType?.Name ;
-			QualifiedName = node.SchemaInfo?.SchemaType.QualifiedName;
+			var schemaType = XMLHelper.GetSchemaType(node);
+
+			SchemaType = schemaType?.Name;
+
+
+			QualifiedName = schemaType?.QualifiedName;
 			BaseNode = node;
 		}
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
index 9eb37a499d24b4d4e25b91a71110ea7dd877a418..31b495ce814a63738f0b2e0f8ddcf956ce49240a 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs
@@ -22,10 +22,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		public static XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24;
 
 		public AbstractXMLDeclarationPrimaryBusAuxiliariesDataProviderV24(
-			 XmlNode componentNode) : base(componentNode) { }
+			XmlNode componentNode) : base(componentNode)
+		{
+
+		}
 
 		#region Implementation of IBusAuxiliariesDeclarationData
 
+		public DataSource DataSource => new DataSource() {
+			Type = SchemaType,
+			TypeVersion = QualifiedName.Namespace
+		};
 		public virtual XmlNode XMLSource => BaseNode;
 
 		public virtual string FanTechnology
@@ -227,9 +234,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 		public static readonly string QUALIFIED_XSD_TYPE =
 			XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
 
-		
+
 		public XMLDeclarationPrimaryBusAuxiliariesConventionalDataProviderV24(
-			IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode) { }
+			IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base(componentNode)
+		{
+
+		}
 
 		public override bool ESSupplyFromHEVREESS => false;
 	}
diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
index 46ece69d99243c2a4acc33dcb7ec050bb9577621..1ce3eac0436c8c5e48aac039c3fb5da3eea67499 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs
@@ -1113,6 +1113,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
 		public ConsolidatedBusAuxiliariesData(IEnumerable<IManufacturingStageInputData> manufacturingStages)
 			: base(manufacturingStages) { }
 
+		public DataSource DataSource
+		{
+			get => _manufacturingStages.Select(s => s.Vehicle.Components.BusAuxiliaries.DataSource).FirstOrDefault();
+		}
 		public XmlNode XMLSource => _xmlNode ?? (_xmlNode = GetBusAuxXMLSource());
 
 		public string FanTechnology => null;
diff --git a/VectoCore/VectoCore/OutputData/XML/ComponentWriter/ComponentWriterNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/ComponentWriter/ComponentWriterNinjectModule.cs
index 015197523b60bc480e6c83c7d20e26d9aa617ece..4bf5cf6cdee988228fd63ed63295e1ef76f2594a 100644
--- a/VectoCore/VectoCore/OutputData/XML/ComponentWriter/ComponentWriterNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/ComponentWriter/ComponentWriterNinjectModule.cs
@@ -1,6 +1,7 @@
 using System.Xml.Linq;
 using Ninject.Extensions.Factory;
 using TUGraz.VectoCore.OutputData.XML.GroupWriter;
+using TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration;
 using TUGraz.VectoCore.Utils.Ninject;
 
 namespace TUGraz.VectoCore.OutputData.XML.ComponentWriter
@@ -20,13 +21,21 @@ namespace TUGraz.VectoCore.OutputData.XML.ComponentWriter
 
 
 			//ADASTypes
-			var v2102 = XMLDeclarationNamespaces.V24;
+			var v24 = XMLDeclarationNamespaces.V24;
 			Bind<IDeclarationAdasWriter>().To<AdasConventionalWriter>().
-				Named(GetName(GroupNames.ADAS_Conventional_Type, v2102));
+				Named(GetName(GroupNames.ADAS_Conventional_Type, v24));
+			Bind<IDeclarationAdasWriter>().To<AdasHEVWriter>().
+				Named(GetName(GroupNames.ADAS_HEV_Type, v24));
+			Bind<IDeclarationAdasWriter>().To<AdasPEVWriter>().
+				Named(GetName(GroupNames.ADAS_PEV_Type, v24));
+			Bind<IDeclarationAdasWriter>().To<AdasIEPCWriter>().
+				Named(GetName(GroupNames.ADAS_IEPC_Type, v24));
 
 
 
-		}
+
+
+        }
 
 		#endregion
 	}
diff --git a/VectoCore/VectoCore/OutputData/XML/ComponentWriter/Declaration/ADAS_Writer.cs b/VectoCore/VectoCore/OutputData/XML/ComponentWriter/Declaration/ADAS_Writer.cs
index 2160ebc6ceb4d461ad8b1b5caa3552f95997706a..7a6091d41930f82f142866a1608015da467af9b7 100644
--- a/VectoCore/VectoCore/OutputData/XML/ComponentWriter/Declaration/ADAS_Writer.cs
+++ b/VectoCore/VectoCore/OutputData/XML/ComponentWriter/Declaration/ADAS_Writer.cs
@@ -7,6 +7,7 @@ using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
 using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
+using TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration;
 
 namespace TUGraz.VectoCore.OutputData.XML.ComponentWriter
 {
@@ -17,13 +18,38 @@ namespace TUGraz.VectoCore.OutputData.XML.ComponentWriter
 		XElement GetComponent(IAdvancedDriverAssistantSystemDeclarationInputData adas);
 	}
 
-    public class AdasConventionalWriter : ComponentWriter, IDeclarationAdasWriter
+	public abstract class AdasWriter : ComponentWriter, IDeclarationAdasWriter
+	{
+		protected abstract string AdasType { get; }
+
+		protected AdasWriter(XNamespace writerNamespace) : base(writerNamespace)
+		{
+		}
+
+		#region Implementation of IDeclarationAdasWriter
+
+		public abstract XElement[] GetComponentElements(IAdvancedDriverAssistantSystemDeclarationInputData adas);
+
+		public XElement GetComponent(IAdvancedDriverAssistantSystemDeclarationInputData adas)
+		{
+			return new XElement(_writerNamespace + XMLNames.Vehicle_ADAS,
+				new XAttribute(XMLDeclarationNamespaces.Xsi + XMLNames.Attr_Type, AdasType),
+				GetComponentElements(adas));
+		}
+
+        #endregion
+    }
+
+
+    public class AdasConventionalWriter : AdasWriter
     {
 		public AdasConventionalWriter(XNamespace writerNamespace) : base(writerNamespace) { }
 
 		#region Implementation of IADASWriter
 
-		public XElement[] GetComponentElements(IAdvancedDriverAssistantSystemDeclarationInputData adas)
+		protected override string AdasType => GroupNames.ADAS_Conventional_Type;
+
+        public override XElement[] GetComponentElements(IAdvancedDriverAssistantSystemDeclarationInputData adas)
 		{
 			var elements = new List<XElement>();
 			
@@ -38,13 +64,63 @@ namespace TUGraz.VectoCore.OutputData.XML.ComponentWriter
 			return elements.ToArray();
 		}
 
-		public XElement GetComponent(IAdvancedDriverAssistantSystemDeclarationInputData adas)
+
+
+		#endregion
+	}
+
+	public class AdasHEVWriter : AdasWriter
+	{
+		protected override string AdasType => GroupNames.ADAS_HEV_Type;
+        public AdasHEVWriter(XNamespace writerNamespace) : base(writerNamespace) { }
+
+		#region Implementation of IADASWriter
+
+		public override XElement[] GetComponentElements(IAdvancedDriverAssistantSystemDeclarationInputData adas)
 		{
-			return new XElement(_writerNamespace + XMLNames.Vehicle_ADAS,
-				new XAttribute(XMLDeclarationNamespaces.Xsi + XMLNames.Attr_Type, "ADAS_Conventional_Type"),
-				GetComponentElements(adas));
+			var elements = new List<XElement>();
+
+			elements.Add(new XElement(_writerNamespace + XMLNames.Vehicle_ADAS_EngineStopStart, adas.EngineStopStart));
+			elements.Add(new XElement(_writerNamespace + XMLNames.Vehicle_ADAS_PCC, adas.PredictiveCruiseControl.ToXMLFormat()));
+
+			return elements.ToArray();
 		}
 
 		#endregion
 	}
+
+	public class AdasPEVWriter : AdasWriter
+	{
+		protected override string AdasType => GroupNames.ADAS_PEV_Type;
+		public AdasPEVWriter(XNamespace writerNamespace) : base(writerNamespace) { }
+			
+		#region Implementation of IADASWriter
+
+		public override XElement[] GetComponentElements(IAdvancedDriverAssistantSystemDeclarationInputData adas)
+		{
+			var elements = new List<XElement>();
+			elements.Add(new XElement(_writerNamespace + XMLNames.Vehicle_ADAS_PCC, adas.PredictiveCruiseControl.ToXMLFormat()));
+			return elements.ToArray();
+		}
+
+		#endregion
+	}
+
+	public class AdasIEPCWriter : AdasWriter
+	{
+		protected override string AdasType => GroupNames.ADAS_IEPC_Type;
+		public AdasIEPCWriter(XNamespace writerNamespace) : base(writerNamespace) { }
+
+		#region Implementation of IADASWriter
+
+		public override XElement[] GetComponentElements(IAdvancedDriverAssistantSystemDeclarationInputData adas)
+		{
+			var elements = new List<XElement>();
+			elements.Add(new XElement(_writerNamespace + XMLNames.Vehicle_ADAS_PCC, adas.PredictiveCruiseControl.ToXMLFormat()));
+			return elements.ToArray();
+		}
+
+		#endregion
+	}
+
 }
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/GroupNames.Designer.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/GroupNames.Designer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..926f56d1b5dcf80a2e4ec0c0c8a4317215489551
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/GroupNames.Designer.cs
@@ -0,0 +1,180 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Dieser Code wurde von einem Tool generiert.
+//     Laufzeitversion:4.0.30319.42000
+//
+//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+//     der Code erneut generiert wird.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration {
+    using System;
+    
+    
+    /// <summary>
+    ///   Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+    /// </summary>
+    // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+    // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+    // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+    // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    public class GroupNames {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal GroupNames() {
+        }
+        
+        /// <summary>
+        ///   Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.GroupNames", typeof(GroupNames).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+        ///   Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die ADAS_Conventional_Type ähnelt.
+        /// </summary>
+        public static string ADAS_Conventional_Type {
+            get {
+                return ResourceManager.GetString("ADAS_Conventional_Type", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die ADAS_HEV_Type ähnelt.
+        /// </summary>
+        public static string ADAS_HEV_Type {
+            get {
+                return ResourceManager.GetString("ADAS_HEV_Type", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die ADAS_IEPC_Type ähnelt.
+        /// </summary>
+        public static string ADAS_IEPC_Type {
+            get {
+                return ResourceManager.GetString("ADAS_IEPC_Type", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die ADAS_PEV_Type ähnelt.
+        /// </summary>
+        public static string ADAS_PEV_Type {
+            get {
+                return ResourceManager.GetString("ADAS_PEV_Type", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die BusAuxElectricSystemLightsGroup ähnelt.
+        /// </summary>
+        public static string BusAuxElectricSystemLightsGroup {
+            get {
+                return ResourceManager.GetString("BusAuxElectricSystemLightsGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die BusAuxElectricSystemSupplySequenceGroup ähnelt.
+        /// </summary>
+        public static string BusAuxElectricSystemSupplySequenceGroup {
+            get {
+                return ResourceManager.GetString("BusAuxElectricSystemSupplySequenceGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die BusAuxHVACConventionalSequenceGroup ähnelt.
+        /// </summary>
+        public static string BusAuxHVACConventionalSequenceGroup {
+            get {
+                return ResourceManager.GetString("BusAuxHVACConventionalSequenceGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die BusAuxHVACHeatPumpSequenceGroup ähnelt.
+        /// </summary>
+        public static string BusAuxHVACHeatPumpSequenceGroup {
+            get {
+                return ResourceManager.GetString("BusAuxHVACHeatPumpSequenceGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die BusAuxHVACxEVSequenceGroup ähnelt.
+        /// </summary>
+        public static string BusAuxHVACxEVSequenceGroup {
+            get {
+                return ResourceManager.GetString("BusAuxHVACxEVSequenceGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die Vehicle_CompletedBus_DimensionsSequenceGroup ähnelt.
+        /// </summary>
+        public static string Vehicle_CompletedBus_DimensionsSequenceGroup {
+            get {
+                return ResourceManager.GetString("Vehicle_CompletedBus_DimensionsSequenceGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die Vehicle_CompletedBus_GeneralParametersSequenceGroup ähnelt.
+        /// </summary>
+        public static string Vehicle_CompletedBus_GeneralParametersSequenceGroup {
+            get {
+                return ResourceManager.GetString("Vehicle_CompletedBus_GeneralParametersSequenceGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die Vehicle_CompletedBus_PassengerCountSequenceGroup ähnelt.
+        /// </summary>
+        public static string Vehicle_CompletedBus_PassengerCountSequenceGroup {
+            get {
+                return ResourceManager.GetString("Vehicle_CompletedBus_PassengerCountSequenceGroup", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die Vehicle_CompletedBusParametersSequenceGroup ähnelt.
+        /// </summary>
+        public static string Vehicle_CompletedBusParametersSequenceGroup {
+            get {
+                return ResourceManager.GetString("Vehicle_CompletedBusParametersSequenceGroup", resourceCulture);
+            }
+        }
+    }
+}
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/GroupNames.resx b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/GroupNames.resx
new file mode 100644
index 0000000000000000000000000000000000000000..bdb64d3d903c2b236b31a0142feb5962558902cb
--- /dev/null
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/GroupNames.resx
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ADAS_Conventional_Type" xml:space="preserve">
+    <value>ADAS_Conventional_Type</value>
+  </data>
+  <data name="ADAS_HEV_Type" xml:space="preserve">
+    <value>ADAS_HEV_Type</value>
+  </data>
+  <data name="ADAS_IEPC_Type" xml:space="preserve">
+    <value>ADAS_IEPC_Type</value>
+  </data>
+  <data name="ADAS_PEV_Type" xml:space="preserve">
+    <value>ADAS_PEV_Type</value>
+  </data>
+  <data name="BusAuxElectricSystemLightsGroup" xml:space="preserve">
+    <value>BusAuxElectricSystemLightsGroup</value>
+  </data>
+  <data name="BusAuxElectricSystemSupplySequenceGroup" xml:space="preserve">
+    <value>BusAuxElectricSystemSupplySequenceGroup</value>
+  </data>
+  <data name="BusAuxHVACConventionalSequenceGroup" xml:space="preserve">
+    <value>BusAuxHVACConventionalSequenceGroup</value>
+  </data>
+  <data name="BusAuxHVACHeatPumpSequenceGroup" xml:space="preserve">
+    <value>BusAuxHVACHeatPumpSequenceGroup</value>
+  </data>
+  <data name="BusAuxHVACxEVSequenceGroup" xml:space="preserve">
+    <value>BusAuxHVACxEVSequenceGroup</value>
+  </data>
+  <data name="Vehicle_CompletedBusParametersSequenceGroup" xml:space="preserve">
+    <value>Vehicle_CompletedBusParametersSequenceGroup</value>
+  </data>
+  <data name="Vehicle_CompletedBus_DimensionsSequenceGroup" xml:space="preserve">
+    <value>Vehicle_CompletedBus_DimensionsSequenceGroup</value>
+  </data>
+  <data name="Vehicle_CompletedBus_GeneralParametersSequenceGroup" xml:space="preserve">
+    <value>Vehicle_CompletedBus_GeneralParametersSequenceGroup</value>
+  </data>
+  <data name="Vehicle_CompletedBus_PassengerCountSequenceGroup" xml:space="preserve">
+    <value>Vehicle_CompletedBus_PassengerCountSequenceGroup</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusDimensionsWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusDimensionsWriter.cs
index f859fc1bf2953cef3cf42fac0f948dcfa27e52fa..77f0c5aa6fcb2b247c0c0059474746b856f9b224 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusDimensionsWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusDimensionsWriter.cs
@@ -6,9 +6,9 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.CompletedBus
 {
-    class CompletedBusDimensionsWriter_V2_10_2 : GroupWriter, IVehicleDeclarationGroupWriter
+    class CompletedBusDimensionsWriter_V2_4 : GroupWriter, IVehicleDeclarationGroupWriter
     {
-		public CompletedBusDimensionsWriter_V2_10_2(XNamespace writerNamespace) : base(writerNamespace) { }
+		public CompletedBusDimensionsWriter_V2_4(XNamespace writerNamespace) : base(writerNamespace) { }
 
 		public static XElement[] GetGroupElements(IVehicleDeclarationInputData vehicle, XNamespace writerNamespace)
 		{
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusGeneralParametersWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusGeneralParametersWriter.cs
index dcc05754ef4298df12451302a3db203a86ba65c4..d490bb66ae5d1f6f6f40f1dbc9688fe9fbadc4df 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusGeneralParametersWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusGeneralParametersWriter.cs
@@ -5,9 +5,9 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.CompletedBus
 {
-    public class CompletedBusGeneralParametersWriterV2_10_2 : GroupWriter, IVehicleDeclarationGroupWriter
+    public class CompletedBusGeneralParametersWriterV2_4 : GroupWriter, IVehicleDeclarationGroupWriter
     {
-		public CompletedBusGeneralParametersWriterV2_10_2(XNamespace writerNamespace) : base(writerNamespace)
+		public CompletedBusGeneralParametersWriterV2_4(XNamespace writerNamespace) : base(writerNamespace)
 		{
 
 		}
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusParametersWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusParametersWriter.cs
index 4de8ce5d7b280829e1df71cfcfec10053addf0be..8e90578ad1d115a294880c8fb3e15313ad7419d6 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusParametersWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusParametersWriter.cs
@@ -6,9 +6,9 @@ using TUGraz.VectoCommon.Resources;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.CompletedBus
 {
-    class CompletedBusParametersWriterV2_10_2 : GroupWriter, IVehicleDeclarationGroupWriter
+    class CompletedBusParametersWriterV2_4 : GroupWriter, IVehicleDeclarationGroupWriter
 	{
-		public CompletedBusParametersWriterV2_10_2(XNamespace writerNamespace) : base(writerNamespace) { }
+		public CompletedBusParametersWriterV2_4(XNamespace writerNamespace) : base(writerNamespace) { }
 
 
 		public static XElement[] GetGroupElements(IVehicleDeclarationInputData vehicle, XNamespace writerNamespace)
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusPassengerCountWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusPassengerCountWriter.cs
index d9eb80284c982e61a129083eb2561a6282b7b0ac..c1b011455d0edda3e8a98611ec04b0b40ab022ee 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusPassengerCountWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/CompletedBus/CompletedBusPassengerCountWriter.cs
@@ -5,9 +5,9 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.CompletedBus
 {
-    class CompletedBusPassengerCountWriter_V2_10_2 : GroupWriter, IVehicleDeclarationGroupWriter
+    class CompletedBusPassengerCountWriter_V2_4 : GroupWriter, IVehicleDeclarationGroupWriter
 	{
-		public CompletedBusPassengerCountWriter_V2_10_2(XNamespace writerNamespace) : base(writerNamespace) { }
+		public CompletedBusPassengerCountWriter_V2_4(XNamespace writerNamespace) : base(writerNamespace) { }
 
 
 
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemLightsGroupWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemLightsGroupWriter.cs
index ef235c4a944bda8429943f5d97151b3e28e909e4..e67c9ab54fc70702ef8f4a1a624e8c624ff0366a 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemLightsGroupWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemLightsGroupWriter.cs
@@ -1,25 +1,27 @@
-using System.Xml.Linq;
+using System.Linq;
+using System.Xml.Linq;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.Components.Auxiliaries
 {
-    class BusAuxElectricSystemLightsGroupWriter_v2_10_2 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
+    class BusAuxElectricSystemLightsGroupWriter_v2_4 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
     {
-		public BusAuxElectricSystemLightsGroupWriter_v2_10_2(XNamespace writerNamespace) : base(writerNamespace) { }
+		public BusAuxElectricSystemLightsGroupWriter_v2_4(XNamespace writerNamespace) : base(writerNamespace) { }
 
 		#region Overrides of GroupWriter
 
 		public XElement[] GetGroupElements(IBusAuxiliariesDeclarationData aux)
 		{
-			return new XElement[] {
+			var elements = new XElement[] {
 				new XElement(_writerNamespace + XMLNames.Bus_Interiorlights, aux.ElectricConsumers.InteriorLightsLED),
-				new XElement(_writerNamespace + XMLNames.Bus_Dayrunninglights,
-					aux.ElectricConsumers.DayrunninglightsLED),
+				new XElement(_writerNamespace + XMLNames.Bus_Dayrunninglights, aux.ElectricConsumers.DayrunninglightsLED),
 				new XElement(_writerNamespace + XMLNames.Bus_Positionlights, aux.ElectricConsumers.PositionlightsLED),
 				new XElement(_writerNamespace + XMLNames.Bus_Brakelights, aux.ElectricConsumers.BrakelightsLED),
 				new XElement(_writerNamespace + XMLNames.Bus_Headlights, aux.ElectricConsumers.HeadlightsLED),
 			};
+			return elements.Where(xel => !xel.Value.IsNullOrEmpty()).ToArray();
 		}
 
 		#endregion
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemSupplyGroupWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemSupplyGroupWriter.cs
index e6471f322012fa320f56d1eb34697954c7f95999..344c2110e6101a76fa0fbdeed0dfa038c97adb72 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemSupplyGroupWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxElectricSystemSupplyGroupWriter.cs
@@ -4,9 +4,9 @@ using TUGraz.VectoCommon.InputData;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.Components.Auxiliaries
 {
-    class BusAuxElectricSystemSupplyGroupWriter_v2_10_2 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
+    class BusAuxElectricSystemSupplyGroupWriter_v2_4 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
     {
-		public BusAuxElectricSystemSupplyGroupWriter_v2_10_2(XNamespace writerNamespace) : base(writerNamespace) { }
+		public BusAuxElectricSystemSupplyGroupWriter_v2_4(XNamespace writerNamespace) : base(writerNamespace) { }
 
 		#region Implementation of IBusAuxiliariesDeclarationGroupWriter
 
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACConventionalGroupWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACConventionalGroupWriter.cs
index 90246d90b312b4297fcafd2833196bb8b9811702..dda6fb22a7a48328ab244521383483b5de5c63f7 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACConventionalGroupWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACConventionalGroupWriter.cs
@@ -1,34 +1,66 @@
 using System.Collections.Generic;
+using System.Linq;
 using System.Xml.Linq;
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.Components.Auxiliaries
 {
-    public class BusAuxHVACConventionalGroupWriter_v2_10_2 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
-    {
-		private readonly IGroupWriterFactory _groupWriterFactory;
+	public abstract class BuxAuxHVACGroupWriter_v2_4 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
+	{
+		protected readonly IGroupWriterFactory _groupWriterFactory;
 
-		public BusAuxHVACConventionalGroupWriter_v2_10_2(XNamespace writerNamespace,
-			IGroupWriterFactory groupWriterFactory) : base(writerNamespace)
+		protected BuxAuxHVACGroupWriter_v2_4(XNamespace writerNamespace, IGroupWriterFactory groupWriterFactory) : base(writerNamespace)
 		{
 			_groupWriterFactory = groupWriterFactory;
+        }
+
+		#region Implementation of IBusAuxiliariesDeclarationGroupWriter
+
+		public abstract XElement[] GetGroupElements(IBusAuxiliariesDeclarationData aux);
+
+		#endregion
+	}
+
+    public class BusAuxHVACConventionalGroupWriter_v2_4 : BuxAuxHVACGroupWriter_v2_4
+    {
+		public BusAuxHVACConventionalGroupWriter_v2_4(XNamespace writerNamespace,
+			IGroupWriterFactory groupWriterFactory) : base(writerNamespace, groupWriterFactory)
+		{
+
 		}
 
 		#region Implementation of IBusAuxiliariesDeclarationGroupWriter
 
-		public XElement[] GetGroupElements(IBusAuxiliariesDeclarationData aux)
+		public override XElement[] GetGroupElements(IBusAuxiliariesDeclarationData aux)
 		{
 			var elements = new List<XElement>();
 
-			elements.Add(new XElement(_writerNamespace + XMLNames.Bus_SystemConfiguration, 
-				aux.HVACAux.SystemConfiguration.ToXmlFormat()));
+			//if (aux.HVACAux?.SystemConfiguration != null) {
+			//	elements.Add(new XElement(_writerNamespace + XMLNames.Bus_SystemConfiguration,
+			//		aux.HVACAux.SystemConfiguration.ToXmlFormat()));
 
-			elements.AddRange(_groupWriterFactory
+   //         }
+
+            var groupElements = _groupWriterFactory
 				.GetBusAuxiliariesDeclarationGroupWriter(GroupNames.BusAuxHVACHeatPumpSequenceGroup, _writerNamespace)
-				.GetGroupElements(aux));
-			elements.Add(new XElement(_writerNamespace + XMLNames.Bus_AuxiliaryHeaterPower,
+				.GetGroupElements(aux);
+
+#if NET45
+			foreach (var e in groupElements) {
+				elements.Add(e);
+			}
+#else
+			elements.AddRange(groupElements);
+
+#endif
+
+
+
+
+            elements.Add(new XElement(_writerNamespace + XMLNames.Bus_AuxiliaryHeaterPower,
 				aux.HVACAux.AuxHeaterPower?.ToXMLFormat(0)));
 			elements.Add(new XElement(_writerNamespace + XMLNames.Bus_DoubleGlazing, aux.HVACAux.DoubleGlazing));
 			elements.Add(new XElement(_writerNamespace + XMLNames.Bus_AdjustableAuxiliaryHeater,
@@ -36,7 +68,27 @@ namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.Compon
 			elements.Add(new XElement(_writerNamespace + XMLNames.Bus_SeparateAirDistributionDucts,
 				aux.HVACAux.SeparateAirDistributionDucts));
 
-			return elements.ToArray();
+			return elements.Where(xEl => !xEl.Value.IsNullOrEmpty()).ToArray();
+		}
+
+#endregion
+	}
+
+	public class BusAuxHVACxEVGroupWriter_v2_4 : BuxAuxHVACGroupWriter_v2_4
+    {
+		public BusAuxHVACxEVGroupWriter_v2_4(XNamespace writerNamespace, IGroupWriterFactory groupWriterFactory) : base(writerNamespace, groupWriterFactory) { }
+
+		#region Overrides of BuxAuxHVACGroupWriter_v2_4
+
+		public override XElement[] GetGroupElements(IBusAuxiliariesDeclarationData aux)
+		{
+			var elements = new List<XElement>() {
+				new XElement(_writerNamespace + XMLNames.Bus_WaterElectricHeater, aux.HVACAux.WaterElectricHeater),
+				new XElement(_writerNamespace + XMLNames.Bus_AirElectricHeater, aux.HVACAux.AirElectricHeater),
+				new XElement(_writerNamespace + XMLNames.Bus_OtherHeatingTechnology, aux.HVACAux.OtherHeatingTechnology)
+			};
+
+			return elements.Where(xEl => !xEl.Value.IsNullOrEmpty()).ToArray();
 		}
 
 		#endregion
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACHeatPumpWriter.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACHeatPumpWriter.cs
index 0c1694035f0232e115e095a2260c62d6034431d7..3348ab711fbcd308ac6dc4bacddde73a44d1dd67 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACHeatPumpWriter.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/Declaration/Vehicle/Components/Auxiliaries/BusAuxHVACHeatPumpWriter.cs
@@ -1,19 +1,24 @@
-using System.Xml.Linq;
+using System.Linq;
+using System.Xml.Linq;
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Resources;
+using TUGraz.VectoCommon.Utils;
 
 namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.Components.Auxiliaries
 {
-    class BusAuxHVACHeatPumpWriter_v2_10_2 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
+    class BusAuxHVACHeatPumpWriter_v2_4 : GroupWriter, IBusAuxiliariesDeclarationGroupWriter
     {
-		public BusAuxHVACHeatPumpWriter_v2_10_2(XNamespace writerNamespace) : base(writerNamespace) { }
+		public BusAuxHVACHeatPumpWriter_v2_4(XNamespace writerNamespace) : base(writerNamespace) { }
 
 		#region Implementation of IBusAuxiliariesDeclarationGroupWriter
 
 		public XElement[] GetGroupElements(IBusAuxiliariesDeclarationData aux)
 		{
-			return new XElement[] {
+			var elements = new XElement[] {
+				new XElement(_writerNamespace + XMLNames.Bus_SystemConfiguration, aux.HVACAux.SystemConfiguration?.ToXmlFormat()),
+
+
 				GetHeatPumpGroupElement(
 					xmlNameWrapper: XMLNames.Bus_HeatPumpTypeDriver,
 					xmlNameFirstComponent: XMLNames.BusHVACHeatPumpCooling,
@@ -28,6 +33,7 @@ namespace TUGraz.VectoCore.OutputData.XML.GroupWriter.Declaration.Vehicle.Compon
 					xmlNameSecondComponent: XMLNames.BusHVACHeatPumpHeating,
 					secondValue: aux.HVACAux.HeatPumpTypeHeatingPassengerCompartment.GetLabel())
 			};
+			return elements.Where(xEl => !xEl.Value.IsNullOrEmpty()).ToArray();
 
 		}
 
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/GroupNames.Designer.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/GroupNames.Designer.cs
deleted file mode 100644
index 0ae30203aab29273aa37cac01521f77a1250c101..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/GroupNames.Designer.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-//------------------------------------------------------------------------------
-// <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.VectoCore.OutputData.XML.GroupWriter {
-    using System;
-    
-    
-    /// <summary>
-    ///   A strongly-typed resource class, for looking up localized strings, etc.
-    /// </summary>
-    // This class was auto-generated by the StronglyTypedResourceBuilder
-    // class via a tool like ResGen or Visual Studio.
-    // To add or remove a member, edit your .ResX file then rerun ResGen
-    // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class GroupNames {
-        
-        private static global::System.Resources.ResourceManager resourceMan;
-        
-        private static global::System.Globalization.CultureInfo resourceCulture;
-        
-        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal GroupNames() {
-        }
-        
-        /// <summary>
-        ///   Returns the cached ResourceManager instance used by this class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager {
-            get {
-                if (object.ReferenceEquals(resourceMan, null)) {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TUGraz.VectoCore.OutputData.XML.GroupWriter.GroupNames", typeof(GroupNames).Assembly);
-                    resourceMan = temp;
-                }
-                return resourceMan;
-            }
-        }
-        
-        /// <summary>
-        ///   Overrides the current thread's CurrentUICulture property for all
-        ///   resource lookups using this strongly typed resource class.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture {
-            get {
-                return resourceCulture;
-            }
-            set {
-                resourceCulture = value;
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to ADAS_Conventional_Type.
-        /// </summary>
-        internal static string ADAS_Conventional_Type {
-            get {
-                return ResourceManager.GetString("ADAS_Conventional_Type", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to BusAuxElectricSystemLightsGroup.
-        /// </summary>
-        internal static string BusAuxElectricSystemLightsGroup {
-            get {
-                return ResourceManager.GetString("BusAuxElectricSystemLightsGroup", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to BusAuxElectricSystemSupplySequenceGroup.
-        /// </summary>
-        internal static string BusAuxElectricSystemSupplySequenceGroup {
-            get {
-                return ResourceManager.GetString("BusAuxElectricSystemSupplySequenceGroup", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to BusAuxHVACConventionalSequenceGroup.
-        /// </summary>
-        internal static string BusAuxHVACConventionalSequenceGroup {
-            get {
-                return ResourceManager.GetString("BusAuxHVACConventionalSequenceGroup", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to BusAuxHVACHeatPumpSequenceGroup.
-        /// </summary>
-        internal static string BusAuxHVACHeatPumpSequenceGroup {
-            get {
-                return ResourceManager.GetString("BusAuxHVACHeatPumpSequenceGroup", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to Vehicle_CompletedBus_DimensionsSequenceGroup.
-        /// </summary>
-        internal static string Vehicle_CompletedBus_DimensionsSequenceGroup {
-            get {
-                return ResourceManager.GetString("Vehicle_CompletedBus_DimensionsSequenceGroup", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to Vehicle_CompletedBus_GeneralParametersSequenceGroup.
-        /// </summary>
-        internal static string Vehicle_CompletedBus_GeneralParametersSequenceGroup {
-            get {
-                return ResourceManager.GetString("Vehicle_CompletedBus_GeneralParametersSequenceGroup", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to Vehicle_CompletedBus_PassengerCountSequenceGroup.
-        /// </summary>
-        internal static string Vehicle_CompletedBus_PassengerCountSequenceGroup {
-            get {
-                return ResourceManager.GetString("Vehicle_CompletedBus_PassengerCountSequenceGroup", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///   Looks up a localized string similar to Vehicle_CompletedBusParametersSequenceGroup.
-        /// </summary>
-        internal static string Vehicle_CompletedBusParametersSequenceGroup {
-            get {
-                return ResourceManager.GetString("Vehicle_CompletedBusParametersSequenceGroup", resourceCulture);
-            }
-        }
-    }
-}
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/GroupNames.resx b/VectoCore/VectoCore/OutputData/XML/GroupWriter/GroupNames.resx
deleted file mode 100644
index a6e98f3e166f325a4d47f8cb4e10e1290eacfdcf..0000000000000000000000000000000000000000
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/GroupNames.resx
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-	<!-- 
-		Microsoft ResX Schema
-
-		Version 1.3
-
-		The primary goals of this format is to allow a simple XML format 
-		that is mostly human readable. The generation and parsing of the 
-		various data types are done through the TypeConverter classes 
-		associated with the data types.
-
-		Example:
-
-		... ado.net/XML headers & schema ...
-		<resheader name="resmimetype">text/microsoft-resx</resheader>
-		<resheader name="version">1.3</resheader>
-		<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-		<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-		<data name="Name1">this is my long string</data>
-		<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-		<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-			[base64 mime encoded serialized .NET Framework object]
-		</data>
-		<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-			[base64 mime encoded string representing a byte array form of the .NET Framework object]
-		</data>
-
-		There are any number of "resheader" rows that contain simple 
-		name/value pairs.
-
-		Each data row contains a name, and value. The row also contains a 
-		type or mimetype. Type corresponds to a .NET class that support 
-		text/value conversion through the TypeConverter architecture. 
-		Classes that don't support this are serialized and stored with the 
-		mimetype set.
-
-		The mimetype is used for serialized objects, and tells the 
-		ResXResourceReader how to depersist the object. This is currently not 
-		extensible. For a given mimetype the value must be set accordingly:
-
-		Note - application/x-microsoft.net.object.binary.base64 is the format 
-		that the ResXResourceWriter will generate, however the reader can 
-		read any of the formats listed below.
-
-		mimetype: application/x-microsoft.net.object.binary.base64
-		value   : The object must be serialized with 
-			: System.Serialization.Formatters.Binary.BinaryFormatter
-			: and then encoded with base64 encoding.
-
-		mimetype: application/x-microsoft.net.object.soap.base64
-		value   : The object must be serialized with 
-			: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-			: and then encoded with base64 encoding.
-
-		mimetype: application/x-microsoft.net.object.bytearray.base64
-		value   : The object must be serialized into a byte array 
-			: using a System.ComponentModel.TypeConverter
-			: and then encoded with base64 encoding.
-	-->
-	
-	<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-		<xsd:element name="root" msdata:IsDataSet="true">
-			<xsd:complexType>
-				<xsd:choice maxOccurs="unbounded">
-					<xsd:element name="data">
-						<xsd:complexType>
-							<xsd:sequence>
-								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-								<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-							</xsd:sequence>
-							<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
-							<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-							<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-						</xsd:complexType>
-					</xsd:element>
-					<xsd:element name="resheader">
-						<xsd:complexType>
-							<xsd:sequence>
-								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-							</xsd:sequence>
-							<xsd:attribute name="name" type="xsd:string" use="required" />
-						</xsd:complexType>
-					</xsd:element>
-				</xsd:choice>
-			</xsd:complexType>
-		</xsd:element>
-	</xsd:schema>
-	<resheader name="resmimetype">
-		<value>text/microsoft-resx</value>
-	</resheader>
-	<resheader name="version">
-		<value>1.3</value>
-	</resheader>
-	<resheader name="reader">
-		<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-	</resheader>
-	<resheader name="writer">
-		<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-	</resheader>
-  <data name="Vehicle_CompletedBus_GeneralParametersSequenceGroup" xml:space="preserve">
-    <value>Vehicle_CompletedBus_GeneralParametersSequenceGroup</value>
-  </data>
-  <data name="Vehicle_CompletedBusParametersSequenceGroup" xml:space="preserve">
-    <value>Vehicle_CompletedBusParametersSequenceGroup</value>
-  </data>
-  <data name="Vehicle_CompletedBus_DimensionsSequenceGroup" xml:space="preserve">
-    <value>Vehicle_CompletedBus_DimensionsSequenceGroup</value>
-  </data>
-  <data name="Vehicle_CompletedBus_PassengerCountSequenceGroup" xml:space="preserve">
-    <value>Vehicle_CompletedBus_PassengerCountSequenceGroup</value>
-  </data>
-  <data name="BusAuxElectricSystemLightsGroup" xml:space="preserve">
-    <value>BusAuxElectricSystemLightsGroup</value>
-  </data>
-  <data name="BusAuxElectricSystemSupplySequenceGroup" xml:space="preserve">
-    <value>BusAuxElectricSystemSupplySequenceGroup</value>
-  </data>
-  <data name="BusAuxHVACConventionalSequenceGroup" xml:space="preserve">
-    <value>BusAuxHVACConventionalSequenceGroup</value>
-  </data>
-  <data name="BusAuxHVACHeatPumpSequenceGroup" xml:space="preserve">
-    <value>BusAuxHVACHeatPumpSequenceGroup</value>
-  </data>
-  <data name="ADAS_Conventional_Type" xml:space="preserve">
-    <value>ADAS_Conventional_Type</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/XML/GroupWriter/XMLGroupWriterNinjectModule.cs b/VectoCore/VectoCore/OutputData/XML/GroupWriter/XMLGroupWriterNinjectModule.cs
index 084c13b344a0414f3707190a63d4f11e788af428..f81681cc05d8238ad5000e2257c78f7ee0f2936e 100644
--- a/VectoCore/VectoCore/OutputData/XML/GroupWriter/XMLGroupWriterNinjectModule.cs
+++ b/VectoCore/VectoCore/OutputData/XML/GroupWriter/XMLGroupWriterNinjectModule.cs
@@ -21,26 +21,28 @@ namespace TUGraz.VectoCore.OutputData.XML.GroupWriter
 		{
 			Bind<IGroupWriterFactory>().ToFactory(() => new UseFirstTwoArgumentsAsInstanceProvider(1, false)).InSingletonScope();
 
-			///Vehicle V2_10_2
-			var v2102 = XMLDeclarationNamespaces.V24;
-			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusGeneralParametersWriterV2_10_2>().InSingletonScope().
-				Named(GetName(GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup, v2102));
-			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusParametersWriterV2_10_2>().InSingletonScope().
-				Named(GetName(GroupNames.Vehicle_CompletedBusParametersSequenceGroup, v2102));
-			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusDimensionsWriter_V2_10_2>().InSingletonScope().
-				Named(GetName(GroupNames.Vehicle_CompletedBus_DimensionsSequenceGroup, v2102));
-			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusPassengerCountWriter_V2_10_2>().InSingletonScope().
-				Named(GetName(GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, v2102));
+			///Vehicle V2_4	
+			var v24 = XMLDeclarationNamespaces.V24;
+			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusGeneralParametersWriterV2_4>().InSingletonScope().
+				Named(GetName(GroupNames.Vehicle_CompletedBus_GeneralParametersSequenceGroup, v24));
+			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusParametersWriterV2_4>().InSingletonScope().
+				Named(GetName(GroupNames.Vehicle_CompletedBusParametersSequenceGroup, v24));
+			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusDimensionsWriter_V2_4>().InSingletonScope().
+				Named(GetName(GroupNames.Vehicle_CompletedBus_DimensionsSequenceGroup, v24));
+			Bind<IVehicleDeclarationGroupWriter>().To<CompletedBusPassengerCountWriter_V2_4>().InSingletonScope().
+				Named(GetName(GroupNames.Vehicle_CompletedBus_PassengerCountSequenceGroup, v24));
 
-			///BusAuxiliaries_V2_10_2
-			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxElectricSystemLightsGroupWriter_v2_10_2>().InSingletonScope().
-				Named(GetName(GroupNames.BusAuxElectricSystemLightsGroup, v2102));
-			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxElectricSystemSupplyGroupWriter_v2_10_2>().InSingletonScope()
-				.Named(GetName(GroupNames.BusAuxElectricSystemSupplySequenceGroup, v2102));
-			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxHVACConventionalGroupWriter_v2_10_2>().InSingletonScope()
-				.Named(GetName(GroupNames.BusAuxHVACConventionalSequenceGroup, v2102));
-			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxHVACHeatPumpWriter_v2_10_2>().InSingletonScope()
-				.Named(GetName(GroupNames.BusAuxHVACHeatPumpSequenceGroup, v2102));
+			///BusAuxiliaries_V2_4
+			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxElectricSystemLightsGroupWriter_v2_4>().InSingletonScope().
+				Named(GetName(GroupNames.BusAuxElectricSystemLightsGroup, v24));
+			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxElectricSystemSupplyGroupWriter_v2_4>().InSingletonScope()
+				.Named(GetName(GroupNames.BusAuxElectricSystemSupplySequenceGroup, v24));
+			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxHVACConventionalGroupWriter_v2_4>().InSingletonScope()
+				.Named(GetName(GroupNames.BusAuxHVACConventionalSequenceGroup, v24));
+			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxHVACxEVGroupWriter_v2_4>().InSingletonScope()
+				.Named(GetName(GroupNames.BusAuxHVACxEVSequenceGroup, v24));
+			Bind<IBusAuxiliariesDeclarationGroupWriter>().To<BusAuxHVACHeatPumpWriter_v2_4>().InSingletonScope()
+				.Named(GetName(GroupNames.BusAuxHVACHeatPumpSequenceGroup, v24));
 
 
 		}
diff --git a/VectoCore/VectoCore/Utils/Ninject/CombineArgumentsToNameInstanceProviders.cs b/VectoCore/VectoCore/Utils/Ninject/CombineArgumentsToNameInstanceProviders.cs
index 1714092c65d76aac48bd3494a9efb968498188f2..f6142ac19dee179c1a3da45165d6ef4264354b67 100644
--- a/VectoCore/VectoCore/Utils/Ninject/CombineArgumentsToNameInstanceProviders.cs
+++ b/VectoCore/VectoCore/Utils/Ninject/CombineArgumentsToNameInstanceProviders.cs
@@ -91,7 +91,7 @@ namespace TUGraz.VectoCore.Utils.Ninject
 
 		protected override string GetName(MethodInfo methodInfo, object[] arguments)
 		{
-			if (!_methodSettings.TryGetValue(methodInfo, out var methodSettings)) {
+			if (!GetMethodSettings(methodInfo, arguments, out var methodSettings)) {
 				return base.GetName(methodInfo, arguments);
 			}
 
@@ -99,9 +99,26 @@ namespace TUGraz.VectoCore.Utils.Ninject
 
 		}
 
+		bool GetMethodSettings(MethodInfo methodInfo, object[] arguments, out MethodSettings methodSettings)
+		{
+			if (!_methodSettings.TryGetValue(methodInfo, out methodSettings)) {
+				//Fall back to name
+				var methodInfos = _methodSettings.Keys.Where(method => method.Name == methodInfo.Name);
+				var methodInfoByName = methodInfos.FirstOrDefault();
+				if (methodInfoByName != null) {
+					methodSettings = _methodSettings[methodInfoByName];
+				} else {
+					return false;
+				}
+			}
+
+			return true;
+		}
+
 		protected override IConstructorArgument[] GetConstructorArguments(MethodInfo methodInfo, object[] arguments)
 		{
-			if (!_methodSettings.TryGetValue(methodInfo, out var methodSettings)) {
+			
+			if (!GetMethodSettings(methodInfo, arguments, out var methodSettings)) {
 				return base.GetConstructorArguments(methodInfo, arguments);
 			}
 
diff --git a/VectoCore/VectoCore/Utils/XMLHelper.cs b/VectoCore/VectoCore/Utils/XMLHelper.cs
index 7cf8d867befbaf21c1364d816b183c5b90cc5c61..490774e011bd74f44391b9c83797774edc4510f9 100644
--- a/VectoCore/VectoCore/Utils/XMLHelper.cs
+++ b/VectoCore/VectoCore/Utils/XMLHelper.cs
@@ -398,5 +398,18 @@ namespace TUGraz.VectoCore.Utils
 		{
 			return Guid.NewGuid().ToString("n").Substring(0, 20);
 		}
+
+
+		public static XmlSchemaType GetSchemaType(XmlNode componentNode)
+		{
+			var dataNode =
+				componentNode?.SelectSingleNode($"./*[local-name()='{XMLNames.ComponentDataWrapper}']");
+			
+			var type = (dataNode ?? componentNode)?.SchemaInfo.SchemaType;
+			return type;
+        }
+		
+
+
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 671fd1016966f3e8a83a196bed06436cffb6e062..ac31234287643186f762599cc7e2c6f6becb5def 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -96,6 +96,7 @@
     <PackageReference Include="Ninject.Extensions.ContextPreservation" Version="3.3.1" />
     <PackageReference Include="Ninject.Extensions.Factory" Version="3.3.3" />
     <PackageReference Include="NLog" Version="4.7.13" />
+    <PackageReference Include="System.Collections" Version="4.3.0" />
     <PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
 </ItemGroup>
 
@@ -183,10 +184,19 @@
       <AutoGen>True</AutoGen>
       <DependentUpon>JSONKeys.resx</DependentUpon>
     </Compile>
+    <Compile Update="OutputData\XML\GroupWriter\Declaration\GroupNames.Designer.cs">
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+      <DependentUpon>GroupNames.resx</DependentUpon>
+    </Compile>
     <EmbeddedResource Update="JSONKeys.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>JSONKeys.Designer.cs</LastGenOutput>
     </EmbeddedResource>
+    <EmbeddedResource Update="OutputData\XML\GroupWriter\Declaration\GroupNames.resx">
+      <Generator>PublicResXFileCodeGenerator</Generator>
+      <LastGenOutput>GroupNames.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
   </ItemGroup>
 
   <ItemGroup>