diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index 2c767a4857592ca7810ab0c2681e6dedbb270908..53830b1a141d257aa018f0b9017ba89ad33867af 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -85,10 +85,7 @@ LLInventoryObject::LLInventoryObject(const LLUUID& uuid,
 	mType(type),
 	mName(name)
 {
-	LLStringUtil::replaceNonstandardASCII(mName, ' ');
-	LLStringUtil::replaceChar(mName, '|', ' ');
-	LLStringUtil::trim(mName);
-	LLStringUtil::truncate(mName, DB_INV_ITEM_NAME_STR_LEN);
+	correctInventoryName(mName);
 }
 
 LLInventoryObject::LLInventoryObject() :
@@ -155,12 +152,8 @@ void LLInventoryObject::setUUID(const LLUUID& new_uuid)
 void LLInventoryObject::rename(const std::string& n)
 {
 	std::string new_name(n);
-	LLStringUtil::replaceNonstandardASCII(new_name, ' ');
-	LLStringUtil::replaceChar(new_name, '|', ' ');
-	LLStringUtil::trim(new_name);
-	LLStringUtil::truncate(new_name, DB_INV_ITEM_NAME_STR_LEN);
-
-	if( new_name != mName )
+	correctInventoryName(new_name);
+	if( !new_name.empty() && new_name != mName )
 	{
 		mName = new_name;
 	}
@@ -221,10 +214,7 @@ BOOL LLInventoryObject::importLegacyStream(std::istream& input_stream)
 				" %254s %254[^|]",
 				keyword, valuestr);
 			mName.assign(valuestr);
-			LLStringUtil::replaceNonstandardASCII(mName, ' ');
-			LLStringUtil::replaceChar(mName, '|', ' ');
-			LLStringUtil::trim(mName);
-			LLStringUtil::truncate(mName, DB_INV_ITEM_NAME_STR_LEN);
+			correctInventoryName(mName);
 		}
 		else
 		{
@@ -284,6 +274,15 @@ void LLInventoryObject::updateServer(BOOL) const
 	llwarns << "LLInventoryObject::updateServer() called.  Doesn't do anything." << llendl;
 }
 
+inline
+void LLInventoryObject::correctInventoryName(std::string& name)
+{
+	LLStringUtil::replaceNonstandardASCII(name, ' ');
+	LLStringUtil::replaceChar(name, '|', ' ');
+	LLStringUtil::trim(name);
+	LLStringUtil::truncate(name, DB_INV_ITEM_NAME_STR_LEN);
+}
+
 
 ///----------------------------------------------------------------------------
 /// Class LLInventoryItem
diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h
index b083e305b10f777f4fcd6ffee8d5fdd385e933db..4c6ac83ab8185ddf73c6593aa5dc61b4890551f7 100644
--- a/indra/llinventory/llinventory.h
+++ b/indra/llinventory/llinventory.h
@@ -92,9 +92,13 @@ class LLInventoryObject : public LLRefCount
 	void setParent(const LLUUID& new_parent);
 	void setType(LLAssetType::EType type);
 
+private:
+	// in place correction for inventory name string
+	void correctInventoryName(std::string& name);
+
 	//--------------------------------------------------------------------
 	// File Support
-	//   Implemented here so that a minimal information set can be transmitted 
+	//   Implemented here so that a minimal information set can be transmitted
 	//   between simulator and viewer.
 	//--------------------------------------------------------------------
 public:
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index d4000e92538f294499ab94bd0629406de4650f4f..dc76a4e5183ad137b5917aaa933d311b46c7369f 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -1,26 +1,26 @@
 <llsd>
     <map>
-    <key>BusyModeResponse</key>
+    <key>BusyResponseChanged</key>
         <map>
         <key>Comment</key>
-            <string>Auto response to instant messages while in busy mode.</string>
+            <string>Does user's busy mode message differ from default?</string>
         <key>Persist</key>
             <integer>1</integer>
         <key>Type</key>
-            <string>String</string>
+            <string>Boolean</string>
         <key>Value</key>
-            <string>The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed.  Your message will still be shown in their IM panel for later viewing.</string>
+            <integer>0</integer>
         </map>
-    <key>BusyModeResponse2</key>
+    <key>BusyModeResponse</key>
         <map>
         <key>Comment</key>
-            <string>Auto response to instant messages while in busy mode, clean (unencoded) version of BusyModeResponse</string>
+            <string>Auto response to instant messages while in busy mode.</string>
         <key>Persist</key>
             <integer>1</integer>
         <key>Type</key>
             <string>String</string>
         <key>Value</key>
-            <string>|TOKEN COPY BusyModeResponse|</string>
+            <string>The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed.  Your message will still be shown in their IM panel for later viewing.</string>
         </map>
     <key>InstantMessageLogPath</key>
         <map>
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index ca346138fb5e2ec518af5c4910cd79fe2aaf77b8..d6effb2b21d58a8eee624b13cd2efff8b09e7a61 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -49,6 +49,9 @@
 
 static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item");
 
+const F32 NUDGE_TIME = 0.25f;		// in seconds
+const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed
+
 // Constants
 const F32 CAMERA_BUTTON_DELAY = 0.0f;
 
@@ -75,6 +78,7 @@ class LLPanelCameraZoom
 	void	onZoomPlusHeldDown();
 	void	onZoomMinusHeldDown();
 	void	onSliderValueChanged();
+	F32		getOrbitRate(F32 time);
 
 private:
 	LLButton*	mPlusBtn;
@@ -155,8 +159,8 @@ LLPanelCameraZoom::LLPanelCameraZoom()
 	mMinusBtn( NULL ),
 	mSlider( NULL )
 {
-	mCommitCallbackRegistrar.add("Zoom.minus", boost::bind(&LLPanelCameraZoom::onZoomPlusHeldDown, this));
-	mCommitCallbackRegistrar.add("Zoom.plus", boost::bind(&LLPanelCameraZoom::onZoomMinusHeldDown, this));
+	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));
 }
 
@@ -179,9 +183,9 @@ void LLPanelCameraZoom::onZoomPlusHeldDown()
 	F32 val = mSlider->getValueF32();
 	F32 inc = mSlider->getIncrement();
 	mSlider->setValue(val - inc);
-	// commit only if value changed
-	if (val != mSlider->getValueF32())
-		mSlider->onCommit();
+	F32 time = mPlusBtn->getHeldDownTime();
+	gAgentCamera.unlockView();
+	gAgentCamera.setOrbitInKey(getOrbitRate(time));
 }
 
 void LLPanelCameraZoom::onZoomMinusHeldDown()
@@ -189,9 +193,22 @@ void LLPanelCameraZoom::onZoomMinusHeldDown()
 	F32 val = mSlider->getValueF32();
 	F32 inc = mSlider->getIncrement();
 	mSlider->setValue(val + inc);
-	// commit only if value changed
-	if (val != mSlider->getValueF32())
-		mSlider->onCommit();
+	F32 time = mMinusBtn->getHeldDownTime();
+	gAgentCamera.unlockView();
+	gAgentCamera.setOrbitOutKey(getOrbitRate(time));
+}
+
+F32 LLPanelCameraZoom::getOrbitRate(F32 time)
+{
+	if( time < NUDGE_TIME )
+	{
+		F32 rate = ORBIT_NUDGE_RATE + time * (1 - ORBIT_NUDGE_RATE)/ NUDGE_TIME;
+		return rate;
+	}
+	else
+	{
+		return 1;
+	}
 }
 
 void  LLPanelCameraZoom::onSliderValueChanged()
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index 8fa7a539968a9a7c395132c93ca2d42afaef32c5..564e38d02de1ed50137fe736cc0558c43ea50dbf 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -39,7 +39,6 @@
 #include "llflatlistview.h"
 
 class LLJoystickCameraRotate;
-class LLJoystickCameraZoom;
 class LLJoystickCameraTrack;
 class LLFloaterReg;
 class LLPanelCameraZoom;
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 5fbbb2c1a8d238e20fb69df4b5355271f717c920..2299cd719c49b6c4a8bcbd6a30cf9e36f4cddff2 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -330,9 +330,28 @@ BOOL LLFloaterPreference::postBuild()
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
 	childSetText("cache_location", cache_location);
 
+	// if floater is opened before login set default localized busy message
+	if (LLStartUp::getStartupState() < STATE_STARTED)
+	{
+		gSavedPerAccountSettings.setString("BusyModeResponse", LLTrans::getString("BusyModeResponseDefault"));
+	}
+
 	return TRUE;
 }
 
+void LLFloaterPreference::onBusyResponseChanged()
+{
+	// set "BusyResponseChanged" TRUE if user edited message differs from default, FALSE otherwise
+	if(LLTrans::getString("BusyModeResponseDefault") != getChild<LLUICtrl>("busy_response")->getValue().asString())
+	{
+		gSavedPerAccountSettings.setBOOL("BusyResponseChanged", TRUE );
+	}
+	else
+	{
+		gSavedPerAccountSettings.setBOOL("BusyResponseChanged", FALSE );
+	}
+}
+
 LLFloaterPreference::~LLFloaterPreference()
 {
 	// clean up user data
@@ -487,6 +506,22 @@ void LLFloaterPreference::cancel()
 
 void LLFloaterPreference::onOpen(const LLSD& key)
 {
+	// this variable and if that follows it are used to properly handle busy mode response message
+	static bool initialized = FALSE;
+	// if user is logged in and we haven't initialized busy_response yet, do it
+	if (!initialized && LLStartUp::getStartupState() == STATE_STARTED)
+	{
+		// Special approach is used for busy response localization, because "BusyModeResponse" is
+		// in non-localizable xml, and also because it may be changed by user and in this case it shouldn't be localized.
+		// To keep track of whether busy response is default or changed by user additional setting BusyResponseChanged
+		// was added into per account settings.
+
+		// initialization should happen once,so setting variable to TRUE
+		initialized = TRUE;
+		// this connection is needed to properly set "BusyResponseChanged" setting when user makes changes in
+		// busy response message.
+		gSavedPerAccountSettings.getControl("BusyModeResponse")->getSignal()->connect(boost::bind(&LLFloaterPreference::onBusyResponseChanged, this));
+	}
 	gAgent.sendAgentUserInfoRequest();
 
 	/////////////////////////// From LLPanelGeneral //////////////////////////
@@ -540,6 +575,16 @@ void LLFloaterPreference::onVertexShaderEnable()
 	refreshEnabledGraphics();
 }
 
+//static
+void LLFloaterPreference::initBusyResponse()
+	{
+		if (!gSavedPerAccountSettings.getBOOL("BusyResponseChanged"))
+		{
+			//LLTrans::getString("BusyModeResponseDefault") is used here for localization (EXT-5885)
+			gSavedPerAccountSettings.setString("BusyModeResponse", LLTrans::getString("BusyModeResponseDefault"));
+		}
+	}
+
 void LLFloaterPreference::setHardwareDefaults()
 {
 	LLFeatureManager::getInstance()->applyRecommendedSettings();
@@ -960,18 +1005,6 @@ void LLFloaterPreference::onChangeQuality(const LLSD& data)
 	refresh();
 }
 
-// static
-// DEV-24146 -  needs to be removed at a later date. jan-2009
-void LLFloaterPreference::cleanupBadSetting()
-{
-	if (gSavedPerAccountSettings.getString("BusyModeResponse2") == "|TOKEN COPY BusyModeResponse|")
-	{
-		llinfos << "cleaning old BusyModeResponse" << llendl;
-		//LLTrans::getString("BusyModeResponseDefault") is used here for localization (EXT-5885)
-		gSavedPerAccountSettings.setString("BusyModeResponse2", LLTrans::getString("BusyModeResponseDefault"));
-	}
-}
-
 void LLFloaterPreference::onClickSetKey()
 {
 	LLVoiceSetKeyDialog* dialog = LLFloaterReg::showTypedInstance<LLVoiceSetKeyDialog>("voice_set_key", LLSD(), TRUE);
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 71aa5d31895656a1af64767126377a7552c912ca..b45e09db7d382dd6cf2e6c1312a21ff9bca27d0d 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -80,6 +80,9 @@ class LLFloaterPreference : public LLFloater
 	// refresh all the graphics preferences menus
 	static void refreshEnabledGraphics();
 	
+	// translate user's busy response message according to current locale if message is default, otherwise do nothing
+	static void initBusyResponse();
+
 protected:	
 	void		onBtnOK();
 	void		onBtnCancel();
@@ -87,6 +90,9 @@ class LLFloaterPreference : public LLFloater
 
 	void		onClickBrowserClearCache();
 
+	// set value of "BusyResponseChanged" in account settings depending on whether busy response
+	// string differs from default after user changes.
+	void onBusyResponseChanged();
 	// if the custom settings box is clicked
 	void onChangeCustom();
 	void updateMeterText(LLUICtrl* ctrl);
@@ -140,7 +146,6 @@ class LLFloaterPreference : public LLFloater
 	
 	void buildPopupLists();
 	static void refreshSkin(void* data);
-	static void cleanupBadSetting();
 private:
 	static std::string sSkin;
 	bool mGotPersonalInfo;
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index 9e1dc3a4b0aee90174789ac1d10fc59ee9e38660..c2a1923dfe9dfd07cde25540cce844a827bf1d58 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -53,7 +53,6 @@
 static LLDefaultChildRegistry::Register<LLJoystickAgentSlide> r1("joystick_slide");
 static LLDefaultChildRegistry::Register<LLJoystickAgentTurn> r2("joystick_turn");
 static LLDefaultChildRegistry::Register<LLJoystickCameraRotate> r3("joystick_rotate");
-static LLDefaultChildRegistry::Register<LLJoystickCameraZoom> r4("joystick_zoom");
 static LLDefaultChildRegistry::Register<LLJoystickCameraTrack> r5("joystick_track");
 
 
@@ -647,155 +646,3 @@ void LLJoystickCameraTrack::onHeldDown()
 		gAgentCamera.setPanDownKey(getOrbitRate());
 	}
 }
-
-
-
-//-------------------------------------------------------------------------------
-// LLJoystickCameraZoom
-//-------------------------------------------------------------------------------
-
-LLJoystickCameraZoom::LLJoystickCameraZoom(const LLJoystickCameraZoom::Params& p)
-:	LLJoystick(p),
-	mInTop( FALSE ),
-	mInBottom( FALSE ),
-	mPlusInImage(p.plus_image),
-	mMinusInImage(p.minus_image)
-{
-}
-
-BOOL LLJoystickCameraZoom::handleMouseDown(S32 x, S32 y, MASK mask)
-{
-	BOOL handled = LLJoystick::handleMouseDown(x, y, mask);
-
-	if( handled )
-	{
-		if (mFirstMouse.mY > getRect().getHeight() / 2)
-		{
-			mInitialQuadrant = JQ_UP;
-		}
-		else
-		{
-			mInitialQuadrant = JQ_DOWN;
-		}
-	}
-	return handled;
-}
-
-
-void LLJoystickCameraZoom::onHeldDown()
-{
-	updateSlop();
-
-	const F32 FAST_RATE = 2.5f; // two and a half times the normal rate
-
-	S32 dy = mLastMouse.mY - mFirstMouse.mY + mInitialOffset.mY;
-
-	if (dy > mVertSlopFar)
-	{
-		// Zoom in fast
-		gAgentCamera.unlockView();
-		gAgentCamera.setOrbitInKey(FAST_RATE);
-	}
-	else if (dy > mVertSlopNear)
-	{
-		// Zoom in slow
-		gAgentCamera.unlockView();
-		gAgentCamera.setOrbitInKey(getOrbitRate());
-	}
-	else if (dy < -mVertSlopFar)
-	{
-		// Zoom out fast
-		gAgentCamera.unlockView();
-		gAgentCamera.setOrbitOutKey(FAST_RATE);
-	}
-	else if (dy < -mVertSlopNear)
-	{
-		// Zoom out slow
-		gAgentCamera.unlockView();
-		gAgentCamera.setOrbitOutKey(getOrbitRate());
-	}
-}
-
-// Only used for drawing
-void LLJoystickCameraZoom::setToggleState( BOOL top, BOOL bottom )
-{
-	mInTop = top;
-	mInBottom = bottom;
-}
-
-void LLJoystickCameraZoom::draw()
-{
-	if( mInTop )
-	{
-		mPlusInImage->draw(0,0);
-	}
-	else
-	if( mInBottom )
-	{
-		mMinusInImage->draw(0,0);
-	}
-	else
-	{
-		getImageUnselected()->draw( 0, 0 );
-	}
-}
-
-void LLJoystickCameraZoom::updateSlop()
-{
-	mVertSlopNear = getRect().getHeight() / 4;
-	mVertSlopFar = getRect().getHeight() / 2;
-
-	mHorizSlopNear = getRect().getWidth() / 4;
-	mHorizSlopFar = getRect().getWidth() / 2;
-
-	// Compute initial mouse offset based on initial quadrant.
-	// Place the mouse evenly between the near and far zones.
-	switch (mInitialQuadrant)
-	{
-	case JQ_ORIGIN:
-		mInitialOffset.set(0, 0);
-		break;
-
-	case JQ_UP:
-		mInitialOffset.mX = 0;
-		mInitialOffset.mY = (mVertSlopNear + mVertSlopFar) / 2;
-		break;
-
-	case JQ_DOWN:
-		mInitialOffset.mX = 0;
-		mInitialOffset.mY = - (mVertSlopNear + mVertSlopFar) / 2;
-		break;
-
-	case JQ_LEFT:
-		mInitialOffset.mX = - (mHorizSlopNear + mHorizSlopFar) / 2;
-		mInitialOffset.mY = 0;
-		break;
-
-	case JQ_RIGHT:
-		mInitialOffset.mX = (mHorizSlopNear + mHorizSlopFar) / 2;
-		mInitialOffset.mY = 0;
-		break;
-
-	default:
-		llerrs << "LLJoystick::LLJoystick() - bad switch case" << llendl;
-		break;
-	}
-
-	return;
-}
-
-
-F32 LLJoystickCameraZoom::getOrbitRate()
-{
-	F32 time = getElapsedHeldDownTime();
-	if( time < NUDGE_TIME )
-	{
-		F32 rate = ORBIT_NUDGE_RATE + time * (1 - ORBIT_NUDGE_RATE)/ NUDGE_TIME;
-//		llinfos << "rate " << rate << " time " << time << llendl;
-		return rate;
-	}
-	else
-	{
-		return 1;
-	}
-}
diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h
index 2b071a8999befd61cb7ba6face2f0183b81bc1dc..1dd30036ab125cbab155e671716b147d1947fbc4 100644
--- a/indra/newview/lljoystickbutton.h
+++ b/indra/newview/lljoystickbutton.h
@@ -183,44 +183,4 @@ class LLJoystickCameraTrack
 	virtual void	onHeldDown();
 };
 
-
-// Zoom the camera in and out
-class LLJoystickCameraZoom
-:	public LLJoystick
-{
-public:
-	struct Params 
-	:	public LLInitParam::Block<Params, LLJoystick::Params>
-	{
-		Optional<LLUIImage*>	plus_image;
-		Optional<LLUIImage*>	minus_image;
-
-		Params()
-		: plus_image ("plus_image", NULL),
-		  minus_image ("minus_image", NULL)
-		{
-			held_down_delay.seconds(0.0);
-		}
-	};
-	LLJoystickCameraZoom(const Params&);
-
-	virtual void	setToggleState( BOOL top, BOOL bottom );
-
-	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual void	onHeldDown();
-	virtual void	draw();
-
-protected:
-	virtual void updateSlop();
-	F32				getOrbitRate();
-
-protected:
-	BOOL			mInTop;
-	BOOL			mInBottom;
-	LLUIImagePtr	mPlusInImage;
-	LLUIImagePtr	mMinusInImage;
-};
-
-
-
 #endif  // LL_LLJOYSTICKBUTTON_H
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index e51e6363dd0567e2ecf179b82fe48ff74dc54bf1..fff80e57dc3942be024cd4913d82e108822ec834 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -781,9 +781,6 @@ bool idle_startup()
 		gViewerWindow->getWindow()->show();
 		display_startup();
 
-		//DEV-10530.  do cleanup.  remove at some later date.  jan-2009
-		LLFloaterPreference::cleanupBadSetting();
-
 		// DEV-16927.  The following code removes errant keystrokes that happen while the window is being 
 		// first made visible.
 #ifdef _WIN32
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 5836aff4e759a17e9988d355dc8ed99bf4d4ecda..b00fa39815c1b19096af386a5afd704910f9c52a 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2063,7 +2063,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				// initiated by the other party) then...
 				std::string my_name;
 				LLAgentUI::buildFullname(my_name);
-				std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
+				std::string response = gSavedPerAccountSettings.getString("BusyModeResponse");
 				pack_instant_message(
 					gMessageSystem,
 					gAgent.getID(),
@@ -2736,7 +2736,7 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id)
 	{
 		std::string my_name;
 		LLAgentUI::buildFullname(my_name);
-		std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
+		std::string response = gSavedPerAccountSettings.getString("BusyModeResponse");
 		pack_instant_message(
 			gMessageSystem,
 			gAgent.getID(),
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 83556452c07940ddbfc884817c5e9a83e3e4e704..0a65cb7330f45ea77f9f91f38b52da0e0874a71b 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1591,6 +1591,9 @@ void LLViewerWindow::initBase()
 	gDebugView->init();
 	gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view");
 
+	// Initialize busy response message when logged in
+	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLFloaterPreference::initBusyResponse));
+
 	// Add the progress bar view (startup view), which overrides everything
 	mProgressView = getRootView()->getChild<LLProgressView>("progress_view");
 	setShowProgress(FALSE);
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index 19fe2ea8749907254256152c5784fd5b62c394e5..6523b0d491742946c298e6aa4712f120cd79a7b2 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -74,16 +74,14 @@ Maximum 200 per group daily
     </text>
       <button
        follows="top|left"
-       height="18"
-       image_selected="AddItem_Press"
-       image_unselected="AddItem_Off"
-       image_disabled="AddItem_Disabled"
+       height="23"
+       image_overlay="AddItem_Off"
        layout="topleft"
        left="5"
        name="create_new_notice"
        tool_tip="Create a new notice"
-     top_delta="-3"
-       width="18" />
+       top_delta="-3"
+       width="23" />
      <button
      follows="top|left"
      height="23"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 1c68d59993da474e740fcc0165b3f1f5532b77df..a69e8d29b0a8807a7c19190d9827558c70cfa861 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -348,7 +348,7 @@
        Busy mode response:
     </text>
     <text_editor
-     control_name="BusyModeResponse2"
+     control_name="BusyModeResponse"
       text_readonly_color="LabelDisabledColor"
       bg_writeable_color="LtGray"
       use_ellipses="false"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index c816fd1479aa42736ce742e44b36588dc85ab2fe..b736f5e29c783f234b34567fee14caff6393e94f 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -395,7 +395,7 @@ top_pad="10"
 			    label_width="75"
 			    left="120"
 			    width="170"
-			    min_val="1"
+			    min_val="0"
 			    height="23"
 			    max_val="999999999"
 			    top_pad="10"/>