diff --git a/Declaration/VCDV/paramerters.csv b/Declaration/VCDV/paramerters.csv
index 99ddf04bd38b643d3543e79ab95ff8d8e82c9daa..7a6e9b270ebc04b4494ded8c808d2c6369cb4fca 100644
--- a/Declaration/VCDV/paramerters.csv
+++ b/Declaration/VCDV/paramerters.csv
@@ -1,5 +1,6 @@
 Parameters,a1,a2,a3
 RigidSolo,0.013526,0.017746,-0.000666
 RigidTrailer,0.017125,0.072275,-0.004148
-TractorSemitrailer,0.030042,0.040817,-0.00213
+TractorSemitrailer,0.034767,0.039367,-0.001897
 CoachBus,-0.000794,0.02109,-0.00109
+
diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb
index a885e9dd082bb9b492e9ad5462db448316176aa1..a195233669f3ed6d6a08d3a2745d13c37917b053 100644
--- a/VECTO/MODcalc/cPower.vb
+++ b/VECTO/MODcalc/cPower.vb
@@ -1798,6 +1798,7 @@ lb_nOK:
 		Dim nUdown As Single
 		Dim Tq As Single
 		Dim Pe As Single
+		Dim TqX As Single
 		Dim MdMax As Single
 		Dim Pmax As Single
 
@@ -1847,6 +1848,8 @@ lb_nOK:
 				'rpm at StartSpeed  [m/s]
 				nU = GBX.gs_StartSpeed * 60.0 * GBX.Igetr(0) * GBX.Igetr(Gear) / (2 * VEH.rdyn * Math.PI / 1000)
 
+				If nU > FLD(Gear).fnUrated Then Continue For
+
 				'full load
 				Pmax = FLD(Gear).Pfull(nU)
 
@@ -1854,20 +1857,24 @@ lb_nOK:
 				MdMax = Pmax * 1000 / (nU * 2 * Math.PI / 60)
 
 				'power demand
-				Pe = Math.Min(fPeGearMod(Gear, t, GBX.gs_StartSpeed, GBX.gs_StartAcc, Grad), Pmax)
-				Pe = Math.Max(Pe, FLD(Gear).Pdrag(nU))
+				Pe = fPeGearMod(Gear, t, GBX.gs_StartSpeed, GBX.gs_StartAcc, Grad)
 
 				'torque demand
 				Tq = Pe * 1000 / (nU * 2 * Math.PI / 60)
 
+				'torque (limited to max)
+				TqX = Math.Min(Tq, FLD(Gear).Tmax)
+
 				'Up/Downshift rpms
-				nUup = GBX.Shiftpolygons(Gear).fGSnUup(Tq)
-				nUdown = GBX.Shiftpolygons(Gear).fGSnUdown(Tq)
+				nUup = GBX.Shiftpolygons(Gear).fGSnUup(TqX)
+				nUdown = GBX.Shiftpolygons(Gear).fGSnUdown(TqX)
 
 				If nU > nUdown And nU >= ENG.Nidle And (1 - Tq / MdMax >= GBX.gs_TorqueResvStart / 100 Or Tq < 0) Then Exit For
 
 			Next
 
+			Gear=1
+
 		End If
 
 		Return Gear
@@ -2036,7 +2043,8 @@ lb_nOK:
 		Dim LastPeNorm As Single
 
 		Dim tx As Int16
-		Dim OutOfRpmRange As Boolean
+		Dim RpmTooHigh As Boolean
+		Dim RpmTooLow As Boolean
 
 		'First time step OR first time step after stand still
 		If t = 0 OrElse MODdata.VehState(t - 1) = tVehState.Stopped Then Return fStartGear(t, Grad)
@@ -2058,47 +2066,40 @@ lb_nOK:
 		'First time step after stand still
 		If LastGear = 0 Then Return fStartGear(t, Grad)
 
-		nU = CSng(Vact * 60.0 * GBX.Igetr(0) * GBX.Igetr(LastGear) / (2 * VEH.rdyn * Math.PI / 1000))
+		nU = fnUout(Vact, LastGear)
 
-		OutOfRpmRange = ((nU - ENG.Nidle) / (ENG.Nrated - ENG.Nidle) >= 1.2 Or nU < ENG.Nidle)
+		RpmTooLow = (nU < ENG.Nidle)
+		RpmTooHigh = ((nU - ENG.Nidle) / (ENG.Nrated - ENG.Nidle) >= 1.2)
 
 		'No gear change 3s after last one -except rpm out of range
-		If Not OutOfRpmRange AndAlso t - LastGearChange <= GBX.gs_ShiftTime And t > GBX.gs_ShiftTime - 1 Then Return LastGear
+		If Not (RpmTooHigh Or RpmTooLow) AndAlso t - LastGearChange <= GBX.gs_ShiftTime And t > GBX.gs_ShiftTime - 1 Then Return LastGear
 
 		'During start (clutch slipping) no gear shift
 		If LastClutch = tEngClutch.Slipping And VehState0 = tVehState.Acc Then Return LastGear
 
-		''Search for last Gear-change
-		'itgangw = 0
-		'For i = t - 1 To 1 Step -1
-		'    If MODdata.Gear(i) <> MODdata.Gear(i - 1) Then
-		'        itgangw = i
-		'        Exit For
-		'    End If
-		'Next
+		
+		If Not (RpmTooHigh Or RpmTooLow) Then
 
-		''Maximum permissible Gear-shifts every 3 seconds:
-		'If t - itgangw <= 3 And t > 2 Then
-		'    Return LastGear    '<<< no further checks!!!
-		'End If
+			'Current rpm with previous gear
+			nU = fnU(Vact, LastGear, Clutch = tEngClutch.Slipping)
 
-		'Current rpm with previous gear
-		nU = fnU(Vact, LastGear, Clutch = tEngClutch.Slipping)
+			'Current power demand with previous gear
+			Pe = Math.Min(fPeGearMod(LastGear, t, Grad), FLD(LastGear).Pfull(nU))
+			Pe = Math.Max(Pe, FLD(LastGear).Pdrag(nU))
 
-		'Current power demand with previous gear
-		Pe = Math.Min(fPeGearMod(LastGear, t, Grad), FLD(LastGear).Pfull(nU))
-		Pe = Math.Max(Pe, FLD(LastGear).Pdrag(nU))
+			'Current torque demand with previous gear
+			Tq = Pe * 1000 / (nU * 2 * Math.PI / 60)
+			MdMax = FLD(LastGear).Pfull(nU, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
 
-		'Current torque demand with previous gear
-		Tq = Pe * 1000 / (nU * 2 * Math.PI / 60)
-		MdMax = FLD(LastGear).Pfull(nU, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
+			'Up/Downshift rpms
+			nnUp = GBX.Shiftpolygons(LastGear).fGSnUup(Tq)
+			nnDown = GBX.Shiftpolygons(LastGear).fGSnUdown(Tq)
+
+		End If
 
-		'Up/Downshift rpms
-		nnUp = GBX.Shiftpolygons(LastGear).fGSnUup(Tq)
-		nnDown = GBX.Shiftpolygons(LastGear).fGSnUdown(Tq)
 
 		'Compare rpm with Up/Downshift rpms 
-		If nU <= nnDown And LastGear > 1 Then
+		If (RpmTooLow OrElse nU <= nnDown) And LastGear > 1 Then
 
 			'Shift DOWN
 			Gear = LastGear - 1
@@ -2144,7 +2145,7 @@ lb_nOK:
 
 			End If
 
-		ElseIf LastGear < GBX.GearCount And nU > nnUp Then
+		ElseIf (RpmTooHigh OrElse nU > nnUp) And LastGear < GBX.GearCount Then
 
 			'Shift UP
 			Gear = LastGear + 1