diff --git a/BuildParams b/BuildParams
index abeaebae984f95ca6f7c4beb8a2a5a64e0b8446a..4cf1fa75d82839785ca6fd4b26cc211145d7d730 100644
--- a/BuildParams
+++ b/BuildParams
@@ -43,6 +43,9 @@ viewer-beta.viewer_channel = "Second Life Beta Viewer"
 viewer-beta.login_channel = "Second Life Beta Viewer"
 viewer-beta.build_debug_release_separately = true
 viewer-beta.build_viewer_update_version_manager = true
+# Settings to test new code ticket service
+viewer-beta.codeticket_server_url = "http://pdp75.lindenlab.com:8000/codeticket/linden/"
+viewer-beta.codeticket_add_context = true
 
 # ========================================
 # Viewer Release
diff --git a/doc/contributions.txt b/doc/contributions.txt
index adfee2cce9c0885026d90ada659423e870e91328..d4e459039db0503334d2d4b05f288e24bb50795f 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -768,16 +768,16 @@ WolfPup Lowenhar
 	STORM-102
 	STORM-103
 	STORM-143
+	STORM-255
+	STORM-256
 	STORM-535
 	STORM-544
 	STORM-654
+	STORM-674
 	VWR-20741
 	VWR-20933
 Zai Lynch
 	VWR-19505
-Wolfpup Lowenhar
-	STORM-255
-	STORM-256
 Zarkonnen Decosta
 	VWR-253
 Zi Ree
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 3a45c79ec3322844b7d946e40bc43acb2da0c307..001a6a8851ae6d5ef36b65b3238caef25269bf08 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -56,7 +56,6 @@
 #include "llparcel.h"
 #include "llrendersphere.h"
 #include "llsdutil.h"
-#include "llsidetray.h"
 #include "llsky.h"
 #include "llsmoothstep.h"
 #include "llstartup.h"
@@ -1727,9 +1726,6 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLBottomTray::getInstance()->onMouselookModeOut();
 
-		LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
-		LLSideTray::getInstance()->updateSidetrayVisibility();
-
 		LLPanelStandStopFlying::getInstance()->setVisible(TRUE);
 
 		LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
@@ -1829,9 +1825,6 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLBottomTray::getInstance()->onMouselookModeIn();
 
-		LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
-		LLSideTray::getInstance()->updateSidetrayVisibility();
-
 		LLPanelStandStopFlying::getInstance()->setVisible(FALSE);
 
 		// clear out camera lag effect
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index e8e9f769128a24a38d7c206a70e0d3f3becf9838..220d33016a77664f78701b4009b85d42f45313e3 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -361,9 +361,7 @@ void LLFloaterPostcard::sendPostcard()
 	{
 		gAssetStorage->storeAssetData(mTransactionID, LLAssetType::AT_IMAGE_JPEG, &uploadCallback, (void *)this, FALSE);
 	}
-	
-	// give user feedback of the event
-	gViewerWindow->playSnapshotAnimAndSound();
+
 	LLUploadDialog::modalUploadDialog(getString("upload_message"));
 
 	// don't destroy the window until the upload is done
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index ac940f4f77596ac2b37b00449189142633049f51..6a7b5171b514c65ca892675fb14e64034b88d96b 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -283,6 +283,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	: LLFloater(key),
 	mGotPersonalInfo(false),
 	mOriginalIMViaEmail(false),
+	mLanguageChanged(false),
 	mDoubleClickActionDirty(false)
 {
 	//Build Floater is now Called from 	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
@@ -351,6 +352,8 @@ BOOL LLFloaterPreference::postBuild()
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
 	setCacheLocation(cache_location);
 
+	getChild<LLComboBox>("language_combobox")->setCommitCallback(boost::bind(&LLFloaterPreference::onLanguageChange, this));
+
 	// if floater is opened before login set default localized busy message
 	if (LLStartUp::getStartupState() < STATE_STARTED)
 	{
@@ -570,6 +573,9 @@ void LLFloaterPreference::onOpen(const LLSD& key)
 		getChildView("maturity_desired_combobox")->setVisible( false);
 	}
 
+	// Forget previous language changes.
+	mLanguageChanged = false;
+
 	// Display selected maturity icons.
 	onChangeMaturity();
 	
@@ -727,6 +733,18 @@ void LLFloaterPreference::onClickBrowserClearCache()
 	LLNotificationsUtil::add("ConfirmClearBrowserCache", LLSD(), LLSD(), callback_clear_browser_cache);
 }
 
+// Called when user changes language via the combobox.
+void LLFloaterPreference::onLanguageChange()
+{
+	// Let the user know that the change will only take effect after restart.
+	// Do it only once so that we're not too irritating.
+	if (!mLanguageChanged)
+	{
+		LLNotificationsUtil::add("ChangeLanguage");
+		mLanguageChanged = true;
+	}
+}
+
 void LLFloaterPreference::onClickSetCache()
 {
 	std::string cur_name(gSavedSettings.getString("CacheLocation"));
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 46f50d9a4d3f957e22459d927a0cdc634dbf03a4..bb871e7e25edddc2a7c061a8d5fa9cce1b018dab 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -83,6 +83,7 @@ class LLFloaterPreference : public LLFloater
 	void		onBtnApply();
 
 	void		onClickBrowserClearCache();
+	void		onLanguageChange();
 
 	// set value of "BusyResponseChanged" in account settings depending on whether busy response
 	// string differs from default after user changes.
@@ -158,6 +159,7 @@ class LLFloaterPreference : public LLFloater
 	bool mDoubleClickActionDirty;
 	bool mGotPersonalInfo;
 	bool mOriginalIMViaEmail;
+	bool mLanguageChanged;
 	
 	bool mOriginalHideOnlineStatus;
 	std::string mDirectoryVisibility;
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 51ee38bd653fa8fce994dc1d8c0105db04cd8ad2..d55272c5589ceda39c3f7d64d24c722eb4f69fc4 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -1004,7 +1004,6 @@ void LLSnapshotLivePreview::saveTexture()
 				    LLFloaterPerms::getEveryonePerms(),
 				    "Snapshot : " + pos_string,
 				    callback, expected_upload_cost, userdata);
-		gViewerWindow->playSnapshotAnimAndSound();
 	}
 	else
 	{
@@ -1026,10 +1025,6 @@ BOOL LLSnapshotLivePreview::saveLocal()
 	mDataSize = 0;
 	updateSnapshot(FALSE, FALSE);
 
-	if(success)
-	{
-		gViewerWindow->playSnapshotAnimAndSound();
-	}
 	return success;
 }
 
@@ -1049,8 +1044,6 @@ void LLSnapshotLivePreview::saveWeb()
 
 	LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgentCamera.getCameraPositionGlobal(),
 		boost::bind(&LLSnapshotLivePreview::regionNameCallback, this, jpg, metadata, _1, _2, _3, _4));
-
-	gViewerWindow->playSnapshotAnimAndSound();
 }
 
 void LLSnapshotLivePreview::regionNameCallback(LLImageJPEG* snapshot, LLSD& metadata, const std::string& name, S32 x, S32 y, S32 z)
@@ -1540,6 +1533,8 @@ void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)
 	if (previewp && view)
 	{
 		previewp->updateSnapshot(TRUE);
+
+		gViewerWindow->playSnapshotAnimAndSound();
 	}
 }
 
@@ -2209,6 +2204,8 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
 	gSnapshotFloaterView->setEnabled(TRUE);
 	gSnapshotFloaterView->setVisible(TRUE);
 	gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
+
+	gViewerWindow->playSnapshotAnimAndSound();
 }
 
 void LLFloaterSnapshot::onClose(bool app_quitting)
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 81b2fc0ae09a9fd9ceb870400f67fe1b089dec9e..a4f855f2792e6acb36dd981e49db4ea4ef6df006 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -1028,7 +1028,8 @@ void LLSideTray::arrange()
 	}
 
 	// The tab buttons should be shown only if there is at least one non-detached tab.
-	mButtonsPanel->setVisible(hasTabs());
+	// Also hide them in mouse-look mode.
+	mButtonsPanel->setVisible(hasTabs() && !gAgentCamera.cameraMouselook());
 }
 
 // Detach those tabs that were detached when the viewer exited last time.
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 4c23a1920b1e2f27ad7282db7ab71ffdf048c60f..3c572dde9545a7e64ce088175b590a3954543dd5 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -40,6 +40,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 {
 	friend class LLUICtrlFactory;
 	friend class LLDestroyClass<LLSideTray>;
+	friend class LLSideTrayTab;
+	friend class LLSideTrayButton;
 public:
 
 	LOG_CLASS(LLSideTray);
@@ -125,11 +127,6 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 		return panel;
 	}
 
-	/*
-	 * get currently active tab
-	 */
-    const LLSideTrayTab*	getActiveTab() const { return mActiveTab; }
-
 	/*
      * collapse SideBar, hiding visible tab and moving tab buttons
      * to the right corner of the screen
@@ -163,32 +160,28 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
     virtual BOOL postBuild();
 
-	void		onTabButtonClick(std::string name);
-	void		onToggleCollapse();
-
-	bool		addChild		(LLView* view, S32 tab_group);
-	bool		removeTab		(LLSideTrayTab* tab); // Used to detach tabs temporarily
-	bool		addTab			(LLSideTrayTab* tab); // Used to re-attach tabs
-
 	BOOL		handleMouseDown	(S32 x, S32 y, MASK mask);
 	
 	void		reshape			(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
-	void		processTriState ();
-	
+
 	void		updateSidetrayVisibility();
 
 	commit_signal_t& getCollapseSignal() { return mCollapseSignal; }
 
 	void		handleLoginComplete();
 
-	LLSideTrayTab* getTab		(const std::string& name);
-
 	bool 		isTabAttached	(const std::string& name);
 
 protected:
+	bool		addChild		(LLView* view, S32 tab_group);
+	bool		removeTab		(LLSideTrayTab* tab); // Used to detach tabs temporarily
+	bool		addTab			(LLSideTrayTab* tab); // Used to re-attach tabs
 	bool		hasTabs			();
 
+	const LLSideTrayTab*	getActiveTab() const { return mActiveTab; }
+	LLSideTrayTab* 			getTab(const std::string& name);
+
 	void		createButtons	();
 
 	LLButton*	createButton	(const std::string& name,const std::string& image,const std::string& tooltip,
@@ -196,11 +189,15 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	void		arrange			();
 	void		detachTabs		();
 	void		reflectCollapseChange();
+	void		processTriState ();
 
 	void		toggleTabButton	(LLSideTrayTab* tab);
 
 	LLPanel*	openChildPanel	(LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params);
 
+	void		onTabButtonClick(std::string name);
+	void		onToggleCollapse();
+
 private:
 	// Implementation of LLDestroyClass<LLSideTray>
 	static void destroyClass()
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 237aa39e6e6ce4bf07ef63c533e5bae51f825b77..048691696bb5cc3a18d30020569586e172eebd7f 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -404,8 +404,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
 									   gSavedSettings.getBOOL("RenderUIInSnapshot"),
 									   FALSE))
 		{
-			gViewerWindow->playSnapshotAnimAndSound();
-			
 			LLPointer<LLImageFormatted> formatted;
 			switch(LLFloaterSnapshot::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat")))
 			{
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 9536bf2cf70c8db5fa98f796dcc9ec84d6fa56cf..60b876d1635fa4fd0eb08a8088bad160e2ddcfb4 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -907,6 +907,13 @@ Port settings take effect after you restart [APP_NAME].
 The new skin will appear after you restart [APP_NAME].
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="ChangeLanguage"
+   type="alertmodal">
+Changing language will take effect after you restart [APP_NAME].
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="GoToAuctionPage"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 68c423d7dd65cfcf26c4f915c9c339c1050ccc93..6a8bf87bc56ad85a31cce7bdf72327d35b04f9cf 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -241,6 +241,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="options_gear_btn_panel"
+				       user_resize="false"
 				       width="32">
 				          <menu_button
 				           follows="bottom|left"
@@ -261,6 +262,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="add_btn_panel"
+				       user_resize="false"
 				       width="32">
 				          <button
 				           follows="bottom|left"
@@ -281,6 +283,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="dummy_panel"
+				       user_resize="false"
 				       width="212">
 				          <icon
 				           follows="bottom|left|right"
@@ -297,6 +300,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="trash_btn_panel"
+				       user_resize="false"
 				       width="31">
 				          <dnd_button
 				           follows="bottom|left"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 6dc419a96c2b095014ffc96d22f54fa1fc9f7e41..0c75399764aa627670c318bf3b19d5989d80f726 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -317,7 +317,7 @@
    layout="topleft"
    left="30"
    height="12"
-   name="bubble_chat"
+   name="floater_opacity"
    top_pad="15"
    width="120"
    >
@@ -355,7 +355,7 @@
    left="50"
    max_val="1.00"
    min_val="0.00"
-   name="active"
+   name="inactive"
    show_text="true"
    top_pad="5"
    width="415" />
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index 59daa26bf0eba63b646d0604d13eea89142bb98f..ea8bdd75b9fa53b0fd733949e301894f8bf60977 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -3469,7 +3469,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Rozmowa głosowa zakończona
 	</string>
 	<string name="conference-title-incoming">
-		Konferencja z  [AGENT_NAME]
+		Konferencja z [AGENT_NAME]
 	</string>
 	<string name="no_session_message">
 		(Sesja IM wygasła)