diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
index 8f05e2e8b1b4b7a4e2f5aedc8d4fcea8c656e4a3..bc091c7e95d99c0d9b7ffb6147c97941b2df9e2c 100644
--- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
@@ -31,6 +31,8 @@
 
 using System;
 using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.ComponentModel;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.SimulationComponent.Impl;
@@ -89,7 +91,101 @@ namespace TUGraz.VectoCommon.InputData
 					throw new ArgumentOutOfRangeException(nameof(jobType), jobType, null);
 			}
 		}
+
+		public static ArchitectureID GetArchitectureID(this VectoSimulationJobType jobType, PowertrainPosition em)
+		{
+			switch (jobType) {
+				case VectoSimulationJobType.ConventionalVehicle:
+				case VectoSimulationJobType.EngineOnlySimulation:
+					return ArchitectureID.UNKNOWN;
+				case VectoSimulationJobType.ParallelHybridVehicle:
+					return GetPHEVArchitectureId(em);
+
+				case VectoSimulationJobType.SerialHybridVehicle:
+					return GetSHEVArchitecureID(em);
+
+				case VectoSimulationJobType.BatteryElectricVehicle:
+					return GetPEVArchId(emPos: em);
+
+				case VectoSimulationJobType.IEPC_E:
+				case VectoSimulationJobType.IEPC_S:
+					return GetIepcArchitectureId(jobType, em);
+
+				case VectoSimulationJobType.IHPC:
+					break;
+				default:
+					throw new ArgumentOutOfRangeException(nameof(jobType), jobType, null);
+			}
+
+
+
+
+			return ArchitectureID.UNKNOWN;
+		}
+
+		private static ArchitectureID GetIepcArchitectureId(VectoSimulationJobType jobType, PowertrainPosition em)
+		{
+			if (em != PowertrainPosition.IEPC) {
+				throw new ArgumentException(nameof(em));
+			}
+
+			switch (jobType) {
+				case VectoSimulationJobType.IEPC_E:
+					return ArchitectureID.E_IEPC;
+				case VectoSimulationJobType.IEPC_S:
+					return ArchitectureID.S_IEPC;
+				default:
+					throw new ArgumentException(nameof(jobType));
+			}
+		}
+
+		private static ArchitectureID GetPHEVArchitectureId(PowertrainPosition emPos)
+		{
+			switch (emPos) {
+				case PowertrainPosition.HybridP1:
+					return ArchitectureID.P1;
+				case PowertrainPosition.HybridP2:
+					return ArchitectureID.P2;
+				case PowertrainPosition.HybridP2_5:
+					return ArchitectureID.P2_5;
+				case PowertrainPosition.HybridP3:
+					return ArchitectureID.P3;
+				case PowertrainPosition.HybridP4:
+					return ArchitectureID.P4;
+				default:
+					throw new ArgumentOutOfRangeException(nameof(emPos));
+			}
+		}
+
+		private static ArchitectureID GetSHEVArchitecureID(PowertrainPosition emPos)
+		{
+			switch (emPos) {
+				case PowertrainPosition.BatteryElectricE4:
+					return ArchitectureID.S4;
+				case PowertrainPosition.BatteryElectricE3:
+					return ArchitectureID.S3;
+				case PowertrainPosition.BatteryElectricE2:
+					return ArchitectureID.S2;
+				default:
+					throw new ArgumentOutOfRangeException(nameof(emPos));
+			}
+		}
+
+		private static ArchitectureID GetPEVArchId(PowertrainPosition emPos)
+		{
+			switch (emPos) {
+				case PowertrainPosition.BatteryElectricE4:
+					return ArchitectureID.E4;
+				case PowertrainPosition.BatteryElectricE3:
+					return ArchitectureID.E3;
+				case PowertrainPosition.BatteryElectricE2:
+					return ArchitectureID.E2;
+				default:
+					throw new ArgumentOutOfRangeException(nameof(emPos));
+			}
+		}
 	}
+	
 
 	public interface IHybridStrategyParameters
 	{
diff --git a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs
index 14e902d6fdd8d86bec173eb323edb11bad15d25f..cc34e1c47cc65861b341915ad58c77b084ac5996 100644
--- a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs
+++ b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs
@@ -5,7 +5,7 @@ using TUGraz.VectoCommon.Utils;
 namespace TUGraz.VectoCommon.InputData {
 	public enum PowertrainPosition
 	{
-		HybridPositionNotSet, // this has to be the first entrie so that it is used as default for not initialized fields!
+		HybridPositionNotSet, // this has to be the first entry so that it is used as default for not initialized fields!
 		HybridP0,
 		HybridP1,
 		HybridP2,
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
index 1e677dedb0fe48901d873fca4473372b13471e23..4b059ec598f07684b142c000c46b4297534c2b17 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs
@@ -340,8 +340,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public Watt MaxNetPower1 => null;
 
-		public Watt MaxNetPower2 => null;
-
 		public string ExemptedTechnology => null;
 
 		public RegistrationClass? RegisteredClass => RegistrationClass.unknown;
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index b6f7320d601259b920a86a2c3676e775815833a7..3b5edb6105833629d51da880c46dec8ef598bec0 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -497,57 +497,35 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		protected virtual IList<IAuxiliaryDeclarationInputData> AuxData()
 		{
 			var retVal = new List<IAuxiliaryDeclarationInputData>();
-			foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
+
+			foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>())
+			{
+				try
+				{
+					aux.GetEx("Technology").ToObject<List<string>>();
+				}
+				catch (Exception)
+				{
+					throw new VectoException(
+						"Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?",
+						aux.GetEx<string>("ID"));
+				}
+
 				var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
 
-				var auxData = new DeclarationAuxiliaryDataInputData() {
+				var auxData = new DeclarationAuxiliaryDataInputData
+				{
 					ID = aux.GetEx<string>("ID"),
 					Type = type,
-					Technology = new List<string>(),
+					Technology = aux.GetEx("Technology").ToObject<List<string>>()
 				};
-				var tech = aux.GetEx<string>("Technology");
-
-				if (auxData.Type == AuxiliaryType.ElectricSystem) {
-					if (aux["TechList"] == null || aux["TechList"].Any()) {
-						auxData.Technology.Add("Standard technology");
-					} else {
-						auxData.Technology.Add("Standard technology - LED headlights, all");
-					}
-				}
-
-				if (auxData.Type == AuxiliaryType.SteeringPump) {
-					auxData.Technology.Add(tech);
-				}
 
-				if (auxData.Type == AuxiliaryType.Fan) {
-					auxData.Technology.Add(MapLegacyFanTechnologies(tech));
-				}
 
 				retVal.Add(auxData);
-			}
 
-			return retVal;
-		}
-
-		private static string MapLegacyFanTechnologies(string tech)
-		{
-			string newTech;
-			switch (tech) {
-				case "Crankshaft mounted - Electronically controlled visco clutch (Default)":
-					newTech = "Crankshaft mounted - Electronically controlled visco clutch";
-					break;
-				case "Crankshaft mounted - On/Off clutch":
-					newTech = "Crankshaft mounted - On/off clutch";
-					break;
-				case "Belt driven or driven via transm. - On/Off clutch":
-					newTech = "Belt driven or driven via transm. - On/off clutch";
-					break;
-				default:
-					newTech = tech;
-					break;
 			}
 
-			return newTech;
+			return retVal;
 		}
 
 		#endregion
@@ -580,34 +558,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		public JSONInputDataV3(JObject data, string filename, bool tolerateMissing = false)
 			: base(data, filename, tolerateMissing) { }
 
-		protected override IList<IAuxiliaryDeclarationInputData> AuxData()
-		{
-			var retVal = new List<IAuxiliaryDeclarationInputData>();
-			
-			foreach (var aux in Body["Aux"] ?? Enumerable.Empty<JToken>()) {
-				try {
-					aux.GetEx("Technology").ToObject<List<string>>();
-				} catch (Exception) {
-					throw new VectoException(
-						"Aux: Technology for aux '{0}' list could not be read. Maybe it is a single string instead of a list of strings?",
-						aux.GetEx<string>("ID"));
-				}
-
-				var type = AuxiliaryTypeHelper.Parse(aux.GetEx<string>("Type"));
-
-				var auxData = new DeclarationAuxiliaryDataInputData {
-					ID = aux.GetEx<string>("ID"),
-					Type = type,
-					Technology = aux.GetEx("Technology").ToObject<List<string>>()
-				};
-
-				
-				retVal.Add(auxData);
-
-			}
-
-			return retVal;
-		}
+		
 	}
 
 
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs
index 73c3cddbd1477f2486852898a8ce739d4df09fbf..fa22ce9c5e3d2789ef29ae3b3f2c8a354b72f42d 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs
@@ -617,7 +617,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			_entries = entries;
 
 		IList<ElectricMachineEntry<IElectricMotorDeclarationInputData>> IElectricMachinesDeclarationInputData.Entries =>
-			_entries.Cast<ElectricMachineEntry<IElectricMotorDeclarationInputData>>().ToList();
+			_entries.Select(entry => new ElectricMachineEntry<IElectricMotorDeclarationInputData>() {
+				ElectricMachine = entry.ElectricMachine,
+				ADC = entry.ADC,
+				Count = entry.Count,
+				MechanicalTransmissionEfficiency = entry.MechanicalTransmissionEfficiency,
+				MechanicalTransmissionLossMap = entry.MechanicalTransmissionLossMap,
+				Position = entry.Position,
+				RatioADC = entry.RatioADC,
+				RatioPerGear = entry.RatioPerGear
+			}).ToList();
+		//_entries.Cast<ElectricMachineEntry<IElectricMotorDeclarationInputData>>().ToList();
 
 		public virtual IList<ElectricMachineEntry<IElectricMotorEngineeringInputData>> Entries =>
 			_entries;
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index 148adaf1f8bd46c11c37b3e76e495a7042d12bea..fa9df44b04f513ef6706ea59ca5748d1f4436b87 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -91,6 +91,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			return _batteries ?? (_batteries = ReadBatteries());
 		}
 
+		public override ArchitectureID ArchitectureID
+		{
+			get
+			{
+				return VehicleType.GetArchitectureID(GetElectricMachines().Entries
+					.First(e => e.Position != PowertrainPosition.GEN).Position);
+			}
+		}
+
 		public override VectoSimulationJobType VehicleType
 		{
 			get {
@@ -339,7 +348,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		public int? NumSteeredAxles => null;
 		XmlNode IVehicleDeclarationInputData.XMLSource => null;
 		public virtual string VehicleTypeApprovalNumber { get; }
-		public ArchitectureID ArchitectureID { get; }
+		public virtual ArchitectureID ArchitectureID { get; }
 		public bool OvcHev { get; }
 		public Watt MaxChargingPower { get; }
 
@@ -497,8 +506,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public virtual Watt MaxNetPower1 => null;
 
-		public virtual Watt MaxNetPower2 => null;
-
 		public virtual string ExemptedTechnology => null;
 
 		public virtual RegistrationClass? RegisteredClass => RegistrationClass.unknown;