diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 1603ff0a541bc7b64c81ed79300ae68a7f9fe953..a0574211355421e20c8cff34c4ccc875a5946270 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -168,7 +168,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 
 	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml");
 
-	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraPresets, _2));
+	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
 
 	//this is to fix a crash that occurs because LLBottomTray is a singleton
 	//and thus is deleted at the end of the viewers lifetime, but to be cleanly
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index d84ebef1ddfe839609ad2a8e89d34a11a091e9bc..ca346138fb5e2ec518af5c4910cd79fe2aaf77b8 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -47,15 +47,19 @@
 #include "lltoolfocus.h"
 #include "llslider.h"
 
+static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item");
+
 // Constants
 const F32 CAMERA_BUTTON_DELAY = 0.0f;
 
 #define ORBIT "cam_rotate_stick"
 #define PAN "cam_track_stick"
 #define ZOOM "zoom"
-#define PRESETS "camera_presets"
+#define PRESETS "preset_views_list"
 #define CONTROLS "controls"
 
+bool LLFloaterCamera::sFreeCamera = false;
+
 // Zoom the camera in and out
 class LLPanelCameraZoom
 :	public LLPanel
@@ -78,6 +82,68 @@ class LLPanelCameraZoom
 	LLSlider*	mSlider;
 };
 
+LLPanelCameraItem::Params::Params()
+:	icon_over("icon_over"),
+	icon_selected("icon_selected"),
+	picture("picture"),
+	text("text"),
+	selected_picture("selected_picture"),
+	mousedown_callback("mousedown_callback")
+{
+}
+
+LLPanelCameraItem::LLPanelCameraItem(const LLPanelCameraItem::Params& p)
+:	LLPanel(p)
+{
+	LLIconCtrl::Params icon_params = p.picture;
+	mPicture = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+	addChild(mPicture);
+
+	icon_params = p.icon_over;
+	mIconOver = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+	addChild(mIconOver);
+
+	icon_params = p.icon_selected;
+	mIconSelected = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+	addChild(mIconSelected);
+
+	icon_params = p.selected_picture;
+	mPictureSelected = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+	addChild(mPictureSelected);
+
+	LLTextBox::Params text_params = p.text;
+	mText = LLUICtrlFactory::create<LLTextBox>(text_params);
+	addChild(mText);
+
+	if (p.mousedown_callback.isProvided())
+	{
+		setCommitCallback(initCommitCallback(p.mousedown_callback));
+	}
+}
+
+BOOL LLPanelCameraItem::postBuild()
+{
+	setMouseEnterCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", true));
+	setMouseLeaveCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", false));
+	setMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this));
+	setRightMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this));
+	return TRUE;
+}
+
+void LLPanelCameraItem::onAnyMouseClick()
+{
+	if (mCommitSignal) (*mCommitSignal)(this, LLSD());
+}
+
+void LLPanelCameraItem::setValue(const LLSD& value)
+{
+	if (!value.isMap()) return;;
+	if (!value.has("selected")) return;
+	childSetVisible("selected_icon", value["selected"]);
+	childSetVisible("picture", !value["selected"]);
+	childSetVisible("selected_picture", value["selected"]);
+}
+
 static LLRegisterPanelClassWrapper<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel");
 
 //-------------------------------------------------------------------------------
@@ -153,16 +219,11 @@ void activate_camera_tool()
 	return false;
 }
 
-bool LLFloaterCamera::inAvatarViewMode()
-{
-	return mCurrMode == CAMERA_CTRL_MODE_AVATAR_VIEW;
-}
-
 void LLFloaterCamera::resetCameraMode()
 {
 	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
 	if (!floater_camera) return;
-	floater_camera->switchMode(CAMERA_CTRL_MODE_ORBIT);
+	floater_camera->switchMode(CAMERA_CTRL_MODE_PAN);
 }
 
 void LLFloaterCamera::update()
@@ -180,9 +241,13 @@ void LLFloaterCamera::toPrevMode()
 /*static*/ void LLFloaterCamera::onLeavingMouseLook()
 {
 	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
-	if (floater_camera && floater_camera->inFreeCameraMode())
+	if (floater_camera)
 	{
-		activate_camera_tool();
+		floater_camera->updateItemsSelection();
+		if(floater_camera->inFreeCameraMode())
+		{
+			activate_camera_tool();
+		}
 	}
 }
 
@@ -216,24 +281,24 @@ void LLFloaterCamera::onClose(bool app_quitting)
 	//We don't care of camera mode if app is quitting
 	if(app_quitting)
 		return;
-	// When mCurrMode is in CAMERA_CTRL_MODE_ORBIT
+	// When mCurrMode is in CAMERA_CTRL_MODE_PAN
 	// switchMode won't modify mPrevMode, so force it here.
 	// It is needed to correctly return to previous mode on open, see EXT-2727.
-	if (mCurrMode == CAMERA_CTRL_MODE_ORBIT)
-		mPrevMode = CAMERA_CTRL_MODE_ORBIT;
+	if (mCurrMode == CAMERA_CTRL_MODE_PAN)
+		mPrevMode = CAMERA_CTRL_MODE_PAN;
 
 	// HACK: Should always close as docked to prevent toggleInstance without calling onOpen.
 	if ( !isDocked() )
 		setDocked(true);
-	switchMode(CAMERA_CTRL_MODE_ORBIT);
+	switchMode(CAMERA_CTRL_MODE_PAN);
 	mClosed = TRUE;
 }
 
 LLFloaterCamera::LLFloaterCamera(const LLSD& val)
 :	LLTransientDockableFloater(NULL, true, val),
 	mClosed(FALSE),
-	mCurrMode(CAMERA_CTRL_MODE_ORBIT),
-	mPrevMode(CAMERA_CTRL_MODE_ORBIT)
+	mCurrMode(CAMERA_CTRL_MODE_PAN),
+	mPrevMode(CAMERA_CTRL_MODE_PAN)
 {
 }
 
@@ -247,16 +312,32 @@ BOOL LLFloaterCamera::postBuild()
 	mZoom = getChild<LLPanelCameraZoom>(ZOOM);
 	mTrack = getChild<LLJoystickCameraTrack>(PAN);
 
-	assignButton2Mode(CAMERA_CTRL_MODE_ORBIT,			"orbit_btn");
+	assignButton2Mode(CAMERA_CTRL_MODE_MODES,			"avatarview_btn");
 	assignButton2Mode(CAMERA_CTRL_MODE_PAN,				"pan_btn");
-	assignButton2Mode(CAMERA_CTRL_MODE_FREE_CAMERA,		"freecamera_btn");
-	assignButton2Mode(CAMERA_CTRL_MODE_AVATAR_VIEW,		"avatarview_btn");
+	assignButton2Mode(CAMERA_CTRL_MODE_PRESETS,		"presets_btn");
 
 	update();
 
 	return LLDockableFloater::postBuild();
 }
 
+void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel)
+{
+	// copying child list and then iterating over a copy, because list itself
+	// is changed in process
+	const child_list_t child_list = *panel->getChildList();
+	child_list_t::const_reverse_iterator iter = child_list.rbegin();
+	child_list_t::const_reverse_iterator end = child_list.rend();
+	for ( ; iter != end; ++iter)
+	{
+		LLView* view = *iter;
+		LLPanel* item = dynamic_cast<LLPanel*>(view);
+		if (panel)
+			list->addItem(item);
+	}
+
+}
+
 ECameraControlMode LLFloaterCamera::determineMode()
 {
 	LLTool* curr_tool = LLToolMgr::getInstance()->getCurrentTool();
@@ -267,10 +348,10 @@ ECameraControlMode LLFloaterCamera::determineMode()
 
 	if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
 	{
-		return CAMERA_CTRL_MODE_AVATAR_VIEW;
+		return CAMERA_CTRL_MODE_PRESETS;
 	}
 
-	return CAMERA_CTRL_MODE_ORBIT;
+	return CAMERA_CTRL_MODE_PAN;
 }
 
 
@@ -301,21 +382,16 @@ void LLFloaterCamera::setModeTitle(const ECameraControlMode mode)
 	std::string title; 
 	switch(mode)
 	{
-	case CAMERA_CTRL_MODE_ORBIT:
-		title = getString("orbit_mode_title");
+	case CAMERA_CTRL_MODE_MODES:
+		title = getString("camera_modes_title");
 		break;
 	case CAMERA_CTRL_MODE_PAN:
 		title = getString("pan_mode_title");
 		break;
-	case CAMERA_CTRL_MODE_AVATAR_VIEW:
-		title = getString("avatar_view_mode_title");
-		break;
-	case CAMERA_CTRL_MODE_FREE_CAMERA:
-		title = getString("free_mode_title");
+	case CAMERA_CTRL_MODE_PRESETS:
+		title = getString("presets_mode_title");
 		break;
 	default:
-		// title should be provided for all modes
-		llassert(false);
 		break;
 	}
 	setTitle(title);
@@ -327,19 +403,28 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)
 
 	switch (mode)
 	{
-	case CAMERA_CTRL_MODE_ORBIT:
-		clear_camera_tool();
+	case CAMERA_CTRL_MODE_MODES:
+		if(sFreeCamera)
+		{
+			switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
+		}
 		break;
 
 	case CAMERA_CTRL_MODE_PAN:
+		sFreeCamera = false;
 		clear_camera_tool();
 		break;
 
 	case CAMERA_CTRL_MODE_FREE_CAMERA:
+		sFreeCamera = true;
 		activate_camera_tool();
 		break;
 
-	case CAMERA_CTRL_MODE_AVATAR_VIEW:
+	case CAMERA_CTRL_MODE_PRESETS:
+		if(sFreeCamera)
+		{
+			switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
+		}
 		break;
 
 	default:
@@ -368,66 +453,80 @@ void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::stri
 
 void LLFloaterCamera::updateState()
 {
+	childSetVisible(ZOOM, CAMERA_CTRL_MODE_PAN == mCurrMode);
+	
+	bool show_presets = (CAMERA_CTRL_MODE_PRESETS == mCurrMode) || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
+																	&& CAMERA_CTRL_MODE_PRESETS == mPrevMode);
+	childSetVisible(PRESETS, show_presets);
+	
+	bool show_camera_modes = CAMERA_CTRL_MODE_MODES == mCurrMode || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
+																	&& CAMERA_CTRL_MODE_MODES == mPrevMode);
+	childSetVisible("camera_modes_list", show_camera_modes);
+
+	updateItemsSelection();
+
+	if (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode)
+	{
+		return;
+	}
+
 	//updating buttons
 	std::map<ECameraControlMode, LLButton*>::const_iterator iter = mMode2Button.begin();
 	for (; iter != mMode2Button.end(); ++iter)
 	{
 		iter->second->setToggleState(iter->first == mCurrMode);
 	}
-
-	childSetVisible(ORBIT, CAMERA_CTRL_MODE_ORBIT == mCurrMode);
-	childSetVisible(PAN, CAMERA_CTRL_MODE_PAN == mCurrMode);
-	childSetVisible(ZOOM, CAMERA_CTRL_MODE_AVATAR_VIEW != mCurrMode);
-	childSetVisible(PRESETS, CAMERA_CTRL_MODE_AVATAR_VIEW == mCurrMode);
-
-	updateCameraPresetButtons();
 	setModeTitle(mCurrMode);
-
-
-	//hiding or showing the panel with controls by reshaping the floater
-	bool showControls = CAMERA_CTRL_MODE_FREE_CAMERA != mCurrMode;
-	if (showControls == childIsVisible(CONTROLS)) return;
-
-	childSetVisible(CONTROLS, showControls);
-
-	LLRect rect = getRect();
-	LLRect controls_rect;
-	if (childGetRect(CONTROLS, controls_rect))
-	{
-		S32 floater_header_size = getHeaderHeight();
-		S32 height = controls_rect.getHeight() - floater_header_size;
-		S32 newHeight = rect.getHeight();
-		
-		if (showControls)
-		{
-			newHeight += height;
-		}
-		else
-		{
-			newHeight -= height;
-		}
-
-		rect.setOriginAndSize(rect.mLeft, rect.mBottom, rect.getWidth(), newHeight);
-		reshape(rect.getWidth(), rect.getHeight());
-		setRect(rect);
-
-	}
 }
 
-void LLFloaterCamera::updateCameraPresetButtons()
+void LLFloaterCamera::updateItemsSelection()
 {
 	ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
-	
-	childSetValue("rear_view",		preset == CAMERA_PRESET_REAR_VIEW);
-	childSetValue("group_view",		preset == CAMERA_PRESET_GROUP_VIEW);
-	childSetValue("front_view",		preset == CAMERA_PRESET_FRONT_VIEW);
-	childSetValue("mouselook_view",	gAgentCamera.cameraMouselook());
+	LLSD argument;
+	argument["selected"] = preset == CAMERA_PRESET_REAR_VIEW;
+	getChild<LLPanelCameraItem>("rear_view")->setValue(argument);
+	argument["selected"] = preset == CAMERA_PRESET_GROUP_VIEW;
+	getChild<LLPanelCameraItem>("group_view")->setValue(argument);
+	argument["selected"] = preset == CAMERA_PRESET_FRONT_VIEW;
+	getChild<LLPanelCameraItem>("front_view")->setValue(argument);
+	argument["selected"] = gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK;
+	getChild<LLPanelCameraItem>("mouselook_view")->setValue(argument);
+	argument["selected"] = mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA;
+	getChild<LLPanelCameraItem>("object_view")->setValue(argument);
 }
 
-void LLFloaterCamera::onClickCameraPresets(const LLSD& param)
+void LLFloaterCamera::onClickCameraItem(const LLSD& param)
 {
 	std::string name = param.asString();
 
+	if ("mouselook_view" == name)
+	{
+		gAgentCamera.changeCameraToMouselook();
+	}
+	else if ("object_view" == name)
+	{
+		LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
+		if (camera_floater)
+		camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
+	}
+	else
+	{
+		switchToPreset(name);
+	}
+
+	LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
+	if (camera_floater)
+	{
+		camera_floater->updateItemsSelection();
+		camera_floater->fromFreeToPresets();
+	}
+}
+
+/*static*/
+void LLFloaterCamera::switchToPreset(const std::string& name)
+{
+	sFreeCamera = false;
+	clear_camera_tool();
 	if ("rear_view" == name)
 	{
 		gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
@@ -440,12 +539,12 @@ void LLFloaterCamera::onClickCameraPresets(const LLSD& param)
 	{
 		gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
 	}
-	else if ("mouselook_view" == name)
+}
+
+void LLFloaterCamera::fromFreeToPresets()
+{
+	if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)
 	{
-		gAgentCamera.changeCameraToMouselook();
+		switchMode(CAMERA_CTRL_MODE_PRESETS);
 	}
-
-	LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
-	if (camera_floater)
-		camera_floater->updateCameraPresetButtons();
 }
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index b268839165d6f3ec161b433c3a9af3a0dad3024f..8fa7a539968a9a7c395132c93ca2d42afaef32c5 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -34,6 +34,9 @@
 #define LLFLOATERCAMERA_H
 
 #include "lltransientdockablefloater.h"
+#include "lliconctrl.h"
+#include "lltextbox.h"
+#include "llflatlistview.h"
 
 class LLJoystickCameraRotate;
 class LLJoystickCameraZoom;
@@ -43,10 +46,10 @@ class LLPanelCameraZoom;
 
 enum ECameraControlMode
 {
-	CAMERA_CTRL_MODE_ORBIT,
+	CAMERA_CTRL_MODE_MODES,
 	CAMERA_CTRL_MODE_PAN,
 	CAMERA_CTRL_MODE_FREE_CAMERA,
-	CAMERA_CTRL_MODE_AVATAR_VIEW
+	CAMERA_CTRL_MODE_PRESETS
 };
 
 class LLFloaterCamera
@@ -58,8 +61,8 @@ class LLFloaterCamera
 
 	/* whether in free camera mode */
 	static bool inFreeCameraMode();
-	/* callback for camera presets changing */
-	static void onClickCameraPresets(const LLSD& param);
+	/* callback for camera items selection changing */
+	static void onClickCameraItem(const LLSD& param);
 
 	static void onLeavingMouseLook();
 
@@ -68,7 +71,14 @@ class LLFloaterCamera
 
 	/* determines actual mode and updates ui */
 	void update();
-	
+
+	/*switch to one of the camera presets (front, rear, side)*/
+	static void switchToPreset(const std::string& name);
+
+	/* move to CAMERA_CTRL_MODE_PRESETS from CAMERA_CTRL_MODE_FREE_CAMERA if we are on presets panel and
+	   are not in free camera mode*/
+	void fromFreeToPresets();
+
 	virtual void onOpen(const LLSD& key);
 	virtual void onClose(bool app_quitting);
 
@@ -88,9 +98,6 @@ class LLFloaterCamera
 
 	ECameraControlMode determineMode();
 
-	/* whether in avatar view (first person) mode */
-	bool inAvatarViewMode();
-
 	/* resets to the previous mode */
 	void toPrevMode();
 
@@ -106,18 +113,59 @@ class LLFloaterCamera
 	/* updates the state (UI) according to the current mode */
 	void updateState();
 
-	/* update camera preset buttons toggle state according to the currently selected preset */
-	void updateCameraPresetButtons();
+	/* update camera modes items selection and camera preset items selection according to the currently selected preset */
+	void updateItemsSelection();
 
 	void onClickBtn(ECameraControlMode mode);
 	void assignButton2Mode(ECameraControlMode mode, const std::string& button_name);
 	
+	// fills flatlist with items from given panel
+	void fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel);
 
+	// set to true when free camera mode is selected in modes list
+	// remains true until preset camera mode is chosen, or pan button is clicked, or escape pressed
+	static bool sFreeCamera;
 	BOOL mClosed;
 	ECameraControlMode mPrevMode;
 	ECameraControlMode mCurrMode;
 	std::map<ECameraControlMode, LLButton*> mMode2Button;
+};
 
+/**
+ * Class used to represent widgets from panel_camera_item.xml- 
+ * panels that contain pictures and text. Pictures are different
+ * for selected and unselected state (this state is nor stored- icons
+ * are changed in setValue()). This class doesn't implement selection logic-
+ * it's items are used inside of flatlist.
+ */
+class LLPanelCameraItem 
+	: public LLPanel
+{
+public:
+	struct Params :	public LLInitParam::Block<Params, LLPanel::Params>
+	{
+		Optional<LLIconCtrl::Params> icon_over;
+		Optional<LLIconCtrl::Params> icon_selected;
+		Optional<LLIconCtrl::Params> picture;
+		Optional<LLIconCtrl::Params> selected_picture;
+
+		Optional<LLTextBox::Params> text;
+		Optional<CommitCallbackParam> mousedown_callback;
+		Params();
+	};
+	/*virtual*/ BOOL postBuild();
+	/** setting on/off background icon to indicate selected state */
+	/*virtual*/ void setValue(const LLSD& value);
+	// sends commit signal
+	void onAnyMouseClick();
+protected:
+	friend class LLUICtrlFactory;
+	LLPanelCameraItem(const Params&);
+	LLIconCtrl* mIconOver;
+	LLIconCtrl* mIconSelected;
+	LLIconCtrl* mPicture;
+	LLIconCtrl* mPictureSelected;
+	LLTextBox* mText;
 };
 
 #endif
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png
index 3cfe2e850e614f131b343dec26aa23b3542720c0..00158a7bc2fe1161f878c54bc416764e8621a9b7 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png
index bb5d85e4100c3865a7c0f0afa1f49e622defa49d..3748f5e190eacb6dbf8808690349c6828e6df380 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png
index 9876aa456cf1282e74a459ba3ec0173a9c1fc75b..c49b8f9a270236d9b70aaf875888b024aa5c9f99 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png
index f481fed88cbcf322624217a3aa058806cb4846db..bc8c4db04df3a265a78a6d12b1f58af77cedae5f 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png
index d58b4ff9904f774cad3344fecbf79b06e5350fb9..b919a0a1521f45f60ebdece329d2468d3aab4ef0 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png
index 6e7389899218710977c298873d66ecfbff197989..de9da359a0a5716b09a49f5b4c48866a9317268f 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d32cad95fb939c6bce8ba436fce064f022259dc
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c98e35868434bc7e3176d5c9c93fadbdd77e396
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9dea7e17e1e497897822c479520f517e3dc2bae
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_On.png b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a348ba22e3d89d134df3a5c3cdedf0ef6a945c9
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..20fa40e12757211edd6057663737e7e243e15087
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..53efa3a9a94ba314db32a0637c75e9b06cca2c1e
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1420e00027de1e0cdc32df8f91cae73373dba1f
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png
new file mode 100644
index 0000000000000000000000000000000000000000..89a6269edc1c70ed6a526853ff3fe444c708a69f
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 91890009f443e738f91f8f9253a9dc475d22cf11..57f23c7e76136b0b6c436573db8794fb82fa7c39 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -278,6 +278,9 @@ with the same filename but different name
 
   <texture name="menu_separator" file_name="navbar/FileMenu_Divider.png" scale.left="4" scale.top="166" scale.right="0" scale.bottom="0" />
 
+  <texture name="MouseLook_View_Off" file_name="bottomtray/MouseLook_view_off.png" preload="false" />
+  <texture name="MouseLook_View_On" file_name="bottomtray/MouseLook_view_on.png" preload="false" />
+
   <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" />
   <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" />
   <texture name="Move_Walk_Off" file_name="bottomtray/Move_Walk_Off.png" preload="false" />
@@ -338,10 +341,14 @@ with the same filename but different name
   <texture name="Object_Tube" file_name="build/Object_Tube.png" preload="false" />
   <texture name="Object_Tube_Selected" file_name="build/Object_Tube_Selected.png" preload="false" />
 
+  <texture name="Object_View_Off" file_name="bottomtray/Object_View_Off.png" preload="false" />
+  <texture name="Object_View_On" file_name="bottomtray/Object_View_On.png" preload="false" />
+
   <texture name="OptionsMenu_Disabled" file_name="icons/OptionsMenu_Disabled.png" preload="false" />
   <texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" />
   <texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" />
 
+  <texture name="PanOrbit_Off" file_name="bottomtray/PanOrbit_Off.png" preload="false" />
 
   <texture name="Parcel_Exp_Color" file_name="icons/Parcel_Exp_Color.png" preload="false" />
 
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 999cb9ed970f78b0305bb005eb1f29afe8d5928f..75b0457c90979b01bf0d14afb8ea2a9fa83aa4e2 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -1,267 +1,282 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_dock="true"
- can_minimize="true"
- can_close="false"
- follows="bottom"
- height="152"
- layout="topleft"
- name="camera_floater"
- help_topic="camera_floater"
- save_rect="true"
- save_visibility="true"
- save_dock_state="true"
- single_instance="true"
- width="150">
-    <floater.string
-     name="rotate_tooltip">
-        Rotate Camera Around Focus
-    </floater.string>
-    <floater.string
-     name="zoom_tooltip">
-        Zoom Camera Towards Focus
-    </floater.string>
-    <floater.string
-     name="move_tooltip">
-        Move Camera Up and Down, Left and Right
-    </floater.string>
-    <floater.string
-     name="orbit_mode_title">
-        Orbit
-    </floater.string>
-    <floater.string
-     name="pan_mode_title">
-        Pan
-    </floater.string>
-    <floater.string
-     name="avatar_view_mode_title">
-        Presets
-    </floater.string>
-    <floater.string
-     name="free_mode_title">
-        View Object
-    </floater.string>
-    <panel
-     border="false"
-     height="110"
-     layout="topleft"
-     left="2"
-     top="0"
-     mouse_opaque="false"
-     name="controls"
-     width="148">
-    <joystick_track
-         follows="top|left"
-         height="78"
-         image_selected="Cam_Tracking_In"
-         image_unselected="Cam_Tracking_Out"
-         layout="topleft"
-         left="45"
-         name="cam_track_stick"
-         quadrant="left"
-         scale_image="false"
-         sound_flags="3"
-         tool_tip="Move camera up and down, left and right"
-         top="22"
-         visible="false"
-         width="78" />
-         <!--TODO: replace + - images -->
-         <panel
-            border="false"
-            class="camera_zoom_panel"
-            height="94"
-            layout="topleft"
-            left="7"
-            mouse_opaque="false"
-            name="zoom"
-            top="22"
-            width="18">
-           <button
-              follows="top|left"
-              height="18"
-              image_disabled="AddItem_Disabled"
-              image_selected="AddItem_Press"
-              image_unselected="AddItem_Off"
-              layout="topleft"
-              name="zoom_plus_btn"
-              width="18">
-             <commit_callback
-                function="Zoom.plus" />
-             <mouse_held_callback
-                function="Zoom.plus" />
-           </button>
-           <slider_bar
-              height="48"
-              layout="topleft"
-              name="zoom_slider"
-              orientation="vertical"
-              tool_tip="Zoom camera toward focus"
-              top_pad="0"
-              min_val="0"
-              max_val="1" 
-              width="18">
-             <commit_callback function="Slider.value_changed"/>
-           </slider_bar>
-           <button
-              follows="top|left"
-              height="18"
-              image_disabled="MinusItem_Disabled"
-              image_selected="MinusItem_Press"
-              image_unselected="MinusItem_Off"
-              layout="topleft"
-              name="zoom_minus_btn"
-              top_pad="0"
-              width="18">
-             <commit_callback
-                function="Zoom.minus" />
-             <mouse_held_callback
-                function="Zoom.minus" />
-           </button>
-         </panel>
-         <joystick_rotate
-         follows="top|left"
-         height="78"
-         image_selected="Cam_Rotate_In"
-         image_unselected="Cam_Rotate_Out"
-         layout="topleft"
-         left="45"
-         mouse_opaque="false"
-         name="cam_rotate_stick"
-         quadrant="left"
-         scale_image="false"
-         sound_flags="3"
-         visible="true"
-         tool_tip="Orbit camera around focus"
-         top="22"
-         width="78" />
-         <panel
-         height="78"
-         layout="topleft"
-         left="36"
-         name="camera_presets"
-         top="20"
-         visible="false"
-         width="78">
-            <button
-             height="40"
-             image_selected="Cam_Preset_Back_On"
-             image_unselected="Cam_Preset_Back_Off"
-             is_toggle="true"
-             layout="topleft"
-             left="0"
-             name="rear_view"
-             tool_tip="Rear View"
-             top="2"
-             width="40">
-                <click_callback
-                 function="CameraPresets.ChangeView"
-                 parameter="rear_view" />
-            </button>
-            <button
-             height="40"
-             image_selected="Cam_Preset_Side_On"
-             image_unselected="Cam_Preset_Side_Off"
-             is_toggle="true"
-             layout="topleft"
-             left_pad="5"
-             name="group_view"
-             tool_tip="Group View"
-             top="2"
-             width="40">
-                <click_callback
-                 function="CameraPresets.ChangeView"
-                 parameter="group_view" />
-            </button>
-            <button
-             height="40"
-             image_selected="Cam_Preset_Front_On"
-             image_unselected="Cam_Preset_Front_Off"
-             is_toggle="true"
-             layout="topleft"
-             left="0"
-             name="front_view"
-             tool_tip="Front View"
-             top_pad="5"
-             width="40">
-                <click_callback
-                 function="CameraPresets.ChangeView"
-                 parameter="front_view" />
-            </button>
-            <button
-             height="40"
-             image_selected="Cam_Preset_Eye_Off"
-             image_unselected="Cam_Preset_Eye_Off"
-             is_toggle="true"
-             layout="topleft"
-             left_pad="5"
-             name="mouselook_view"
-             tool_tip="Mouselook View"
-             width="40">
-                <click_callback
-                 function="CameraPresets.ChangeView"
-                 parameter="mouselook_view" />
-            </button>
-        </panel>
-    </panel>
-    <panel
-     border="false"
-     height="42"
-     layout="topleft"
-     left="2"
-     top_pad="0"
-     name="buttons"
-     width="148">
-        <button
-         height="23"
-         label=""
-         layout="topleft"
-         left="23"
-         is_toggle="true"
-         image_overlay="Cam_Orbit_Off"
-         image_selected="PushButton_Selected_Press"
-         name="orbit_btn"
-         tab_stop="false"
-         tool_tip="Orbit camera"
-         width="25">
-        </button>
-        <button
-         height="23"
-         label=""
-         layout="topleft"
-         left_pad="0"
-         is_toggle="true"
-         image_overlay="Cam_Pan_Off"
-         image_selected="PushButton_Selected_Press"
-         name="pan_btn"
-         tab_stop="false"
-         tool_tip="Pan camera"
-         width="25">
-        </button>
-        <button
-         height="23"
-         label=""
-         layout="topleft"
-         left_pad="0"
-         image_overlay="Cam_Avatar_Off"
-         image_selected="PushButton_Selected_Press"
-         name="avatarview_btn"
-         tab_stop="false"
-         tool_tip="Presets"
-         width="25">
-        </button>
-        <button
-         height="23"
-         label=""
-         layout="topleft"
-         left_pad="0"
-         is_toggle="true"
-         image_overlay="Cam_FreeCam_Off"
-         image_selected="PushButton_Selected_Press"
-         name="freecamera_btn"
-         tab_stop="false"
-         tool_tip="View object"
-         width="25">
-        </button>
-    </panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_dock="true"
+ can_minimize="true"
+ can_close="false"
+ follows="bottom"
+ height="164"
+ layout="topleft"
+ name="camera_floater"
+ help_topic="camera_floater"
+ save_rect="true"
+ save_visibility="true"
+ save_dock_state="true"
+ single_instance="true"
+ width="228">
+    <floater.string
+     name="rotate_tooltip">
+        Rotate Camera Around Focus
+    </floater.string>
+    <floater.string
+     name="zoom_tooltip">
+        Zoom Camera Towards Focus
+    </floater.string>
+    <floater.string
+     name="move_tooltip">
+        Move Camera Up and Down, Left and Right
+    </floater.string>
+    <floater.string
+     name="camera_modes_title">
+        Camera modes
+    </floater.string>
+    <floater.string
+     name="pan_mode_title">
+       Orbit Zoom Pan
+    </floater.string>
+    <floater.string
+     name="presets_mode_title">
+        Preset Views
+    </floater.string>
+    <floater.string
+     name="free_mode_title">
+        View Object
+    </floater.string>
+    <panel
+     border="false"
+     height="123"
+     layout="topleft"
+     left="2"
+     top="0"
+     mouse_opaque="false"
+     name="controls"
+     width="226">
+       <panel
+         color="Transparent"
+         follows="all"
+         height="102"
+         layout="topleft"
+         left="8"
+         name="preset_views_list"
+         opaque="true"
+         top="24"
+         width="212"
+         visible="false">
+        <panel_camera_item
+          name="front_view">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="front_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Front_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Front_On" />
+          <panel_camera_item.text>
+            Front View
+          </panel_camera_item.text>
+        </panel_camera_item>
+        <panel_camera_item
+          name="group_view"
+          top_pad="4">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="group_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Side_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Side_On" />
+          <panel_camera_item.text>
+            Side View
+          </panel_camera_item.text>
+        </panel_camera_item>
+        <panel_camera_item
+          name="rear_view"
+          layout="topleft"
+          top_pad="4">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="rear_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Back_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Back_On" />
+          <panel_camera_item.text>
+            Rear View
+          </panel_camera_item.text>
+        </panel_camera_item>
+      </panel>
+      <panel
+          color="Transparent"
+          follows="all"
+          height="68"
+          item_pad="4"
+          layout="topleft"
+          left="8"
+          name="camera_modes_list"
+          opaque="true"
+          top="24"
+          width="212"
+          visible="false">
+        <panel_camera_item
+          name="object_view">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="object_view" />
+          <panel_camera_item.text>
+            Object View
+          </panel_camera_item.text>
+          <panel_camera_item.picture
+            image_name="Object_View_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Object_View_On" />
+        </panel_camera_item>
+        <panel_camera_item
+          name="mouselook_view"
+          layout="topleft">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="mouselook_view" />
+          <panel_camera_item.text>
+            Mouselook View
+          </panel_camera_item.text>
+          <panel_camera_item.picture
+            image_name="MouseLook_View_Off" />
+          <panel_camera_item.selected_picture
+            image_name="MouseLook_View_On" />
+        </panel_camera_item>
+      </panel>
+         <!--TODO: replace + - images -->
+         <panel
+            border="false"
+            class="camera_zoom_panel"
+            height="114"
+            layout="topleft"
+            left="0"
+            mouse_opaque="false"
+            name="zoom"
+            top="20"
+            width="226">
+           <joystick_rotate
+              follows="top|left"
+              height="78"
+              image_selected="Cam_Rotate_In"
+              image_unselected="Cam_Rotate_Out"
+              layout="topleft"
+              left="7"
+              mouse_opaque="false"
+              name="cam_rotate_stick"
+              quadrant="left"
+              scale_image="false"
+              sound_flags="3"
+              visible="true"
+              tool_tip="Orbit camera around focus"
+              top="20"
+              width="78" />                      
+           <button
+              follows="top|left"
+              height="18"
+              image_disabled="AddItem_Disabled"
+              image_selected="AddItem_Press"
+              image_unselected="AddItem_Off"
+              layout="topleft"
+              left_pad="14" 
+              name="zoom_plus_btn"
+              width="18"
+              top="18">
+             <commit_callback
+                function="Zoom.plus" />
+             <mouse_held_callback
+                function="Zoom.plus" />
+           </button>
+           <slider_bar
+              height="50"
+              layout="topleft"
+              name="zoom_slider"
+              orientation="vertical"
+              tool_tip="Zoom camera toward focus"
+              top_pad="0"
+              min_val="0"
+              max_val="1" 
+              width="18">
+             <commit_callback function="Slider.value_changed"/>
+           </slider_bar>
+           <button
+              follows="top|left"
+              height="18"
+              image_disabled="MinusItem_Disabled"
+              image_selected="MinusItem_Press"
+              image_unselected="MinusItem_Off"
+              layout="topleft"
+              name="zoom_minus_btn"
+              top_pad="0"
+              width="18">
+             <commit_callback
+                function="Zoom.minus" />
+             <mouse_held_callback
+                function="Zoom.minus" />
+           </button>
+         <joystick_track
+         follows="top|left"
+         height="78"
+         image_selected="Cam_Tracking_In"
+         image_unselected="Cam_Tracking_Out"
+         layout="topleft"
+         left="133"
+         name="cam_track_stick"
+         quadrant="left"
+         scale_image="false"
+         sound_flags="3"
+         tool_tip="Move camera up and down, left and right"
+         top="20"
+         width="78"/>
+        </panel>
+    </panel>
+    <panel
+     border="false"
+     height="42"
+     layout="topleft"
+     left="2"
+     top_pad="0"
+     name="buttons"
+     width="226">
+        <button
+         height="23"
+         label=""
+         layout="topleft"
+         left="70"
+         is_toggle="true"
+         image_overlay="Cam_Avatar_Off"
+         image_selected="PushButton_Selected_Press"
+         name="presets_btn"
+         tab_stop="false"
+         tool_tip="Preset Views"
+         top="13" 
+         width="25">
+        </button>
+        <button
+         height="23"
+         label=""
+         layout="topleft"
+         left_pad="1"
+         is_toggle="true"
+         image_overlay="PanOrbit_Off"
+         image_selected="PushButton_Selected_Press"
+         name="pan_btn"
+         tab_stop="false"
+         tool_tip="Orbit Zoom Pan"
+         width="25">
+        </button>
+        <button
+         height="23"
+         label=""
+         layout="topleft"
+         left_pad="1"
+         image_overlay="Cam_FreeCam_Off"
+         image_selected="PushButton_Selected_Press"
+         name="avatarview_btn"
+         tab_stop="false"
+         tool_tip="Camera modes"
+         width="25">
+        </button>
+    </panel>
+</floater>