diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
index fd52d6a0e4d319a4b3d2003fcb54c712a0fa42d5..750fd2ed2d71511a79c3ff8c68e359e72c94d38b 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
@@ -76,14 +76,9 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		public static void SaveVif(IMultistageVIFInputData vifData, string outputFile)
 		{
-			Debug.Assert(outputFile != null);
-			
-
 			var numberOfManufacturingStages =
 				vifData.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? 1;
 
-
-
 			var writer = new FileOutputVIFWriter(outputFile, numberOfManufacturingStages);
 			var inputData = new XMLDeclarationVIFInputData(vifData.MultistageJobInputData, vifData.VehicleInputData);
 
diff --git a/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs b/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs
index 9aa719036dd7d5fe4078f4a0495782a59582c10c..e7b5bd992be644363900f88a794b8eaf9a893180 100644
--- a/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs
+++ b/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs
@@ -1,25 +1,26 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.IO;
+using System.Xml;
+using Moq;
+using Ninject;
 using NUnit.Framework;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCore.OutputData.FileIO;
+using TUGraz.VectoCore.Utils;
 using VECTO3GUI2020.Helper;
+
 using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
 
 namespace Vecto3GUI2020Test.ViewModelTests
 {
-    public class VIFTests : ViewModelTestBase
-    {
-
+	public class VIFTests : ViewModelTestBase
+	{
 
-        [Test]
+		[Test]
 		public void loadPrimaryVehicleOnlyAndCreateNewVIF()
 		{
 			var multistagevm = loadFile(primary_vehicle_only).MultiStageJobViewModel;
-
 			var stage = multistagevm.ManufacturingStageViewModel.StageCount;
+
 			Assert.AreEqual(1, stage);
 
 			//Set Necessary Fields
@@ -29,45 +30,85 @@ namespace Vecto3GUI2020Test.ViewModelTests
 			vehicle.Manufacturer = "Manufacturer";
 			vehicle.VIN = "VIN12345678";
 
-			var outputFile = primary_vehicle_only.Replace(".xml", "_vif_output_mandatory_fields.xml");
 
-			deleteFile(outputFile);
-			getMockDialogHelper(null, fileToSave: outputFile);
-			_kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, outputFile).Object);
+			var outputFileName = primary_vehicle_only.Replace(".xml", "_vif_output_mandatory_fields.xml");
+			var outputFilePath = Path.Combine(DirPath, outputFileName);
+
+			var nextStageNumber = multistagevm.ManufacturingStageViewModel?.StageCount + 2 ?? 2;
+			var expectedOutputFilePath = outputFilePath.Replace(".xml", $".{FileOutputVIFWriter.REPORT_ENDING_PREFIX}{nextStageNumber}.xml");
+			deleteFile(expectedOutputFilePath);
+
+
+			getMockDialogHelper(null, outputFilePath);
+			_kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, outputFilePath).Object);
 
-			var multistageConcrete = multistagevm as MultiStageJobViewModel_v0_1;
+			MultiStageJobViewModel_v0_1.SaveVif(multistagevm, outputFilePath);
 
-			multistageConcrete.SaveVIFCommand.Execute(null);
+			Assert.IsTrue(File.Exists(expectedOutputFilePath));
 
-			Assert.IsTrue(checkFileExists(outputFile));
+			var validator = new XMLValidator(XmlReader.Create(expectedOutputFilePath));
+			Assert.True(validator.ValidateXML(TUGraz.VectoCore.Utils.XmlDocumentType.MultistageOutputData));
 		}
 
 
 		[Test]
-		public void LoadPrimaryVehicleAndStageInputThenCreateVif()
+		public void TestAirdragLoad()
 		{
-			var multistagevm = loadFile(primary_vehicle_only).MultiStageJobViewModel;
+			var multiplestages = Path.GetFullPath(DirPath + "vecto_multistage_consolidated_multiple_stages.xml");
 
-			loadVehicleData(multistagevm as MultiStageJobViewModel_v0_1, stageInputFullSample);
+			var dialogMockConsolidatedMultipleStage = new Mock<IDialogHelper>();
+			dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(multiplestages);
+			dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(multiplestages);
+			_kernel.Rebind<IDialogHelper>().ToConstant(dialogMockConsolidatedMultipleStage.Object);
+			
+			var newMultistageJobViewModel = _kernel.Get<NewMultiStageJobViewModel>();
+			newMultistageJobViewModel.AddVifFile.Execute(null);
+			Assert.NotNull(newMultistageJobViewModel.MultiStageJobViewModel);
 
-			var outputFile = "/output/loadPrimaryAndAddStageInput.xml";
+			var manstageVehicleViewModel = newMultistageJobViewModel.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as IMultistageVehicleViewModel;
+			Assert.NotNull(manstageVehicleViewModel);
 
-			//deleteFile(outputFile);
-			var mockDialogHelper = getMockDialogHelper(null, fileToSave: outputFile);
-			Debug.WriteLine($"Write to {mockDialogHelper.Object.SaveToXMLDialog()}");
-			var multistageVMConc = multistagevm as MultiStageJobViewModel_v0_1;
+			var auxiliariesViewModel = manstageVehicleViewModel.MultistageAuxiliariesViewModel;
+			Assert.NotNull(auxiliariesViewModel);
 
-			MultiStageJobViewModel_v0_1.SaveVif(multistageVMConc, mockDialogHelper.Object.SaveToXMLDialog());
+			var multiStageViewModel = newMultistageJobViewModel.MultiStageJobViewModel as MultiStageJobViewModel_v0_1;
+			Assert.NotNull(multiStageViewModel);
 
-			//multistageVMConc.SaveVIFCommand.Execute(null);
+			var vehicleInputData = Path.GetFullPath(DirPath + "vecto_vehicle-stage_input_full-sample.xml");
+			Assert.IsTrue(File.Exists(vehicleInputData));
 
+			var vehicleInputDataFiledialogMock = new Mock<IDialogHelper>();
+			vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(vehicleInputData);
+			vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(vehicleInputData);
+			_kernel.Rebind<IDialogHelper>().ToConstant(vehicleInputDataFiledialogMock.Object);
 
-			//Assert.IsTrue(checkFileExists(outputFile));
+			multiStageViewModel.LoadVehicleDataCommand.Execute(null);
 
+			
+			var vehicle =
+				multiStageViewModel.ManufacturingStageViewModel.Vehicle as DeclarationInterimStageBusVehicleViewModel_v2_8;
+			vehicle.ManufacturerAddress = "Address";
+			vehicle.Manufacturer = "Manufacturer";
+			vehicle.VIN = "VIN12345678";
+			vehicle.AirdragModifiedMultistage = true;
+			vehicle.VehicleDeclarationType = VehicleDeclarationType.interim;
+			
+			var outputFileName = primary_vehicle_only.Replace(".xml", "_vif_output_mandatory_fields.xml");
+			var outputFilePath = Path.Combine(DirPath, outputFileName);
+
+			var nextStageNumber = multiStageViewModel.ManufacturingStages?.Count + 2 ?? 2;
+			var expectedOutputFilePath = outputFilePath.Replace(".xml", $".{FileOutputVIFWriter.REPORT_ENDING_PREFIX}{nextStageNumber}.xml");
+			deleteFile(expectedOutputFilePath);
+			
+			getMockDialogHelper(null, outputFilePath);
+			_kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, outputFilePath).Object);
+			
+			MultiStageJobViewModel_v0_1.SaveVif(multiStageViewModel, outputFilePath);
+			
+			var validator = new XMLValidator(XmlReader.Create(expectedOutputFilePath));
+			Assert.True(validator.ValidateXML(TUGraz.VectoCore.Utils.XmlDocumentType.MultistageOutputData));
 
 		}
 
-
-
-    }
+	}
 }
diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs
index 71ea074303bb07d60a28c2c936aaf915805ba868..bf397d5ef0299c4595347ebb76ea533c9f8065e5 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs
@@ -9,13 +9,14 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 {
 	public class FileOutputVIFWriter : FileOutputWriter
 	{
+		public const string REPORT_ENDING_PREFIX = "VIF_Report_";
+
 		private string _jobFile;
 		private readonly int _numberOfManufacturingStages;
-		private string _reportEndingPrefix = "VIF_Report_";
 		
 		public string XMLMultistageReportFileName
 		{
-			get { return Path.ChangeExtension(_jobFile, $"{_reportEndingPrefix}{_numberOfManufacturingStages + 2}.xml"); }
+			get { return Path.ChangeExtension(_jobFile, $"{REPORT_ENDING_PREFIX}{_numberOfManufacturingStages + 2}.xml"); }
 		}
 		
 		public FileOutputVIFWriter(string jobFile, int numberOfManufacturingStages) : base(jobFile)
@@ -27,11 +28,11 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 		
 		private void RemoveExistingEndingPrefix()
 		{
-			var vifReportIndex = _jobFile.IndexOf(_reportEndingPrefix, StringComparison.Ordinal);
+			var vifReportIndex = _jobFile.IndexOf(REPORT_ENDING_PREFIX, StringComparison.Ordinal);
 			if (vifReportIndex == -1)
 				return;
 
-			if (!_jobFile.Contains(_reportEndingPrefix))
+			if (!_jobFile.Contains(REPORT_ENDING_PREFIX))
 				return;
 
 			_jobFile = $"{_jobFile.Substring(0, vifReportIndex - 1)}.xml";
diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
index d5815fd60cc9f29a2ec671875f395c8ad171a2c5..6ff8cd221653bdd7e1e828e4acc20a86db8275a4 100644
--- a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
+++ b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs
@@ -16,6 +16,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Utils;
 
+
 namespace TUGraz.VectoCore.OutputData.XML
 {
 	public interface IXMLMultistageReport
@@ -240,6 +241,9 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		private XElement GetADAS(IAdvancedDriverAssistantSystemDeclarationInputData adasData)
 		{
+			if (adasData == null)
+				return null;
+			
 			return new XElement(
 				v28 + XMLNames.Vehicle_ADAS,
 				new XElement(v23 + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart),
@@ -254,6 +258,9 @@ namespace TUGraz.VectoCore.OutputData.XML
 
 		private XElement GetBusVehicleComponents(IVehicleComponentsDeclaration vehicleComponents)
 		{
+			if (vehicleComponents == null)
+				return null;
+
 			var busAirdrag = GetBusAirdrag(vehicleComponents.AirdragInputData);
 			var busAux = GetBusAuxiliaries(vehicleComponents.BusAuxiliaries);
 
@@ -286,12 +293,24 @@ namespace TUGraz.VectoCore.OutputData.XML
 		
 		private XElement GetAirdragElement(IAirdragDeclarationInputData airdrag)
 		{
-			var component = airdrag as AbstractCommonComponentType;
-			if (component == null)
+			if (airdrag == null)
+				return null;
+			
+			XmlNode airdragNode = null;
+			if (airdrag is AbstractCommonComponentType)
+				airdragNode = (airdrag as AbstractCommonComponentType).XMLSource;
+			else {
+				var type = airdrag.GetType();
+				var property = type.GetProperty(nameof(AbstractCommonComponentType.XMLSource));
+				if (property != null)
+					airdragNode = (XmlNode)property.GetValue(airdrag, null);
+			}
+
+			if (airdragNode == null)
 				return null;
 
-			var dataElement = XElement.Parse(component.XMLSource.FirstChild.OuterXml);
-			var signatureElement = XElement.Parse(component.XMLSource.LastChild.OuterXml);
+			var dataElement = XElement.Parse(airdragNode.FirstChild.OuterXml);
+			var signatureElement = XElement.Parse(airdragNode.LastChild.OuterXml);
 			dataElement.Attribute(XNamespace.Xmlns + "xsi")?.Remove();
 			
 			return new XElement(v28 + XMLNames.Component_AirDrag,