diff --git a/NuGet.Config b/NuGet.Config
index af0755bcb971b11de2c4a411fcead292c397a88a..bf151934c8e3ded3e601297220b7ff1b17a375fa 100644
--- a/NuGet.Config
+++ b/NuGet.Config
@@ -3,4 +3,4 @@
   <config>
     <add key="repositoryPath" value="c:\packages\" />
   </config>
-</configuration>
\ No newline at end of file
+</configuration>
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 4c9d7b682edef98b9d795208f576ffdfcf9bc679..49d52ceb19caed5e8c5fa711c5a5e86a544ff7db 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -737,20 +737,19 @@ namespace TUGraz.VectoCore.Models.Declaration
 					{
 						// P0 ???
 						UtilityFactor = ConventionalUF;
+					} else {
+						if (_compressorDrive == CompressorDrive.electrically) {
+							UtilityFactor = HybridElectrifiedCompressorUF;
+						} else {
+							UtilityFactor = HybridUF;
+						}
 					}
-
-
-					if (_compressorDrive == CompressorDrive.electrically) {
-						UtilityFactor = HybridElectrifiedCompressorUF;
-					}
-
-					UtilityFactor = HybridUF;
 				}
 				private CompressorDrive _compressorDrive;
 				private ArchitectureID _arch;
 				private readonly VectoSimulationJobType _jobType;
 				public Second ActivationDelay => 2.SI<Second>();
-				public Second MaxEngineOffTimespan => 12.SI<Second>();
+				public Second MaxEngineOffTimespan => 120.SI<Second>();
 				public double UtilityFactor { get; }
 			}
 
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DriverDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DriverDataTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d2314b3c9fab0967eff8e05c2e9d210c14dbdf06
--- /dev/null
+++ b/VectoCore/VectoCoreTest/Models/Declaration/DataAdapter/DriverDataTest.cs
@@ -0,0 +1,524 @@
+using System;
+using Moq;
+using NUnit.Framework;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponents;
+using TUGraz.VectoCore.Models.Declaration;
+
+namespace TUGraz.VectoCore.Tests.Models.Declaration.DataAdapter;
+
+public class DriverDataTest
+{
+	[OneTimeSetUp]
+	public void OneTimeSetup()
+	{
+
+	}
+
+	[TestCase(VehicleClass.Class1s),
+	TestCase(VehicleClass.Class1),
+	TestCase(VehicleClass.Class2),
+	TestCase(VehicleClass.Class3),
+	TestCase(VehicleClass.Class4),
+	TestCase(VehicleClass.Class5),
+	TestCase(VehicleClass.Class9),
+	TestCase(VehicleClass.Class10),
+	TestCase(VehicleClass.Class11),
+	TestCase(VehicleClass.Class12),
+	TestCase(VehicleClass.Class16),
+	TestCase(VehicleClass.Class53),
+	TestCase(VehicleClass.Class54),
+    ]
+	public void TestLorryDeclarationDriverData(VehicleClass group)
+	{
+		var da = new LorryDriverDataAdapter();
+
+		var segment = GetLorrySegment(group);
+		Assert.AreEqual(group, segment.VehicleClass);
+
+		var driverData = da.CreateDriverData(segment);
+		
+		Assert.IsNotNull(driverData);
+
+		Assert.IsTrue(driverData.OverSpeed.Enabled);
+		Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.OverSpeed.MinSpeed);
+		Assert.AreEqual(2.5.KMPHtoMeterPerSecond(), driverData.OverSpeed.OverSpeed);
+
+		Assert.AreEqual(2.SI<Second>(), driverData.EngineStopStart.EngineOffStandStillActivationDelay);
+		Assert.AreEqual(120.SI<Second>(), driverData.EngineStopStart.MaxEngineOffTimespan);
+		Assert.AreEqual(0.8, driverData.EngineStopStart.UtilityFactorDriving);
+		Assert.AreEqual(0.8, driverData.EngineStopStart.UtilityFactorDriving);
+
+		Assert.AreEqual(60.KMPHtoMeterPerSecond(), driverData.EcoRoll.MinSpeed);
+		Assert.AreEqual(0.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationLowerLimit);
+		Assert.AreEqual(0.1.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationUpperLimit);
+		Assert.AreEqual(2.SI<Second>(), driverData.EcoRoll.ActivationPhaseDuration);
+		Assert.AreEqual(0.KMPHtoMeterPerSecond(), driverData.EcoRoll.UnderspeedThreshold);
+
+		Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.PCC.MinSpeed);
+		Assert.AreEqual(5.KMPHtoMeterPerSecond(), driverData.PCC.OverspeedUseCase3);
+		Assert.AreEqual(80.KMPHtoMeterPerSecond(), driverData.PCC.PCCEnableSpeed);
+		Assert.AreEqual(1500.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase1);
+		Assert.AreEqual(1000.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase2);
+		Assert.AreEqual(8.KMPHtoMeterPerSecond(), driverData.PCC.UnderSpeed);
+
+		Assert.IsTrue(driverData.LookAheadCoasting.Enabled);
+		Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.LookAheadCoasting.MinSpeed);
+		//Assert.AreEqual(, driverData.LookAheadCoasting.LookAheadDecisionFactor);
+		Assert.AreEqual(10, driverData.LookAheadCoasting.LookAheadDistanceFactor);
+	}
+
+
+	private const VehicleClass P31_32 = VehicleClass.ClassP31_32;
+	private const VehicleClass P33_34 = VehicleClass.ClassP33_34;
+	private const VehicleClass P35_36 = VehicleClass.ClassP35_36;
+	private const VehicleClass P37_38 = VehicleClass.ClassP37_38;
+	private const VehicleClass P39_40 = VehicleClass.ClassP39_40;
+
+    private const CompressorDrive psMech = CompressorDrive.mechanically;
+	private const CompressorDrive psEl = CompressorDrive.electrically;
+
+    [
+	TestCase(P31_32, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(P31_32, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(P31_32, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(P31_32, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(P31_32, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(P31_32, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(P31_32, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(P31_32, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(P33_34, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(P33_34, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(P33_34, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(P33_34, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(P33_34, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(P33_34, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(P33_34, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(P33_34, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(P35_36, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(P35_36, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(P35_36, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(P35_36, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(P35_36, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(P35_36, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(P35_36, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(P35_36, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(P37_38, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(P37_38, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(P37_38, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(P37_38, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(P37_38, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(P37_38, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(P37_38, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(P37_38, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(P39_40, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(P39_40, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(P39_40, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(P39_40, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(P39_40, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(P39_40, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(P39_40, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(P39_40, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+    ]
+    public void TestPrimaryBusDeclarationDriverData(VehicleClass group, VectoSimulationJobType jobType,
+		ArchitectureID arch, CompressorDrive compressorDrive, double expectedESSUF)
+	{
+		var da = new PrimaryBusDriverDataAdapter();
+
+		var segment = GetBusSegment(group);
+		Assert.AreEqual(group, segment.VehicleClass);
+
+		var driverData = da.CreateBusDriverData(segment, jobType, arch, compressorDrive);
+
+		Assert.IsNotNull(driverData);
+
+		Assert.IsTrue(driverData.OverSpeed.Enabled);
+		Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.OverSpeed.MinSpeed);
+		Assert.AreEqual(2.5.KMPHtoMeterPerSecond(), driverData.OverSpeed.OverSpeed);
+
+		Assert.AreEqual(2.SI<Second>(), driverData.EngineStopStart.EngineOffStandStillActivationDelay);
+		Assert.AreEqual(120.SI<Second>(), driverData.EngineStopStart.MaxEngineOffTimespan);
+		Assert.AreEqual(expectedESSUF, driverData.EngineStopStart.UtilityFactorDriving);
+		Assert.AreEqual(expectedESSUF, driverData.EngineStopStart.UtilityFactorDriving);
+
+		Assert.AreEqual(60.KMPHtoMeterPerSecond(), driverData.EcoRoll.MinSpeed);
+		Assert.AreEqual(0.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationLowerLimit);
+		Assert.AreEqual(0.1.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationUpperLimit);
+		Assert.AreEqual(2.SI<Second>(), driverData.EcoRoll.ActivationPhaseDuration);
+		Assert.AreEqual(0.KMPHtoMeterPerSecond(), driverData.EcoRoll.UnderspeedThreshold);
+
+		Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.PCC.MinSpeed);
+		Assert.AreEqual(5.KMPHtoMeterPerSecond(), driverData.PCC.OverspeedUseCase3);
+		Assert.AreEqual(80.KMPHtoMeterPerSecond(), driverData.PCC.PCCEnableSpeed);
+		Assert.AreEqual(1500.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase1);
+		Assert.AreEqual(1000.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase2);
+		Assert.AreEqual(8.KMPHtoMeterPerSecond(), driverData.PCC.UnderSpeed);
+
+		Assert.IsTrue(driverData.LookAheadCoasting.Enabled);
+		Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.LookAheadCoasting.MinSpeed);
+		//Assert.AreEqual(, driverData.LookAheadCoasting.LookAheadDecisionFactor);
+		Assert.AreEqual(10, driverData.LookAheadCoasting.LookAheadDistanceFactor);
+    }
+
+    [TestCase(VehicleClass.Class31a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+    ]
+    public void TestCompletedGenericBusDeclarationDriverData(VehicleClass group, VectoSimulationJobType jobType,
+    ArchitectureID arch, CompressorDrive compressorDrive, double expectedESSUF)
+    {
+        var da = new CompletedBusGenericDriverDataAdapter();
+
+        var segment = GetBusSegment(group);
+        Assert.AreEqual(group, segment.VehicleClass);
+
+        var driverData = da.CreateBusDriverData(segment, jobType, arch, compressorDrive);
+
+        Assert.IsNotNull(driverData);
+
+        // overspeed is disabled for completed simulations
+        Assert.IsFalse(driverData.OverSpeed.Enabled);
+        Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.OverSpeed.MinSpeed);
+        Assert.AreEqual(2.5.KMPHtoMeterPerSecond(), driverData.OverSpeed.OverSpeed);
+
+        Assert.AreEqual(2.SI<Second>(), driverData.EngineStopStart.EngineOffStandStillActivationDelay);
+        Assert.AreEqual(120.SI<Second>(), driverData.EngineStopStart.MaxEngineOffTimespan);
+        Assert.AreEqual(expectedESSUF, driverData.EngineStopStart.UtilityFactorDriving);
+        Assert.AreEqual(expectedESSUF, driverData.EngineStopStart.UtilityFactorDriving);
+
+        Assert.AreEqual(60.KMPHtoMeterPerSecond(), driverData.EcoRoll.MinSpeed);
+        Assert.AreEqual(0.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationLowerLimit);
+        Assert.AreEqual(0.1.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationUpperLimit);
+        Assert.AreEqual(2.SI<Second>(), driverData.EcoRoll.ActivationPhaseDuration);
+        Assert.AreEqual(0.KMPHtoMeterPerSecond(), driverData.EcoRoll.UnderspeedThreshold);
+
+        Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.PCC.MinSpeed);
+        Assert.AreEqual(5.KMPHtoMeterPerSecond(), driverData.PCC.OverspeedUseCase3);
+        Assert.AreEqual(80.KMPHtoMeterPerSecond(), driverData.PCC.PCCEnableSpeed);
+        Assert.AreEqual(1500.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase1);
+        Assert.AreEqual(1000.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase2);
+        Assert.AreEqual(8.KMPHtoMeterPerSecond(), driverData.PCC.UnderSpeed);
+
+        // lookahead coasting is disabled for completed simulations
+        Assert.IsFalse(driverData.LookAheadCoasting.Enabled);
+        Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.LookAheadCoasting.MinSpeed);
+        //Assert.AreEqual(, driverData.LookAheadCoasting.LookAheadDecisionFactor);
+        Assert.AreEqual(10, driverData.LookAheadCoasting.LookAheadDistanceFactor);
+    }
+
+    [TestCase(VehicleClass.Class31a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(VehicleClass.Class31a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(VehicleClass.Class33a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psMech, 0.35),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psMech, 0.55),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psMech, 0.55),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psMech, 0.55),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ConventionalVehicle, ArchitectureID.UNKNOWN, psEl, 0.35),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.BatteryElectricVehicle, ArchitectureID.E2, psEl, 0.65),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.SerialHybridVehicle, ArchitectureID.S2, psEl, 0.65),
+	TestCase(VehicleClass.Class37a, VectoSimulationJobType.ParallelHybridVehicle, ArchitectureID.P2, psEl, 0.65),
+    ]
+    public void TestCompletedSpecificBusDeclarationDriverData(VehicleClass group, VectoSimulationJobType jobType, 
+		ArchitectureID arch, CompressorDrive compressorDrive, double expectedESSUF)
+    {
+        var da = new CompletedBusGenericDriverDataAdapter();
+
+        var segment = GetBusSegment(group);
+        Assert.AreEqual(group, segment.VehicleClass);
+
+        var driverData = da.CreateBusDriverData(segment, jobType, arch, compressorDrive);
+
+        Assert.IsNotNull(driverData);
+
+        // overspeed is disabled for completed simulations
+        Assert.IsFalse(driverData.OverSpeed.Enabled);
+        Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.OverSpeed.MinSpeed);
+        Assert.AreEqual(2.5.KMPHtoMeterPerSecond(), driverData.OverSpeed.OverSpeed);
+
+        Assert.AreEqual(2.SI<Second>(), driverData.EngineStopStart.EngineOffStandStillActivationDelay);
+        Assert.AreEqual(120.SI<Second>(), driverData.EngineStopStart.MaxEngineOffTimespan);
+        Assert.AreEqual(expectedESSUF, driverData.EngineStopStart.UtilityFactorDriving);
+        Assert.AreEqual(expectedESSUF, driverData.EngineStopStart.UtilityFactorDriving);
+
+        Assert.AreEqual(60.KMPHtoMeterPerSecond(), driverData.EcoRoll.MinSpeed);
+        Assert.AreEqual(0.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationLowerLimit);
+        Assert.AreEqual(0.1.SI<MeterPerSquareSecond>(), driverData.EcoRoll.AccelerationUpperLimit);
+        Assert.AreEqual(2.SI<Second>(), driverData.EcoRoll.ActivationPhaseDuration);
+        Assert.AreEqual(0.KMPHtoMeterPerSecond(), driverData.EcoRoll.UnderspeedThreshold);
+
+        Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.PCC.MinSpeed);
+        Assert.AreEqual(5.KMPHtoMeterPerSecond(), driverData.PCC.OverspeedUseCase3);
+        Assert.AreEqual(80.KMPHtoMeterPerSecond(), driverData.PCC.PCCEnableSpeed);
+        Assert.AreEqual(1500.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase1);
+        Assert.AreEqual(1000.SI<Meter>(), driverData.PCC.PreviewDistanceUseCase2);
+        Assert.AreEqual(8.KMPHtoMeterPerSecond(), driverData.PCC.UnderSpeed);
+
+        // lookahead coasting is disabled for completed simulations
+        Assert.IsFalse(driverData.LookAheadCoasting.Enabled);
+        Assert.AreEqual(50.KMPHtoMeterPerSecond(), driverData.LookAheadCoasting.MinSpeed);
+        //Assert.AreEqual(, driverData.LookAheadCoasting.LookAheadDecisionFactor);
+        Assert.AreEqual(10, driverData.LookAheadCoasting.LookAheadDistanceFactor);
+    }
+
+    private Segment GetBusSegment(VehicleClass group)
+	{
+		switch (group) {
+			case VehicleClass.ClassP31_32:
+				return DeclarationData.PrimaryBusSegments.Lookup(VehicleCategory.HeavyBusPrimaryVehicle, AxleConfiguration.AxleConfig_4x2, false);
+            case VehicleClass.ClassP33_34:
+				return DeclarationData.PrimaryBusSegments.Lookup(VehicleCategory.HeavyBusPrimaryVehicle, AxleConfiguration.AxleConfig_6x2, false);
+            case VehicleClass.ClassP35_36:
+				return DeclarationData.PrimaryBusSegments.Lookup(VehicleCategory.HeavyBusPrimaryVehicle, AxleConfiguration.AxleConfig_6x2, true);
+			case VehicleClass.ClassP37_38:
+				return DeclarationData.PrimaryBusSegments.Lookup(VehicleCategory.HeavyBusPrimaryVehicle, AxleConfiguration.AxleConfig_8x2, false);
+			case VehicleClass.ClassP39_40:
+				return DeclarationData.PrimaryBusSegments.Lookup(VehicleCategory.HeavyBusPrimaryVehicle, AxleConfiguration.AxleConfig_8x4, true);
+            //case VehicleClass.ClassP31SD:
+            //	break;
+            //case VehicleClass.ClassP31DD:
+            //	break;
+            //case VehicleClass.ClassP32SD:
+            //	break;
+            //case VehicleClass.ClassP32DD:
+            //	break;
+            //case VehicleClass.ClassP33SD:
+            //	break;
+            //case VehicleClass.ClassP33DD:
+            //	break;
+            //case VehicleClass.ClassP34SD:
+            //	break;
+            //case VehicleClass.ClassP34DD:
+            //	break;
+            //case VehicleClass.ClassP35SD:
+            //	break;
+            //case VehicleClass.ClassP35DD:
+            //	break;
+            //case VehicleClass.ClassP36SD:
+            //	break;
+            //case VehicleClass.ClassP36DD:
+            //	break;
+            //case VehicleClass.ClassP37SD:
+            //	break;
+            //case VehicleClass.ClassP37DD:
+            //	break;
+            //case VehicleClass.ClassP38SD:
+            //	break;
+            //case VehicleClass.ClassP38DD:
+            //	break;
+            //case VehicleClass.ClassP39SD:
+            //	break;
+            //case VehicleClass.ClassP39DD:
+            //	break;
+            //case VehicleClass.ClassP40SD:
+            //	break;
+            //case VehicleClass.ClassP40DD:
+            //	break;
+            case VehicleClass.Class31a:
+				return DeclarationData.CompletedBusSegments.Lookup(AxleConfiguration.AxleConfig_4x2.NumAxles(), VehicleCode.CE, RegistrationClass.I, 0, 0.SI<Meter>(), false);
+            //case VehicleClass.Class31b1:
+            //	break;
+            //case VehicleClass.Class31b2:
+            //	break;
+            //case VehicleClass.Class31c:
+            //	break;
+            //case VehicleClass.Class31d:
+            //	break;
+            //case VehicleClass.Class31e:
+            //	break;
+            //        case VehicleClass.Class32a:
+            //break;
+            //case VehicleClass.Class32b:
+            //	break;
+            //case VehicleClass.Class32c:
+            //	break;
+            //case VehicleClass.Class32d:
+            //	break;
+            //case VehicleClass.Class32e:
+            //	break;
+            //case VehicleClass.Class32f:
+            //	break;
+            case VehicleClass.Class33a:
+				return DeclarationData.CompletedBusSegments.Lookup(AxleConfiguration.AxleConfig_6x2.NumAxles(), VehicleCode.CE, RegistrationClass.I, 0, 0.SI<Meter>(), false);
+            //case VehicleClass.Class33b1:
+            //	break;
+            //case VehicleClass.Class33b2:
+            //	break;
+            //case VehicleClass.Class33c:
+            //	break;
+            //case VehicleClass.Class33d:
+            //	break;
+            //case VehicleClass.Class33e:
+            //	break;
+            //case VehicleClass.Class34a:
+            //	break;
+            //case VehicleClass.Class34b:
+            //	break;
+            //case VehicleClass.Class34c:
+            //	break;
+            //case VehicleClass.Class34d:
+            //	break;
+            //case VehicleClass.Class34e:
+            //	break;
+            //case VehicleClass.Class34f:
+            //	break;
+            //case VehicleClass.Class35a:
+            //	break;
+            //case VehicleClass.Class35b1:
+            //	break;
+            //case VehicleClass.Class35b2:
+            //	break;
+            //case VehicleClass.Class35c:
+            //	break;
+            //case VehicleClass.Class36a:
+            //	break;
+            //case VehicleClass.Class36b:
+            //	break;
+            //case VehicleClass.Class36c:
+            //	break;
+            //case VehicleClass.Class36d:
+            //	break;
+            //case VehicleClass.Class36e:
+            //	break;
+            //case VehicleClass.Class36f:
+            //	break;
+            case VehicleClass.Class37a:
+				return DeclarationData.CompletedBusSegments.Lookup(AxleConfiguration.AxleConfig_8x2.NumAxles(), VehicleCode.CE, RegistrationClass.I, 0, 0.SI<Meter>(), false);
+            //case VehicleClass.Class37b1:
+            //	break;
+            //case VehicleClass.Class37b2:
+            //	break;
+            //case VehicleClass.Class37c:
+            //	break;
+            //case VehicleClass.Class37d:
+            //	break;
+            //case VehicleClass.Class37e:
+            //	break;
+            //case VehicleClass.Class38a:
+            //	break;
+            //case VehicleClass.Class38b:
+            //	break;
+            //case VehicleClass.Class38c:
+            //	break;
+            //case VehicleClass.Class38d:
+            //	break;
+            //case VehicleClass.Class38e:
+            //	break;
+            //case VehicleClass.Class38f:
+            //	break;
+            //case VehicleClass.Class39a:
+            //	break;
+            //case VehicleClass.Class39b1:
+            //	break;
+            //case VehicleClass.Class39b2:
+            //	break;
+            //case VehicleClass.Class39c:
+            //	break;
+            //case VehicleClass.Class40a:
+            //	break;
+            //case VehicleClass.Class40b:
+            //	break;
+            //case VehicleClass.Class40c:
+            //	break;
+            //case VehicleClass.Class40d:
+            //	break;
+            //case VehicleClass.Class40e:
+            //	break;
+            //case VehicleClass.Class40f:
+            //	break;
+            default:
+				throw new ArgumentOutOfRangeException(nameof(group), group, null);
+		}
+	}
+
+	private Segment GetLorrySegment(VehicleClass group)
+	{
+		switch (group) {
+			case VehicleClass.Class1s:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 7500.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class1:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 7500.01.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class2:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 10001.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class3:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 12001.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class4:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 99000.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class5:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 99000.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			//case VehicleClass.Class6:
+			//	return DeclarationData.TruckSegments.Lookup();
+			//case VehicleClass.Class7:
+			//	return DeclarationData.TruckSegments.Lookup();
+			//case VehicleClass.Class8:
+			//	return DeclarationData.TruckSegments.Lookup();
+			case VehicleClass.Class9:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 16000.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class10:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 16000.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class11:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x4, 7500.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class12:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 7500.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			//case VehicleClass.Class13:
+			//	return DeclarationData.TruckSegments.Lookup();
+			//case VehicleClass.Class14:
+			//	return DeclarationData.TruckSegments.Lookup();
+			//case VehicleClass.Class15:
+			//	return DeclarationData.TruckSegments.Lookup();
+			case VehicleClass.Class16:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 7500.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class53:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 5000.01.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+			case VehicleClass.Class54:
+				return DeclarationData.TruckSegments.Lookup(VehicleCategory.Van, AxleConfiguration.AxleConfig_4x2, 5000.01.SI<Kilogram>(), 0.SI<Kilogram>(), false);
+
+            default:
+				throw new ArgumentOutOfRangeException(nameof(group), group, null);
+		}
+	}
+
+}
\ No newline at end of file