diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp
index 4fdd3439..e28bbf35 100644
--- a/src/control/Replay.cpp
+++ b/src/control/Replay.cpp
@@ -53,7 +53,7 @@
 #include "Fluff.h"
 #include "WaterCreatures.h"
 
-//--MIAMI: file done except TODO
+//--MIAMI: file done
 
 uint8 CReplay::Mode;
 CAddressInReplayBuffer CReplay::Record;
@@ -158,7 +158,7 @@ static void(*CBArray[])(CAnimBlendAssociation*, void*) =
 	&CPed::FinishedAttackCB,
 	&CPed::FinishFightMoveCB, &PhonePutDownCB, &PhonePickUpCB, &CPed::PedAnimDoorCloseRollingCB, &CPed::FinishJumpCB,
 	&CPed::PedLandCB, &CPed::RestoreHeadingRateCB, &CPed::PedSetQuickDraggedOutCarPositionCB, &CPed::PedSetDraggedOutCarPositionCB,
-	&CPed::PedSetPreviousStateCB, &CPed::FinishedReloadCB, /*&CPed::PedSetGetInCarPositionCB, TODO(MIAMI)*/
+	&CPed::PedSetPreviousStateCB, &CPed::FinishedReloadCB, &CPed::PedSetGetInCarPositionCB,
 	&CPed::PedAnimShuffleCB, &CPed::DeleteSunbatheIdleAnimCB, &StartTalkingOnMobileCB, &FinishTalkingOnMobileCB
 };
 
@@ -396,7 +396,8 @@ void CReplay::RecordThisFrame(void)
 	misc->cam_shake_start = TheCamera.m_uiCamShakeStart;
 	misc->cam_shake_strength = TheCamera.m_fCamShakeForce;
 	misc->cur_area = CGame::currArea;
-	//misc->special_fx_flags; // TODO(MIAMI)!!!
+	misc->video_cam = CSpecialFX::bVideoCam;
+	misc->lift_cam = CSpecialFX::bLiftCam;
 	Record.m_nOffset += sizeof(*misc);
 	tEndOfFramePacket* eof = (tEndOfFramePacket*)&Record.m_pBase[Record.m_nOffset];
 	eof->type = REPLAYPACKET_ENDOFFRAME;
@@ -1139,7 +1140,8 @@ bool CReplay::PlayBackThisFrameInterpolation(CAddressInReplayBuffer *buffer, flo
 			tMiscPacket* pm = (tMiscPacket*)&ptr[offset];
 			TheCamera.m_uiCamShakeStart = pm->cam_shake_start;
 			TheCamera.m_fCamShakeForce = pm->cam_shake_strength;
-			// TODO(MIAMI): SpecialFX
+			CSpecialFX::bVideoCam = pm->video_cam;
+			CSpecialFX::bLiftCam = pm->lift_cam;
 			CGame::currArea = pm->cur_area;
 			buffer->m_nOffset += sizeof(tMiscPacket);
 			break;
diff --git a/src/control/Replay.h b/src/control/Replay.h
index 42d6ad1a..319d8bd4 100644
--- a/src/control/Replay.h
+++ b/src/control/Replay.h
@@ -263,7 +263,8 @@ class CReplay
 		uint32 cam_shake_start;
 		float cam_shake_strength;
 		uint8 cur_area;
-		uint8 special_fx_flags;
+		uint8 video_cam : 1;
+		uint8 lift_cam : 1;
 	};
 
 	VALIDATE_SIZE(tMiscPacket, 16);
diff --git a/src/control/Script.cpp b/src/control/Script.cpp
index f85fc076..f9935e21 100644
--- a/src/control/Script.cpp
+++ b/src/control/Script.cpp
@@ -88,6 +88,8 @@
 #include <stdarg.h>
 #endif
 
+//--MIAMI: file done
+
 #define PICKUP_PLACEMENT_OFFSET 0.5f
 #define PED_FIND_Z_OFFSET 5.0f
 #define COP_PED_FIND_Z_OFFSET 10.0f
@@ -9113,12 +9115,16 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
 						switch (pPed->m_vehEnterType) {
 						case CAR_DOOR_LF:
 							flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR;
+							break;
 						case CAR_DOOR_LR:
 							flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_RF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR;
+							break;
 						case CAR_DOOR_RF:
 							flags = CAR_DOOR_FLAG_RF;
+							break;
 						case CAR_DOOR_RR:
 							flags = CAR_DOOR_FLAG_RR;
+							break;
 						}
 					}
 					pPed->m_pMyVehicle->m_nGettingOutFlags &= ~flags;
@@ -15751,7 +15757,7 @@ INITSAVEBUF
 	uint32 script_data_size = SCRIPT_DATA_SIZE;
 	WriteSaveBuf(buf, script_data_size);
 	WriteSaveBuf(buf, OnAMissionFlag);
-	WriteSaveBuf(buf, NextFreeCollectiveIndex);
+	WriteSaveBuf(buf, LastMissionPassedTime);
 	for (uint32 i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
 		CBuilding* pBuilding = BuildingSwapArray[i].m_pBuilding;
 		uint32 type, handle;
@@ -15801,12 +15807,12 @@ INITSAVEBUF
 		WriteSaveBuf(buf, handle);
 	}
 	WriteSaveBuf(buf, bUsingAMultiScriptFile);
-	WriteSaveBuf(buf, (uint8)0);
+	WriteSaveBuf(buf, bPlayerHasMetDebbieHarry);
 	WriteSaveBuf(buf, (uint16)0);
 	WriteSaveBuf(buf, MainScriptSize);
 	WriteSaveBuf(buf, LargestMissionScriptSize);
 	WriteSaveBuf(buf, NumberOfMissionScripts);
-	WriteSaveBuf(buf, (uint16)0);
+	WriteSaveBuf(buf, NumberOfExclusiveMissionScripts);
 	WriteSaveBuf(buf, runningScripts);
 	for (CRunningScript* pScript = pActiveScripts; pScript; pScript = pScript->GetNext())
 		pScript->Save(buf);
@@ -15823,7 +15829,7 @@ INITSAVEBUF
 		ScriptSpace[i] = ReadSaveBuf<uint8>(buf);
 	script_assert(ReadSaveBuf<uint32>(buf) == SCRIPT_DATA_SIZE);
 	OnAMissionFlag = ReadSaveBuf<uint32>(buf);
-	NextFreeCollectiveIndex = ReadSaveBuf<uint32>(buf);
+	LastMissionPassedTime = ReadSaveBuf<uint32>(buf);
 	for (uint32 i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
 		uint32 type = ReadSaveBuf<uint32>(buf);
 		uint32 handle = ReadSaveBuf<uint32>(buf);
@@ -15871,12 +15877,12 @@ INITSAVEBUF
 			InvisibilitySettingArray[i]->bIsVisible = false;
 	}
 	script_assert(ReadSaveBuf<bool>(buf) == bUsingAMultiScriptFile);
-	ReadSaveBuf<uint8>(buf);
+	bPlayerHasMetDebbieHarry = ReadSaveBuf<uint8>(buf);
 	ReadSaveBuf<uint16>(buf);
 	script_assert(ReadSaveBuf<uint32>(buf) == MainScriptSize);
 	script_assert(ReadSaveBuf<uint32>(buf) == LargestMissionScriptSize);
 	script_assert(ReadSaveBuf<uint16>(buf) == NumberOfMissionScripts);
-	ReadSaveBuf<uint16>(buf);
+	script_assert(ReadSaveBuf<uint16>(buf) == NumberOfExclusiveMissionScripts);
 	uint32 runningScripts = ReadSaveBuf<uint32>(buf);
 	for (uint32 i = 0; i < runningScripts; i++)
 		StartNewScript(0)->Load(buf);
@@ -16103,7 +16109,7 @@ void CTheScripts::CleanUpThisObject(CObject* pObject)
 	if (pObject->ObjectCreatedBy != MISSION_OBJECT)
 		return;
 	pObject->ObjectCreatedBy = TEMP_OBJECT;
-	pObject->m_nEndOfLifeTime = CTimer::GetTimeInMilliseconds() + 20000;
+	pObject->m_nEndOfLifeTime = CTimer::GetTimeInMilliseconds() + 20000000;
 	pObject->m_nRefModelIndex = -1;
 	pObject->bUseVehicleColours = false;
 	++CObject::nNoTempObjects;
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 03c0bf2c..15eb79b6 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -21440,3 +21440,17 @@ CPed::SetLook(float direction)
 		SetLookFlag(direction, false);
 	}
 }
+
+// --MIAMI: Done
+// Unused
+void CPed::PedSetGetInCarPositionCB(CAnimBlendAssociation* assoc, void* arg)
+{
+	CPed* pPed = (CPed*)arg;
+	CMatrix mat(pPed->GetMatrix());
+	CVehicle* pVehicle = pPed->m_pMyVehicle;
+	const CVector& offset = (pVehicle->bIsVan && (pPed->m_vehEnterType == CAR_DOOR_RR || pPed->m_vehEnterType == CAR_DOOR_LR)) ? vecPedVanRearDoorAnimOffset : vecPedCarDoorAnimOffset;
+	CVector position = Multiply3x3(mat, offset) + pPed->GetPosition();
+	CPedPlacement::FindZCoorForPed(&position);
+	pPed->SetMoveSpeed(0.0f, 0.0f, 0.0f);
+	pPed->SetPosition(position);
+}
diff --git a/src/peds/Ped.h b/src/peds/Ped.h
index 1f0e9243..aa0a69db 100644
--- a/src/peds/Ped.h
+++ b/src/peds/Ped.h
@@ -911,6 +911,7 @@ public:
 	static void DeleteSunbatheIdleAnimCB(CAnimBlendAssociation *assoc, void *arg);
 	static void PedSetPreviousStateCB(CAnimBlendAssociation *assoc, void *arg);
 	static void PedAnimShuffleCB(CAnimBlendAssociation *assoc, void *arg);
+	static void PedSetGetInCarPositionCB(CAnimBlendAssociation* assoc, void* arg);
 
 	bool IsPlayer(void);
 	bool IsFemale(void) { return m_nPedType == PEDTYPE_CIVFEMALE || m_nPedType == PEDTYPE_PROSTITUTE; }
diff --git a/src/render/Fluff.cpp b/src/render/Fluff.cpp
index 4874bf04..3c0d3708 100644
--- a/src/render/Fluff.cpp
+++ b/src/render/Fluff.cpp
@@ -418,7 +418,7 @@ void CMovingThings::Init()
 	}
 
 	CEscalators::Init();
-	aScrollBars[0].Init(CVector(-1069.209f, 1320.126f, 18.848f), CVector(-1069.209f, 1342.299f, 22.612), SCROLL_ARENA_STRING, 128, 255, 0, 0.3f);
+	aScrollBars[0].Init(CVector(-1069.209f, 1320.126f, 18.848f), CVector(-1069.209f, 1342.299f, 22.612f), SCROLL_ARENA_STRING, 128, 255, 0, 0.3f);
 }
 
 void CMovingThings::Shutdown()