diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
index 2799c6fc184fd0bc03107e93628f2d34141ffa07..2dc82a9a7847b0ccecbf53a6c0419955d1498a0f 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs
@@ -818,17 +818,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 
 			// handle the SpeedLimitExceeded Response and Gearshift Response separately in case it occurs in one of the requests in the second try
-			response.Switch().Case<ResponseGearShift>(
+			for (var i = 0; i < 3 && (response is ResponseGearShift || response is ResponseSpeedLimitExceeded); i++) {
+				response.Switch()
+				.Case<ResponseGearShift>(
 						r => { response = Driver.DrivingActionRoll(absTime, ds, targetVelocity, gradient); })
-					.Case<ResponseSpeedLimitExceeded>(
-						() => {
-							response = Driver.DrivingActionBrake(
-								absTime, ds, DataBus.VehicleSpeed,
-								gradient);
-							if (response is ResponseOverload && !DataBus.ClutchClosed(absTime)) {
-								response = Driver.DrivingActionRoll(absTime, ds, DataBus.VehicleSpeed, gradient);
-							}
-						});
+				.Case<ResponseSpeedLimitExceeded>(
+					() => {
+						response = Driver.DrivingActionBrake(
+							absTime, ds, DataBus.VehicleSpeed,
+							gradient);
+						if (response is ResponseOverload && !DataBus.ClutchClosed(absTime)) {
+							response = Driver.DrivingActionRoll(absTime, ds, DataBus.VehicleSpeed, gradient);
+						}
+					});
+			}
+
 			return response;
 		}