diff --git a/librw b/librw
index bc9cb506..e6c7d910 160000
--- a/librw
+++ b/librw
@@ -1 +1 @@
-Subproject commit bc9cb506ecd5abb869292860ed287c1b029b30cc
+Subproject commit e6c7d910ffc32bc059c4e750a797fde51ee29fd9
diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp
index a900d696..e4f8ac96 100644
--- a/src/core/Frontend.cpp
+++ b/src/core/Frontend.cpp
@@ -118,7 +118,6 @@ const CRGBA TEXT_COLOR = CRGBA(150, 110, 30, 255);
 const CRGBA TEXT_COLOR = CRGBA(235, 170, 50, 255); // PC briefs text color
 #endif
 
-const float menuXYpadding = MENUACTION_POS_Y; // TODO this is non-existant, remove it
 float MENU_TEXT_SIZE_X = SMALLTEXT_X_SCALE;
 float MENU_TEXT_SIZE_Y = SMALLTEXT_Y_SCALE;
 
@@ -231,8 +230,7 @@ ScaleAndCenterX(float x)
 	else {
 		if (x > DEFAULT_SCREEN_WIDTH / 2) {
 			return SCREEN_WIDTH / 2 + SCREEN_SCALE_X(x - DEFAULT_SCREEN_WIDTH / 2);
-		}
-		else {
+		} else {
 			return SCREEN_WIDTH / 2 - SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH / 2 - x);
 		}
 	}
@@ -1257,7 +1255,8 @@ CMenuManager::Draw()
 					break;
 			}
 
-			nextYToUse += lineHeight * CFont::GetNumberLines(menuXYpadding, nextYToUse, leftText);
+			// 60.0 is silly
+			nextYToUse += lineHeight * CFont::GetNumberLines(MENU_X_LEFT_ALIGNED(60.0f), MENU_Y(nextYToUse), leftText);
 
 			// Radio icons
 			if (aScreens[m_nCurrScreen].m_aEntries[i].m_Action == MENUACTION_RADIO) {
@@ -3385,8 +3384,7 @@ CMenuManager::Process(void)
 				DMAudio.SetEffectsFadeVol(0);
 				DMAudio.SetMusicFadeVol(0);
 				DMAudio.ResetTimers(CTimer::GetTimeInMilliseconds());
-			}
-			else
+			} else
 				SaveLoadFileError_SetUpErrorScreen();
 		}
 
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 4737051e..1f1930d7 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -3038,7 +3038,6 @@ CPed::QuitEnteringCar(void)
 		if (animAssoc) {
 			animAssoc->blendDelta = -4.0f;
 			animAssoc->flags |= ASSOC_DELETEFADEDOUT;
-			animAssoc = m_pVehicleAnim;
 			animAssoc->flags &= ~ASSOC_RUNNING;
 		}
 	} else
@@ -3047,7 +3046,11 @@ CPed::QuitEnteringCar(void)
 	m_pVehicleAnim = nil;
 	
 	if (veh) {
+#ifdef VC_PED_PORTS
+		if (veh->AutoPilot.m_nCruiseSpeed == 0 && veh->VehicleCreatedBy == RANDOM_VEHICLE)
+#else
 		if (veh->AutoPilot.m_nCruiseSpeed == 0)
+#endif
 			veh->AutoPilot.m_nCruiseSpeed = 17;
 	}
 }
@@ -4146,7 +4149,7 @@ CPed::SetGetUp(void)
 		CVehicle *veh = (CVehicle*)CPedPlacement::IsPositionClearOfCars(&GetPosition());
 		if (veh && veh->m_vehType != VEHICLE_TYPE_BIKE ||
 			collidingVeh && collidingVeh->IsVehicle() && collidingVeh->m_vehType != VEHICLE_TYPE_BIKE
-			&& ((CTimer::GetFrameCounter() + m_randomSeed % 256 + 5) % 8
+			&& ((uint8)(CTimer::GetFrameCounter() + m_randomSeed + 5) % 8
 				|| CCollision::ProcessColModels(GetMatrix(), *CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(),
 					collidingVeh->GetMatrix(), *CModelInfo::GetModelInfo(collidingVeh->m_modelIndex)->GetColModel(),
 					aTempPedColPts, nil, nil) > 0)) {
@@ -10729,7 +10732,10 @@ CPed::PedAnimDoorCloseCB(CAnimBlendAssociation *animAssoc, void *arg)
 			ped->m_pVehicleAnim->SetFinishCallback(PedSetInCarCB, ped);
 		}
 	} else {
-		ped->QuitEnteringCar();
+#ifdef VC_PED_PORTS
+		if (ped->m_nPedState != PED_DRIVING)
+#endif
+			ped->QuitEnteringCar();
 	}
 }
 
@@ -11014,7 +11020,10 @@ CPed::PedAnimGetInCB(CAnimBlendAssociation *animAssoc, void *arg)
 		return;
 
 	if (!ped->EnteringCar()) {
-		ped->QuitEnteringCar();
+#ifdef VC_PED_PORTS
+		if(ped->m_nPedState != PED_DRIVING)
+#endif
+			ped->QuitEnteringCar();
 		return;
 	}
 
@@ -13733,7 +13742,12 @@ CPed::ProcessObjective(void)
 				// fall through
 			case OBJECTIVE_LEAVE_VEHICLE:
 				if (CTimer::GetTimeInMilliseconds() > m_leaveCarTimer) {
-					if (InVehicle()) {
+					if (InVehicle()
+#ifdef VC_PED_PORTS
+						&& (FindPlayerPed() != this || !CPad::GetPad(0)->GetAccelerate()
+							|| bBusJacked)
+#endif
+						) {
 						if (m_nPedState != PED_EXIT_CAR && m_nPedState != PED_DRAG_FROM_CAR && m_nPedState != PED_EXIT_TRAIN
 							&& (m_nPedType != PEDTYPE_COP
 #ifdef VC_PED_PORTS
diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp
index 48c836f8..bc47b486 100644
--- a/src/vehicles/Vehicle.cpp
+++ b/src/vehicles/Vehicle.cpp
@@ -787,6 +787,10 @@ CVehicle::CanPedExitCar(void)
 {
 	CVector up = GetUp();
 	if(up.z > 0.1f || up.z < -0.1f){
+#ifdef VC_PED_PORTS
+		if (IsBoat())
+			return true;
+#endif
 		// can't exit when car is moving too fast
 		if(m_vecMoveSpeed.MagnitudeSqr() > 0.005f)
 			return false;