diff --git a/LEGO1/lego/legoomni/include/infocenter.h b/LEGO1/lego/legoomni/include/infocenter.h
index f5e0c650..81a88141 100644
--- a/LEGO1/lego/legoomni/include/infocenter.h
+++ b/LEGO1/lego/legoomni/include/infocenter.h
@@ -5,6 +5,7 @@
 #include "legogamestate.h"
 #include "legostate.h"
 #include "legoworld.h"
+#include "misc.h"
 #include "mxrect32.h"
 #include "radio.h"
 
@@ -44,14 +45,17 @@ public:
 	// FUNCTION: BETA10 0x10031bd0
 	MxBool HasRegistered() { return m_letters[0] != NULL; }
 
+	// FUNCTION: BETA10 0x10031c10
+	InfomainScript::Script GetNextLeaveDialogue()
+	{
+		return (InfomainScript::Script) m_leaveDialogue[GameState()->GetCurrentAct()].Next();
+	}
+
+	// TODO: These probably don't exist according to BETA
 	Playlist& GetExitDialogueAct1() { return m_exitDialogueAct1; }
 	Playlist& GetExitDialogueAct23() { return m_exitDialogueAct23; }
 	Playlist& GetReturnDialogue(LegoGameState::Act p_act) { return m_returnDialogue[p_act]; }
-	Playlist& GetLeaveDialogue(LegoGameState::Act p_act) { return m_leaveDialogue[p_act]; }
 	Playlist& GetBricksterDialogue() { return m_bricksterDialogue; }
-	MxU32 GetUnknown0x74() { return m_unk0x74; }
-
-	void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; }
 
 	// SYNTHETIC: LEGO1 0x10071900
 	// InfocenterState::`scalar deleting destructor'
@@ -162,7 +166,7 @@ private:
 	LegoGameState::Area m_destLocation;             // 0x104
 	Cutscene m_currentCutscene;                     // 0x108
 	Radio m_radio;                                  // 0x10c
-	MxStillPresenter* m_unk0x11c;                   // 0x11c
+	MxStillPresenter* m_dragPresenter;              // 0x11c
 	InfocenterMapEntry m_glowInfo[7];               // 0x120
 	MxS16 m_unk0x1c8;                               // 0x1c8
 	MxStillPresenter* m_frame;                      // 0x1cc
diff --git a/LEGO1/lego/legoomni/include/legocontrolmanager.h b/LEGO1/lego/legoomni/include/legocontrolmanager.h
index 233304cf..828a1f6e 100644
--- a/LEGO1/lego/legoomni/include/legocontrolmanager.h
+++ b/LEGO1/lego/legoomni/include/legocontrolmanager.h
@@ -20,9 +20,7 @@ public:
 
 	// TODO: Most likely getters/setters are not used according to BETA.
 
-	MxS32 GetClickedObjectId() const { return m_clickedObjectId; }
 	const char* GetClickedAtom() const { return m_clickedAtom; }
-	MxS16 GetUnknown0x28() const { return m_unk0x28; }
 
 	void SetClickedObjectId(MxS32 p_clickedObjectId) { m_clickedObjectId = p_clickedObjectId; }
 	void SetClickedAtom(const char* p_clickedAtom) { m_clickedAtom = p_clickedAtom; }
diff --git a/LEGO1/lego/legoomni/include/legogamestate.h b/LEGO1/lego/legoomni/include/legogamestate.h
index afa2498e..c7e83b50 100644
--- a/LEGO1/lego/legoomni/include/legogamestate.h
+++ b/LEGO1/lego/legoomni/include/legogamestate.h
@@ -206,7 +206,9 @@ public:
 	// FUNCTION: BETA10 0x1004a2d0
 	const char* GetActorName() { return g_actorNames[GetActorId()]; }
 
+	// FUNCTION: BETA10 0x1002b4c0
 	Act GetCurrentAct() { return m_currentAct; }
+
 	Act GetLoadedAct() { return m_loadedAct; }
 	Area GetPreviousArea() { return m_previousArea; }
 	Area GetUnknown0x42c() { return m_unk0x42c; }
@@ -214,7 +216,6 @@ public:
 	void SetDirty(MxBool p_isDirty) { m_isDirty = p_isDirty; }
 	void SetPreviousArea(Area p_previousArea) { m_previousArea = p_previousArea; }
 	void SetActorId(MxU8 p_actorId) { m_actorId = p_actorId; }
-	void SetUnknown0x42c(Area p_unk0x42c) { m_unk0x42c = p_unk0x42c; }
 	Username* GetPlayersIndex(MxS32 p_index) { return &m_players[p_index]; }
 	MxS16 GetPlayerCount() { return m_playerCount; }
 	LegoBackgroundColor* GetBackgroundColor() { return m_backgroundColor; }
diff --git a/LEGO1/lego/legoomni/src/actors/ambulance.cpp b/LEGO1/lego/legoomni/src/actors/ambulance.cpp
index 25002471..e5c3dcf5 100644
--- a/LEGO1/lego/legoomni/src/actors/ambulance.cpp
+++ b/LEGO1/lego/legoomni/src/actors/ambulance.cpp
@@ -440,8 +440,8 @@ MxLong Ambulance::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
 	MxLong result = 0;
 
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case IsleScript::c_AmbulanceArms_Ctl:
 			Exit();
 			GameState()->m_currentArea = LegoGameState::e_unk66;
@@ -457,7 +457,7 @@ MxLong Ambulance::HandleControl(LegoControlManagerNotificationParam& p_param)
 		case IsleScript::c_AmbulanceHorn_Ctl:
 			MxSoundPresenter* presenter =
 				(MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "AmbulanceHorn_Sound");
-			presenter->Enable(p_param.GetUnknown0x28());
+			presenter->Enable(p_param.m_unk0x28);
 			break;
 		}
 	}
diff --git a/LEGO1/lego/legoomni/src/actors/bike.cpp b/LEGO1/lego/legoomni/src/actors/bike.cpp
index d395c6d9..1bb67774 100644
--- a/LEGO1/lego/legoomni/src/actors/bike.cpp
+++ b/LEGO1/lego/legoomni/src/actors/bike.cpp
@@ -81,8 +81,8 @@ MxLong Bike::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
 	MxLong result = 0;
 
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case IsleScript::c_BikeArms_Ctl:
 			Exit();
 			GameState()->m_currentArea = LegoGameState::e_unk66;
@@ -97,7 +97,7 @@ MxLong Bike::HandleControl(LegoControlManagerNotificationParam& p_param)
 		case IsleScript::c_BikeHorn_Ctl:
 			MxSoundPresenter* presenter =
 				(MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "BikeHorn_Sound");
-			presenter->Enable(p_param.GetUnknown0x28());
+			presenter->Enable(p_param.m_unk0x28);
 			break;
 		}
 	}
diff --git a/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp b/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp
index ac9cbe2c..b2c7bd31 100644
--- a/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp
+++ b/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp
@@ -124,8 +124,8 @@ MxLong DuneBuggy::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
 	MxLong result = 0;
 
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case IsleScript::c_DuneCarArms_Ctl:
 			Exit();
 			GameState()->m_currentArea = LegoGameState::e_unk66;
@@ -140,7 +140,7 @@ MxLong DuneBuggy::HandleControl(LegoControlManagerNotificationParam& p_param)
 		case IsleScript::c_DuneCarHorn_Ctl:
 			MxSoundPresenter* presenter =
 				(MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "DuneCarHorn_Sound");
-			presenter->Enable(p_param.GetUnknown0x28());
+			presenter->Enable(p_param.m_unk0x28);
 			break;
 		}
 	}
diff --git a/LEGO1/lego/legoomni/src/actors/jetski.cpp b/LEGO1/lego/legoomni/src/actors/jetski.cpp
index 24c41d63..bd4c409e 100644
--- a/LEGO1/lego/legoomni/src/actors/jetski.cpp
+++ b/LEGO1/lego/legoomni/src/actors/jetski.cpp
@@ -139,8 +139,8 @@ void Jetski::RemoveFromWorld()
 // FUNCTION: LEGO1 0x1007e8e0
 MxLong Jetski::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
-	if (p_param.GetUnknown0x28() == 1 && CurrentWorld()->IsA("Isle")) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1 && CurrentWorld()->IsA("Isle")) {
+		switch (p_param.m_clickedObjectId) {
 		case IsleScript::c_JetskiArms_Ctl:
 			Exit();
 			((IslePathActor*) UserActor())
diff --git a/LEGO1/lego/legoomni/src/actors/motorcycle.cpp b/LEGO1/lego/legoomni/src/actors/motorcycle.cpp
index 1fd2de6a..891becc2 100644
--- a/LEGO1/lego/legoomni/src/actors/motorcycle.cpp
+++ b/LEGO1/lego/legoomni/src/actors/motorcycle.cpp
@@ -117,8 +117,8 @@ MxLong Motocycle::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
 	MxLong result = 0;
 
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case IsleScript::c_MotoBikeArms_Ctl:
 			Exit();
 			GameState()->m_currentArea = LegoGameState::e_unk66;
diff --git a/LEGO1/lego/legoomni/src/actors/radio.cpp b/LEGO1/lego/legoomni/src/actors/radio.cpp
index 71fbf2bc..310a08b0 100644
--- a/LEGO1/lego/legoomni/src/actors/radio.cpp
+++ b/LEGO1/lego/legoomni/src/actors/radio.cpp
@@ -144,7 +144,7 @@ void Radio::Stop()
 MxLong Radio::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
 	MxDSAction action; // Unused
-	MxS32 objectId = p_param.GetClickedObjectId();
+	MxS32 objectId = p_param.m_clickedObjectId;
 
 	if (objectId == IsleScript::c_Radio_Ctl) {
 		if (m_state->IsActive()) {
diff --git a/LEGO1/lego/legoomni/src/actors/skateboard.cpp b/LEGO1/lego/legoomni/src/actors/skateboard.cpp
index 9b4735eb..5aafe1be 100644
--- a/LEGO1/lego/legoomni/src/actors/skateboard.cpp
+++ b/LEGO1/lego/legoomni/src/actors/skateboard.cpp
@@ -110,7 +110,7 @@ MxLong SkateBoard::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
 	MxU32 result = 0;
 
-	if (p_param.GetUnknown0x28() == 1 && p_param.GetClickedObjectId() == IsleScript::c_SkateArms_Ctl) {
+	if (p_param.m_unk0x28 == 1 && p_param.m_clickedObjectId == IsleScript::c_SkateArms_Ctl) {
 		Exit();
 		GameState()->m_currentArea = LegoGameState::Area::e_unk66;
 		result = 1;
diff --git a/LEGO1/lego/legoomni/src/actors/towtrack.cpp b/LEGO1/lego/legoomni/src/actors/towtrack.cpp
index b3b8d221..6f1ad9c7 100644
--- a/LEGO1/lego/legoomni/src/actors/towtrack.cpp
+++ b/LEGO1/lego/legoomni/src/actors/towtrack.cpp
@@ -484,8 +484,8 @@ MxLong TowTrack::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
 	MxLong result = 0;
 
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case IsleScript::c_TowTrackArms_Ctl:
 			Exit();
 			GameState()->m_currentArea = LegoGameState::e_unk66;
@@ -500,7 +500,7 @@ MxLong TowTrack::HandleControl(LegoControlManagerNotificationParam& p_param)
 			break;
 		case IsleScript::c_TowHorn_Ctl:
 			MxSoundPresenter* presenter = (MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "TowHorn_Sound");
-			presenter->Enable(p_param.GetUnknown0x28());
+			presenter->Enable(p_param.m_unk0x28);
 			break;
 		}
 	}
diff --git a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
index 60988521..49b4c28d 100644
--- a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
+++ b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
@@ -319,6 +319,7 @@ void MxBackgroundAudioManager::LowerVolume()
 }
 
 // FUNCTION: LEGO1 0x1007f5b0
+// FUNCTION: BETA10 0x100e9543
 void MxBackgroundAudioManager::RaiseVolume()
 {
 	if (m_unk0x148 != 0) {
diff --git a/LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp b/LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
index 70578247..691ddb40 100644
--- a/LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
+++ b/LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
@@ -185,7 +185,7 @@ MxBool LegoControlManager::FUN_10029630()
 
 	while (cursor.Next(presenter)) {
 		if (((MxControlPresenter*) presenter)->FUN_10044480(&m_event, m_unk0x14)) {
-			g_unk0x100f31b0 = m_event.GetClickedObjectId();
+			g_unk0x100f31b0 = m_event.m_clickedObjectId;
 			g_unk0x100f31b4 = m_event.GetClickedAtom();
 			FUN_100292e0();
 			m_unk0x08 = 1;
diff --git a/LEGO1/lego/legoomni/src/entity/act2brick.cpp b/LEGO1/lego/legoomni/src/entity/act2brick.cpp
index b0b6f67e..b182d365 100644
--- a/LEGO1/lego/legoomni/src/entity/act2brick.cpp
+++ b/LEGO1/lego/legoomni/src/entity/act2brick.cpp
@@ -19,6 +19,7 @@
 DECOMP_SIZE_ASSERT(Act2Brick, 0x194)
 
 // GLOBAL: LEGO1 0x100f7a38
+// GLOBAL: BETA10 0x101dc480
 const LegoChar* Act2Brick::g_lodNames[] =
 	{"xchbase1", "xchblad1", "xchseat1", "xchtail1", "xhback1", "xhljet1", "xhmidl1", "xhmotr1", "xhsidl1", "xhsidr1"};
 
@@ -51,8 +52,12 @@ MxResult Act2Brick::Create(MxS32 p_index)
 	sprintf(name, "chbrick%d", p_index);
 
 	m_roi = CharacterManager()->CreateAutoROI(name, g_lodNames[p_index], FALSE);
+	assert(m_roi);
 
-	BoundingSphere sphere = m_roi->GetBoundingSphere();
+#ifndef BETA10
+	BoundingSphere sphere;
+
+	sphere.Center() = m_roi->GetBoundingSphere().Center();
 	sphere.Center()[1] -= 0.3;
 
 	if (p_index < 6) {
@@ -63,6 +68,8 @@ MxResult Act2Brick::Create(MxS32 p_index)
 	}
 
 	m_roi->SetBoundingSphere(sphere);
+#endif
+
 	m_roi->SetEntity(this);
 	CurrentWorld()->Add(this);
 	m_unk0x164 = 1;
diff --git a/LEGO1/lego/legoomni/src/entity/legoworld.cpp b/LEGO1/lego/legoomni/src/entity/legoworld.cpp
index 63c06f5d..05e84d56 100644
--- a/LEGO1/lego/legoomni/src/entity/legoworld.cpp
+++ b/LEGO1/lego/legoomni/src/entity/legoworld.cpp
@@ -632,6 +632,7 @@ MxCore* LegoWorld::Find(const char* p_class, const char* p_name)
 }
 
 // FUNCTION: LEGO1 0x10021790
+// FUNCTION: BETA10 0x100db3de
 MxCore* LegoWorld::Find(const MxAtomId& p_atom, MxS32 p_entityId)
 {
 	LegoEntityListCursor entityCursor(m_entityList);
diff --git a/LEGO1/lego/legoomni/src/main/scripts.cpp b/LEGO1/lego/legoomni/src/main/scripts.cpp
index ce3956cb..9aaa34d8 100644
--- a/LEGO1/lego/legoomni/src/main/scripts.cpp
+++ b/LEGO1/lego/legoomni/src/main/scripts.cpp
@@ -38,6 +38,7 @@ MxAtomId* g_elevbottScript = NULL;
 MxAtomId* g_infodoorScript = NULL;
 
 // GLOBAL: LEGO1 0x100f4548
+// GLOBAL: BETA10 0x102114dc
 MxAtomId* g_infomainScript = NULL;
 
 // GLOBAL: LEGO1 0x100f454c
diff --git a/LEGO1/lego/legoomni/src/race/legoracemap.cpp b/LEGO1/lego/legoomni/src/race/legoracemap.cpp
index 73867608..bd0a04bd 100644
--- a/LEGO1/lego/legoomni/src/race/legoracemap.cpp
+++ b/LEGO1/lego/legoomni/src/race/legoracemap.cpp
@@ -127,10 +127,9 @@ MxLong LegoRaceMap::Notify(MxParam& p_param)
 	MxNotificationParam& param = (MxNotificationParam&) p_param;
 
 	if (param.GetNotification() == c_notificationControl &&
-		m_Map_Ctl->GetAction()->GetObjectId() ==
-			((LegoControlManagerNotificationParam&) p_param).GetClickedObjectId()) {
+		m_Map_Ctl->GetAction()->GetObjectId() == ((LegoControlManagerNotificationParam&) p_param).m_clickedObjectId) {
 
-		if (((LegoControlManagerNotificationParam&) p_param).GetUnknown0x28() == 1) {
+		if (((LegoControlManagerNotificationParam&) p_param).m_unk0x28 == 1) {
 			m_unk0x08 = TRUE;
 			FUN_1005d4b0();
 			m_stillPresenter->Enable(TRUE);
diff --git a/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp b/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp
index d01c9f7c..7affe1c8 100644
--- a/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp
@@ -87,8 +87,8 @@ MxLong ElevatorBottom::HandleControl(LegoControlManagerNotificationParam& p_para
 {
 	MxLong result = 0;
 
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case ElevbottScript::c_LeftArrow_Ctl:
 			m_destLocation = LegoGameState::e_infodoor;
 			TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
diff --git a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp
index ab0ecf7f..2c686464 100644
--- a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp
@@ -389,10 +389,10 @@ MxLong GasStation::HandleButtonDown(LegoControlManagerNotificationParam& p_param
 // FUNCTION: BETA10 0x10029445
 MxLong GasStation::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
-	if (p_param.GetUnknown0x28() == 1) {
+	if (p_param.m_unk0x28 == 1) {
 		MxDSAction action;
 
-		switch (p_param.GetClickedObjectId()) {
+		switch (p_param.m_clickedObjectId) {
 		case GarageScript::c_LeftArrow_Ctl:
 		case GarageScript::c_RightArrow_Ctl:
 			m_state->m_unk0x14 = 0;
diff --git a/LEGO1/lego/legoomni/src/worlds/hospital.cpp b/LEGO1/lego/legoomni/src/worlds/hospital.cpp
index f6122378..6bb6dd81 100644
--- a/LEGO1/lego/legoomni/src/worlds/hospital.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/hospital.cpp
@@ -394,21 +394,20 @@ MxLong Hospital::HandleEndAction(MxEndActionNotificationParam& p_param)
 }
 
 // FUNCTION: LEGO1 0x10075710
+// FUNCTION: BETA10 0x1002d2b1
 MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 {
 	if (m_unk0x100 == 1) {
 		LegoROI* roi = PickROI(p_param.GetX(), p_param.GetY());
 		if (roi != NULL) {
-			LegoChar* roiName = (LegoChar*) roi->GetName();
+			const LegoChar* roiName = roi->GetName();
 
 			if (roiName[0] == '*') {
 				roiName += 1;
 			}
 
 			if (!SDL_strcasecmp("actor_ha", roiName)) {
-				LegoInputManager* inputManager = InputManager();
-				inputManager->SetUnknown88(TRUE);
-				inputManager->SetUnknown336(FALSE);
+				InputManager()->DisableInputProcessing();
 
 				m_unk0x100 = 3;
 
@@ -420,7 +419,9 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 
 						m_hospitalState->m_unk0x08 = 9;
 						Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
-						act1State->SetUnknown18(9);
+						assert(act1State);
+
+						act1State->m_unk0x018 = 9;
 
 						m_destLocation = LegoGameState::e_unk31;
 						DeleteObjects(
@@ -482,25 +483,6 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 								break;
 							}
 							break;
-						case LegoActor::c_papa:
-							switch (m_hospitalState->m_unk0x12) {
-							case 0:
-							case 1:
-								m_hospitalState->m_unk0x08 = 12;
-								PlayAction(HospitalScript::c_hho023cl_RunAnim);
-
-								m_currentAction = HospitalScript::c_hho023cl_RunAnim;
-								m_unk0x108 = 1;
-								break;
-							default:
-								m_hospitalState->m_unk0x08 = 12;
-								PlayAction(HospitalScript::c_hho024cl_RunAnim);
-
-								m_currentAction = HospitalScript::c_hho024cl_RunAnim;
-								m_unk0x108 = 1;
-								break;
-							}
-							break;
 						case LegoActor::c_nick:
 							switch (m_hospitalState->m_unk0x14) {
 							case 0:
@@ -520,6 +502,25 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 								break;
 							}
 							break;
+						case LegoActor::c_papa:
+							switch (m_hospitalState->m_unk0x12) {
+							case 0:
+							case 1:
+								m_hospitalState->m_unk0x08 = 12;
+								PlayAction(HospitalScript::c_hho023cl_RunAnim);
+
+								m_currentAction = HospitalScript::c_hho023cl_RunAnim;
+								m_unk0x108 = 1;
+								break;
+							default:
+								m_hospitalState->m_unk0x08 = 12;
+								PlayAction(HospitalScript::c_hho024cl_RunAnim);
+
+								m_currentAction = HospitalScript::c_hho024cl_RunAnim;
+								m_unk0x108 = 1;
+								break;
+							}
+							break;
 						case LegoActor::c_laura:
 							switch (m_hospitalState->m_unk0x16) {
 							case 0:
@@ -545,14 +546,8 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 
 				return 1;
 			}
-			else {
-				return 0;
-			}
 		}
 	}
-	else {
-		return 0;
-	}
 
 	return 0;
 }
@@ -560,8 +555,8 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
 // FUNCTION: LEGO1 0x10075f90
 MxBool Hospital::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case HospitalScript::c_Info_Ctl:
 			BackgroundAudioManager()->RaiseVolume();
 			DeleteObjects(&m_atomId, HospitalScript::c_hho002cl_RunAnim, HospitalScript::c_hho006cl_RunAnim);
diff --git a/LEGO1/lego/legoomni/src/worlds/infocenter.cpp b/LEGO1/lego/legoomni/src/worlds/infocenter.cpp
index b56ffadf..d1f1bfd2 100644
--- a/LEGO1/lego/legoomni/src/worlds/infocenter.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/infocenter.cpp
@@ -17,7 +17,6 @@
 #include "legoplantmanager.h"
 #include "legoutils.h"
 #include "legovideomanager.h"
-#include "misc.h"
 #include "mxactionnotificationparam.h"
 #include "mxbackgroundaudiomanager.h"
 #include "mxcontrolpresenter.h"
@@ -130,7 +129,7 @@ InfomainScript::Script g_bricksterDialogue[2] = {
 Infocenter::Infocenter()
 {
 	m_selectedCharacter = e_noCharacter;
-	m_unk0x11c = NULL;
+	m_dragPresenter = NULL;
 	m_infocenterState = NULL;
 	m_frame = NULL;
 	m_destLocation = LegoGameState::e_undefined;
@@ -191,12 +190,12 @@ MxResult Infocenter::Create(MxDSAction& p_dsAction)
 	m_infocenterState = (InfocenterState*) GameState()->GetState("InfocenterState");
 	if (!m_infocenterState) {
 		m_infocenterState = (InfocenterState*) GameState()->CreateState("InfocenterState");
-		m_infocenterState->SetUnknown0x74(3);
+		m_infocenterState->m_unk0x74 = 3;
 	}
 	else {
-		if (m_infocenterState->GetUnknown0x74() != 8 && m_infocenterState->GetUnknown0x74() != 4 &&
-			m_infocenterState->GetUnknown0x74() != 15) {
-			m_infocenterState->SetUnknown0x74(2);
+		if (m_infocenterState->m_unk0x74 != 8 && m_infocenterState->m_unk0x74 != 4 &&
+			m_infocenterState->m_unk0x74 != 15) {
+			m_infocenterState->m_unk0x74 = 2;
 		}
 
 		MxS16 count, i;
@@ -218,7 +217,7 @@ MxResult Infocenter::Create(MxDSAction& p_dsAction)
 	GameState()->m_currentArea = LegoGameState::e_infomain;
 	GameState()->StopArea(LegoGameState::e_previousArea);
 
-	if (m_infocenterState->GetUnknown0x74() == 4) {
+	if (m_infocenterState->m_unk0x74 == 4) {
 		LegoGameState* state = GameState();
 		state->SetPreviousArea(GameState()->GetUnknown0x42c());
 	}
@@ -267,9 +266,9 @@ MxLong Infocenter::Notify(MxParam& p_param)
 			StopBookAnimation();
 			m_bookAnimationTimer = 0;
 
-			if (m_infocenterState->GetUnknown0x74() == 0x0c) {
+			if (m_infocenterState->m_unk0x74 == 0x0c) {
 				StartCredits();
-				m_infocenterState->SetUnknown0x74(0xd);
+				m_infocenterState->m_unk0x74 = 0xd;
 			}
 			else if (m_destLocation != 0) {
 				BackgroundAudioManager()->RaiseVolume();
@@ -340,7 +339,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
 		m_unk0x1d6 = 0;
 	}
 
-	switch (m_infocenterState->GetUnknown0x74()) {
+	switch (m_infocenterState->m_unk0x74) {
 	case 0:
 		switch (m_currentCutscene) {
 		case e_legoMovie:
@@ -351,13 +350,13 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
 			return 1;
 		case e_badEndMovie:
 			StopCutscene();
-			m_infocenterState->SetUnknown0x74(11);
+			m_infocenterState->m_unk0x74 = 11;
 			PlayAction(InfomainScript::c_tic092in_RunAnim);
 			m_currentCutscene = e_noIntro;
 			return 1;
 		case e_goodEndMovie:
 			StopCutscene();
-			m_infocenterState->SetUnknown0x74(11);
+			m_infocenterState->m_unk0x74 = 11;
 			PlayAction(InfomainScript::c_tic089in_RunAnim);
 			m_currentCutscene = e_noIntro;
 			return 1;
@@ -365,7 +364,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
 
 		// default / 2nd case probably?
 		StopCutscene();
-		m_infocenterState->SetUnknown0x74(11);
+		m_infocenterState->m_unk0x74 = 11;
 		PlayAction(InfomainScript::c_iic001in_RunAnim);
 		m_currentCutscene = e_noIntro;
 
@@ -375,7 +374,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
 		}
 		break;
 	case 1:
-		m_infocenterState->SetUnknown0x74(11);
+		m_infocenterState->m_unk0x74 = 11;
 
 		switch (m_currentCutscene) {
 		case e_badEndMovie:
@@ -399,7 +398,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
 		if (action->GetObjectId() == InfomainScript::c_GoTo_RegBook ||
 			action->GetObjectId() == InfomainScript::c_GoTo_RegBook_Red) {
 			TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
-			m_infocenterState->SetUnknown0x74(14);
+			m_infocenterState->m_unk0x74 = 14;
 			return 1;
 		}
 		break;
@@ -409,7 +408,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
 				GameState()->SetActor(m_selectedCharacter);
 			}
 			TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
-			m_infocenterState->SetUnknown0x74(14);
+			m_infocenterState->m_unk0x74 = 14;
 			return 1;
 		}
 		break;
@@ -423,7 +422,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
 			PlayMusic(JukeboxScript::c_InformationCenter_Music);
 		}
 
-		m_infocenterState->SetUnknown0x74(2);
+		m_infocenterState->m_unk0x74 = 2;
 		SetROIVisible("infoman", TRUE);
 		return 1;
 	case 12:
@@ -453,13 +452,13 @@ void Infocenter::ReadyWorld()
 		bg->Enable(TRUE);
 		InitializeBitmaps();
 
-		switch (m_infocenterState->GetUnknown0x74()) {
+		switch (m_infocenterState->m_unk0x74) {
 		case 3:
 			PlayCutscene(e_legoMovie, TRUE);
-			m_infocenterState->SetUnknown0x74(0);
+			m_infocenterState->m_unk0x74 = 0;
 			break;
 		case 4:
-			m_infocenterState->SetUnknown0x74(2);
+			m_infocenterState->m_unk0x74 = 2;
 			if (!m_infocenterState->HasRegistered()) {
 				m_bookAnimationTimer = 1;
 			}
@@ -486,7 +485,7 @@ void Infocenter::ReadyWorld()
 				m_bookAnimationTimer = 1;
 			}
 
-			m_infocenterState->SetUnknown0x74(11);
+			m_infocenterState->m_unk0x74 = 11;
 			FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
 			break;
 		}
@@ -496,7 +495,7 @@ void Infocenter::ReadyWorld()
 			FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
 			break;
 		case 0xf:
-			m_infocenterState->SetUnknown0x74(2);
+			m_infocenterState->m_unk0x74 = 2;
 			if (!m_infocenterState->HasRegistered()) {
 				m_bookAnimationTimer = 1;
 			}
@@ -508,7 +507,7 @@ void Infocenter::ReadyWorld()
 		}
 		return;
 	case LegoGameState::e_act2: {
-		if (m_infocenterState->GetUnknown0x74() == 8) {
+		if (m_infocenterState->m_unk0x74 == 8) {
 			PlayMusic(JukeboxScript::c_InformationCenter_Music);
 			bgRed->Enable(TRUE);
 			PlayAction(InfomainScript::c_iic043in_RunAnim);
@@ -522,11 +521,11 @@ void Infocenter::ReadyWorld()
 		if (state && state->GetUnknown0x08() == 0x68) {
 			bg->Enable(TRUE);
 			PlayCutscene(e_badEndMovie, TRUE);
-			m_infocenterState->SetUnknown0x74(0);
+			m_infocenterState->m_unk0x74 = 0;
 			return;
 		}
 
-		if (m_infocenterState->GetUnknown0x74() == 4) {
+		if (m_infocenterState->m_unk0x74 == 4) {
 			bgRed->Enable(TRUE);
 
 			if (GameState()->GetCurrentAct() == GameState()->GetLoadedAct()) {
@@ -535,7 +534,7 @@ void Infocenter::ReadyWorld()
 				GameState()->m_currentArea = LegoGameState::e_infomain;
 			}
 
-			m_infocenterState->SetUnknown0x74(5);
+			m_infocenterState->m_unk0x74 = 5;
 			m_destLocation = LegoGameState::e_act2main;
 
 			InfomainScript::Script script =
@@ -555,7 +554,7 @@ void Infocenter::ReadyWorld()
 		break;
 	}
 	case LegoGameState::e_act3: {
-		if (m_infocenterState->GetUnknown0x74() == 8) {
+		if (m_infocenterState->m_unk0x74 == 8) {
 			PlayMusic(JukeboxScript::c_InformationCenter_Music);
 			bgRed->Enable(TRUE);
 			PlayAction(InfomainScript::c_iic043in_RunAnim);
@@ -570,19 +569,19 @@ void Infocenter::ReadyWorld()
 			if (state->GetUnknown0x08() == 3) {
 				bg->Enable(TRUE);
 				PlayCutscene(e_badEndMovie, TRUE);
-				m_infocenterState->SetUnknown0x74(0);
+				m_infocenterState->m_unk0x74 = 0;
 				return;
 			}
 
 			if (state && state->GetUnknown0x08() == 2) {
 				bg->Enable(TRUE);
 				PlayCutscene(e_goodEndMovie, TRUE);
-				m_infocenterState->SetUnknown0x74(0);
+				m_infocenterState->m_unk0x74 = 0;
 				return;
 			}
 		}
 
-		if (m_infocenterState->GetUnknown0x74() == 4) {
+		if (m_infocenterState->m_unk0x74 == 4) {
 			bgRed->Enable(TRUE);
 
 			if (GameState()->GetCurrentAct() == GameState()->GetLoadedAct()) {
@@ -591,7 +590,7 @@ void Infocenter::ReadyWorld()
 				GameState()->m_currentArea = LegoGameState::e_infomain;
 			}
 
-			m_infocenterState->SetUnknown0x74(5);
+			m_infocenterState->m_unk0x74 = 5;
 			m_destLocation = LegoGameState::e_act3script;
 
 			InfomainScript::Script script =
@@ -612,7 +611,7 @@ void Infocenter::ReadyWorld()
 	}
 	}
 
-	m_infocenterState->SetUnknown0x74(11);
+	m_infocenterState->m_unk0x74 = 11;
 	FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
 }
 
@@ -701,20 +700,21 @@ void Infocenter::InitializeBitmaps()
 }
 
 // FUNCTION: LEGO1 0x1006fd00
+// FUNCTION: BETA10 0x1002f808
 MxU8 Infocenter::HandleMouseMove(MxS32 p_x, MxS32 p_y)
 {
-	if (m_unk0x11c) {
-		if (!m_unk0x11c->IsEnabled()) {
-			MxS32 oldDisplayZ = m_unk0x11c->GetDisplayZ();
+	if (m_dragPresenter) {
+		if (!m_dragPresenter->IsEnabled()) {
+			MxS32 oldDisplayZ = m_dragPresenter->GetDisplayZ();
 
-			m_unk0x11c->SetDisplayZ(1000);
+			m_dragPresenter->SetDisplayZ(1000);
 			VideoManager()->SortPresenterList();
-			m_unk0x11c->Enable(TRUE);
-			m_unk0x11c->SetPosition(p_x, p_y);
-			m_unk0x11c->SetDisplayZ(oldDisplayZ);
+			m_dragPresenter->Enable(TRUE);
+			m_dragPresenter->SetPosition(p_x, p_y);
+			m_dragPresenter->SetDisplayZ(oldDisplayZ);
 		}
 		else {
-			m_unk0x11c->SetPosition(p_x, p_y);
+			m_dragPresenter->SetPosition(p_x, p_y);
 		}
 
 		FUN_10070d10(p_x, p_y);
@@ -725,15 +725,16 @@ MxU8 Infocenter::HandleMouseMove(MxS32 p_x, MxS32 p_y)
 }
 
 // FUNCTION: LEGO1 0x1006fda0
+// FUNCTION: BETA10 0x1002f907
 MxLong Infocenter::HandleKeyPress(SDL_Keycode p_key)
 {
 	MxLong result = 0;
 
 	if (p_key == SDLK_SPACE && m_worldStarted) {
-		switch (m_infocenterState->GetUnknown0x74()) {
+		switch (m_infocenterState->m_unk0x74) {
 		case 0:
 			StopCutscene();
-			m_infocenterState->SetUnknown0x74(1);
+			m_infocenterState->m_unk0x74 = 1;
 
 			if (!m_infocenterState->HasRegistered()) {
 				m_bookAnimationTimer = 1;
@@ -747,13 +748,13 @@ MxLong Infocenter::HandleKeyPress(SDL_Keycode p_key)
 			InfomainScript::Script script = m_currentInfomainScript;
 			StopCurrentAction();
 
-			switch (m_infocenterState->GetUnknown0x74()) {
+			switch (m_infocenterState->m_unk0x74) {
 			case 5:
 			case 12:
 				m_currentInfomainScript = script;
 				return 1;
 			default:
-				m_infocenterState->SetUnknown0x74(2);
+				m_infocenterState->m_unk0x74 = 2;
 				return 1;
 			case 8:
 			case 11:
@@ -772,12 +773,13 @@ MxLong Infocenter::HandleKeyPress(SDL_Keycode p_key)
 }
 
 // FUNCTION: LEGO1 0x1006feb0
+// FUNCTION: BETA10 0x1002fa12
 MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
 {
-	if (m_unk0x11c) {
+	if (m_dragPresenter) {
 		MxControlPresenter* control = InputManager()->GetControlManager()->FUN_100294e0(p_x - 1, p_y - 1);
 
-		switch (m_unk0x11c->GetAction()->GetObjectId()) {
+		switch (m_dragPresenter->GetAction()->GetObjectId()) {
 		case InfomainScript::c_PepperHot_Bitmap:
 			m_selectedCharacter = e_pepper;
 			break;
@@ -870,54 +872,54 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
 				case 10:
 					if (m_selectedCharacter) {
 						m_destLocation = LegoGameState::e_jetraceExterior;
-						m_infocenterState->SetUnknown0x74(5);
+						m_infocenterState->m_unk0x74 = 5;
 					}
 					break;
 				case 11:
 					if (m_selectedCharacter) {
 						m_destLocation = LegoGameState::e_carraceExterior;
-						m_infocenterState->SetUnknown0x74(5);
+						m_infocenterState->m_unk0x74 = 5;
 					}
 					break;
 				case 12:
 					if (m_selectedCharacter) {
 						m_destLocation = LegoGameState::e_pizzeriaExterior;
-						m_infocenterState->SetUnknown0x74(5);
+						m_infocenterState->m_unk0x74 = 5;
 					}
 					break;
 				case 13:
 					if (m_selectedCharacter) {
 						m_destLocation = LegoGameState::e_garageExterior;
-						m_infocenterState->SetUnknown0x74(5);
+						m_infocenterState->m_unk0x74 = 5;
 					}
 					break;
 				case 14:
 					if (m_selectedCharacter) {
 						m_destLocation = LegoGameState::e_hospitalExterior;
-						m_infocenterState->SetUnknown0x74(5);
+						m_infocenterState->m_unk0x74 = 5;
 					}
 					break;
 				case 15:
 					if (m_selectedCharacter) {
 						m_destLocation = LegoGameState::e_policeExterior;
-						m_infocenterState->SetUnknown0x74(5);
+						m_infocenterState->m_unk0x74 = 5;
 					}
 					break;
 				}
 			}
 		}
 
-		m_unk0x11c->Enable(FALSE);
-		m_unk0x11c = NULL;
+		m_dragPresenter->Enable(FALSE);
+		m_dragPresenter = NULL;
 
-		if (m_infocenterState->GetUnknown0x74() == 5) {
+		if (m_infocenterState->m_unk0x74 == 5) {
 			InfomainScript::Script dialogueToPlay;
 
 			if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
 				if (!m_infocenterState->HasRegistered()) {
-					m_infocenterState->SetUnknown0x74(2);
-					m_destLocation = LegoGameState::e_undefined;
 					dialogueToPlay = InfomainScript::c_iic007in_PlayWav;
+					m_infocenterState->m_unk0x74 = 2;
+					m_destLocation = LegoGameState::e_undefined;
 				}
 				else {
 					switch (m_selectedCharacter) {
@@ -942,9 +944,8 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
 						GameState()->SetActorId(m_selectedCharacter);
 						break;
 					default:
-						dialogueToPlay =
-							(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct())
-								.Next();
+						assert(0);
+						dialogueToPlay = m_infocenterState->GetNextLeaveDialogue();
 						break;
 					}
 
@@ -953,8 +954,7 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
 				}
 			}
 			else {
-				dialogueToPlay =
-					(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct()).Next();
+				dialogueToPlay = m_infocenterState->GetNextLeaveDialogue();
 			}
 
 			PlayAction(dialogueToPlay);
@@ -968,9 +968,10 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
 }
 
 // FUNCTION: LEGO1 0x10070370
+// FUNCTION: BETA10 0x1002ffd4
 MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
-	if (p_param.GetUnknown0x28() == 1) {
+	if (p_param.m_unk0x28 == 1) {
 		m_infoManDialogueTimer = 0;
 
 		InfomainScript::Script actionToPlay = InfomainScript::c_noneInfomain;
@@ -979,9 +980,9 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 
 		LegoGameState* state = GameState();
 
-		switch (p_param.GetClickedObjectId()) {
+		switch (p_param.m_clickedObjectId) {
 		case InfomainScript::c_LeftArrow_Ctl:
-			m_infocenterState->SetUnknown0x74(14);
+			m_infocenterState->m_unk0x74 = 14;
 			StopCurrentAction();
 
 			if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
@@ -996,7 +997,7 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 
 			break;
 		case InfomainScript::c_RightArrow_Ctl:
-			m_infocenterState->SetUnknown0x74(14);
+			m_infocenterState->m_unk0x74 = 14;
 			StopCurrentAction();
 
 			if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
@@ -1015,10 +1016,10 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 			m_radio.Stop();
 			break;
 		case InfomainScript::c_Door_Ctl:
-			if (m_infocenterState->GetUnknown0x74() != 8) {
+			if (m_infocenterState->m_unk0x74 != 8) {
 				actionToPlay = InfomainScript::c_iic043in_RunAnim;
 				m_radio.Stop();
-				m_infocenterState->SetUnknown0x74(8);
+				m_infocenterState->m_unk0x74 = 8;
 			}
 
 			break;
@@ -1049,52 +1050,56 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 		case InfomainScript::c_BigInfo_Ctl:
 			switch (state->GetCurrentAct()) {
 			case LegoGameState::e_act1:
-				switch (state->GetPreviousArea()) {
-				case LegoGameState::e_infodoor:
-				case LegoGameState::e_regbook:
-				case LegoGameState::e_infoscor:
-					m_infocenterState->SetUnknown0x74(5);
-					m_destLocation = state->GetPreviousArea();
-					actionToPlay =
-						(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct())
-							.Next();
-					m_radio.Stop();
-					InputManager()->DisableInputProcessing();
-					InputManager()->SetUnknown336(TRUE);
-					break;
-				case LegoGameState::e_unk4:
-					if (state->GetActorId() != LegoActor::c_none) {
-						if (m_infocenterState->HasRegistered()) {
-							m_infocenterState->SetUnknown0x74(5);
-							m_destLocation = state->GetPreviousArea();
-							actionToPlay = (InfomainScript::Script) m_infocenterState
-											   ->GetLeaveDialogue(GameState()->GetCurrentAct())
-											   .Next();
-							m_radio.Stop();
-							InputManager()->DisableInputProcessing();
-							InputManager()->SetUnknown336(TRUE);
-						}
-						else {
-							PlayAction(InfomainScript::c_iic007in_PlayWav);
-							m_infocenterState->SetUnknown0x74(2);
+				if (state->GetPreviousArea()) {
+					switch (state->GetPreviousArea()) {
+					case LegoGameState::e_infodoor:
+					case LegoGameState::e_regbook:
+					case LegoGameState::e_infoscor:
+						m_infocenterState->m_unk0x74 = 5;
+						m_destLocation = state->GetPreviousArea();
+						actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
+						m_radio.Stop();
+						InputManager()->DisableInputProcessing();
+						InputManager()->SetUnknown336(TRUE);
+						break;
+					case LegoGameState::e_elevbott:
+					case LegoGameState::e_elevride:
+					case LegoGameState::e_elevride2:
+					case LegoGameState::e_elevopen:
+					case LegoGameState::e_seaview:
+					case LegoGameState::e_observe:
+					case LegoGameState::e_elevdown:
+						break;
+					default:
+						if (state->GetActorId() != LegoActor::c_none) {
+							if (!m_infocenterState->HasRegistered()) {
+								PlayAction(InfomainScript::c_iic007in_PlayWav);
+								m_infocenterState->m_unk0x74 = 2;
+							}
+							else {
+								m_infocenterState->m_unk0x74 = 5;
+								m_destLocation = state->m_previousArea;
+								actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
+								m_radio.Stop();
+								InputManager()->DisableInputProcessing();
+								InputManager()->SetUnknown336(TRUE);
+							}
 						}
+						break;
 					}
-					break;
 				}
 				break;
 			case LegoGameState::e_act2:
-				m_infocenterState->SetUnknown0x74(5);
+				m_infocenterState->m_unk0x74 = 5;
 				m_destLocation = LegoGameState::e_act2main;
-				actionToPlay =
-					(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct()).Next();
+				actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
 				InputManager()->DisableInputProcessing();
 				InputManager()->SetUnknown336(TRUE);
 				break;
 			case LegoGameState::e_act3:
-				m_infocenterState->SetUnknown0x74(5);
+				m_infocenterState->m_unk0x74 = 5;
 				m_destLocation = LegoGameState::e_act3script;
-				actionToPlay =
-					(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct()).Next();
+				actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
 				InputManager()->DisableInputProcessing();
 				InputManager()->SetUnknown336(TRUE);
 				break;
@@ -1102,11 +1107,11 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 			break;
 		case InfomainScript::c_Book_Ctl:
 			m_destLocation = LegoGameState::e_regbook;
-			m_infocenterState->SetUnknown0x74(4);
+			m_infocenterState->m_unk0x74 = 4;
 			actionToPlay = GameState()->GetCurrentAct() != LegoGameState::e_act1 ? InfomainScript::c_GoTo_RegBook_Red
 																				 : InfomainScript::c_GoTo_RegBook;
 			m_radio.Stop();
-			GameState()->SetUnknown0x42c(GameState()->GetPreviousArea());
+			GameState()->m_unk0x42c = GameState()->GetPreviousArea();
 			InputManager()->DisableInputProcessing();
 			break;
 		case InfomainScript::c_Mama_Ctl:
@@ -1136,7 +1141,8 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 		}
 
 		if (characterBitmap != InfomainScript::c_noneInfomain) {
-			m_unk0x11c = (MxStillPresenter*) Find(m_atomId, characterBitmap);
+			m_dragPresenter = (MxStillPresenter*) Find(m_atomId, characterBitmap);
+			assert(m_dragPresenter);
 		}
 	}
 
@@ -1144,19 +1150,21 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
 }
 
 // FUNCTION: LEGO1 0x10070870
+// FUNCTION: BETA10 0x1003039e
 MxLong Infocenter::HandleNotification0(MxNotificationParam& p_param)
 {
-	// MxLong result
+	// This function has changed significantly since BETA10
+
 	MxCore* sender = p_param.GetSender();
 
 	if (sender == NULL) {
-		if (m_infocenterState->GetUnknown0x74() == 8) {
+		if (m_infocenterState->m_unk0x74 == 8) {
 			m_infoManDialogueTimer = 0;
 			StopCutscene();
 			PlayAction(InfomainScript::c_iic043in_RunAnim);
 		}
 	}
-	else if (sender->IsA("MxEntity") && m_infocenterState->GetUnknown0x74() != 5 && m_infocenterState->GetUnknown0x74() != 12) {
+	else if (sender->IsA("MxEntity") && m_infocenterState->m_unk0x74 != 5 && m_infocenterState->m_unk0x74 != 12) {
 		switch (((MxEntity*) sender)->GetEntityId()) {
 		case 5: {
 			m_infoManDialogueTimer = 0;
@@ -1175,21 +1183,21 @@ MxLong Infocenter::HandleNotification0(MxNotificationParam& p_param)
 			return 1;
 		}
 		case 6:
-			if (m_infocenterState->GetUnknown0x74() == 8) {
+			if (m_infocenterState->m_unk0x74 == 8) {
 				StopCurrentAction();
 				SetROIVisible(g_object2x4red, FALSE);
 				SetROIVisible(g_object2x4grn, FALSE);
-				m_infocenterState->SetUnknown0x74(2);
+				m_infocenterState->m_unk0x74 = 2;
 				PlayAction(InfomainScript::c_iicb28in_RunAnim);
 				return 1;
 			}
 		case 7:
-			if (m_infocenterState->GetUnknown0x74() == 8) {
+			if (m_infocenterState->m_unk0x74 == 8) {
 				if (m_infocenterState->HasRegistered()) {
 					GameState()->Save(0);
 				}
 
-				m_infocenterState->SetUnknown0x74(12);
+				m_infocenterState->m_unk0x74 = 12;
 				PlayAction(InfomainScript::c_iic046in_RunAnim);
 				InputManager()->DisableInputProcessing();
 				InputManager()->SetUnknown336(TRUE);
@@ -1315,6 +1323,7 @@ MxBool Infocenter::VTable0x5c()
 }
 
 // FUNCTION: LEGO1 0x10070d10
+// FUNCTION: BETA10 0x100307d4
 void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
 {
 	MxS16 i;
@@ -1346,6 +1355,7 @@ void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
 }
 
 // FUNCTION: LEGO1 0x10070dc0
+// FUNCTION: BETA10 0x10030911
 void Infocenter::UpdateFrameHot(MxBool p_display)
 {
 	if (p_display) {
@@ -1410,7 +1420,7 @@ void Infocenter::Reset()
 	CharacterManager()->ReleaseAllActors();
 	GameState()->SetCurrentAct(LegoGameState::e_act1);
 	GameState()->SetPreviousArea(LegoGameState::e_undefined);
-	GameState()->SetUnknown0x42c(LegoGameState::e_undefined);
+	GameState()->m_unk0x42c = LegoGameState::e_undefined;
 
 	InitializeBitmaps();
 	m_selectedCharacter = e_pepper;
@@ -1428,17 +1438,17 @@ void Infocenter::Reset()
 MxBool Infocenter::Escape()
 {
 	if (m_infocenterState != NULL) {
-		MxU32 val = m_infocenterState->GetUnknown0x74();
+		MxU32 val = m_infocenterState->m_unk0x74;
 
 		if (val == 0) {
 			StopCutscene();
-			m_infocenterState->SetUnknown0x74(1);
+			m_infocenterState->m_unk0x74 = 1;
 		}
 		else if (val == 13) {
 			StopCredits();
 		}
 		else if (val != 8) {
-			m_infocenterState->SetUnknown0x74(8);
+			m_infocenterState->m_unk0x74 = 8;
 
 #ifdef COMPAT_MODE
 			{
@@ -1518,6 +1528,7 @@ void Infocenter::StopCredits()
 }
 
 // FUNCTION: LEGO1 0x10071300
+// FUNCTION: BETA10 0x1002ee8c
 void Infocenter::PlayAction(InfomainScript::Script p_script)
 {
 	MxDSAction action;
diff --git a/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp b/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp
index 085d76d7..9931523f 100644
--- a/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp
@@ -96,10 +96,10 @@ MxLong InfocenterDoor::HandleControl(LegoControlManagerNotificationParam& p_para
 {
 	MxLong result = 0;
 
-	if (p_param.GetUnknown0x28() == 1) {
+	if (p_param.m_unk0x28 == 1) {
 		DeleteObjects(&m_atomId, InfodoorScript::c_iic037in_PlayWav, 510);
 
-		switch (p_param.GetClickedObjectId()) {
+		switch (p_param.m_clickedObjectId) {
 		case InfodoorScript::c_LeftArrow_Ctl:
 			m_destLocation = LegoGameState::e_infoscor;
 			TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp
index aeb9be41..7829d6e8 100644
--- a/LEGO1/lego/legoomni/src/worlds/isle.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp
@@ -289,10 +289,10 @@ void Isle::ReadyWorld()
 // FUNCTION: LEGO1 0x10031030
 MxLong Isle::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
-	if (p_param.GetUnknown0x28() == 1) {
+	if (p_param.m_unk0x28 == 1) {
 		MxDSAction action;
 
-		switch (p_param.GetClickedObjectId()) {
+		switch (p_param.m_clickedObjectId) {
 		case IsleScript::c_ElevRide_Info_Ctl:
 			m_act1state->m_unk0x018 = 2;
 
diff --git a/LEGO1/lego/legoomni/src/worlds/police.cpp b/LEGO1/lego/legoomni/src/worlds/police.cpp
index 9daf5b8e..acd3a8cf 100644
--- a/LEGO1/lego/legoomni/src/worlds/police.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/police.cpp
@@ -101,8 +101,8 @@ void Police::ReadyWorld()
 // FUNCTION: LEGO1 0x1005e550
 MxLong Police::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
-	if (p_param.GetUnknown0x28() == 1) {
-		switch (p_param.GetClickedObjectId()) {
+	if (p_param.m_unk0x28 == 1) {
+		switch (p_param.m_clickedObjectId) {
 		case PoliceScript::c_LeftArrow_Ctl:
 		case PoliceScript::c_RightArrow_Ctl:
 			if (m_policeState->GetUnknown0x0c() == 1) {
diff --git a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp
index e1c84f8b..c0e6d1ed 100644
--- a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp
@@ -223,18 +223,18 @@ MxLong RegistrationBook::HandleKeyPress(SDL_Keycode p_key)
 // FUNCTION: LEGO1 0x100774a0
 MxLong RegistrationBook::HandleControl(LegoControlManagerNotificationParam& p_param)
 {
-	MxS16 unk0x28 = p_param.GetUnknown0x28();
+	MxS16 unk0x28 = p_param.m_unk0x28;
 
 	if (unk0x28 >= 1 && unk0x28 <= 28) {
-		if (p_param.GetClickedObjectId() == RegbookScript::c_Alphabet_Ctl) {
+		if (p_param.m_clickedObjectId == RegbookScript::c_Alphabet_Ctl) {
 			if (unk0x28 == 28) {
 				DeleteObjects(&m_atomId, RegbookScript::c_iic006in_RunAnim, RegbookScript::c_iic008in_PlayWav);
 
 				if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
-					m_infocenterState->SetUnknown0x74(15);
+					m_infocenterState->m_unk0x74 = 15;
 				}
 				else {
-					m_infocenterState->SetUnknown0x74(2);
+					m_infocenterState->m_unk0x74 = 2;
 				}
 
 				TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
@@ -253,7 +253,7 @@ MxLong RegistrationBook::HandleControl(LegoControlManagerNotificationParam& p_pa
 
 			MxS16 i;
 			for (i = 0; i < 10; i++) {
-				if (m_checkmark[i]->GetAction()->GetObjectId() == p_param.GetClickedObjectId()) {
+				if (m_checkmark[i]->GetAction()->GetObjectId() == p_param.m_clickedObjectId) {
 					break;
 				}
 			}
@@ -315,7 +315,7 @@ void RegistrationBook::FUN_100775c0(MxS16 p_playerIndex)
 		break;
 	}
 
-	m_infocenterState->SetUnknown0x74(4);
+	m_infocenterState->m_unk0x74 = 4;
 	if (m_unk0x2b8 == 0 && !m_unk0x2c1) {
 		DeleteObjects(&m_atomId, RegbookScript::c_iic006in_RunAnim, RegbookScript::c_iic008in_PlayWav);
 		TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
diff --git a/LEGO1/lego/legoomni/src/worlds/score.cpp b/LEGO1/lego/legoomni/src/worlds/score.cpp
index d2f171c3..3f7590e7 100644
--- a/LEGO1/lego/legoomni/src/worlds/score.cpp
+++ b/LEGO1/lego/legoomni/src/worlds/score.cpp
@@ -165,10 +165,10 @@ void Score::ReadyWorld()
 // FUNCTION: LEGO1 0x100016d0
 MxLong Score::FUN_100016d0(LegoControlManagerNotificationParam& p_param)
 {
-	MxS16 unk0x28 = p_param.GetUnknown0x28();
+	MxS16 unk0x28 = p_param.m_unk0x28;
 
-	if (unk0x28 == 1 || p_param.GetClickedObjectId() == InfoscorScript::c_LegoBox_Ctl) {
-		switch (p_param.GetClickedObjectId()) {
+	if (unk0x28 == 1 || p_param.m_clickedObjectId == InfoscorScript::c_LegoBox_Ctl) {
+		switch (p_param.m_clickedObjectId) {
 		case InfoscorScript::c_LeftArrow_Ctl:
 			m_destLocation = LegoGameState::e_infomain;
 			DeleteScript();
diff --git a/LEGO1/lego/sources/roi/legoroi.h b/LEGO1/lego/sources/roi/legoroi.h
index 42112e55..ad346db6 100644
--- a/LEGO1/lego/sources/roi/legoroi.h
+++ b/LEGO1/lego/sources/roi/legoroi.h
@@ -74,7 +74,9 @@ public:
 
 	BoundingSphere& GetBoundingSphere() { return m_sphere; }
 
+	// FUNCTION: BETA10 0x10013400
 	void SetEntity(LegoEntity* p_entity) { m_entity = p_entity; }
+
 	void SetComp(CompoundObject* p_comp) { comp = p_comp; }
 	void SetBoundingSphere(const BoundingSphere& p_sphere) { m_sphere = m_world_bounding_sphere = p_sphere; }
 	void SetUnknown0x80(const BoundingBox& p_unk0x80) { m_unk0x80 = p_unk0x80; }
diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h
index 0a6ec12e..f9f8fa49 100644
--- a/LEGO1/mxgeometry/mxgeometry3d.h
+++ b/LEGO1/mxgeometry/mxgeometry3d.h
@@ -30,11 +30,9 @@ public:
 	Mx3DPointFloat(const Vector3& p_other) : Vector3(m_elements) { EqualsImpl(p_other.m_data); }
 
 	// FUNCTION: LEGO1 0x10003c10
+	// FUNCTION: BETA10 0x100116e0
 	virtual void operator=(const Vector3& p_impl) { EqualsImpl(p_impl.m_data); } // vtable+0x88
 
-	// FUNCTION: BETA10 0x10015240
-	// ??4Mx3DPointFloat@@QAEAAV0@ABV0@@Z
-
 	// FUNCTION: BETA10 0x10013460
 	float& operator[](int idx) { return m_data[idx]; }
 
@@ -42,6 +40,7 @@ public:
 	const float& operator[](int idx) const { return m_data[idx]; }
 
 	// SYNTHETIC: LEGO1 0x10010c00
+	// SYNTHETIC: BETA10 0x10015240
 	// ??4Mx3DPointFloat@@QAEAAV0@ABV0@@Z
 
 private:
diff --git a/LEGO1/mxgeometry/mxgeometry4d.h b/LEGO1/mxgeometry/mxgeometry4d.h
index 4ebeeb5a..2f66f033 100644
--- a/LEGO1/mxgeometry/mxgeometry4d.h
+++ b/LEGO1/mxgeometry/mxgeometry4d.h
@@ -25,6 +25,7 @@ public:
 	Mx4DPointFloat(const Mx4DPointFloat& p_other) : Vector4(m_elements) { EqualsImpl(p_other.m_data); }
 
 	// FUNCTION: LEGO1 0x10003200
+	// FUNCTION: BETA10 0x10048da0
 	virtual void operator=(const Vector4& p_impl) { EqualsImpl(p_impl.m_data); } // vtable+0x98
 
 	// FUNCTION: BETA10 0x1004af10
diff --git a/LEGO1/omni/include/mxpresenter.h b/LEGO1/omni/include/mxpresenter.h
index 3af93fd0..3151704e 100644
--- a/LEGO1/omni/include/mxpresenter.h
+++ b/LEGO1/omni/include/mxpresenter.h
@@ -123,6 +123,8 @@ public:
 	MxPoint32 GetLocation() const { return this->m_location; }
 	MxS32 GetX() const { return this->m_location.GetX(); }
 	MxS32 GetY() const { return this->m_location.GetY(); }
+
+	// FUNCTION: BETA10 0x10031b70
 	MxS32 GetDisplayZ() const { return this->m_displayZ; }
 
 	// FUNCTION: BETA10 0x10028430
@@ -135,6 +137,7 @@ public:
 		m_compositePresenter = p_compositePresenter;
 	}
 
+	// FUNCTION: BETA10 0x10031b40
 	void SetDisplayZ(MxS32 p_displayZ) { m_displayZ = p_displayZ; }
 
 	// SYNTHETIC: LEGO1 0x1000c070
diff --git a/LEGO1/omni/src/video/mxvideomanager.cpp b/LEGO1/omni/src/video/mxvideomanager.cpp
index 8392124f..bab7dd16 100644
--- a/LEGO1/omni/src/video/mxvideomanager.cpp
+++ b/LEGO1/omni/src/video/mxvideomanager.cpp
@@ -98,6 +98,7 @@ void MxVideoManager::UpdateRegion()
 }
 
 // FUNCTION: LEGO1 0x100be440
+// FUNCTION: BETA10 0x1012ce5e
 void MxVideoManager::SortPresenterList()
 {
 	if (this->m_presenters->GetCount() <= 1) {
diff --git a/LEGO1/realtime/vector2d.inl.h b/LEGO1/realtime/vector2d.inl.h
index 95e7ea7d..100d4d5f 100644
--- a/LEGO1/realtime/vector2d.inl.h
+++ b/LEGO1/realtime/vector2d.inl.h
@@ -7,6 +7,7 @@
 #include <memory.h>
 
 // FUNCTION: LEGO1 0x10001f80
+// FUNCTION: BETA10 0x10010a20
 void Vector2::AddImpl(const float* p_value)
 {
 	m_data[0] += p_value[0];
@@ -14,6 +15,7 @@ void Vector2::AddImpl(const float* p_value)
 }
 
 // FUNCTION: LEGO1 0x10001fa0
+// FUNCTION: BETA10 0x10010a80
 void Vector2::AddImpl(float p_value)
 {
 	m_data[0] += p_value;
@@ -21,6 +23,7 @@ void Vector2::AddImpl(float p_value)
 }
 
 // FUNCTION: LEGO1 0x10001fc0
+// FUNCTION: BETA10 0x10010ad0
 void Vector2::SubImpl(const float* p_value)
 {
 	m_data[0] -= p_value[0];
@@ -28,6 +31,7 @@ void Vector2::SubImpl(const float* p_value)
 }
 
 // FUNCTION: LEGO1 0x10001fe0
+// FUNCTION: BETA10 0x10010b30
 void Vector2::MulImpl(const float* p_value)
 {
 	m_data[0] *= p_value[0];
@@ -35,6 +39,7 @@ void Vector2::MulImpl(const float* p_value)
 }
 
 // FUNCTION: LEGO1 0x10002000
+// FUNCTION: BETA10 0x10010b90
 void Vector2::MulImpl(const float& p_value)
 {
 	m_data[0] *= p_value;
@@ -42,6 +47,7 @@ void Vector2::MulImpl(const float& p_value)
 }
 
 // FUNCTION: LEGO1 0x10002020
+// FUNCTION: BETA10 0x10010bf0
 void Vector2::DivImpl(const float& p_value)
 {
 	m_data[0] /= p_value;
@@ -49,6 +55,7 @@ void Vector2::DivImpl(const float& p_value)
 }
 
 // FUNCTION: LEGO1 0x10002040
+// FUNCTION: BETA10 0x10010c50
 float Vector2::DotImpl(const float* p_a, const float* p_b) const
 {
 	return p_b[0] * p_a[0] + p_b[1] * p_a[1];
@@ -62,30 +69,35 @@ void Vector2::SetData(float* p_data)
 }
 
 // FUNCTION: LEGO1 0x10002070
+// FUNCTION: BETA10 0x10010cc0
 void Vector2::EqualsImpl(const float* p_data)
 {
 	memcpy(m_data, p_data, sizeof(float) * 2);
 }
 
 // FUNCTION: LEGO1 0x10002090
+// FUNCTION: BETA10 0x10010d00
 float* Vector2::GetData()
 {
 	return m_data;
 }
 
 // FUNCTION: LEGO1 0x100020a0
+// FUNCTION: BETA10 0x10010d30
 const float* Vector2::GetData() const
 {
 	return m_data;
 }
 
 // FUNCTION: LEGO1 0x100020b0
+// FUNCTION: BETA10 0x10010d60
 void Vector2::Clear()
 {
 	memset(m_data, 0, sizeof(float) * 2);
 }
 
 // FUNCTION: LEGO1 0x100020d0
+// FUNCTION: BETA10 0x10010da0
 float Vector2::Dot(const float* p_a, const float* p_b) const
 {
 	return DotImpl(p_a, p_b);
@@ -99,18 +111,21 @@ float Vector2::Dot(const Vector2& p_a, const Vector2& p_b) const
 }
 
 // FUNCTION: LEGO1 0x10002110
+// FUNCTION: BETA10 0x10010de0
 float Vector2::Dot(const float* p_a, const Vector2& p_b) const
 {
 	return DotImpl(p_a, p_b.m_data);
 }
 
 // FUNCTION: LEGO1 0x10002130
+// FUNCTION: BETA10 0x10010e20
 float Vector2::Dot(const Vector2& p_a, const float* p_b) const
 {
 	return DotImpl(p_a.m_data, p_b);
 }
 
 // FUNCTION: LEGO1 0x10002150
+// FUNCTION: BETA10 0x10010e60
 float Vector2::LenSquared() const
 {
 	return m_data[0] * m_data[0] + m_data[1] * m_data[1];
@@ -123,9 +138,9 @@ int Vector2::Unitize()
 	float sq = LenSquared();
 
 	if (sq > 0.0f) {
-		float root = sqrt(sq);
-		if (root > 0.0f) {
-			DivImpl(root);
+		sq = sqrt(sq);
+		if (sq > 0.0f) {
+			DivImpl(sq);
 			return 0;
 		}
 	}
@@ -134,60 +149,70 @@ int Vector2::Unitize()
 }
 
 // FUNCTION: LEGO1 0x100021c0
+// FUNCTION: BETA10 0x10010eb0
 void Vector2::operator+=(float p_value)
 {
 	AddImpl(p_value);
 }
 
 // FUNCTION: LEGO1 0x100021d0
+// FUNCTION: BETA10 0x10010ee0
 void Vector2::operator+=(const float* p_other)
 {
 	AddImpl(p_other);
 }
 
 // FUNCTION: LEGO1 0x100021e0
+// FUNCTION: BETA10 0x10010f10
 void Vector2::operator+=(const Vector2& p_other)
 {
 	AddImpl(p_other.m_data);
 }
 
 // FUNCTION: LEGO1 0x100021f0
+// FUNCTION: BETA10 0x10010f50
 void Vector2::operator-=(const float* p_other)
 {
 	SubImpl(p_other);
 }
 
 // FUNCTION: LEGO1 0x10002200
+// FUNCTION: BETA10 0x10010f80
 void Vector2::operator-=(const Vector2& p_other)
 {
 	SubImpl(p_other.m_data);
 }
 
 // FUNCTION: LEGO1 0x10002210
+// FUNCTION: BETA10 0x10010fc0
 void Vector2::operator*=(const float* p_other)
 {
 	MulImpl(p_other);
 }
 
 // FUNCTION: LEGO1 0x10002220
+// FUNCTION: BETA10 0x10010ff0
 void Vector2::operator*=(const Vector2& p_other)
 {
 	MulImpl(p_other.m_data);
 }
 
 // FUNCTION: LEGO1 0x10002230
+// FUNCTION: BETA10 0x10011030
 void Vector2::operator*=(const float& p_value)
 {
 	MulImpl(p_value);
 }
 
 // FUNCTION: LEGO1 0x10002240
+// FUNCTION: BETA10 0x10011060
 void Vector2::operator/=(const float& p_value)
 {
 	DivImpl(p_value);
 }
 
 // FUNCTION: LEGO1 0x10002250
+// FUNCTION: BETA10 0x10011090
 void Vector2::operator=(const float* p_other)
 {
 	EqualsImpl(p_other);
diff --git a/LEGO1/realtime/vector3d.inl.h b/LEGO1/realtime/vector3d.inl.h
index 517b777f..9e7c17ae 100644
--- a/LEGO1/realtime/vector3d.inl.h
+++ b/LEGO1/realtime/vector3d.inl.h
@@ -20,26 +20,29 @@ void Vector3::EqualsCross(const Vector3& p_a, const Vector3& p_b)
 }
 
 // FUNCTION: LEGO1 0x100022e0
+// FUNCTION: BETA10 0x10011470
 void Vector3::EqualsCross(const Vector3& p_a, const float* p_b)
 {
 	EqualsCrossImpl(p_a.m_data, p_b);
 }
 
 // FUNCTION: LEGO1 0x10002300
+// FUNCTION: BETA10 0x100114b0
 void Vector3::EqualsCross(const float* p_a, const Vector3& p_b)
 {
 	EqualsCrossImpl(p_a, p_b.m_data);
 }
 
 // FUNCTION: LEGO1 0x10003a60
+// FUNCTION: BETA10 0x10011100
 void Vector3::AddImpl(const float* p_value)
 {
-	m_data[0] += p_value[0];
-	m_data[1] += p_value[1];
+	Vector2::AddImpl(p_value);
 	m_data[2] += p_value[2];
 }
 
 // FUNCTION: LEGO1 0x10003a90
+// FUNCTION: BETA10 0x10011150
 void Vector3::AddImpl(float p_value)
 {
 	m_data[0] += p_value;
@@ -48,41 +51,42 @@ void Vector3::AddImpl(float p_value)
 }
 
 // FUNCTION: LEGO1 0x10003ac0
+// FUNCTION: BETA10 0x100111c0
 void Vector3::SubImpl(const float* p_value)
 {
-	m_data[0] -= p_value[0];
-	m_data[1] -= p_value[1];
+	Vector2::SubImpl(p_value);
 	m_data[2] -= p_value[2];
 }
 
 // FUNCTION: LEGO1 0x10003af0
+// FUNCTION: BETA10 0x10011210
 void Vector3::MulImpl(const float* p_value)
 {
-	m_data[0] *= p_value[0];
-	m_data[1] *= p_value[1];
+	Vector2::MulImpl(p_value);
 	m_data[2] *= p_value[2];
 }
 
 // FUNCTION: LEGO1 0x10003b20
+// FUNCTION: BETA10 0x10011260
 void Vector3::MulImpl(const float& p_value)
 {
-	m_data[0] *= p_value;
-	m_data[1] *= p_value;
+	Vector2::MulImpl(p_value);
 	m_data[2] *= p_value;
 }
 
 // FUNCTION: LEGO1 0x10003b50
+// FUNCTION: BETA10 0x100112b0
 void Vector3::DivImpl(const float& p_value)
 {
-	m_data[0] /= p_value;
-	m_data[1] /= p_value;
+	Vector2::DivImpl(p_value);
 	m_data[2] /= p_value;
 }
 
 // FUNCTION: LEGO1 0x10003b80
+// FUNCTION: BETA10 0x10011300
 float Vector3::DotImpl(const float* p_a, const float* p_b) const
 {
-	return p_a[0] * p_b[0] + p_a[2] * p_b[2] + p_a[1] * p_b[1];
+	return p_a[0] * p_b[0] + p_a[1] * p_b[1] + p_a[2] * p_b[2];
 }
 
 // FUNCTION: LEGO1 0x10003ba0
@@ -107,6 +111,7 @@ float Vector3::LenSquared() const
 }
 
 // FUNCTION: LEGO1 0x10003bf0
+// FUNCTION: BETA10 0x100115a0
 void Vector3::Fill(const float& p_value)
 {
 	m_data[0] = p_value;
diff --git a/LEGO1/realtime/vector4d.inl.h b/LEGO1/realtime/vector4d.inl.h
index 7bfce62d..c26ecf46 100644
--- a/LEGO1/realtime/vector4d.inl.h
+++ b/LEGO1/realtime/vector4d.inl.h
@@ -7,15 +7,15 @@
 #include <memory.h>
 
 // FUNCTION: LEGO1 0x10002870
+// FUNCTION: BETA10 0x10048500
 void Vector4::AddImpl(const float* p_value)
 {
-	m_data[0] += p_value[0];
-	m_data[1] += p_value[1];
-	m_data[2] += p_value[2];
+	Vector3::AddImpl(p_value);
 	m_data[3] += p_value[3];
 }
 
 // FUNCTION: LEGO1 0x100028b0
+// FUNCTION: BETA10 0x10048550
 void Vector4::AddImpl(float p_value)
 {
 	m_data[0] += p_value;
@@ -25,54 +25,53 @@ void Vector4::AddImpl(float p_value)
 }
 
 // FUNCTION: LEGO1 0x100028f0
+// FUNCTION: BETA10 0x100485e0
 void Vector4::SubImpl(const float* p_value)
 {
-	m_data[0] -= p_value[0];
-	m_data[1] -= p_value[1];
-	m_data[2] -= p_value[2];
+	Vector3::SubImpl(p_value);
 	m_data[3] -= p_value[3];
 }
 
 // FUNCTION: LEGO1 0x10002930
+// FUNCTION: BETA10 0x10048630
 void Vector4::MulImpl(const float* p_value)
 {
-	m_data[0] *= p_value[0];
-	m_data[1] *= p_value[1];
-	m_data[2] *= p_value[2];
+	Vector3::MulImpl(p_value);
 	m_data[3] *= p_value[3];
 }
 
 // FUNCTION: LEGO1 0x10002970
+// FUNCTION: BETA10 0x10048680
 void Vector4::MulImpl(const float& p_value)
 {
-	m_data[0] *= p_value;
-	m_data[1] *= p_value;
-	m_data[2] *= p_value;
+	Vector3::MulImpl(p_value);
 	m_data[3] *= p_value;
 }
 
 // FUNCTION: LEGO1 0x100029b0
+// FUNCTION: BETA10 0x100486d0
 void Vector4::DivImpl(const float& p_value)
 {
-	m_data[0] /= p_value;
-	m_data[1] /= p_value;
-	m_data[2] /= p_value;
+	Vector3::DivImpl(p_value);
 	m_data[3] /= p_value;
 }
 
 // FUNCTION: LEGO1 0x100029f0
+// FUNCTION: BETA10 0x10048720
 float Vector4::DotImpl(const float* p_a, const float* p_b) const
 {
 	return p_a[0] * p_b[0] + p_a[2] * p_b[2] + (p_a[1] * p_b[1] + p_a[3] * p_b[3]);
 }
 
 // FUNCTION: LEGO1 0x10002a20
+// FUNCTION: BETA10 0x100487c0
 void Vector4::EqualsImpl(const float* p_data)
 {
 	memcpy(m_data, p_data, sizeof(float) * 4);
 }
 
 // FUNCTION: LEGO1 0x10002a40
+// FUNCTION: BETA10 0x10048800
 void Vector4::SetMatrixProduct(const float* p_vec, const float* p_mat)
 {
 	m_data[0] = p_vec[0] * p_mat[0] + p_vec[1] * p_mat[4] + p_vec[2] * p_mat[8] + p_vec[3] * p_mat[12];
@@ -82,24 +81,28 @@ void Vector4::SetMatrixProduct(const float* p_vec, const float* p_mat)
 }
 
 // FUNCTION: LEGO1 0x10002ae0
+// FUNCTION: BETA10 0x10048960
 void Vector4::SetMatrixProduct(const Vector4& p_a, const float* p_b)
 {
 	SetMatrixProduct(p_a.m_data, p_b);
 }
 
 // FUNCTION: LEGO1 0x10002b00
+// FUNCTION: BETA10 0x100489a0
 void Vector4::Clear()
 {
 	memset(m_data, 0, sizeof(float) * 4);
 }
 
 // FUNCTION: LEGO1 0x10002b20
+// FUNCTION: BETA10 0x100489e0
 float Vector4::LenSquared() const
 {
 	return m_data[1] * m_data[1] + m_data[0] * m_data[0] + m_data[2] * m_data[2] + m_data[3] * m_data[3];
 }
 
 // FUNCTION: LEGO1 0x10002b40
+// FUNCTION: BETA10 0x10048a60
 void Vector4::Fill(const float& p_value)
 {
 	m_data[0] = p_value;