diff --git a/VectoCommon/VectoCommon/Models/VehicleCategory.cs b/VectoCommon/VectoCommon/Models/VehicleCategory.cs
index e279361998f6b9158e010837c3da81caf70fbb4d..80295afb08048d3d86e672804498cfdb7192e0b5 100644
--- a/VectoCommon/VectoCommon/Models/VehicleCategory.cs
+++ b/VectoCommon/VectoCommon/Models/VehicleCategory.cs
@@ -127,6 +127,14 @@ namespace TUGraz.VectoCommon.Models
 			}
 		}
 
+		public static bool IsBus(this VehicleCategory category)
+		{
+			switch (category) {
+				case VehicleCategory.HeavyBusPrimaryVehicle: return true;
+				default: return false;
+			}
+		}
+
 		public static VehicleCategory Parse(string vehicleCategory)
 		{
 			switch (vehicleCategory) {
diff --git a/VectoCore/VectoCore/Configuration/Constants.cs b/VectoCore/VectoCore/Configuration/Constants.cs
index d3c5e27fa3b1723c57b60ea81e6669fc3a72de25..8e3c253200a6a5b5d3e6e3b705aa8bbb8fd5bd7e 100644
--- a/VectoCore/VectoCore/Configuration/Constants.cs
+++ b/VectoCore/VectoCore/Configuration/Constants.cs
@@ -201,6 +201,8 @@ namespace TUGraz.VectoCore.Configuration
 			public static readonly Meter HeightLuggageCompartment = 0.5.SI<Meter>();
 			public static readonly SIBase<Meter> EntranceHeight = 0.27.SI<Meter>();
 
+			public static readonly MeterPerSecond MaxBusSpeed = 103.KMPHtoMeterPerSecond();
+
 			public static class Auxiliaries
 			{
 				public static class SteeringPump
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
index 9f240291e7dce344de8ad6b51cfc17e12c352f95..62c4a9c8fe454b91f59d5181b4bd65e6e200a8d1 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
@@ -89,6 +89,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			DrivingModes.Add(DrivingMode.DrivingModeBrake, new DriverModeBrake() { DriverStrategy = this });
 			CurrentDrivingMode = DrivingMode.DrivingModeDrive;
 
+			VehicleCategory = container?.RunData.VehicleData.VehicleCategory ?? VehicleCategory.Unknown;
+
 			var data = container?.RunData;
 			ADAS = data?.VehicleData?.ADAS ?? new VehicleData.ADASData() {
 				EcoRoll = EcoRollType.None,
@@ -118,6 +120,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 		}
 
+		public VehicleCategory VehicleCategory { get; set; }
+
 		public IDriverActions Driver { get; set; }
 
 		protected internal DrivingBehaviorEntry BrakeTrigger { get; set; }
@@ -426,7 +430,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var accelerationPedalIdle = EcoRollState.AcceleratorPedalIdle;
 			var brakeActive = !EcoRollState.PreviousBrakePower.IsEqual(0);
 			var vehcleSpeedBelowMax = dBus.VehicleSpeed <=
-									dBus.CycleData.LeftSample.VehicleTargetSpeed + GetOverspeed() - 2.KMPHtoMeterPerSecond();
+									(ApplyOverspeed(dBus.CycleData.LeftSample.VehicleTargetSpeed) - 2.KMPHtoMeterPerSecond());
 
 			EcoRollState.AllConditionsMet = vehicleSpeedAboveLowerThreshold && vehcleSpeedBelowMax && slopeNegative && accelerationWithinLimits &&
 											accelerationPedalIdle && !brakeActive;
@@ -562,6 +566,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 		}
 
+		public MeterPerSecond ApplyOverspeed(MeterPerSecond targetSpeed)
+		{
+			return (targetSpeed + GetOverspeed()).LimitTo(
+					0.KMPHtoMeterPerSecond(), VehicleCategory.IsBus() ? Constants.BusParameters.MaxBusSpeed : 500.KMPHtoMeterPerSecond());
+			
+		}
+
 		protected internal MeterPerSecond GetOverspeed()
 		{
 			return ADAS.PredictiveCruiseControl == PredictiveCruiseControlType.Option_1_2_3 && Driver.DataBus.CycleData.LeftSample.Highway
@@ -583,7 +594,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var nextActions = new List<DrivingBehaviorEntry>();
 			foreach (var entry in lookaheadData) {
 				var nextTargetSpeed = OverspeedAllowed(entry.VehicleTargetSpeed)
-					? entry.VehicleTargetSpeed + GetOverspeed()
+					? ApplyOverspeed(entry.VehicleTargetSpeed)
 					: entry.VehicleTargetSpeed;
 				if (nextTargetSpeed >= currentSpeed) {
 					// acceleration is not relevant
@@ -689,7 +700,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			return Driver.DriverData.OverSpeed.Enabled
 					&& velocity > Driver.DriverData.OverSpeed.MinSpeed
-					&& (velocity + GetOverspeed()) <
+					&& ApplyOverspeed(velocity) <
 					(Driver.DataBus.MaxVehicleSpeed ?? 500.KMPHtoMeterPerSecond());
 		}
 	}
@@ -828,8 +839,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			Driver.DriverBehavior = DrivingBehavior.Driving;
 			var velocityWithOverspeed = targetVelocity;
 			if (DriverStrategy.OverspeedAllowed(targetVelocity, prohibitOverspeed)) {
-				velocityWithOverspeed += DriverStrategy.GetOverspeed();
+				velocityWithOverspeed = DriverStrategy.ApplyOverspeed(velocityWithOverspeed);
 			}
+			
 			if (DataBus.GearboxType.AutomaticTransmission() || DataBus.ClutchClosed(absTime)) {
 				for (var i = 0; i < 3; i++) {
 					var retVal = HandleRequestEngaged(