diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index d2a56f65dd705a20cd23963ea9d930da5798b499..5e2e374df65727a51af2d73023872ae1f211659b 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2812,7 +2812,7 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
 
-		LLFloaterCamera::toPrevModeIfInAvatarViewMode();
+		LLFloaterCamera::onLeavingMouseLook();
 
 		// Only pop if we have pushed...
 		if (TRUE == mViewsPushed)
@@ -2915,10 +2915,6 @@ void LLAgent::endAnimationUpdateUI()
 		// JC - Added for always chat in third person option
 		gFocusMgr.setKeyboardFocus(NULL);
 
-		//Making sure Camera Controls floater is in the right state 
-		//when entering Mouse Look using wheel scrolling
-		LLFloaterCamera::updateIfNotInAvatarViewMode();
-
 		LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);
 
 		mViewsPushed = TRUE;
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index 764aff68c9156b94140af6329e729a953ff3475c..9496e947803d3d4db8f48dd419ab7928263337e4 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -144,6 +144,11 @@ void  LLPanelCameraZoom::onSliderValueChanged()
 	mSavedSliderVal = val;
 }
 
+void activate_camera_tool()
+{
+	LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
+};
+
 //
 // Member functions
 //
@@ -151,7 +156,7 @@ void  LLPanelCameraZoom::onSliderValueChanged()
 /*static*/ bool LLFloaterCamera::inFreeCameraMode()
 {
 	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
-	if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA)
+	if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK)
 	{
 		return true;
 	}
@@ -177,27 +182,17 @@ void LLFloaterCamera::update()
 }
 
 
-/*static*/ void LLFloaterCamera::updateIfNotInAvatarViewMode()
-{
-	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
-	if (floater_camera && !floater_camera->inAvatarViewMode()) 
-	{
-		floater_camera->update();
-	}
-}
-
-
 void LLFloaterCamera::toPrevMode()
 {
 	switchMode(mPrevMode);
 }
 
-/*static*/ void LLFloaterCamera::toPrevModeIfInAvatarViewMode()
+/*static*/ void LLFloaterCamera::onLeavingMouseLook()
 {
 	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
-	if (floater_camera && floater_camera->inAvatarViewMode())
+	if (floater_camera && floater_camera->inFreeCameraMode())
 	{
-		floater_camera->toPrevMode();
+		activate_camera_tool();
 	}
 }
 
@@ -325,7 +320,7 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)
 		break;
 
 	case CAMERA_CTRL_MODE_FREE_CAMERA:
-		LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
+		activate_camera_tool();
 		break;
 
 	case CAMERA_CTRL_MODE_AVATAR_VIEW:
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index 5d44b4944d0ac91ea768bb4c5e9e5744144a5fbd..45d5e9a845a8b9079d6aff94a79c4027df52f2f3 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -61,7 +61,7 @@ class LLFloaterCamera
 	/* callback for camera presets changing */
 	static void onClickCameraPresets(const LLSD& param);
 
-	static void toPrevModeIfInAvatarViewMode();
+	static void onLeavingMouseLook();
 
 	/** resets current camera mode to orbit mode */
 	static void resetCameraMode();
@@ -69,8 +69,6 @@ class LLFloaterCamera
 	/* determines actual mode and updates ui */
 	void update();
 	
-	static void updateIfNotInAvatarViewMode();
-
 	virtual void onOpen(const LLSD& key);
 	virtual void onClose(bool app_quitting);