diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index aeff3d0de0647b432ba080590288167464b0bbe0..b68cb29faf8a308bf2beb64c8b10d5cb234ab1c7 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -81,11 +81,15 @@ class LLPanelCameraZoom
 	void	onCameraTrack();
 	void	onCameraRotate();
 	F32		getOrbitRate(F32 time);
+	void	onRollLeftHeldDown();
+	void	onRollRightHeldDown();
 
 private:
 	LLButton*	mPlusBtn;
 	LLButton*	mMinusBtn;
 	LLSlider*	mSlider;
+	LLButton*	mRollLeft;
+	LLButton*	mRollRight;
 };
 
 LLPanelCameraItem::Params::Params()
@@ -164,13 +168,17 @@ static LLPanelInjector<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel
 LLPanelCameraZoom::LLPanelCameraZoom()
 :	mPlusBtn( NULL ),
 	mMinusBtn( NULL ),
-	mSlider( NULL )
+	mSlider( NULL ),
+	mRollLeft( NULL ),
+	mRollRight( NULL )
 {
 	mCommitCallbackRegistrar.add("Zoom.minus", boost::bind(&LLPanelCameraZoom::onZoomMinusHeldDown, this));
 	mCommitCallbackRegistrar.add("Zoom.plus", boost::bind(&LLPanelCameraZoom::onZoomPlusHeldDown, this));
 	mCommitCallbackRegistrar.add("Slider.value_changed", boost::bind(&LLPanelCameraZoom::onSliderValueChanged, this));
 	mCommitCallbackRegistrar.add("Camera.track", boost::bind(&LLPanelCameraZoom::onCameraTrack, this));
 	mCommitCallbackRegistrar.add("Camera.rotate", boost::bind(&LLPanelCameraZoom::onCameraRotate, this));
+	mCommitCallbackRegistrar.add("Camera.roll_left", boost::bind(&LLPanelCameraZoom::onRollLeftHeldDown, this));
+	mCommitCallbackRegistrar.add("Camera.roll_right", boost::bind(&LLPanelCameraZoom::onRollRightHeldDown, this));
 }
 
 BOOL LLPanelCameraZoom::postBuild()
@@ -178,6 +186,8 @@ BOOL LLPanelCameraZoom::postBuild()
 	mPlusBtn  = getChild <LLButton> ("zoom_plus_btn");
 	mMinusBtn = getChild <LLButton> ("zoom_minus_btn");
 	mSlider   = getChild <LLSlider> ("zoom_slider");
+	mRollLeft	= getChild <LLButton> ("roll_left");
+	mRollRight	= getChild <LLButton> ("roll_right");
 	return LLPanel::postBuild();
 }
 
@@ -207,6 +217,20 @@ void LLPanelCameraZoom::onZoomMinusHeldDown()
 	gAgentCamera.setOrbitOutKey(getOrbitRate(time));
 }
 
+void LLPanelCameraZoom::onRollLeftHeldDown()
+{
+	F32 time = mRollLeft->getHeldDownTime();
+	gAgentCamera.unlockView();
+	gAgentCamera.setRollLeftKey(getOrbitRate(time));
+}
+
+void LLPanelCameraZoom::onRollRightHeldDown()
+{
+	F32 time = mRollRight->getHeldDownTime();
+	gAgentCamera.unlockView();
+	gAgentCamera.setRollRightKey(getOrbitRate(time));
+}
+
 void LLPanelCameraZoom::onCameraTrack()
 {
 	// EXP-202 when camera panning activated, remove the hint
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 26d0e8deea4162902022a735c0f00a1f7011cbf2..34694803f0378462f4fec8dd81221acfd460ee4d 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -123,8 +123,38 @@
               sound_flags="3"
               visible="true"
               tool_tip="Orbit camera around focus"
-              top="5"
-              width="78" />                      
+              top="3"
+              width="78" /> 
+           <button
+              follows="top|left"
+              height="18"
+              image_selected="VirtualTrackball_Rotate_Left_Active"
+              image_unselected="VirtualTrackball_Rotate_Left"
+              layout="topleft"
+              left_delta="0"
+              name="roll_left"
+              width="18"
+              top="66">
+             <commit_callback
+                function="Camera.roll_left" />
+             <mouse_held_callback
+                function="Camera.roll_left" />
+           </button>
+           <button
+              follows="top|left"
+              height="18"
+              image_selected="VirtualTrackball_Rotate_Right_Active"
+              image_unselected="VirtualTrackball_Rotate_Right"
+              layout="topleft"
+              left_delta="60"
+              name="roll_right"
+              width="18"
+              top="66">
+             <commit_callback
+                function="Camera.roll_right" />
+             <mouse_held_callback
+                function="Camera.roll_right" />
+           </button>                     
            <button
               follows="top|left"
               height="18"
@@ -180,7 +210,7 @@
          scale_image="false"
          sound_flags="3"
          tool_tip="Move camera up and down, left and right"
-         top="5"
+         top="3"
          width="78"/>
         </panel>
     </panel>