diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index c7eb60e18696aeb48220c86e60ccfb620cffda2f..d3c1ba764b8f62aac01105d80c09c9108a4ebbeb 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -524,7 +524,11 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
 	{
 		LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
 		if (camera_floater)
-		camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
+		{
+			camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
+			camera_floater->updateItemsSelection();
+			camera_floater->fromFreeToPresets();
+		}
 	}
 	else
 	{
@@ -533,13 +537,6 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
 			camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
 		switchToPreset(name);
 	}
-
-	LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
-	if (camera_floater)
-	{
-		camera_floater->updateItemsSelection();
-		camera_floater->fromFreeToPresets();
-	}
 }
 
 /*static*/
@@ -547,20 +544,33 @@ void LLFloaterCamera::switchToPreset(const std::string& name)
 {
 	sFreeCamera = false;
 	clear_camera_tool();
-	if ("rear_view" == name)
+	if (PRESETS_REAR_VIEW == name)
 	{
 		gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
-		LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_REAR_VIEW);
 	}
-	else if ("group_view" == name)
+	else if (PRESETS_SIDE_VIEW == name)
 	{
 		gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
-		LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_SIDE_VIEW);
 	}
-	else if ("front_view" == name)
+	else if (PRESETS_FRONT_VIEW == name)
 	{
 		gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
-		LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_FRONT_VIEW);
+	}
+	else
+	{
+		gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM);
+	}
+	
+	if (gSavedSettings.getString("PresetCameraActive") != name)
+	{
+		LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name);
+	}
+
+	LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
+	if (camera_floater)
+	{
+		camera_floater->updateItemsSelection();
+		camera_floater->fromFreeToPresets();
 	}
 }
 
@@ -609,11 +619,8 @@ void LLFloaterCamera::onSavePreset()
 void LLFloaterCamera::onCustomPresetSelected()
 {
 	std::string selected_preset = mPresetCombo->getSelectedItemLabel();
-	if (gSavedSettings.getString("PresetCameraActive") != selected_preset && getString("inactive_combo_text") != selected_preset)
+	if (getString("inactive_combo_text") != selected_preset)
 	{
-		gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM);
-		updateItemsSelection();
-		fromFreeToPresets();
-		LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, selected_preset);
+		switchToPreset(selected_preset);
 	}
 }
diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp
index 1ac105e1c80462d8c01b08372e1d851042ad0935..ae3d182f09f7106c300922613c7847e7d438952a 100644
--- a/indra/newview/llpanelpresetscamerapulldown.cpp
+++ b/indra/newview/llpanelpresetscamerapulldown.cpp
@@ -33,6 +33,7 @@
 
 #include "llbutton.h"
 #include "lltabcontainer.h"
+#include "llfloatercamera.h"
 #include "llfloaterreg.h"
 #include "llfloaterpreference.h"
 #include "llpresetsmanager.h"
@@ -185,7 +186,7 @@ void LLPanelPresetsCameraPulldown::onRowClick(const LLSD& user_data)
 			std::string name = item->getColumn(1)->getValue().asString();
 
             LL_DEBUGS() << "selected '" << name << "'" << LL_ENDL;
-			LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name);
+			LLFloaterCamera::switchToPreset(name);
 
 			setVisible(FALSE);
 		}
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 9408e68c2d45ec42af93905ff4c38ce6867f640a..60461c5743c8edef80a383c751a810373061e9cf 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -151,7 +151,7 @@
       width="30">
       <panel_camera_item.mousedown_callback
         function="CameraPresets.ChangeView"
-        parameter="front_view" />
+        parameter="Front View" />
       <panel_camera_item.picture
         image_name="Cam_Preset_Front_Off" />
       <panel_camera_item.selected_picture
@@ -164,7 +164,7 @@
       left_pad="4">
       <panel_camera_item.mousedown_callback
         function="CameraPresets.ChangeView"
-        parameter="group_view" />
+        parameter="Side View" />
       <panel_camera_item.picture
         image_name="Cam_Preset_Side_Off" />
       <panel_camera_item.selected_picture
@@ -178,7 +178,7 @@
       <panel_camera_item.mousedown_callback
         function="CameraPresets.ChangeView"
         tool_tip="Rear View"
-        parameter="rear_view" />
+        parameter="Rear View" />
       <panel_camera_item.picture
         image_name="Cam_Preset_Back_Off" />
       <panel_camera_item.selected_picture