diff --git a/src/core/AnimViewer.cpp b/src/core/AnimViewer.cpp
index c8d8cb56..b8354d93 100644
--- a/src/core/AnimViewer.cpp
+++ b/src/core/AnimViewer.cpp
@@ -49,7 +49,7 @@ CAnimViewer::Render(void) {
 		if (pTarget) {
 #ifdef FIX_BUGS
 #ifdef PED_SKIN
-			if(pTarget->IsPed())
+			if(pTarget->IsPed() && IsClumpSkinned(pTarget->GetClump()))
 				((CPed*)pTarget)->UpdateRpHAnim();
 #endif
 #endif
@@ -100,6 +100,9 @@ CAnimViewer::Initialise(void) {
 	CRadar::Initialise();
 	CRadar::LoadTextures();
 	CVehicleModelInfo::LoadVehicleColours();
+#ifdef FIX_BUGS
+	CVehicleModelInfo::LoadEnvironmentMaps();
+#endif
 	CAnimManager::LoadAnimFiles();
 	CWorld::PlayerInFocus = 0;
 	CWeapon::InitialiseWeapons();
@@ -294,7 +297,12 @@ CAnimViewer::Update(void)
 		if (pTarget->IsVehicle() || pTarget->IsPed() || pTarget->IsObject()) {
 			((CPhysical*)pTarget)->m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
 		}
+#ifdef FIX_BUGS
+		// so we don't end up in the water
+		pTarget->GetMatrix().GetPosition().z = 10.0f;
+#else
 		pTarget->GetMatrix().GetPosition().z = 0.0f;
+#endif
 
 		if (modelInfo->GetModelType() == MITYPE_PED) {
 			((CPed*)pTarget)->bKindaStayInSamePlace = true;
diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp
index 08ebbafd..b20e6db3 100644
--- a/src/core/Cam.cpp
+++ b/src/core/Cam.cpp
@@ -4014,6 +4014,12 @@ CCam::Process_ModelView(const CVector &CameraTarget, float, float, float)
 		Distance += CPad::GetPad(0)->GetLeftStickY()/1000.0f;
 	else
 		Distance += CPad::GetPad(0)->GetLeftStickY() * ((Distance - 10.0f)/20.0f + 1.0f) / 1000.0f;
+#ifdef IMPROVED_CAMERA
+	if(CPad::GetPad(0)->GetLeftMouse()){
+		Distance += DEGTORAD(CPad::GetPad(0)->GetMouseY()/2.0f);
+		Angle += DEGTORAD(CPad::GetPad(0)->GetMouseX()/2.0f);
+	}
+#endif
 	if(Distance < 1.5f)
 		Distance = 1.5f;