From 2450c63a9d8e8a5e417960c499a6b72316a2d939 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Thu, 10 Nov 2022 20:18:16 +0100
Subject: [PATCH] use separate SSM config for cooling and heating (different
 system configuration, different heatpumps) extend IACSystem with max values
 for heating, length of passenger and driver compartment to split
 heating/cooling demand adding testcases for different HVAC configurations,
 expected electric and mechanic power, depending on heatpump technologies for
 heating and cooling

---
 .../VectoAuxiliariesTests/UnitTests/Utils.vb  |   2 +-
 .../HeatingDistributionCase.cs                |   0
 .../BusAuxiliaries/IAuxiliaryConfig.cs        |   2 +
 .../IEnvironmentalConditionsMapEntry.cs       |   2 +
 .../BusAuxiliaries/ISSMDeclarationInputs.cs   |  20 +-
 .../FileIO/JSON/BusAuxiliaryInputData.cs      |   1 +
 .../InputData/FileIO/JSON/SSMInputData.cs     |   6 +-
 .../EnvironmentalContidionsMapReader.cs       |   1 +
 .../AbstractSimulationDataAdapter.cs          |   9 +
 ...larationDataAdapterSpecificCompletedBus.cs |   9 +
 .../EngineeringDataAdapter.cs                 |   8 +-
 .../AuxiliaryDataAdapter.cs                   | 159 ++++++++--
 .../Models/BusAuxiliaries/BusAuxiliaries.cs   |   4 +-
 .../HVAC/EnvironmentalConditionMapEntry.cs    |   7 +-
 .../Impl/HVAC/SSMCalculate.cs                 | 274 +++++++++++++++---
 .../DownstreamModules/Impl/HVAC/SSMInputs.cs  |  43 ++-
 .../Models/Declaration/DeclarationData.cs     |   3 +
 .../Models/Declaration/HVACCoolingPower.cs    |  26 +-
 .../OutputData/FileIO/BusAuxWriter.cs         |   4 +-
 .../Buses/HVACHeatingPowerDriver.csv          |  11 +
 .../Buses/HVACHeatingPowerPassenger.csv       |  11 +
 VectoCore/VectoCore/VectoCore.csproj          |   2 +
 .../BusAux/SSMTestHeatingCooling.cs           | 240 +++++++++++++++
 .../EngineeringModeBusAuxTest.cs              |   2 +-
 .../primary_heavyBus group41.RSLT_VIF.xml     | 101 +++----
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |   1 +
 26 files changed, 813 insertions(+), 135 deletions(-)
 rename {VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC => VectoCommon/VectoCommon/BusAuxiliaries}/HeatingDistributionCase.cs (100%)
 create mode 100644 VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerDriver.csv
 create mode 100644 VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerPassenger.csv
 create mode 100644 VectoCore/VectoCoreTest/Models/Declaration/BusAux/SSMTestHeatingCooling.cs

diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb
index b2d94c0129..2d69439f00 100644
--- a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb
+++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb
@@ -125,7 +125,7 @@ Public Class Utils
                 .Technologies = techBenefits,
                 .BusFloorType = FloorType.HighFloor,
                 .BusSurfaceArea = 0.SI(Of SquareMeter),
-                .BusVolume = 0.SI(Of CubicMeter),
+                .BusVolumeVentilation = 0.SI(Of CubicMeter),
                 .BusWindowSurface = 0.SI(of SquareMeter),
                 .UValue = 3.SI(Of WattPerKelvinSquareMeter),
                 .VentilationRate = 20.SI(Unit.SI.Per.Hour).Cast (Of PerSecond),
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/HeatingDistributionCase.cs b/VectoCommon/VectoCommon/BusAuxiliaries/HeatingDistributionCase.cs
similarity index 100%
rename from VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/HeatingDistributionCase.cs
rename to VectoCommon/VectoCommon/BusAuxiliaries/HeatingDistributionCase.cs
diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs
index 2945f0a32a..0e41a07bfb 100644
--- a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs
+++ b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs
@@ -27,6 +27,8 @@ namespace TUGraz.VectoCommon.BusAuxiliaries {
 
 		ISSMInputs SSMInputsCooling { get; }
 
+		ISSMInputs SSMInputsHeating { get; }
+
 		IActuations Actuations { get; }
 
 		bool ConfigValuesAreTheSameAs(IAuxiliaryConfig other);
diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs
index 7f2c864db8..b8907ffd07 100644
--- a/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs
+++ b/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs
@@ -5,6 +5,8 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 {
 	public interface IEnvironmentalConditionsMapEntry
 	{
+		int ID { get; }
+
 		Kelvin Temperature { get; }
 		WattPerSquareMeter Solar { get; }
 
diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs
index 6d83f958cd..c5deca2da0 100644
--- a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs
+++ b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs
@@ -1,6 +1,7 @@
 using System;
 using System.ComponentModel;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
 
 
 namespace TUGraz.VectoCommon.BusAuxiliaries
@@ -28,6 +29,8 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 
 		string HVACTechnology { get; }
 
+		HeatingDistributionCase HeatingDistributionCase { get; }
+
 		//HeatPumpType HeatPumpTypeHeatingDriverCompartment { get; }
 		
 		HeatPumpType HeatPumpTypeDriverCompartment { get; }
@@ -39,6 +42,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 		BusHVACSystemConfiguration HVACSystemConfiguration { get; }
 
 		string Source { get; }
+		
 	}
 
 	public interface ISSMBusParameters
@@ -47,7 +51,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 		FloorType BusFloorType { get; }
 		SquareMeter BusWindowSurface { get; }
 		SquareMeter BusSurfaceArea { get; }
-		CubicMeter BusVolume { get; }
+		CubicMeter BusVolumeVentilation { get; }
 	}
 
 	public interface ISSMBoundaryConditions
@@ -98,7 +102,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 	public interface IACSystem
 	{
 		// AC-system				            
-		HeatPumpType HVACCompressorType { get; }
+		//HeatPumpType HVACCompressorType { get; }
 
 		Watt HVACMaxCoolingPower { get; }
 
@@ -106,6 +110,18 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 
 		Watt HVACMaxCoolingPowerPassenger { get; }
 
+		HeaterType ElectricHeater { get; }
+
+		Watt MaxHeatingPower { get; }
+
+		Watt MaxHeatingPowerDriver { get; }
+
+		Watt MaxHeatingPowerPassenger { get; }
+
+		double DriverHVACContribution { get; }
+
+		double PassengerHVACContribution { get; }
+
 		//double COP { get; }
 	}
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs
index 6cfb5309d5..c79e5a10cb 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs
@@ -58,6 +58,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 				PneumaticAuxillariesConfig  = pac,
 				PneumaticUserInputsConfig  = puc,
 				SSMInputsCooling = ssm,
+				SSMInputsHeating = ssm,
 				Actuations = actuations,
 				VehicleData = vehicleData
 			};
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs
index e1bab9b6db..0ed8b61fb1 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs
@@ -62,17 +62,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			retVal.BusFloorType = genInput.GetEx<string>("BP_FloorType").ParseEnum<FloorType>();
 			retVal.BusSurfaceArea = genInput.GetEx<double>("BP_BusSurfaceArea").SI<SquareMeter>();
 			retVal.BusWindowSurface = genInput.GetEx<double>("BP_BusWindowSurfaceArea").SI<SquareMeter>();
-			retVal.BusVolume = genInput.GetEx<double>("BP_BusVolume").SI<CubicMeter>();
+			retVal.BusVolumeVentilation = genInput.GetEx<double>("BP_BusVolume").SI<CubicMeter>();
 			retVal.NumberOfPassengers = genInput.GetEx<double>("BP_PassengerCount");
 
 			//retVal.EnviromentalTemperature = genInput.GetEx<double>("EC_EnviromentalTemperature").DegCelsiusToKelvin();
 			//retVal.Solar = genInput.GetEx<double>("EC_Solar").SI<WattPerSquareMeter>();
-			retVal.DefaultConditions = new EnvironmentalConditionMapEntry(
+			retVal.DefaultConditions = new EnvironmentalConditionMapEntry(0,
 				genInput.GetEx<double>("EC_EnviromentalTemperature").DegCelsiusToKelvin(),
 				genInput.GetEx<double>("EC_Solar").SI<WattPerSquareMeter>(), 1.0, heatPumpCoP, heaterEff);
 			//retVal.EnviromentalConditions_BatchFile = genInput.GetEx<string>("EC_EnviromentalConditions_BatchFile");
 			//retVal.BatchMode = genInput.GetEx<bool>("EC_EnviromentalConditions_BatchEnabled");
-			retVal.HVACCompressorType = HeatPumpTypeHelper.Parse(genInput.GetEx<string>("AC_CompressorType"));
+			//retVal.HVACCompressorType = HeatPumpTypeHelper.Parse(genInput.GetEx<string>("AC_CompressorType"));
 			retVal.HVACMaxCoolingPowerPassenger = genInput.GetEx<double>("AC_CompressorCapacitykW").SI(Unit.SI.Kilo.Watt).Cast<Watt>();
 			retVal.VentilationOnDuringHeating = genInput.GetEx<bool>("VEN_VentilationOnDuringHeating");
 			retVal.VentilationWhenBothHeatingAndACInactive = genInput.GetEx<bool>("VEN_VentilationWhenBothHeatingAndACInactive");
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs
index c058f95693..52280ee899 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs
@@ -77,6 +77,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				}
 				entries.Add(
 					new EnvironmentalConditionMapEntry(
+						row.Field<string>(Fields.ID).ToInt(),
 						row.ParseDouble(Fields.EnvTemp).DegCelsiusToKelvin(),
 						row.ParseDouble(Fields.Solar).SI<WattPerSquareMeter>(),
 						row.ParseDouble(Fields.WeightingFactor),
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
index a73feb8bf9..7c54f6cb15 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
@@ -32,11 +32,17 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
+using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics;
+using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
@@ -327,7 +333,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			};
 			return flc;
 		}
+
+		
 	}
+
 }
 
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
index e2179f950a..92680d2c5b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/CompletedBus/Specific/DeclarationDataAdapterSpecificCompletedBus.cs
@@ -1,10 +1,16 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.Models.BusAuxiliaries;
+using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics;
+using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent;
@@ -27,8 +33,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Speci
 				IVehicleDeclarationInputData completedVehicle, VectoRunData runData)
 			{
 				throw new NotImplementedException();
+
 			}
 
+			
+
 			public VehicleData CreateVehicleData(IVehicleDeclarationInputData primaryVehicle,
 				IVehicleDeclarationInputData completedVehicle, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading)
 			{
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
index 251db4d677..ccdb1718ec 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
@@ -569,7 +569,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 		private IAuxiliaryConfig GetBusAuxiliariesData(VehicleData vehicleData, IBusAuxiliariesEngineeringData busAux)
 		{
-			return new AuxiliaryConfig() {
+			var retVal = new AuxiliaryConfig() {
 				//InputData = auxInputData.BusAuxiliariesData,
 				ElectricalUserInputsConfig = new ElectricsUserInputsConfig() {
 					PowerNetVoltage = Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage,
@@ -637,11 +637,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				},
 				VehicleData = vehicleData,
 			};
+			retVal.SSMInputsHeating = retVal.SSMInputsCooling;
+			return retVal;
 		}
 
 		private IAuxiliaryConfig GetBatteryElectricBusAuxiliariesData(VehicleData vehicleData, IBusAuxiliariesEngineeringData busAux)
 		{
-			return new AuxiliaryConfig() {
+			var retVal = new AuxiliaryConfig() {
 				//InputData = auxInputData.BusAuxiliariesData,
 				ElectricalUserInputsConfig = new ElectricsUserInputsConfig() {
 					PowerNetVoltage = Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage,
@@ -707,6 +709,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				},
 				VehicleData = vehicleData,
 			};
+			retVal.SSMInputsHeating = retVal.SSMInputsCooling;
+			return retVal;
 		}
 
 		
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
index 29bbf551ab..5019a88890 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs
@@ -399,8 +399,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				? 2 * Constants.BusParameters.DriverCompartmentLength // OK
 				: DeclarationData.BusAuxiliaries.CalculateInternalLength(busParams.VehicleLength,
 				busParams.VehicleCode, 10); // missing: correction length for low floor buses
+			var ventilationLength = DeclarationData.BusAuxiliaries.CalculateInternalLength(busParams.VehicleLength,
+				busParams.VehicleCode, 10);
 			var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(mission.BusParameter.VehicleCode, RegistrationClass.II, busParams.BodyHeight);
 			var coolingPower = CalculateMaxCoolingPower(mission, applicableHVACConfiguration);
+			var heatingPower = CalculateMaxHeatingPower(mission, applicableHVACConfiguration);
 
 			var retVal = GetDefaulSSMInputs(heatingFuel);
 			retVal.BusFloorType = busParams.VehicleCode.GetFloorType();
@@ -411,7 +414,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 									DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(busParams.DoubleDecker);
 			retVal.BusSurfaceArea = 2 * (internalLength * busParams.VehicleWidth + internalLength * internalHeight +
 										(isDoubleDecker ? 2.0 : 1.0) * busParams.VehicleWidth * busParams.BodyHeight);
-			retVal.BusVolume = internalLength * busParams.VehicleWidth * internalHeight;
+			retVal.BusVolumeVentilation = ventilationLength * busParams.VehicleWidth * internalHeight;
 
 			retVal.UValue = DeclarationData.BusAuxiliaries.UValue(busParams.VehicleCode.GetFloorType());
 			retVal.NumberOfPassengers =
@@ -424,14 +427,26 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			//retVal.HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2;
 			retVal.HVACMaxCoolingPowerDriver = coolingPower.Item1;
 			retVal.HVACMaxCoolingPowerPassenger = coolingPower.Item2;
+			retVal.MaxHeatingPowerDriver = heatingPower.Item1;
+			retVal.MaxHeatingPowerPassenger = heatingPower.Item2;
 
 			retVal.HeatPumpTypeDriverCompartment = driverHeatpumpType;
 			retVal.HeatPumpTypePassengerCompartment = passengerHeatpumpType;
 
 			retVal.HVACSystemConfiguration = applicableHVACConfiguration;
 
-			retVal.HVACCompressorType = passengerHeatpumpType; // use passenger compartment
-			
+			//retVal.HVACCompressorType = passengerHeatpumpType; // use passenger compartment
+
+			retVal.DriverCompartmentLength = applicableHVACConfiguration.RequiresDriverAC()
+				? applicableHVACConfiguration.IsOneOf(BusHVACSystemConfiguration.Configuration2, BusHVACSystemConfiguration.Configuration4)
+					? 2 * Constants.BusParameters.DriverCompartmentLength
+					: Constants.BusParameters.DriverCompartmentLength
+				: 0.SI<Meter>();
+			retVal.PassengerCompartmentLength = applicableHVACConfiguration.RequiresPassengerAC()
+				? applicableHVACConfiguration.IsOneOf(BusHVACSystemConfiguration.Configuration2, BusHVACSystemConfiguration.Configuration4)
+					? 0.SI<Meter>()
+					: internalLength - Constants.BusParameters.DriverCompartmentLength
+				: 0.SI<Meter>();
 			return retVal;
 		}
 
@@ -552,6 +567,24 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			return Tuple.Create(driver, passenger);
 		}
 
+		protected virtual Tuple<Watt, Watt> CalculateMaxHeatingPower(Mission mission, BusHVACSystemConfiguration hvacConfiguration)
+		{
+			var busParams = mission.BusParameter;
+
+			var length = DeclarationData.BusAuxiliaries.CalculateInternalLength(
+				busParams.VehicleLength, busParams.VehicleCode,
+				busParams.NumberPassengersLowerDeck);
+			var height = DeclarationData.BusAuxiliaries.CalculateInternalHeight(busParams.VehicleCode, RegistrationClass.II, busParams.BodyHeight);
+			var volume = length * height * busParams.VehicleWidth;
+
+			var driver = DeclarationData.BusAuxiliaries.HVACMaxHeatingPower.DriverMaxHeatingPower(
+				hvacConfiguration, mission.MissionType);
+			var passenger = DeclarationData.BusAuxiliaries.HVACMaxHeatingPower.PassengerMaxHeatingPower(
+				hvacConfiguration, mission.MissionType, volume);
+
+			return Tuple.Create(driver, passenger);
+		}
+
 		#region Overrides of AuxiliaryDataAdapter
 
 		public override AuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, VectoRunData runData)
@@ -683,7 +716,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			return false;
 		}
 
-		protected double CalculateLengthDependentElectricalConsumers(Mission mission, IVehicleDeclarationInputData vehicleData)
+		protected override double CalculateLengthDependentElectricalConsumers(Mission mission, IVehicleDeclarationInputData vehicleData)
 		{
 			var busParams = mission.BusParameter;
 			return DeclarationData.BusAuxiliaries.CalculateLengthInteriorLights(
@@ -709,12 +742,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				completedVehicle.VehicleCode, completedVehicle.LowEntry, primaryVehicle.AxleConfiguration.NumAxles(),
 				primaryVehicle.Articulated);
 
-			var pasengerCompartmentLength = DeclarationData.BusAuxiliaries.CalculateInternalLength(
+			var passengerCompartmentLength = DeclarationData.BusAuxiliaries.CalculateInternalLength(
 				completedVehicle.Length, completedVehicle.VehicleCode,
 				(int)completedVehicle.NumberPassengerSeatsLowerDeck) - Constants.BusParameters.DriverCompartmentLength - correctionLengthDrivetrainVolume;
 
 			var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
-			var volume = pasengerCompartmentLength * internalHeight * completedVehicle.Width;
+			var volume = passengerCompartmentLength * internalHeight * completedVehicle.Width;
 
 			var driver = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.DriverMaxCoolingPower(
 				hvacConfiguration, mission.MissionType);
@@ -724,6 +757,37 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			return Tuple.Create(driver, passenger);
 		}
 
+		private Tuple<Watt, Watt> CalculateMaxHeatingPower(IVehicleDeclarationInputData completedVehicle,
+			IVehicleDeclarationInputData primaryVehicle,
+			Mission mission, BusHVACSystemConfiguration hvacConfiguration)
+		{
+			//var hvacConfiguration = completedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration;
+			if (hvacConfiguration.IsOneOf(BusHVACSystemConfiguration.Configuration0, BusHVACSystemConfiguration.Unknown)) {
+				throw new VectoException(
+					$"HVAC Configuration {hvacConfiguration.ToXmlFormat()} is invalid for final step");
+			}
+
+			var correctionLengthDrivetrainVolume = DeclarationData.BusAuxiliaries.CorrectionLengthDrivetrainVolume(
+				completedVehicle.VehicleCode, completedVehicle.LowEntry, primaryVehicle.AxleConfiguration.NumAxles(),
+				primaryVehicle.Articulated);
+
+			var passengerCompartmentLength = DeclarationData.BusAuxiliaries.CalculateInternalLength(
+				completedVehicle.Length, completedVehicle.VehicleCode,
+				(int)completedVehicle.NumberPassengerSeatsLowerDeck) - Constants.BusParameters.DriverCompartmentLength - correctionLengthDrivetrainVolume;
+
+			var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height);
+			var volume = passengerCompartmentLength * internalHeight * completedVehicle.Width;
+
+			var driver = DeclarationData.BusAuxiliaries.HVACMaxHeatingPower.DriverMaxHeatingPower(
+				hvacConfiguration, mission.MissionType);
+			var passenger = DeclarationData.BusAuxiliaries.HVACMaxHeatingPower.PassengerMaxHeatingPower(
+				hvacConfiguration, mission.MissionType, volume);
+
+			return Tuple.Create(driver, passenger);
+		}
+
+
+
 		private PneumaticUserInputsConfig CreatePneumaticUserInputsConfig(IBusAuxiliariesDeclarationData primaryBusAuxiliaries,
 			IVehicleDeclarationInputData completedVehicle)
 		{
@@ -798,20 +862,41 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				throw new VectoException("HeatPumpTypePassengerCompartment Heating input parameter is required");
 			}
 
-			if (hvacConfiguration.RequiresDriverAC() &&
-				(busAux.HeatPumpTypeCoolingDriverCompartment == HeatPumpType.none ||
-				busAux.HeatPumpTypeHeatingDriverCompartment == HeatPumpType.none)) {
-				throw new VectoException("HVAC System Configuration {0} requires a Driver Heatpump Technology",
-					hvacConfiguration);
+			var hvacConfigCooling = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacConfiguration.Value,
+				busAux.HeatPumpTypeCoolingDriverCompartment.Value, busAux.HeatPumpTypeCoolingPassengerCompartment.Value);
+			var hvacConfigHeating = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacConfiguration.Value,
+				busAux.HeatPumpTypeHeatingDriverCompartment.Value, busAux.HeatPumpTypeHeatingPassengerCompartment.Value);
+
+			if (hvacConfigHeating != hvacConfiguration && hvacConfigCooling != hvacConfiguration) {
+				throw new VectoException(
+					$"The HVAC System Configuration must be either matched for the case heating or cooling h:{hvacConfigHeating.GetName()}/c:{hvacConfigCooling.GetName()}");
 			}
 
-			if (hvacConfiguration.RequiresPassengerAC() &&
-				(busAux.HeatPumpTypeCoolingPassengerCompartment == HeatPumpType.none ||
-				busAux.HeatPumpTypeHeatingPassengerCompartment == HeatPumpType.none)) {
-				throw new VectoException("HVAC System Configuration {0} requires a Passenger Heatpump Technology",
-					hvacConfiguration);
+			var xEVBus = !primaryVehicle.VehicleType.IsOneOf(VectoSimulationJobType.ConventionalVehicle,
+				VectoSimulationJobType.EngineOnlySimulation);
+			if (xEVBus && busAux.AirElectricHeater == null) {
+				throw new VectoException("AirElectricHeater input parameter is required for xEV vehicles");
+			}
+			if (xEVBus && busAux.WaterElectricHeater == null) {
+				throw new VectoException("AirElectricHeater input parameter is required for xEV vehicles");
+			}
+			if (xEVBus && busAux.OtherHeatingTechnology == null) {
+				throw new VectoException("AirElectricHeater input parameter is required for xEV vehicles");
 			}
 
+			//if (hvacConfiguration.RequiresDriverAC() &&
+			//	(busAux.HeatPumpTypeCoolingDriverCompartment == HeatPumpType.none ||
+			//	busAux.HeatPumpTypeHeatingDriverCompartment == HeatPumpType.none)) {
+			//	throw new VectoException("HVAC System Configuration {0} requires a Driver Heatpump Technology",
+			//		hvacConfiguration);
+			//}
+			//if (hvacConfiguration.RequiresPassengerAC() &&
+			//	(busAux.HeatPumpTypeCoolingPassengerCompartment == HeatPumpType.none ||
+			//	busAux.HeatPumpTypeHeatingPassengerCompartment == HeatPumpType.none)) {
+			//	throw new VectoException("HVAC System Configuration {0} requires a Passenger Heatpump Technology",
+			//		hvacConfiguration);
+			//}
+
 			var applicableSystemConfigCooling = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacConfiguration.Value,
 				busAux.HeatPumpTypeCoolingDriverCompartment.Value, busAux.HeatPumpTypeCoolingPassengerCompartment.Value);
 			var applicableSystemConfigHeating = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacConfiguration.Value,
@@ -820,13 +905,31 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			var ssmCooling = DoGetSsmInputs(mission, completedVehicle, primaryVehicle, loadingType,
 				applicableSystemConfigCooling, busAux.HeatPumpTypeCoolingDriverCompartment.Value,
 				busAux.HeatPumpTypeCoolingPassengerCompartment.Value);
+			ssmCooling.ElectricHeater = HeaterType.None;
 			var ssmHeating = DoGetSsmInputs(mission, completedVehicle, primaryVehicle, loadingType,
 				applicableSystemConfigHeating, busAux.HeatPumpTypeHeatingDriverCompartment.Value,
 				busAux.HeatPumpTypeHeatingPassengerCompartment.Value);
+			ssmHeating.ElectricHeater = GetElectricHeater(busAux);
 
 			return (ssmCooling, ssmHeating);
 		}
 
+		private HeaterType GetElectricHeater(IHVACBusAuxiliariesDeclarationData busAux)
+		{
+			var retVal = HeaterType.None;
+			if (busAux.AirElectricHeater.HasValue && busAux.AirElectricHeater.Value) {
+				retVal |= HeaterType.AirElectricHeater;
+			}
+			if (busAux.WaterElectricHeater.HasValue && busAux.WaterElectricHeater.Value) {
+				retVal |= HeaterType.WaterElectricHeater;
+			}
+			if (busAux.OtherHeatingTechnology.HasValue && busAux.OtherHeatingTechnology.Value) {
+				retVal |= HeaterType.OtherElectricHeating;
+			}
+
+			return retVal;
+		}
+
 		private SSMInputs DoGetSsmInputs(Mission mission, IVehicleDeclarationInputData completedVehicle,
 			IVehicleDeclarationInputData primaryVehicle, LoadingType loadingType,
 			BusHVACSystemConfiguration hvacConfiguration, HeatPumpType heatPumpTypeDriverCompartment,
@@ -839,6 +942,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				: DeclarationData.BusAuxiliaries.CalculateInternalLength(
 					completedVehicle.Length, completedVehicle.VehicleCode,
 					completedVehicle.NumberPassengerSeatsLowerDeck.Value);
+			var ventilationLength = DeclarationData.BusAuxiliaries.CalculateInternalLength(completedVehicle.Length,
+				completedVehicle.VehicleCode,
+				completedVehicle.NumberPassengerSeatsLowerDeck.Value);
 			var correctionLengthDrivetrainVolume = DeclarationData.BusAuxiliaries.CorrectionLengthDrivetrainVolume(
 				completedVehicle.VehicleCode, completedVehicle.LowEntry, primaryVehicle.AxleConfiguration.NumAxles(),
 				primaryVehicle.Articulated);
@@ -847,7 +953,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			var correctedBusWidth = DeclarationData.BusAuxiliaries.CorrectedBusWidth(completedVehicle.Width);
 
 			var coolingPower = CalculateMaxCoolingPower(completedVehicle, primaryVehicle, mission, hvacConfiguration);
-
+			var heatingPower = CalculateMaxHeatingPower(completedVehicle, primaryVehicle, mission, hvacConfiguration);
 			var ssmInputs = _primaryBusDataAdapter.GetDefaulSSMInputs(FuelData.Diesel);
 
 			ssmInputs.BusFloorType = completedVehicle.VehicleCode.GetFloorType();
@@ -857,7 +963,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 										DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(isDoubleDecker);
 			ssmInputs.BusSurfaceArea = 2 * (completedVehicle.Length * correctedBusWidth + internalLength *
 											internalHeight + (isDoubleDecker ? 2.0 : 1.0) * correctedBusWidth * completedVehicle.Height); // use equations sent by Tobias
-			ssmInputs.BusVolume = (internalLength - correctionLengthDrivetrainVolume) * correctedBusWidth * internalHeight;
+			ssmInputs.BusVolumeVentilation = (ventilationLength - correctionLengthDrivetrainVolume) * correctedBusWidth * internalHeight;
 
 			ssmInputs.UValue = DeclarationData.BusAuxiliaries.UValue(completedVehicle.VehicleCode.GetFloorType());
 			ssmInputs.NumberOfPassengers = GetNumberOfPassengers(
@@ -871,6 +977,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			//ssmInputs.HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2;
 			ssmInputs.HVACMaxCoolingPowerDriver = coolingPower.Item1;
 			ssmInputs.HVACMaxCoolingPowerPassenger = coolingPower.Item2;
+			ssmInputs.MaxHeatingPowerDriver = heatingPower.Item1;
+			ssmInputs.MaxHeatingPowerPassenger = heatingPower.Item2;
 
 			//ssmInputs.HeatPumpTypeHeatingDriverCompartment = busAux.HeatPumpTypeHeatingDriverCompartment.Value;
 			ssmInputs.HeatPumpTypeDriverCompartment = heatPumpTypeDriverCompartment;
@@ -878,8 +986,19 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			ssmInputs.HeatPumpTypePassengerCompartment = heatPumpTypePassengerCompartment;
 
 			ssmInputs.HVACSystemConfiguration = hvacConfiguration;
-			
-			ssmInputs.HVACCompressorType = heatPumpTypePassengerCompartment; // use passenger compartment
+
+			ssmInputs.DriverCompartmentLength = hvacConfiguration.RequiresDriverAC()
+				? hvacConfiguration.IsOneOf(BusHVACSystemConfiguration.Configuration2, BusHVACSystemConfiguration.Configuration4)
+					? 2 * Constants.BusParameters.DriverCompartmentLength
+					: Constants.BusParameters.DriverCompartmentLength
+				: 0.SI<Meter>();
+			ssmInputs.PassengerCompartmentLength = hvacConfiguration.RequiresPassengerAC()
+				? hvacConfiguration.IsOneOf(BusHVACSystemConfiguration.Configuration2, BusHVACSystemConfiguration.Configuration4)
+					? 0.SI<Meter>()
+					: internalLength - Constants.BusParameters.DriverCompartmentLength
+				: 0.SI<Meter>();
+
+			//ssmInputs.HVACCompressorType = heatPumpTypePassengerCompartment; // use passenger compartment
 
 			return ssmInputs;
 		}
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
index ab5e99422d..6497224abd 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
@@ -166,12 +166,12 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 				throw new VectoException("Auxiliary configuration missing!");
 			}
 
-			if (auxConfig.SSMInputsCooling is ISSMEngineeringInputs ssmEngineeringInputs) {
+			if (auxConfig.SSMInputsHeating is ISSMEngineeringInputs ssmEngineeringInputs) {
 				var M14eng = new M14bImpl(ssmEngineeringInputs);
 				return M14eng.AuxHeaterDemand(cycleTime, engineWasteHeatTotal);
 			}
 
-			var M14 = new M14aImpl(new SSMTOOL(auxConfig.SSMInputsCooling));
+			var M14 = new M14aImpl(new SSMTOOL(auxConfig.SSMInputsHeating));
 			return M14.AuxHeaterDemand(cycleTime, engineWasteHeatTotal);
 		}
 
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs
index 12884e42c7..d4a00040f9 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs
@@ -6,14 +6,15 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 {
 	public class EnvironmentalConditionMapEntry : IEnvironmentalConditionsMapEntry
 	{
-        public EnvironmentalConditionMapEntry(Kelvin temperature, WattPerSquareMeter solar, double weight) : this(
+        public EnvironmentalConditionMapEntry(Kelvin temperature, WattPerSquareMeter solar, double weight) : this(-1,
             temperature, solar, weight, new Dictionary<HeatPumpType, double>(),
             new Dictionary<HeaterType, double>())
         { }
 
-        public EnvironmentalConditionMapEntry(Kelvin temperature, WattPerSquareMeter solar, double weight,
+        public EnvironmentalConditionMapEntry(int id, Kelvin temperature, WattPerSquareMeter solar, double weight,
 			Dictionary<HeatPumpType, double> heatPumpCoP, Dictionary<HeaterType, double> heaterEfficiency)
 		{
+			ID = id;
 			Temperature = temperature;
 			Solar = solar;
 			Weighting = weight;
@@ -21,6 +22,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			HeaterEfficiency = heaterEfficiency;
 		}
 
+		public int ID { get; }
+
 		public IReadOnlyDictionary<HeaterType, double> HeaterEfficiency { get; }
 
 		public IReadOnlyDictionary<HeatPumpType, double> HeatPumpCoP { get; }
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs
index 353f544600..a53e7929fb 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs
@@ -169,9 +169,68 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			}
 		}
 
+		public Watt AverageHeatingPowerHeatPumpElectric
+		{
+			get
+			{
+				var averagePower = 0.0.SI<Watt>();
+				var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
+				var tl = ssmTOOL.TechList;
+
+				if (!gen.BatchMode) {
+					averagePower =
+						CalculateAverageHeatpumpHeatingPowerElectric(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
+				} else {
+					foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
+						averagePower += CalculateAverageHeatpumpHeatingPowerElectric(
+							ssmTOOL.SSMInputs, tl, envCondition);
+				}
+
+				return averagePower;
+			}
+		}
+
+		public Watt AverageHeatingPowerHeatPumpMech {
+			get {
+				var averagePower = 0.0.SI<Watt>();
+				var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
+				var tl = ssmTOOL.TechList;
+
+				if (!gen.BatchMode) {
+					averagePower =
+						CalculateAverageHeatpumpHeatingPowerMech(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
+				} else {
+					foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
+						averagePower += CalculateAverageHeatpumpHeatingPowerMech(
+							ssmTOOL.SSMInputs, tl, envCondition);
+				}
+
+				return averagePower;
+			}
+		}
+
+		public Watt AverageHeatingPowerElectricHeater {
+			get {
+				var averagePower = 0.0.SI<Watt>();
+				var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
+				var tl = ssmTOOL.TechList;
+
+				if (!gen.BatchMode) {
+					averagePower =
+						CalculateAverageHeatingPowerElectricHeater(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
+				} else {
+					foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
+						averagePower += CalculateAverageHeatingPowerElectricHeater(
+							ssmTOOL.SSMInputs, tl, envCondition);
+				}
+
+				return averagePower;
+			}
+		}
+
 
 		// Base Values
-		
+
 		public Watt BaseHeatingW_ElectricalVentilation(Kelvin environmentalTemperature, WattPerSquareMeter solar)
 		{
 			
@@ -225,6 +284,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 
 			var gen = ssmTOOL.SSMInputs;
 
+			if (environmentalTemperature < gen.BoundaryConditions.TemperatureCoolingTurnsOff) {
+				return 0.SI<Watt>();
+			}
+
 			// Dim C46 = gen.EC_EnviromentalTemperature
 			// Dim C28 = gen.BC_TemperatureCoolingTurnsOff
 			// Dim C53 = gen.AC_CompressorTypeDerived
@@ -234,13 +297,24 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			var run1TotalW = Run1.TotalW(environmentalTemperature, solar);
 			var run2TotalW = Run2.TotalW(environmentalTemperature, solar);
 
-			return environmentalTemperature < gen.BoundaryConditions.TemperatureCoolingTurnsOff
-				? 0.SI<Watt>()
-				: gen.ACSystem.HVACCompressorType.IsElectrical()
-					? 0.SI<Watt>()
-					: run1TotalW > 0 && run2TotalW > 0
-						? VectoMath.Min(run1TotalW, run2TotalW)
-						: 0.SI<Watt>();
+			if (run1TotalW.IsSmallerOrEqual(0) || run2TotalW.IsSmallerOrEqual(0)) {
+				return 0.SI<Watt>();
+			}
+
+			var coolingPwr = VectoMath.Min(run1TotalW, run2TotalW);
+			var driverContribution = coolingPwr * gen.ACSystem.DriverHVACContribution;
+			var passengerContribution = coolingPwr * gen.ACSystem.PassengerHVACContribution;
+			var retVal = (gen.HeatPumpTypeDriverCompartment.IsMechanical() ? driverContribution : 0.SI<Watt>()) +
+						(gen.HeatPumpTypePassengerCompartment.IsMechanical() ? passengerContribution : 0.SI<Watt>());
+			return retVal;
+
+			//return environmentalTemperature < gen.BoundaryConditions.TemperatureCoolingTurnsOff
+			//	? 0.SI<Watt>()
+			//	: gen.ACSystem.HVACCompressorType.IsElectrical()
+			//		? 0.SI<Watt>()
+			//		: run1TotalW > 0 && run2TotalW > 0
+			//			? VectoMath.Min(run1TotalW, run2TotalW)
+			//			: 0.SI<Watt>();
 		}
 
 		protected Watt BaseCoolingW_ElectricalCoolingHeating(Kelvin environmentalTemperature, WattPerSquareMeter solar)
@@ -249,6 +323,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 
 			var gen = ssmTOOL.SSMInputs;
 
+			if (environmentalTemperature < gen.BoundaryConditions.TemperatureCoolingTurnsOff) {
+				return 0.SI<Watt>();
+			}
+
 			// Dim C46 = gen.EC_EnviromentalTemperature
 			// Dim C28 = gen.BC_TemperatureCoolingTurnsOff
 			// Dim C53 = gen.AC_CompressorTypeDerived
@@ -257,13 +335,25 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 
 			var run1TotalW = Run1.TotalW(environmentalTemperature, solar);
 			var run2TotalW = Run2.TotalW(environmentalTemperature, solar);
-			return environmentalTemperature < gen.BoundaryConditions.TemperatureCoolingTurnsOff
-				? 0.SI<Watt>()
-				: gen.ACSystem.HVACCompressorType.IsElectrical()
-					? run1TotalW > 0 && run2TotalW > 0
-						? VectoMath.Min(run1TotalW, run2TotalW)
-						: 0.SI<Watt>()
-					: 0.SI<Watt>();
+
+			if (run1TotalW.IsSmallerOrEqual(0) || run2TotalW.IsSmallerOrEqual(0)) {
+				return 0.SI<Watt>();
+			}
+
+			var coolingPwr = VectoMath.Min(run1TotalW, run2TotalW);
+			var driverContribution = coolingPwr * gen.ACSystem.DriverHVACContribution;
+			var passengerContribution = coolingPwr * gen.ACSystem.PassengerHVACContribution;
+			var retVal = (gen.HeatPumpTypeDriverCompartment.IsElectrical() ? driverContribution : 0.SI<Watt>()) +
+						(gen.HeatPumpTypePassengerCompartment.IsElectrical() ? passengerContribution : 0.SI<Watt>());
+			return retVal;
+
+			//return environmentalTemperature < gen.BoundaryConditions.TemperatureCoolingTurnsOff
+			//	? 0.SI<Watt>()
+			//	: gen.ACSystem.HVACCompressorType.IsElectrical()
+			//		? run1TotalW > 0 && run2TotalW > 0
+			//			? VectoMath.Min(run1TotalW, run2TotalW)
+			//			: 0.SI<Watt>()
+			//		: 0.SI<Watt>();
 		}
 
 		protected Watt BaseCoolingW_ElectricalVentilation(Kelvin environmentalTemperature, WattPerSquareMeter solar)
@@ -375,9 +465,9 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 				//			Math.Max(If(gen.AC_CompressorType.ToLower() = "mechanical", tl.CValueVariation, 0),
 				//					-gen.BC_MaxPossibleBenefitFromTechnologyList))
 
-				if (gen.ACSystem.HVACCompressorType.IsElectrical()) {
-					return 0;
-				}
+				//if (gen.ACSystem.HVACCompressorType.IsElectrical()) {
+				//	return 0;
+				//}
 
 				return tl.CValueVariation.LimitTo(
 					-gen.BoundaryConditions.MaxPossibleBenefitFromTechnologyList,
@@ -397,9 +487,9 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 				// Dim C43 As Double   =  gen.BC_MaxPossibleBenefitFromTechnologyList
 				// Dim C53 As string   =  gen.AC_CompressorType
 
-				if (gen.ACSystem.HVACCompressorType.IsMechanical()) {
-					return 0;
-				}
+				//if (gen.ACSystem.HVACCompressorType.IsMechanical()) {
+				//	return 0;
+				//}
 
 				return tl.CValueVariation.LimitTo(
 					-gen.BoundaryConditions.MaxPossibleBenefitFromTechnologyList,
@@ -456,12 +546,11 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			// Dim I94 = BaseCoolingW_ElectricalVentilation
 			// Dim I95 = BaseVentilationW_ElectricalVentilation
 
-			var cop = GetCoP(genInputs, env);
+			var cop = GetCoPCooling(genInputs, env);
 			var electricCoolingPower = double.IsNaN(cop)
 				? 0.SI<Watt>()
 				: VectoMath.Min(BaseCoolingW_ElectricalCoolingHeating(env.Temperature, env.Solar),
-					genInputs.ACSystem.HVACMaxCoolingPower) /
-				cop;
+					genInputs.ACSystem.HVACMaxCoolingPower) / cop;
 
 			var electricalWBaseCurrentResult =
 				electricCoolingPower + BaseHeatingW_ElectricalVentilation(env.Temperature, env.Solar) +
@@ -471,7 +560,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			return electricalWBaseCurrentResult * env.Weighting;
 		}
 
-		private double GetCoP(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env)
+		private double GetCoPCooling(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env)
 		{
 			var hvacConfig = genInputs.HVACSystemConfiguration;
 			if (hvacConfig.RequiresDriverAC() && hvacConfig.RequiresPassengerAC()) {
@@ -504,6 +593,39 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			return double.NaN;
 		}
 
+		private double GetCoPHeating(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env)
+		{
+			var hvacConfig = genInputs.HVACSystemConfiguration;
+			if (hvacConfig.RequiresDriverAC() && hvacConfig.RequiresPassengerAC()) {
+				var heatingTechDriver = genInputs.HeatPumpTypeDriverCompartment;
+				var heatingTechPassenger = genInputs.HeatPumpTypePassengerCompartment;
+
+				var copDriver = env.HeatPumpCoP.ContainsKey(heatingTechDriver) ? env.HeatPumpCoP[heatingTechDriver] : double.NaN;
+				var copPassenger = env.HeatPumpCoP.ContainsKey(heatingTechPassenger) ? env.HeatPumpCoP[heatingTechPassenger] : double.NaN;
+
+				if (double.IsNaN(copDriver) || double.IsNaN(copPassenger)) {
+					return double.NaN;
+				}
+
+				return (genInputs.ACSystem.MaxHeatingPowerDriver * copDriver + genInputs.ACSystem.MaxHeatingPowerPassenger * copPassenger) /
+						(genInputs.ACSystem.MaxHeatingPowerDriver + genInputs.ACSystem.MaxHeatingPowerPassenger);
+			}
+
+			if (hvacConfig.RequiresPassengerAC()) {
+				var heatingTechPassenger = genInputs.HeatPumpTypePassengerCompartment;
+				var copPassenger = env.HeatPumpCoP.ContainsKey(heatingTechPassenger) ? env.HeatPumpCoP[heatingTechPassenger] : double.NaN;
+				return copPassenger;
+			}
+
+			if (hvacConfig.RequiresDriverAC()) {
+				var heatingTechDriver = genInputs.HeatPumpTypeDriverCompartment;
+				var copDriver = env.HeatPumpCoP.ContainsKey(heatingTechDriver) ? env.HeatPumpCoP[heatingTechDriver] : double.NaN;
+				return copDriver;
+			}
+
+			return double.NaN;
+		}
+
 		private Watt CalculateMechanicalWBase(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env)
 		{
 			// =MIN(F94,C54*1000)/C59
@@ -512,7 +634,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			// Dim C54 = genInputs.AC_CompressorCapacitykW
 			// Dim C59 = genInputs.AC_COP 
 
-			var cop = GetCoP(genInputs, env);
+			var cop = GetCoPCooling(genInputs, env);
 
 			var mechanicalWBaseCurrentResult = double.IsNaN(cop)
 				? 0.SI<Watt>()
@@ -550,7 +672,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			var H94 = BaseCoolingW_ElectricalCoolingHeating(env.Temperature, env.Solar);
 			var H100 = TechListAdjustedCoolingW_ElectricalCoolingHeating;
 			var C54 = genInputs.ACSystem.HVACMaxCoolingPower;
-			var C59 = GetCoP(genInputs, env);
+			var C59 = GetCoPCooling(genInputs, env);
 			if (double.IsNaN(C59) && H94.IsEqual(0)) {
 				return 0.SI<Watt>();
 			}
@@ -575,7 +697,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 			var F94 = BaseCoolingW_Mechanical(env.Temperature, env.Solar);
 			var F100 = TechListAdjustedCoolingW_Mechanical;
 			var C54 = genInputs.ACSystem.HVACMaxCoolingPower;
-			var C59 = GetCoP(genInputs, env);
+			var C59 = GetCoPCooling(genInputs, env);
 			if (double.IsNaN(C59) && F94.IsEqual(0)) {
 				return 0.SI<Watt>();
 			}
@@ -586,6 +708,96 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 
 		private Watt CalculateAverageAuxHeaterPower(
 			ISSMDeclarationInputs genInputs, ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
+		{
+			var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
+			var heatingDistributionCase = genInputs.HeatingDistributionCase;
+			var heatingDistribution =
+				DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
+			
+			var auxHeaterPower = heatingPower * (heatingDistribution?.GetFuelHeaterContribution() ?? 0);
+			var auxHeaterPowerLtd = VectoMath.Min(auxHeaterPower, genInputs.AuxHeater.FuelFiredHeaterPower) /
+										genInputs.BoundaryConditions.AuxHeaterEfficiency;
+			
+			return auxHeaterPowerLtd * env.Weighting;
+		}
+
+		private Watt CalculateAverageHeatpumpHeatingPowerMech(ISSMDeclarationInputs genInputs,
+			ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
+		{
+			var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
+			var heatingDistributionCase = genInputs.HeatingDistributionCase;
+			var heatingDistribution =
+				DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
+
+			var heaterPower = heatingPower * (heatingDistribution?.GetHeatpumpContribution(genInputs.HeatPumpTypeDriverCompartment) ?? 0);
+			var cop = GetCoPHeating(genInputs, env);
+			var heaterPowerLtd = heaterPower.IsEqual(0) || double.IsNaN(cop) ? 0.SI<Watt>() : VectoMath.Min(heaterPower, genInputs.ACSystem.MaxHeatingPower) / cop;
+
+			var driverContribution = heaterPowerLtd * genInputs.ACSystem.DriverHVACContribution;
+			var passengerContribution = heaterPowerLtd * genInputs.ACSystem.PassengerHVACContribution;
+			var retVal = (genInputs.HeatPumpTypeDriverCompartment.IsMechanical() ? driverContribution : 0.SI<Watt>()) +
+						(genInputs.HeatPumpTypePassengerCompartment.IsMechanical() ? passengerContribution : 0.SI<Watt>());
+
+			return retVal * env.Weighting;
+		}
+
+		private Watt CalculateAverageHeatpumpHeatingPowerElectric(ISSMDeclarationInputs genInputs,
+			ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
+		{
+			var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
+			var heatingDistributionCase = genInputs.HeatingDistributionCase;
+			var heatingDistribution =
+				DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
+
+			var heaterPower = heatingPower * (heatingDistribution?.GetHeatpumpContribution(genInputs.HeatPumpTypeDriverCompartment) ?? 0);
+			var cop = GetCoPHeating(genInputs, env);
+			var heaterPowerLtd = heaterPower.IsEqual(0) || double.IsNaN(cop) ? 0.SI<Watt>() : VectoMath.Min(heaterPower, genInputs.ACSystem.MaxHeatingPower) / cop;
+
+			var driverContribution = heaterPowerLtd * genInputs.ACSystem.DriverHVACContribution;
+			var passengerContribution = heaterPowerLtd * genInputs.ACSystem.PassengerHVACContribution;
+			var retVal = (genInputs.HeatPumpTypeDriverCompartment.IsElectrical() ? driverContribution : 0.SI<Watt>()) +
+						(genInputs.HeatPumpTypePassengerCompartment.IsElectrical() ? passengerContribution : 0.SI<Watt>());
+
+			return retVal * env.Weighting;
+		}
+
+		private Watt CalculateAverageHeatingPowerElectricHeater(ISSMDeclarationInputs genInputs,
+			ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
+		{
+			var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
+			var heatingDistributionCase = genInputs.HeatingDistributionCase;
+			var heatingDistribution =
+				DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
+
+			var heaterPower = heatingPower * (heatingDistribution?.GetElectricHeaterContribution(genInputs.ACSystem.ElectricHeater) ?? 0);
+			var efficiency = GetElectricHeaterEfficiency(genInputs, env);
+			var heaterPowerLtd = heaterPower.IsEqual(0) || double.IsNaN(efficiency) ? 0.SI<Watt>() : VectoMath.Min(heaterPower, genInputs.ACSystem.MaxHeatingPower) / efficiency;
+
+			var driverContribution = heaterPowerLtd * genInputs.ACSystem.DriverHVACContribution;
+			var passengerContribution = heaterPowerLtd * genInputs.ACSystem.PassengerHVACContribution;
+			var retVal = (genInputs.HeatPumpTypeDriverCompartment.IsElectrical() ? driverContribution : 0.SI<Watt>()) +
+						(genInputs.HeatPumpTypePassengerCompartment.IsElectrical() ? passengerContribution : 0.SI<Watt>());
+
+			return retVal * env.Weighting;
+		}
+
+		private double GetElectricHeaterEfficiency(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env)
+		{
+			var cnt = 0;
+			var sum = 0.0;
+			foreach (var heaterType in EnumHelper.GetValues<HeaterType>()) {
+				if ((genInputs.ACSystem.ElectricHeater & heaterType) == 0) {
+					continue;
+				}
+
+				cnt++;
+				sum += env.HeaterEfficiency[heaterType];
+			}
+			return sum / cnt;
+		}
+
+		private Watt CalculateAverageHeatingPower(
+			ISSMDeclarationInputs genInputs, ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
 		{
 			// =MIN(ABS(IF(AND(M89<0,M90<0),VLOOKUP(MAX(M89:M90),M89:P90,4),0)/1000),C71)/C37*(1/(C39*C38))
 
@@ -609,12 +821,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 							? Run1.TechListAmendedFuelHeater(env.Temperature, env.Solar)
 							: Run2.TechListAmendedFuelHeater(env.Temperature, env.Solar)).Value().SI<Watt>();
 			}
+			return result;
 
-			var auxHeaterPower = VectoMath.Min(result, genInputs.AuxHeater.FuelFiredHeaterPower) /
-										genInputs.BoundaryConditions.AuxHeaterEfficiency;
-										// / (genInputs.BoundaryConditions.GCVDieselOrHeatingOil /* * ssmTOOL.HVACConstants.FuelDensity*/);
-
-			return auxHeaterPower * env.Weighting;
 		}
 	}
 }
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs
index 8eb8d491f9..6c842a9a15 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs
@@ -13,6 +13,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 		IAuxHeater, ISSMBusParameters
 	{
 		private readonly IFuelProperties HeatingFuel;
+		private HeatingDistributionCase? _heatingDistributionCase;
 
 		public SSMInputs(string source, IFuelProperties heatingFuel = null)
 		{
@@ -35,7 +36,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 		public SquareMeter BusWindowSurface { get; internal set; }
 
 		// D11/C11 - ( M/3 )
-		public CubicMeter BusVolume { get; internal set; }
+		public CubicMeter BusVolumeVentilation { get; internal set; }
 
 		// C17
 		public double GFactor { get; set; }
@@ -80,7 +81,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 		public Watt VentPower(bool heating)
 		{
 			// =C31*C35
-			return BusVolume * (heating ? VentilationRateHeating : VentilationRate) * SpecificVentilationPower;
+			return BusVolumeVentilation * (heating ? VentilationRateHeating : VentilationRate) * SpecificVentilationPower;
 		}
 
 		// C35 - ( Wh/M3 )
@@ -108,7 +109,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 
 
 		// C53 - "Continous/2-stage/3-stage/4-stage
-		public HeatPumpType HVACCompressorType { get; set; }
+		//public HeatPumpType HVACCompressorType { get; set; }
 
 
 		// C54 -  ( KW )
@@ -163,11 +164,47 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
 		public string HVACTechnology => $"{HVACSystemConfiguration.GetName()} " +
 										$"({string.Join(", ", HeatPumpTypePassengerCompartment.GetName(), HeatPumpTypeDriverCompartment.GetName())})";
 
+		public HeatingDistributionCase HeatingDistributionCase
+		{
+			get
+			{
+				if (!_heatingDistributionCase.HasValue) {
+					_heatingDistributionCase = GetHeatingDistributionCase();
+				}
+
+				return _heatingDistributionCase.Value;
+			}
+		}
+		protected virtual HeatingDistributionCase GetHeatingDistributionCase()
+		{
+			return HeatingDistributions.GetHeatingDistributionCase(HeatPumpTypePassengerCompartment, ElectricHeater,
+				AuxHeater.FuelFiredHeaterPower.IsGreater(0));
+		}
+
+		public HeatingDistributionCasesMap HeatingDistributions { get; set; }
+
 		//public HeatPumpType HeatPumpTypeHeatingDriverCompartment { get; set; }
 		public HeatPumpType HeatPumpTypeDriverCompartment { get; set; }
 		//public HeatPumpType HeatPumpTypeHeatingPassengerCompartment { get; set; }
 		public HeatPumpType HeatPumpTypePassengerCompartment { get; set; }
 		public BusHVACSystemConfiguration HVACSystemConfiguration { get; set; }
+		public HeaterType ElectricHeater { get; set; }
+		public Watt MaxHeatingPower => (MaxHeatingPowerDriver ?? 0.SI<Watt>()) + (MaxHeatingPowerPassenger ?? 0.SI<Watt>());
+
+		public Watt MaxHeatingPowerDriver { get; set; }
+		public Watt MaxHeatingPowerPassenger { get; set; }
+
+		public Meter DriverCompartmentLength { get; set; }
+
+		public Meter PassengerCompartmentLength { get; set; }
+
+		public double DriverHVACContribution => (DriverCompartmentLength + PassengerCompartmentLength).IsEqual(0)
+			? 0
+			: (DriverCompartmentLength / (DriverCompartmentLength + PassengerCompartmentLength)).Value();
+
+		public double PassengerHVACContribution => (DriverCompartmentLength + PassengerCompartmentLength).IsEqual(0)
+			? 0
+			: (PassengerCompartmentLength / (DriverCompartmentLength + PassengerCompartmentLength)).Value();
 
 		#endregion
 	}
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 6bc99bd147..73b1d42bfd 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -248,6 +248,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 			public static BusAlternatorTechnologies AlternatorTechnologies = new BusAlternatorTechnologies();
 			private static HVACCoolingPower hvacMaxCoolingPower;
+			private static HVACHeatingPower hvacMaxHeatingPower;
 			private static HeatingDistributionCasesMap heatingDistributionCasesMap;
 			private static HeatingDistributionMap heatingDistributionMap;
 
@@ -277,6 +278,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 
 			public static HVACCoolingPower HVACMaxCoolingPower => hvacMaxCoolingPower ?? (hvacMaxCoolingPower = new HVACCoolingPower());
 
+			public static HVACHeatingPower HVACMaxHeatingPower => hvacMaxHeatingPower ?? (hvacMaxHeatingPower = new HVACHeatingPower());
+
 			public static PerSecond VentilationRate(BusHVACSystemConfiguration? hvacSystemConfig, bool heating)
 			{
 
diff --git a/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs b/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs
index 8aabc4c513..17968d2bb0 100644
--- a/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs
+++ b/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs
@@ -17,13 +17,31 @@ namespace TUGraz.VectoCore.Models.Declaration {
 			return DriverCoolingPower.Lookup(configuration, mission).SI<Watt>();
 		}
 
-		public Watt PassengerMaxCoolingPower(BusHVACSystemConfiguration configuration, MissionType mission, CubicMeter volume)
+		public Watt PassengerMaxCoolingPower(BusHVACSystemConfiguration configuration, MissionType mission,
+			CubicMeter volume)
 		{
 			return PassengerCoolingPower.Lookup(configuration, mission).SI<WattPerCubicMeter>() * volume;
 		}
+	}
+
+	public class HVACHeatingPower
+	{
+		private static HVACLookup DriverCoolingPower = new HVACLookup(".Buses.HVACHeatingPowerDriver.csv");
+		private static HVACLookup PassengerCoolingPower = new HVACLookup(".Buses.HVACHeatingPowerPassenger.csv");
+
+		public Watt DriverMaxHeatingPower(BusHVACSystemConfiguration configuration, MissionType mission)
+		{
+			return DriverCoolingPower.Lookup(configuration, mission).SI<Watt>();
+		}
 
+		public Watt PassengerMaxHeatingPower(BusHVACSystemConfiguration configuration, MissionType mission,
+			CubicMeter volume)
+		{
+			return PassengerCoolingPower.Lookup(configuration, mission).SI<WattPerCubicMeter>() * volume;
+		}
+	}
 
-		private class HVACLookup : LookupData<BusHVACSystemConfiguration, MissionType, double>{
+	public class HVACLookup : LookupData<BusHVACSystemConfiguration, MissionType, double>{
 			public HVACLookup(string resource)
 			{
 				ResourceId = DeclarationData.DeclarationDataResourcePrefix + resource;
@@ -50,5 +68,7 @@ namespace TUGraz.VectoCore.Models.Declaration {
 
 			#endregion
 		}
-	}
+	
+
+
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs
index ae43871f44..189904c2c8 100644
--- a/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs
+++ b/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs
@@ -200,12 +200,12 @@ namespace TUGraz.VectoCore.OutputData.FileIO
 			retVal["BP_FloorType"] = ssmInputs.BusParameters.BusFloorType.ToString();
 			retVal["BP_BusSurfaceArea"] = ssmInputs.BusParameters.BusSurfaceArea.Value();
 			retVal["BP_BusWindowSurfaceArea"] = ssmInputs.BusParameters.BusWindowSurface.Value();
-			retVal["BP_BusVolume"] = ssmInputs.BusParameters.BusVolume.Value();
+			retVal["BP_BusVolume"] = ssmInputs.BusParameters.BusVolumeVentilation.Value();
 			retVal["BP_PassengerCount"] = ssmInputs.BusParameters.NumberOfPassengers;
 
 			retVal["EC_EnviromentalTemperature"] = ssmInputs.EnvironmentalConditions.DefaultConditions.Temperature.AsDegCelsius;
 			retVal["EC_Solar"] = ssmInputs.EnvironmentalConditions.DefaultConditions.Solar.Value();
-			retVal["AC_CompressorType"] = ssmInputs.ACSystem.HVACCompressorType.ToString();
+			//retVal["AC_CompressorType"] = ssmInputs.ACSystem.HVACCompressorType.ToString();
 			retVal["AC_CompressorCapacitykW"] = ssmInputs.ACSystem.HVACMaxCoolingPower.ConvertToKiloWatt().Value;
 			//retVal["AC_COP"] = ssmInputs.ACSystem.COP;
 			retVal["VEN_VentilationOnDuringHeating"] = ssmInputs.Ventilation.VentilationOnDuringHeating;
diff --git a/VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerDriver.csv b/VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerDriver.csv
new file mode 100644
index 0000000000..18b372ff43
--- /dev/null
+++ b/VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerDriver.csv
@@ -0,0 +1,11 @@
+Configuration , Heavy Urban , Urban , Suburban , Interurban , Coach
+1             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+2             , 5.00        , 5.00  , 5.00     , 5.00       , 4.00
+3             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+4             , 5.00        , 5.00  , 5.00     , 5.00       , 4.00
+5             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+6             , 3.50        , 3.50  , 3.50     , 3.00       , 2.50
+7             , 5.00        , 5.00  , 5.00     , 5.00       , 4.00
+8             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+9             , 5.00        , 5.00  , 5.00     , 5.00       , 4.00
+10            , 5.00        , 5.00  , 5.00     , 5.00       , 4.00
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerPassenger.csv b/VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerPassenger.csv
new file mode 100644
index 0000000000..367b4dda94
--- /dev/null
+++ b/VectoCore/VectoCore/Resources/Declaration/Buses/HVACHeatingPowerPassenger.csv
@@ -0,0 +1,11 @@
+Configuration , Heavy Urban , Urban , Suburban , Interurban , Coach
+1             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+2             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+3             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+4             , 0.00        , 0.00  , 0.00     , 0.00       , 0.00
+5             , 0.25        , 0.25  , 0.25     , 0.35       , 0.55
+6             , 0.25        , 0.25  , 0.25     , 0.35       , 0.55
+7             , 0.25        , 0.25  , 0.25     , 0.35       , 0.55
+8             , 0.25        , 0.25  , 0.25     , 0.35       , 0.55
+9             , 0.25        , 0.25  , 0.25     , 0.35       , 0.55
+10            , 0.25        , 0.25  , 0.25     , 0.35       , 0.55
\ No newline at end of file
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 0c90a52c29..ce9ca871b4 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -55,6 +55,8 @@
     <None Remove="Resources\Declaration\Buses\DefaultActuationsMap.apac" />
     <None Remove="Resources\Declaration\Buses\HeatingDistribution.csv" />
     <None Remove="Resources\Declaration\Buses\HeatingDistributionCases.csv" />
+    <None Remove="Resources\Declaration\Buses\HVACHeatingPowerDriver.csv" />
+    <None Remove="Resources\Declaration\Buses\HVACHeatingPowerPassenger.csv" />
     <None Remove="Resources\Declaration\VAUXBus\DEFAULT_1-Cylinder_1-Stage_393ccm.acmp" />
     <None Remove="Resources\Declaration\VAUXBus\DEFAULT_2-Cylinder_1-Stage_650ccm.acmp" />
     <None Remove="Resources\Declaration\VAUXBus\DEFAULT_2-Cylinder_2-Stage_398ccm.acmp" />
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/BusAux/SSMTestHeatingCooling.cs b/VectoCore/VectoCoreTest/Models/Declaration/BusAux/SSMTestHeatingCooling.cs
new file mode 100644
index 0000000000..16e9d1b8b8
--- /dev/null
+++ b/VectoCore/VectoCoreTest/Models/Declaration/BusAux/SSMTestHeatingCooling.cs
@@ -0,0 +1,240 @@
+using System.Collections.Generic;
+using System.Linq;
+using Moq;
+using NUnit.Framework;
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Impl;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.CompletedBus.Specific;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.Tests.Models.Declaration.BusAux;
+
+[TestFixture, Parallelizable(ParallelScope.All)]
+public class SSMTestHeatingCooling
+{
+
+	[
+		TestCase(BusHVACSystemConfiguration.Configuration1, HeatPumpType.none, HeatPumpType.none, 1, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration1, HeatPumpType.none, HeatPumpType.none, 6, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration1, HeatPumpType.none, HeatPumpType.none, 8, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration1, HeatPumpType.none, HeatPumpType.none, 11, 0, 0.0),
+
+		TestCase(BusHVACSystemConfiguration.Configuration2, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 1, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration2, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 6, 299.88, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration2, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 8, 287.8848, 1.0156),
+		TestCase(BusHVACSystemConfiguration.Configuration2, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 11, 287.8848, 1351.1654),
+
+		TestCase(BusHVACSystemConfiguration.Configuration3, HeatPumpType.none, HeatPumpType.none, 1, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration3, HeatPumpType.none, HeatPumpType.none, 6, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration3, HeatPumpType.none, HeatPumpType.none, 8, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration3, HeatPumpType.none, HeatPumpType.none, 11, 0, 0.0),
+
+		TestCase(BusHVACSystemConfiguration.Configuration4, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 1, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration4, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 6, 856.80, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration4, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 8, 822.5280, 633.1093),
+		TestCase(BusHVACSystemConfiguration.Configuration4, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 11, 822.5280, 2000.0),
+
+		TestCase(BusHVACSystemConfiguration.Configuration6, HeatPumpType.none, HeatPumpType.non_R_744_2_stage, 6, 856.80, 0.0)
+
+    ]
+	public void SSMTest_Cooling_SingleEnvironment(BusHVACSystemConfiguration cfg, HeatPumpType driverHeatpump,
+		HeatPumpType passengerHeatpump, int envId, double expectedElPwrW, double expectedMechPwrW)
+	{
+		var auxData = GetAuxParametersConventionalSingleDeckForTest(cfg, driverHeatpump, passengerHeatpump);
+
+		// set list of environmental conditions to a single entry
+		var ssmInputs = auxData.SSMInputsCooling as SSMInputs;
+		Assert.NotNull(ssmInputs);
+		var envAll = ssmInputs.EnvironmentalConditions;
+		var selectedEnv = envAll.EnvironmentalConditionsMap.GetEnvironmentalConditions().Where(x => x.ID == envId).FirstOrDefault();
+		Assert.NotNull(selectedEnv);
+		var newEnv = new EnvironmentalConditionMapEntry(selectedEnv.ID, selectedEnv.Temperature, selectedEnv.Solar, 1.0,
+			selectedEnv.HeatPumpCoP.ToDictionary(x => x.Key, x => x.Value), 
+			selectedEnv.HeaterEfficiency.ToDictionary(x => x.Key, x => x.Value));
+		ssmInputs.EnvironmentalConditionsMap = new EnvironmentalConditionsMap(new[] { newEnv });
+		// ---
+
+		var ssm = new SSMTOOL(auxData.SSMInputsCooling);
+		
+		Assert.AreEqual(expectedElPwrW, ssm.ElectricalWAdjusted.Value(), 1e-3);
+		Assert.AreEqual(expectedMechPwrW, ssm.MechanicalWBaseAdjusted.Value(), 1e-3);
+
+	}
+
+
+	[
+		// electric: only ventilation, mechanic: heatpump
+		TestCase(BusHVACSystemConfiguration.Configuration1, HeatPumpType.none, HeatPumpType.none, 293.8056, 0.0),  // correct? I'd expect P_el = 293 as well! (ventilation low)
+		TestCase(BusHVACSystemConfiguration.Configuration2, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 293.8056, 109.29748),
+		TestCase(BusHVACSystemConfiguration.Configuration3, HeatPumpType.none, HeatPumpType.none, 662.12989, 0.0), // correct? I'd expect p_el = 622 as well! (ventilation high)
+		TestCase(BusHVACSystemConfiguration.Configuration4, HeatPumpType.non_R_744_2_stage, HeatPumpType.none, 662.12989, 398.5246),
+
+		TestCase(BusHVACSystemConfiguration.Configuration6, HeatPumpType.none, HeatPumpType.non_R_744_2_stage, 662.1298, 444.7991),
+
+		// electric: ventilation + heatpump
+		//TestCase(BusHVACSystemConfiguration.Configuration1, HeatPumpType.none, HeatPumpType.none, 0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration2, HeatPumpType.non_R_744_continuous, HeatPumpType.none, 394.405, 0.0),
+		//TestCase(BusHVACSystemConfiguration.Configuration3, HeatPumpType.none, HeatPumpType.none, 0.0, 0.0),
+		TestCase(BusHVACSystemConfiguration.Configuration4, HeatPumpType.non_R_744_continuous, HeatPumpType.none, 1031.611, 0.0),
+
+	]
+	public void SSMTest_Cooling_AvgAllEnvironments(BusHVACSystemConfiguration cfg, HeatPumpType driverHeatpump,
+		HeatPumpType passengerHeatpump, double expectedElPwrW, double expectedMechPwrW)
+	{
+		var auxData = GetAuxParametersConventionalSingleDeckForTest(cfg, driverHeatpump, passengerHeatpump);
+
+		var ssm = new SSMTOOL(auxData.SSMInputsCooling);
+
+		Assert.AreEqual(expectedElPwrW, ssm.ElectricalWAdjusted.Value(), 1e-3);
+		Assert.AreEqual(expectedMechPwrW, ssm.MechanicalWBaseAdjusted.Value(), 1e-3);
+
+	}
+
+	private IAuxiliaryConfig GetAuxParametersConventionalSingleDeckForTest(BusHVACSystemConfiguration hvacConfig, HeatPumpType driverHeatpump,
+		HeatPumpType passengerHeatpump)
+	{
+		return CreateBusAuxInputParameters(MissionType.Urban, 
+			VehicleClass.Class31a, 
+			VectoSimulationJobType.ConventionalVehicle, 
+			VehicleCode.CA, 
+			RegistrationClass.II, 
+			AxleConfiguration.AxleConfig_4x2, 
+			false, 
+			false, 
+			12.SI<Meter>(), 
+			3.SI<Meter>(), 
+			2.55.SI<Meter>(), 
+			40, 
+			0, 
+			HeatPumpType.none, 
+			driverHeatpump, 
+			HeatPumpType.none, 
+			passengerHeatpump, 
+			30000.SI<Watt>(), 
+			false,
+			false,
+			false, 
+			hvacConfig, 
+			false, 
+			false,
+			false, 
+			false, 
+			false,
+            steeringpumps: new[] { "Dual displacement" }, 
+			fanTech: "Crankshaft mounted - Discrete step clutch", 
+			alternatorTech: AlternatorType.Conventional, entranceHeight: 0.3.SI<Meter>());
+
+	}
+
+	private IAuxiliaryConfig CreateBusAuxInputParameters(MissionType missionType, VehicleClass vehicleClass,
+		VectoSimulationJobType vehicleType,
+		VehicleCode vehicleCode, RegistrationClass registrationClass,
+		AxleConfiguration axleconfiguration, bool articulated,
+		bool lowEntry, Meter length,
+		Meter height, Meter width, int numPassengersLowerdeck, int numPassengersUpperdeck,
+		HeatPumpType hpHeatingDriver, HeatPumpType hpCoolingDriver, HeatPumpType hpHeatingPassenger,
+		HeatPumpType hpCoolingPassenger, Watt auxHeaterPower,
+		bool airElectricHeater, bool waterElectricHeater, bool otherElectricHeater,
+		BusHVACSystemConfiguration hvacConfig, bool doubleGlazing, bool adjustableAuxHeater,
+		bool separateAirdistributionDicts, bool adjustableCoolantThermostat, bool engineWasteGasHeatExchanger,
+		string[] steeringpumps, string fanTech, AlternatorType alternatorTech, Meter entranceHeight)
+	{
+		var dao = new SpecificCompletedBusAuxiliaryDataAdapter(new PrimaryBusAuxiliaryDataAdapter());
+
+		var segment = DeclarationData.CompletedBusSegments.Lookup(axleconfiguration.NumAxles(),
+			vehicleCode, registrationClass, numPassengersLowerdeck, height, lowEntry);
+		var mission = segment.Missions.FirstOrDefault();
+
+		var primaryVehicle = new Mock<IVehicleDeclarationInputData>();
+		primaryVehicle.Setup(p => p.VehicleType).Returns(vehicleType);
+		primaryVehicle.Setup(p => p.AxleConfiguration).Returns(axleconfiguration);
+		primaryVehicle.Setup(p => p.Articulated).Returns(articulated);
+
+		var primaryComponents = new Mock<IVehicleComponentsDeclaration>();
+		var primaryBusAux = new Mock<IBusAuxiliariesDeclarationData>();
+		var primaryBusAuxPS_S = new Mock<IPneumaticSupplyDeclarationData>();
+		var primaryBusAuxPS_C = new Mock<IPneumaticConsumersDeclarationData>();
+		var primaryBusAuxHVAC = new Mock<IHVACBusAuxiliariesDeclarationData>();
+		var primaryBusAuxES = new Mock<IElectricSupplyDeclarationData>();
+		primaryVehicle.Setup(p => p.Components).Returns(primaryComponents.Object);
+		primaryComponents.Setup(p => p.BusAuxiliaries).Returns(primaryBusAux.Object);
+		primaryBusAux.Setup(p => p.PneumaticSupply).Returns(primaryBusAuxPS_S.Object);
+		primaryBusAux.Setup(p => p.PneumaticConsumers).Returns(primaryBusAuxPS_C.Object);
+		primaryBusAux.Setup(p => p.HVACAux).Returns(primaryBusAuxHVAC.Object);
+		primaryBusAux.Setup(p => p.ElectricSupply).Returns(primaryBusAuxES.Object);
+
+		primaryBusAux.Setup(p => p.FanTechnology).Returns(fanTech);
+		primaryBusAux.Setup(p => p.SteeringPumpTechnology).Returns(steeringpumps.ToList);
+
+		primaryBusAuxPS_S.Setup(p => p.CompressorDrive).Returns(CompressorDrive.electrically);
+		primaryBusAuxPS_S.Setup(p => p.CompressorSize).Returns("Medium Supply 2-stage");
+		primaryBusAuxPS_S.Setup(p => p.SmartAirCompression).Returns(false);
+		primaryBusAuxPS_S.Setup(p => p.SmartRegeneration).Returns(false);
+
+		primaryBusAuxES.Setup(p => p.AlternatorTechnology).Returns(alternatorTech);
+		primaryBusAuxES.Setup(p => p.Alternators).Returns(new[] { new AlternatorInputData(28.3.SI<Volt>(), 50.SI<Ampere>()) }.Cast<IAlternatorDeclarationInputData>().ToList());
+		primaryBusAuxES.Setup(p => p.ElectricStorage).Returns(new List<IBusAuxElectricStorageDeclarationInputData>());
+
+		primaryBusAuxPS_C.Setup(p => p.AdBlueDosing).Returns(ConsumerTechnology.Mechanically);
+		primaryBusAuxPS_C.Setup(p => p.AirsuspensionControl).Returns(ConsumerTechnology.Electrically);
+		primaryBusAuxHVAC.Setup(p => p.DoubleGlazing).Returns(doubleGlazing);
+		primaryBusAuxHVAC.Setup(p => p.AdjustableAuxiliaryHeater).Returns(adjustableAuxHeater);
+		primaryBusAuxHVAC.Setup(p => p.SeparateAirDistributionDucts).Returns(separateAirdistributionDicts);
+		primaryBusAuxHVAC.Setup(p => p.AdjustableCoolantThermostat).Returns(adjustableCoolantThermostat);
+		primaryBusAuxHVAC.Setup(p => p.EngineWasteGasHeatExchanger).Returns(engineWasteGasHeatExchanger);
+
+		var completedVehicle = new Mock<IVehicleDeclarationInputData>();
+		completedVehicle.Setup(c => c.VehicleCode).Returns(vehicleCode);
+		completedVehicle.Setup(c => c.Length).Returns(length);
+		completedVehicle.Setup(c => c.Height).Returns(height);
+		completedVehicle.Setup(c => c.Width).Returns(width);
+		completedVehicle.Setup(c => c.NumberPassengerSeatsLowerDeck).Returns(numPassengersLowerdeck);
+		completedVehicle.Setup(c => c.NumberPassengersStandingLowerDeck).Returns(0);
+		completedVehicle.Setup(c => c.NumberPassengerSeatsUpperDeck).Returns(numPassengersUpperdeck);
+		completedVehicle.Setup(c => c.NumberPassengersStandingUpperDeck).Returns(0);
+		completedVehicle.Setup(c => c.RegisteredClass).Returns(registrationClass);
+		completedVehicle.Setup(c => c.LowEntry).Returns(lowEntry);
+		completedVehicle.Setup(c => c.EntranceHeight).Returns(entranceHeight);
+
+		var completedComponents = new Mock<IVehicleComponentsDeclaration>();
+		var completedBusAux = new Mock<IBusAuxiliariesDeclarationData>();
+		var completedHVACAux = new Mock<IHVACBusAuxiliariesDeclarationData>();
+		completedBusAux.Setup(c => c.HVACAux).Returns(completedHVACAux.Object);
+		completedComponents.Setup(c => c.BusAuxiliaries).Returns(completedBusAux.Object);
+		completedVehicle.Setup(c => c.Components).Returns(completedComponents.Object);
+
+		completedHVACAux.Setup(c => c.SystemConfiguration).Returns(hvacConfig);
+		completedHVACAux.Setup(c => c.AuxHeaterPower).Returns(auxHeaterPower);
+		completedHVACAux.Setup(c => c.SeparateAirDistributionDucts).Returns(mission.BusParameter.SeparateAirDistributionDuctsHVACCfg.Contains(hvacConfig));
+		completedHVACAux.Setup(c => c.HeatPumpTypeHeatingDriverCompartment).Returns(hpHeatingDriver);
+		completedHVACAux.Setup(c => c.HeatPumpTypeHeatingPassengerCompartment).Returns(hpHeatingPassenger);
+		completedHVACAux.Setup(c => c.HeatPumpTypeCoolingDriverCompartment).Returns(hpCoolingDriver);
+		completedHVACAux.Setup(c => c.HeatPumpTypeCoolingPassengerCompartment).Returns(hpCoolingPassenger);
+		completedHVACAux.Setup(c => c.AirElectricHeater).Returns(airElectricHeater);
+		completedHVACAux.Setup(c => c.WaterElectricHeater).Returns(waterElectricHeater);
+		completedHVACAux.Setup(c => c.OtherHeatingTechnology).Returns(otherElectricHeater);
+
+
+		var runData = new VectoRunData() {
+			Mission = mission,
+			Loading = LoadingType.ReferenceLoad,
+			VehicleData = new VehicleData() {
+				VehicleClass = vehicleClass,
+			},
+			Retarder = new RetarderData() {
+				Type = RetarderType.None
+			}
+		};
+
+		var retVal = dao.CreateBusAuxiliariesData(mission, primaryVehicle.Object, completedVehicle.Object, runData);
+		
+		return retVal;
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
index 71f9c77df6..22989795bd 100644
--- a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
+++ b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs
@@ -1048,7 +1048,7 @@ namespace TUGraz.VectoCore.Tests.Models.EngineeringMode
 				},
 				VehicleData = vehicleData,
 			};
-
+			retVal.SSMInputsHeating = retVal.SSMInputsCooling;
 			return retVal;
 		}
 
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_VIF.xml b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_VIF.xml
index 7c2653ee3a..37bdb796d2 100644
--- a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_VIF.xml	
+++ b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_VIF.xml	
@@ -4,13 +4,14 @@ xmlns:di="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/
 xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" 
 xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" 
 xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.3" 
+xmlns:v2.4="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.4" 
  
 xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1 ./../../../../../VectoCore/Resources/XSD/VectoOutputMultistep.0.1.xsd">
 	<PrimaryVehicle>
 		<Data xsi:type="PrimaryVehicleDataType" id="PIF-4121ae4751874cefa376">
-			<Vehicle xsi:type="VehiclePIFType">
-				<ManufacturerPrimaryVehicle>Generic Truck Manufacturer</ManufacturerPrimaryVehicle>
-				<ManufacturerAddressPrimaryVehicle>Street, ZIP City</ManufacturerAddressPrimaryVehicle>
+			<Vehicle xsi:type="ConventionalVehicleVIFType">
+				<Manufacturer>Generic Truck Manufacturer</Manufacturer>
+				<ManufacturerAddress>Street, ZIP City</ManufacturerAddress>
 				<Model>Generic Model</Model>
 				<VIN>VEH-1234567890_nonSmart</VIN>
 				<Date>2017-02-15T11:00:00Z</Date>
@@ -24,11 +25,11 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 				<RetarderRatio>1.000</RetarderRatio>
 				<AngledriveType>None</AngledriveType>
 				<ZeroEmissionVehicle>false</ZeroEmissionVehicle>
-				<ADAS xmlns:adas="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xsi:type="adas:AdvancedDriverAssistantSystemsType">
-					<adas:EngineStopStart>false</adas:EngineStopStart>
-					<adas:EcoRollWithoutEngineStop>false</adas:EcoRollWithoutEngineStop>
-					<adas:EcoRollWithEngineStop>false</adas:EcoRollWithEngineStop>
-					<adas:PredictiveCruiseControl>none</adas:PredictiveCruiseControl>
+				<ADAS xsi:type="v2.4:ADAS_Conventional_Type">
+					<v2.4:EngineStopStart>false</v2.4:EngineStopStart>
+					<v2.4:EcoRollWithoutEngineStop>false</v2.4:EcoRollWithoutEngineStop>
+					<v2.4:EcoRollWithEngineStop>false</v2.4:EcoRollWithEngineStop>
+					<v2.4:PredictiveCruiseControl>none</v2.4:PredictiveCruiseControl>
 				</ADAS>
 				<TorqueLimits xmlns:tcl="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="tcl:TorqueLimitsType">
 					<tcl:Entry gear="6" maxTorque="1800"/>
@@ -36,7 +37,7 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 				</TorqueLimits>
 				<Components xsi:type="Vehicle_Conventional_ComponentsVIFType">
 					<Engine>
-						<Data xsi:type="EngineDataPIFType">
+						<Data xsi:type="EngineDataVIFType">
 							<Manufacturer>Generic Engine Manufacturer</Manufacturer>
 							<Model>Generic primary bus 41 Engine</Model>
 							<CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber>
@@ -47,9 +48,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 							<RatedPower>220000</RatedPower>
 							<MaxEngineTorque>1100</MaxEngineTorque>
 							<WHRType>
-								<v2.3:MechanicalOutputICE>false</v2.3:MechanicalOutputICE>
-								<v2.3:MechanicalOutputDrivetrain>false</v2.3:MechanicalOutputDrivetrain>
-								<v2.3:ElectricalOutput>false</v2.3:ElectricalOutput>
+								<MechanicalOutputICE>false</MechanicalOutputICE>
+								<MechanicalOutputDrivetrain>false</MechanicalOutputDrivetrain>
+								<ElectricalOutput>false</ElectricalOutput>
 							</WHRType>
 							<Mode>
 								<IdlingSpeed>700</IdlingSpeed>
@@ -74,14 +75,14 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 						</Data>
 					</Engine>
 					<Transmission>
-						<Data xsi:type="TransmissionDataPIFType">
+						<Data xsi:type="TransmissionDataVIFType">
 							<Manufacturer>Generic Gearbox Manufacturer</Manufacturer>
 							<Model>AT 6 Gear</Model>
 							<MainCertificationMethod>Standard values</MainCertificationMethod>
 							<Date>2017-01-11T11:00:00Z</Date>
 							<AppVersion>3.0.1</AppVersion>
 							<TransmissionType>APT-S</TransmissionType>
-							<Gears xsi:type="TransmissionGearsPIFType">
+							<Gears xsi:type="TransmissionGearsVIFType">
 								<Gear number="1">
 									<Ratio>3.364</Ratio>
 									<MaxTorque>1900</MaxTorque>
@@ -112,7 +113,7 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 						</Data>
 					</Transmission>
 					<Axlegear>
-						<Data xsi:type="AxlegearDataPIFType">
+						<Data xsi:type="AxlegearDataVIFType">
 							<Manufacturer>Generic Gearbox Manufacturer</Manufacturer>
 							<Model>Generic primary bus 41 AxleGear</Model>
 							<CertificationMethod>Standard values</CertificationMethod>
@@ -123,7 +124,7 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 						</Data>
 					</Axlegear>
 					<AxleWheels>
-						<Data xsi:type="AxleWheelsDataPIFType">
+						<Data xsi:type="AxleWheelsDataVIFType">
 							<Axles>
 								<vif0.1:Axle axleNumber="1" xsi:type="AxleDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0">
 									<AxleType>VehicleNonDriven</AxleType>
@@ -183,7 +184,7 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 						</Data>
 					</AxleWheels>
 					<Auxiliaries>
-						<Data xmlns:aux="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xsi:type="AuxiliaryDataPIFType">
+						<Data xsi:type="AUX_Conventional_PrimaryBusType">
 							<Fan>
 								<Technology>Hydraulic driven - Constant displacement pump</Technology>
 							</Fan>
@@ -235,7 +236,7 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 			<Results>
 				<Status>success</Status>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Heavy Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">13098.63</TotalVehicleMass>
@@ -246,10 +247,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">20.73851</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1520.18</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Heavy Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">17593.16</TotalVehicleMass>
@@ -260,10 +260,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">24.94611</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1828.60</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">13098.63</TotalVehicleMass>
@@ -274,10 +273,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">16.93598</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1241.44</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">17593.16</TotalVehicleMass>
@@ -288,10 +286,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">20.36950</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1493.13</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Suburban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">13098.63</TotalVehicleMass>
@@ -302,10 +299,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">15.03487</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1102.09</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Suburban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">17593.16</TotalVehicleMass>
@@ -316,10 +312,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">18.14589</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1330.13</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Interurban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">12854.90</TotalVehicleMass>
@@ -330,10 +325,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">12.90679</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">946.09</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31SD</PrimaryVehicleSubgroup>
 					<Mission>Interurban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">15494.61</TotalVehicleMass>
@@ -344,10 +338,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">14.34621</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1051.61</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31DD</PrimaryVehicleSubgroup>
 					<Mission>Heavy Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">13543.34</TotalVehicleMass>
@@ -358,10 +351,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">21.81903</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1599.38</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31DD</PrimaryVehicleSubgroup>
 					<Mission>Heavy Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">18316.69</TotalVehicleMass>
@@ -372,10 +364,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">26.59833</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1949.71</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31DD</PrimaryVehicleSubgroup>
 					<Mission>Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">13543.34</TotalVehicleMass>
@@ -386,10 +377,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">17.82311</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1306.47</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31DD</PrimaryVehicleSubgroup>
 					<Mission>Urban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">18316.69</TotalVehicleMass>
@@ -400,10 +390,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">21.69768</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1590.49</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31DD</PrimaryVehicleSubgroup>
 					<Mission>Suburban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">13543.34</TotalVehicleMass>
@@ -414,10 +403,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">15.74932</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1154.46</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P31DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P31DD</PrimaryVehicleSubgroup>
 					<Mission>Suburban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">18316.69</TotalVehicleMass>
@@ -428,10 +416,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">19.17775</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1405.77</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32SD</PrimaryVehicleSubgroup>
 					<Mission>Interurban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">14225.44</TotalVehicleMass>
@@ -442,10 +429,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">13.19757</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">967.41</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32SD</PrimaryVehicleSubgroup>
 					<Mission>Interurban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">16669.61</TotalVehicleMass>
@@ -456,10 +442,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">14.54412</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1066.11</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32SD</PrimaryVehicleSubgroup>
 					<Mission>Coach</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">14244.99</TotalVehicleMass>
@@ -470,10 +455,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">11.13867</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">816.49</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32SD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32SD</PrimaryVehicleSubgroup>
 					<Mission>Coach</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">15887.48</TotalVehicleMass>
@@ -484,10 +468,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">11.58643</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">849.31</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32DD</PrimaryVehicleSubgroup>
 					<Mission>Interurban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">14662.82</TotalVehicleMass>
@@ -498,10 +481,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">13.62230</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">998.54</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32DD</PrimaryVehicleSubgroup>
 					<Mission>Interurban</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">17609.41</TotalVehicleMass>
@@ -512,10 +494,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">15.22020</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">1115.67</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32DD</PrimaryVehicleSubgroup>
 					<Mission>Coach</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">14747.01</TotalVehicleMass>
@@ -526,10 +507,9 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">11.61807</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">851.63</CO2>
 				</Result>
 				<Result status="success">
-					<VehicleGroup>P32DD</VehicleGroup>
+					<PrimaryVehicleSubgroup>P32DD</PrimaryVehicleSubgroup>
 					<Mission>Coach</Mission>
 					<SimulationParameters>
 						<TotalVehicleMass unit="kg">16767.53</TotalVehicleMass>
@@ -540,7 +520,6 @@ xmlns:vif0.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"
 					<Fuel type="Diesel CI">
 						<EnergyConsumption unit="MJ/km">12.15012</EnergyConsumption>
 					</Fuel>
-					<CO2 unit="g/km">890.63</CO2>
 				</Result>
 			</Results>
 			<ApplicationInformation>
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 758a88223c..236a10fe1d 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -39,6 +39,7 @@
 
   <ItemGroup>
     <Folder Include="InputData\DeclarationDataAdapterTest\" />
+    <Folder Include="Models\Declaration\BusAux\" />
   </ItemGroup>
 	<Choose>
 		<When Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(&#xD;&#xA;         $(DefineConstants), '^(.*;)*MOCKUP(;.*)*$'))">
-- 
GitLab