diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 3572d18860d165c1283b8bb787141f334e24e481..64fd14ecc9dae25f34b36205cbc4449912a063de 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -817,7 +817,7 @@ void LLButton::draw()
 		LLColor4 overlay_color = mImageOverlayColor.get();
 		if (!enabled)
 		{
-			overlay_color.mV[VALPHA] = 0.5f;
+			overlay_color.mV[VALPHA] = 0.3f;
 		}
 		else if (!getToggleState())
 		{
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index 6e39fcd714f3f19eb636466b8f64cd32300cec24..6397bbd0dec8dc0a95fea7a3585c8597bd6311d8 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -92,7 +92,7 @@ void LLDockControl::setDock(LLView* dockWidget)
 
 void LLDockControl::getAllowedRect(LLRect& rect)
 {
-	rect = mDockableFloater->getRootView()->getRect();
+	rect = mDockableFloater->getRootView()->getChild<LLView>("non_toolbar_panel")->getRect();
 }
 
 void LLDockControl::repositionDockable()
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index fa533e81532b4221e5cf916a2ad26ae1306c0e16..d1d840729d6538ed84da756814d285d8a6715663 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -3048,7 +3048,9 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
 			return FALSE;
 		}
 
-		parser.readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());
+		Params referenced_params;
+		parser.readXUI(referenced_xml, referenced_params, LLUICtrlFactory::getInstance()->getCurFileName());
+		params.fillFrom(referenced_params);
 
 		// add children using dimensions from referenced xml for consistent layout
 		setShape(params.rect);
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 97ccfeac29ee39567cc9b5c340da8aa27c61f905..4024e93b3311005025671405d49c4ee7b78e25ef 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -102,7 +102,6 @@ set(viewer_SOURCE_FILES
     llavatarlist.cpp
     llavatarlistitem.cpp
     llavatarpropertiesprocessor.cpp
-    llbottomtray.cpp
     llbox.cpp
     llbreadcrumbview.cpp
     llbrowsernotification.cpp
@@ -118,6 +117,7 @@ set(viewer_SOURCE_FILES
     llchatitemscontainerctrl.cpp
     llchatmsgbox.cpp
     llchiclet.cpp
+    llchicletbar.cpp
     llclassifiedinfo.cpp
     llclassifiedstatsresponder.cpp
     llcofwearables.cpp
@@ -448,7 +448,6 @@ set(viewer_SOURCE_FILES
     llsky.cpp
     llslurl.cpp
     llspatialpartition.cpp
-    llspeakbutton.cpp
     llspeakers.cpp
     llspeakingindicatormanager.cpp
     llsplitbutton.cpp
@@ -668,7 +667,6 @@ set(viewer_HEADER_FILES
     llavatarlist.h
     llavatarlistitem.h
     llavatarpropertiesprocessor.h
-    llbottomtray.h
     llbox.h
     llbreadcrumbview.h
     llbuycurrencyhtml.h
@@ -684,6 +682,7 @@ set(viewer_HEADER_FILES
     llchatitemscontainerctrl.h
     llchatmsgbox.h
     llchiclet.h
+    llchicletbar.h
     llclassifiedinfo.h
     llclassifiedstatsresponder.h
     llcofwearables.h
@@ -1009,7 +1008,6 @@ set(viewer_HEADER_FILES
     llsky.h
     llslurl.h
     llspatialpartition.h
-    llspeakbutton.h
     llspeakers.h
     llspeakingindicatormanager.h
     llsplitbutton.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index da2161c8deced8ef2086288707ca5769ebc61ba4..52aa2a3be397fbaecaa30bc56ddb08b3ae446731 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -619,7 +619,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://drofnas.components.pdp48.lindenlab.com/avatars.html</string>
+      <string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html</string>
     </map>
     <key>AvatarBakedTextureUploadTimeout</key>
     <map>
@@ -2717,7 +2717,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://drofnas.components.pdp48.lindenlab.com/guide.html</string>
+      <string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/guide.html</string>
     </map>
   <key>DisableCameraConstraints</key>
     <map>
@@ -4037,7 +4037,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/howto/index.html</string>
+      <string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/howto/index.html</string>
     </map>    
     <key>HomeSidePanelURL</key>
     <map>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 5fc95f123a7becb56fea10a918afdd620d995ea6..773e20eda700c3f45fdbd34b4cc2a30604ad7537 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -36,10 +36,10 @@
 #include "llagentwearables.h"
 #include "llagentui.h"
 #include "llanimationstates.h"
-#include "llbottomtray.h"
 #include "llcallingcard.h"
 #include "llcapabilitylistener.h"
 #include "llchannelmanager.h"
+#include "llchicletbar.h"
 #include "llconsole.h"
 #include "llenvmanager.h"
 #include "llfirstuse.h"
@@ -1876,7 +1876,7 @@ void LLAgent::endAnimationUpdateUI()
 			LLPanelTopInfoBar::getInstance()->setVisible(TRUE);
 		}
 
-		LLBottomTray::getInstance()->onMouselookModeOut();
+		LLChicletBar::getInstance()->setVisible(TRUE);
 
 		LLPanelStandStopFlying::getInstance()->setVisible(TRUE);
 
@@ -1985,7 +1985,7 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLPanelTopInfoBar::getInstance()->setVisible(FALSE);
 
-		LLBottomTray::getInstance()->onMouselookModeIn();
+		LLChicletBar::getInstance()->setVisible(FALSE);
 
 		LLPanelStandStopFlying::getInstance()->setVisible(FALSE);
 
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
deleted file mode 100644
index af91702f9b8888c0e7da596bf5609bd6ef529989..0000000000000000000000000000000000000000
--- a/indra/newview/llbottomtray.cpp
+++ /dev/null
@@ -1,1996 +0,0 @@
-/** 
- * @file llbottomtray.cpp
- * @brief LLBottomTray class implementation
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h" // must be first include
-
-#define LLBOTTOMTRAY_CPP
-#include "llbottomtray.h"
-
-// library includes
-#include "llfloaterreg.h"
-#include "llfloatersidepanelcontainer.h"
-#include "llflyoutbutton.h"
-#include "lllayoutstack.h"
-#include "llnotifications.h"
-#include "llnotificationsutil.h"
-#include "lltexteditor.h"
-
-// newview includes
-#include "llagent.h"
-#include "llagentcamera.h"
-#include "llavataractions.h"
-#include "llchiclet.h"
-#include "llfloatercamera.h"
-#include "llhints.h"
-#include "llimfloater.h" // for LLIMFloater
-#include "llnearbychatbar.h"
-#include "llnearbychatbarlistener.h"
-#include "llspeakbutton.h"
-#include "llsplitbutton.h"
-#include "llsyswellwindow.h"
-#include "lltoolmgr.h"
-#include "llviewerparcelmgr.h"
-
-#include "llviewerwindow.h"
-#include "llsdserialize.h"
-#include "llfirstuse.h"
-
-// Distance from mouse down on which drag'n'drop should be started.
-#define DRAG_START_DISTANCE 3
-
-static const std::string SORTING_DATA_FILE_NAME = "bottomtray_buttons_order.xml";
-
-LLDefaultChildRegistry::Register<LLBottomtrayButton> bottomtray_button("bottomtray_button");
-
-// LLBottomtrayButton methods
-
-// virtual
-BOOL LLBottomtrayButton::handleHover(S32 x, S32 y, MASK mask)
-{
-	if (mCanDrag)
-	{
-		// pass hover to bottomtray
-		S32 screenX, screenY;
-		localPointToScreen(x, y, &screenX, &screenY);
-		LLBottomTray::getInstance()->onDraggableButtonHover(screenX, screenY);
-
-		return TRUE;
-	}
-	else
-	{
-		return LLButton::handleHover(x, y, mask);
-	}
-}
-//virtual
-BOOL LLBottomtrayButton::handleMouseUp(S32 x, S32 y, MASK mask)
-{
-	if (mCanDrag)
-	{
-	S32 screenX, screenY;
-	localPointToScreen(x, y, &screenX, &screenY);
-	// pass mouse up to bottomtray
-	LLBottomTray::getInstance()->onDraggableButtonMouseUp(this, screenX, screenY);
-	}
-	return LLButton::handleMouseUp(x, y, mask);
-}
-//virtual
-BOOL LLBottomtrayButton::handleMouseDown(S32 x, S32 y, MASK mask)
-{
-	if (mCanDrag)
-	{
-	S32 screenX, screenY;
-	localPointToScreen(x, y, &screenX, &screenY);
-	// pass mouse up to bottomtray
-	LLBottomTray::getInstance()->onDraggableButtonMouseDown(this, screenX, screenY);
-	}
-	return LLButton::handleMouseDown(x, y, mask);
-}
-
-static void update_build_button_enable_state()
-{
-	bool can_edit = LLToolMgr::getInstance()->canEdit();
-
-	LLBottomTray::getInstance()->getChildView("build_btn")->setEnabled(can_edit);
-}
-
-// Build time optimization, generate extern template once in .cpp file
-template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance();
-
-namespace
-{
-	const std::string& PANEL_CHICLET_NAME	= "chiclet_list_panel";
-
-	S32 get_panel_min_width(LLLayoutStack* stack, LLView* panel)
-	{
-		S32 minimal_width = 0;
-		llassert(stack);
-		if ( stack && panel && panel->getVisible() )
-		{
-			stack->getPanelMinSize(panel->getName(), &minimal_width);
-		}
-		return minimal_width;
-	}
-
-	S32 get_panel_max_width(LLLayoutStack* stack, LLPanel* panel)
-	{
-		S32 max_width = 0;
-		llassert(stack);
-		if ( stack && panel && panel->getVisible() )
-		{
-			stack->getPanelMaxSize(panel->getName(), &max_width);
-		}
-		return max_width;
-	}
-
-	S32 get_curr_width(LLUICtrl* ctrl)
-	{
-		S32 cur_width = 0;
-		if ( ctrl && ctrl->getVisible() )
-		{
-			cur_width = ctrl->getRect().getWidth();
-		}
-		return cur_width;
-	}
-}
-
-class LLBottomTrayLite
-	: public LLPanel
-{
-public:
-	LLBottomTrayLite()
-		: mNearbyChatBar(NULL),
-		mChatBarContainer(NULL),
-		  mGesturePanel(NULL)
-	{
-		//mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
-		buildFromFile("panel_bottomtray_lite.xml");
-	}
-
-	BOOL postBuild()
-	{
-		//mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
-		mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");
-		mGesturePanel = getChild<LLPanel>("gesture_panel");
-
-		// Hide "show_nearby_chat" button 
-		if (mNearbyChatBar)
-		{
-			LLLineEditor* chat_box = mNearbyChatBar->getChatBox();
-			LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat");
-			S32 delta_width = show_btn->getRect().getWidth();
-			show_btn->setVisible(FALSE);
-			chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight());
-		}
-		return TRUE;
-	}
-
-	void onFocusLost()
-	{
-		if (gAgentCamera.cameraMouselook())
-		{
-			LLBottomTray::getInstance()->setVisible(FALSE);
-		}
-	}
-
-	LLNearbyChatBar*	mNearbyChatBar;
-	LLLayoutPanel*		mChatBarContainer;
-	LLPanel*			mGesturePanel;
-};
-
-LLBottomTray::LLBottomTray(const LLSD&)
-:	mDesiredNearbyChatWidth(0),
-	mChicletPanel(NULL),
-	mSpeakPanel(NULL),
-	mSpeakBtn(NULL),
-	mNearbyChatBar(NULL),
-	mChatBarContainer(NULL),
-	mNearbyCharResizeHandlePanel(NULL),
-	mToolbarStack(NULL),
-	mMovementButton(NULL),
-	mResizeState(RS_NORESIZE),
-	mBottomTrayContextMenu(NULL),
-	mCamButton(NULL),
-	mBottomTrayLite(NULL),
-	mIsInLiteMode(false),
-	mDragStarted(false),
-	mDraggedItem(NULL),
-	mLandingTab(NULL),
-	mCheckForDrag(false)
-{
-	// Firstly add our self to IMSession observers, so we catch session events
-	// before chiclets do that.
-	LLIMMgr::getInstance()->addSessionObserver(this);
-
-	//mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
-
-	buildFromFile("panel_bottomtray.xml");
-
-	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
-	//destroyed LLBottomTray requires some subsystems that are long gone
-	//LLUI::getRootView()->addChild(this);
-
-	{
-		mBottomTrayLite = new LLBottomTrayLite();
-		mBottomTrayLite->setFollowsAll();
-		mBottomTrayLite->setVisible(FALSE);
-	}
-
-	mImageDragIndication = LLUI::getUIImage(getString("DragIndicationImageName"));
-	mDesiredNearbyChatWidth = mNearbyChatBar ? mNearbyChatBar->getRect().getWidth() : 0;
-}
-
-LLBottomTray::~LLBottomTray()
-{
-	if (!LLSingleton<LLIMMgr>::destroyed())
-	{
-		LLIMMgr::getInstance()->removeSessionObserver(this);
-	}
-
-	if (mNearbyChatBar)
-	{
-		// store custom width of chatbar panel.
-		S32 custom_width = mChatBarContainer->getRect().getWidth();
-		gSavedSettings.setS32("ChatBarCustomWidth", custom_width);
-	}
-
-	// emulate previous floater behavior to be hidden on startup.
-	// override effect of save_visibility=true.
-	// this attribute is necessary to button.initial_callback=Button.SetFloaterToggle works properly:
-	//		i.g when floater changes its visibility - button changes its toggle state.
-	getChild<LLUICtrl>("build_btn")->setControlValue(false);
-	getChild<LLUICtrl>("search_btn")->setControlValue(false);
-	getChild<LLUICtrl>("world_map_btn")->setControlValue(false);
-}
-
-// *TODO Vadim: why void* ?
-void* LLBottomTray::createNearbyChatBar(void* userdata)
-{
-	//return new LLNearbyChatBar();
-	return NULL;
-}
-
-LLNearbyChatBar* LLBottomTray::getNearbyChatBar()
-{
-	return mIsInLiteMode ? mBottomTrayLite->mNearbyChatBar : mNearbyChatBar;
-}
-
-LLIMChiclet* LLBottomTray::createIMChiclet(const LLUUID& session_id)
-{
-	LLIMChiclet::EType im_chiclet_type = LLIMChiclet::getIMSessionType(session_id);
-
-	switch (im_chiclet_type)
-	{
-	case LLIMChiclet::TYPE_IM:
-		return getChicletPanel()->createChiclet<LLIMP2PChiclet>(session_id);
-	case LLIMChiclet::TYPE_GROUP:
-		return getChicletPanel()->createChiclet<LLIMGroupChiclet>(session_id);
-	case LLIMChiclet::TYPE_AD_HOC:
-		return getChicletPanel()->createChiclet<LLAdHocChiclet>(session_id);
-	case LLIMChiclet::TYPE_UNKNOWN:
-		break;
-	}
-
-	return NULL;
-}
-
-//virtual
-void LLBottomTray::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id)
-{
-	if (!getChicletPanel()) return;
-
-	LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
-	if (!session) return;
-
-	// no need to spawn chiclets for participants in P2P calls called through Avaline
-	if (session->isP2P() && session->isOtherParticipantAvaline()) return;
-
-	if (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return;
-
-	LLIMChiclet* chiclet = createIMChiclet(session_id);
-	if(chiclet)
-	{
-		chiclet->setIMSessionName(name);
-		chiclet->setOtherParticipantId(other_participant_id);
-		
-		LLIMFloater::onIMChicletCreated(session_id);
-
-	}
-	else
-	{
-		llerrs << "Could not create chiclet" << llendl;
-	}
-}
-
-//virtual
-void LLBottomTray::sessionRemoved(const LLUUID& session_id)
-{
-	if(getChicletPanel())
-	{
-		// IM floater should be closed when session removed and associated chiclet closed
-		LLIMFloater* iMfloater = LLFloaterReg::findTypedInstance<LLIMFloater>(
-				"impanel", session_id);
-		if (iMfloater != NULL)
-		{
-			iMfloater->closeFloater();
-		}
-
-		getChicletPanel()->removeChiclet(session_id);
-	}
-}
-
-void LLBottomTray::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id)
-{
-	//this is only needed in case of outgoing ad-hoc/group chat sessions
-	LLChicletPanel* chiclet_panel = getChicletPanel();
-	if (chiclet_panel)
-	{
-		//it should be ad-hoc im chiclet or group im chiclet
-		LLChiclet* chiclet = chiclet_panel->findChiclet<LLChiclet>(old_session_id);
-		if (chiclet) chiclet->setSessionId(new_session_id);
-	}
-}
-
-S32 LLBottomTray::getTotalUnreadIMCount()
-{
-	return getChicletPanel()->getTotalUnreadIMCount();
-}
-
-// virtual
-void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, bool proximal)
-{
-	// Time it takes to connect to voice channel might be pretty long,
-	// so don't expect user login or STATUS_VOICE_ENABLED to be followed by STATUS_JOINED.
-	BOOL enable = FALSE;
-
-	switch (status)
-	{
-	// Do not add STATUS_VOICE_ENABLED because voice chat is 
-	// inactive until STATUS_JOINED
-	case STATUS_JOINED:
-		enable = TRUE;
-		break;
-	default:
-		enable = FALSE;
-		break;
-	}
-
-	// We have to enable/disable right and left parts of speak button separately (EXT-4648)
-	getChild<LLButton>("speak_btn")->setEnabled(enable);
-
-	// skipped to avoid button blinking
-	if (status != STATUS_JOINING && status!= STATUS_LEFT_CHANNEL)
-	{
-		bool voice_status = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
-
-		gAgent.setVoiceConnected(voice_status);
-
-		getChild<LLButton>("speak_flyout_btn")->setEnabled(voice_status);
-		gMenuBarView->getChild<LLView>("Nearby Voice")->setEnabled(voice_status);
-		if (voice_status)
-		{
-			LLFirstUse::speak(true);
-		}
-	}
-}
-
-void LLBottomTray::onMouselookModeOut()
-{
-	mIsInLiteMode = false;
-	mBottomTrayLite->setVisible(FALSE);
-	//mNearbyChatBar->getChatBox()->setText(mBottomTrayLite->mNearbyChatBar->getChatBox()->getText());
-	setVisible(TRUE);
-}
-
-void LLBottomTray::onMouselookModeIn()
-{
-	setVisible(FALSE);
-
-	// Attach the lite bottom tray
-	if (getParent() && mBottomTrayLite->getParent() != getParent())
-		getParent()->addChild(mBottomTrayLite);
-
-	mBottomTrayLite->setShape(getLocalRect());
-	//mBottomTrayLite->mNearbyChatBar->getChatBox()->setText(mNearbyChatBar->getChatBox()->getText());
-	//mBottomTrayLite->mGesturePanel->setVisible(gSavedSettings.getBOOL("ShowGestureButton"));
-
-	mIsInLiteMode = true;
-}
-
-//virtual
-// setVisible used instead of onVisibilityChange, since LLAgent calls it on entering/leaving mouselook mode.
-// If bottom tray is already visible in mouselook mode, then onVisibilityChange will not be called from setVisible(true),
-void LLBottomTray::setVisible(BOOL visible)
-{
-	if (mIsInLiteMode)
-	{
-		mBottomTrayLite->setVisible(visible);
-	}
-	else 
-	{
-		LLPanel::setVisible(visible);
-	}
-}
-
-S32 LLBottomTray::notifyParent(const LLSD& info)
-{
-	if(info.has("well_empty")) // implementation of EXT-3397
-	{
-		const std::string chiclet_name = info["well_name"];
-
-		// only "im_well" or "notification_well" names are expected.
-		// They are set in panel_bottomtray.xml in <chiclet_im_well> & <chiclet_notification>
-		llassert("im_well" == chiclet_name || "notification_well" == chiclet_name);
-
-		BOOL should_be_visible = !info["well_empty"];
-		showWellButton("im_well" == chiclet_name ? RS_IM_WELL : RS_NOTIFICATION_WELL, should_be_visible);
-		return 1;
-	}
-
-	if (info.has("action") && info["action"] == "resize")
-	{
-		const std::string& name = info["view_name"];
-
-		// expected only resize of nearby chatbar
-		if (mChatBarContainer->getName() != name) return LLPanel::notifyParent(info);
-
-		const S32 new_width = info["new_width"];
-
-		processChatbarCustomization(new_width);
-
-		return 2;
-	}
-	return LLPanel::notifyParent(info);
-}
-
-void LLBottomTray::showBottomTrayContextMenu(S32 x, S32 y, MASK mask)
-{
-	// We should show BottomTrayContextMenu in last  turn
-	if (mBottomTrayContextMenu && !LLMenuGL::sMenuContainer->getVisibleMenu())
-	{
-		    //there are no other context menu (IM chiclet etc ), so we can show BottomTrayContextMenu
-
-		    updateContextMenu(x, y, mask);
-			mBottomTrayContextMenu->buildDrawLabels();
-			mBottomTrayContextMenu->updateParent(LLMenuGL::sMenuContainer);
-			LLMenuGL::showPopup(this, mBottomTrayContextMenu, x, y);
-		
-	}
-}
-
-void LLBottomTray::updateContextMenu(S32 x, S32 y, MASK mask)
-{
-	LLUICtrl* edit_box = mNearbyChatBar->getChild<LLUICtrl>("chat_box");
-
-	S32 local_x = x - mChatBarContainer->getRect().mLeft - edit_box->getRect().mLeft;
-	S32 local_y = y - mChatBarContainer->getRect().mBottom - edit_box->getRect().mBottom;
-
-	bool in_edit_box = edit_box->pointInView(local_x, local_y);
-
-	mBottomTrayContextMenu->setItemVisible("Separator", in_edit_box);
-	mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Cut", in_edit_box);
-	mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Copy", in_edit_box);
-	mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Paste", in_edit_box);
-	mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Delete", in_edit_box);
-	mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Select_All", in_edit_box);
-}
-
-void LLBottomTray::showSpeakButton(bool visible)
-{
-	// Show/hide the button
-	setTrayButtonVisible(RS_BUTTON_SPEAK, visible);
-
-	// and adjust other panels according to the occupied/freed space.
-	const S32 panel_width = mSpeakPanel->getRect().getWidth();
-	if (visible)
-	{
-		processWidthDecreased(-panel_width);
-	}
-	else
-	{
-		processWidthIncreased(panel_width);
-	}
-}
-
-void LLBottomTray::toggleMovementControls()
-{
-	if (mMovementButton)
-		mMovementButton->onCommit();
-}
-
-void LLBottomTray::toggleCameraControls()
-{
-	if (mCamButton)
-		mCamButton->onCommit();
-}
-
-BOOL LLBottomTray::postBuild()
-{
-	LLHints::registerHintTarget("bottom_tray", LLView::getHandle());
-	LLHints::registerHintTarget("dest_guide_btn", getChild<LLUICtrl>("destination_btn")->getHandle());
-	LLHints::registerHintTarget("avatar_picker_btn", getChild<LLUICtrl>("avatar_btn")->getHandle());
-
-	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("NearbyChatBar.Action", boost::bind(&LLBottomTray::onContextMenuItemClicked, this, _2));
-	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("NearbyChatBar.EnableMenuItem", boost::bind(&LLBottomTray::onContextMenuItemEnabled, this, _2));
-
-	mBottomTrayContextMenu =  LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_bottomtray.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	gMenuHolder->addChild(mBottomTrayContextMenu);
-
-	//mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
-	//LLHints::registerHintTarget("chat_bar", mNearbyChatBar->LLView::getHandle());
-
-	//mListener.reset(new LLNearbyChatBarListener(*mNearbyChatBar));
-
-	mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");
-	mNearbyCharResizeHandlePanel = getChild<LLPanel>("chat_bar_resize_handle_panel");
-
-	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
-	mMovementButton = getChild<LLButton>("movement_btn");
-	LLHints::registerHintTarget("move_btn", mMovementButton->getHandle());
-	mCamButton = getChild<LLButton>("camera_btn");
-	setRightMouseDownCallback(boost::bind(&LLBottomTray::showBottomTrayContextMenu,this, _2, _3,_4));
-
-	mSpeakPanel = getChild<LLPanel>("speak_panel");
-	mSpeakBtn = findChild<LLSpeakButton>("talk");
-	if (mSpeakBtn)
-	{
-		LLHints::registerHintTarget("speak_btn", mSpeakBtn->getHandle());
-
-		// Localization tool doesn't understand custom buttons like <talk_button>
-		mSpeakBtn->setSpeakToolTip( getString("SpeakBtnToolTip") );
-		mSpeakBtn->setShowToolTip( getString("VoiceControlBtnToolTip") );
-	}	
-	else
-	{
-		LLTransientFloaterMgr::getInstance()->addControlView(getChild<LLButton>("speak_btn"));
-		LLTransientFloaterMgr::getInstance()->addControlView(getChild<LLButton>("flyout_btn"));
-	}
-
-
-	// Both parts of speak button should be initially disabled because
-	// it takes some time between logging in to world and connecting to voice channel.
-	getChild<LLButton>("speak_btn")->setEnabled(false);
-	getChild<LLButton>("speak_flyout_btn")->setEnabled(false);
-	gMenuBarView->getChild<LLView>("Nearby Voice")->setEnabled(false);
-
-	// Registering Chat Bar to receive Voice client status change notifications.
-	LLVoiceClient::getInstance()->addObserver(this);
-
-	//mNearbyChatBar->getChatBox()->setContextMenu(NULL);
-
-	mChicletPanel = getChild<LLChicletPanel>("chiclet_list");
-
-	initResizeStateContainers();
-
-	setButtonsControlsAndListeners();
-
-	initButtonsVisibility();
-
-	// update wells visibility:
-	showWellButton(RS_IM_WELL, !LLIMWellWindow::getInstance()->isWindowEmpty());
-	showWellButton(RS_NOTIFICATION_WELL, !LLNotificationWellWindow::getInstance()->isWindowEmpty());
-
-	loadButtonsOrder();
-
-	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&update_build_button_enable_state));
-
-	return TRUE;
-}
-
-//Drag-n-drop
-
-void LLBottomTray::onDraggableButtonMouseDown(LLUICtrl* ctrl, S32 x, S32 y)
-{
-	if (ctrl == NULL) return;
-	LLView* parent_view = ctrl->getParent();
-	if(parent_view != NULL)
-	{
-		// we actually drag'n'drop panel (not button) in code, so have to find a parent
-		// of button which called this method on mouse down.
-		LLPanel* parent = dynamic_cast<LLPanel*>(parent_view);
-		// It may happen that we clicked not usual button, but button inside widget(speak, gesture)
-		// so we'll need to get a level higher to reach layout panel as a parent.
-		if(parent == NULL) parent = dynamic_cast<LLPanel*>(parent_view->getParent());
-		if (parent && parent->getVisible())
-		{
-			mDraggedItem = parent;
-			mCheckForDrag = true;
-			mStartX = x;
-			mStartY = y;
-		}
-	}
-}
-
-LLPanel* LLBottomTray::findChildPanelByLocalCoords(S32 x, S32 y)
-{
-	LLPanel* ctrl = 0;
-	S32 screenX, screenY;
-	const child_list_t* list = mToolbarStack->getChildList();
-
-	localPointToScreen(x, y, &screenX, &screenY);
-
-	// look for a child panel which contains the point (screenX, screenY) in it's rectangle
-	for (child_list_const_iter_t i = list->begin(); i != list->end(); ++i)
-	{
-		LLRect rect;
-		localRectToScreen((*i)->getRect(), &rect);
-
-		if (rect.pointInRect(screenX, screenY))
-		{
-			ctrl = dynamic_cast<LLPanel*>(*i);
-			break;
-		}
-	}
-
-	return ctrl;
-}
-
-void LLBottomTray::onDraggableButtonHover(S32 x, S32 y)
-{
-	// if mouse down on draggable item was done, check whether we should start DnD
-	if (mCheckForDrag)
-	{
-		// Start drag'n'drop if mouse cursor was dragged away frome mouse down location enough
-		if(sqrt((float)((mStartX-x)*(mStartX-x)+(mStartY-y)*(mStartY-y))) > DRAG_START_DISTANCE)
-		{
-			mDragStarted = true;
-			mCheckForDrag = false;
-		}
-	}
-	if (mDragStarted)
-	{
-		// Check whether the cursor is over draggable area, find which panel it is and set is as
-		// landing tab for drag'n'drop
-		if(isCursorOverDraggableArea(x, y))
-		{
-			LLPanel* panel = findChildPanelByLocalCoords(x,y);
-			if (panel && panel != mDraggedItem) mLandingTab = panel;
-			gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROWDRAG);
-		}
-		else
-		{
-			gViewerWindow->getWindow()->setCursor(UI_CURSOR_NO);
-		}
-	}
-	else
-	{
-		// Reset cursor in case you move your mouse from the drag handle to a button.
-		getWindow()->setCursor(UI_CURSOR_ARROW);
-
-	}
-}
-
-bool LLBottomTray::isCursorOverDraggableArea(S32 x, S32 y)
-{
-	// Draggable area lasts from the nearby chat input resize handle
-	// to the chiclet area (exlusively).
-	bool result = getRect().pointInRect(x, y);
-	result = result && mNearbyCharResizeHandlePanel->calcScreenRect().mRight < x;
-	result = result && mChicletPanel->calcScreenRect().mRight > x;
-	return result;
-}
-
-void LLBottomTray::updateButtonsOrdersAfterDnD()
-{
-	// *TODO: change implementation of this method to support simplify it
-	// (and according to future possible changes in the way button order is saved between sessions).
-	state_object_map_t::const_iterator it = mStateProcessedObjectMap.begin();
-	state_object_map_t::const_iterator it_end = mStateProcessedObjectMap.end();
-	EResizeState dragged_state = RS_NORESIZE;
-	EResizeState landing_state = RS_NORESIZE;
-	bool landing_state_found = false;
-	// Find states for dragged item and landing tab
-	for (; it != it_end; ++it)
-	{
-		if (it->second == mDraggedItem)
-		{
-			dragged_state = it->first;
-		}
-		else if (it->second == mLandingTab)
-		{
-			landing_state = it->first;
-			landing_state_found = true;
-		}
-	}
-
-	if (dragged_state == RS_NORESIZE)
-	{
-		llwarns << "Cannot determine what button is being dragged" << llendl;
-		llassert(dragged_state != RS_NORESIZE);
-		return;
-	}
-
-	lldebugs << "Will place " << resizeStateToString(dragged_state)
-		<< " before " << resizeStateToString(landing_state) << llendl;
-
-	// Update order of buttons according to drag'n'drop
-	mButtonsOrder.erase(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), dragged_state));
-	if (!landing_state_found && mLandingTab == getChild<LLPanel>(PANEL_CHICLET_NAME))
-	{
-		mButtonsOrder.push_back(dragged_state);
-	}
-	else
-	{
-		if (!landing_state_found) landing_state = RS_BUTTON_SPEAK; // just a random fallback
-		mButtonsOrder.insert(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), landing_state), dragged_state);
-	}
-
-	// Synchronize button process order with their order
-	resize_state_vec_t::const_iterator it1 = mButtonsOrder.begin();
-	const resize_state_vec_t::const_iterator it_end1 = mButtonsOrder.end();
-	resize_state_vec_t::iterator it2 = mButtonsProcessOrder.begin();
-	for (; it1 != it_end1; ++it1)
-	{
-		// Skip Speak because it is not in mButtonsProcessOrder(it's the reason why mButtonsOrder was introduced).
-		// If any other draggable items will be added to bottomtray later, they should also be skipped here.
-		if (*it1 != RS_BUTTON_SPEAK)
-		{
-			*it2 = *it1;
-			++it2;
-		}
-	}
-
-	saveButtonsOrder();
-}
-
-void LLBottomTray::saveButtonsOrder()
-{
-	if (!gSavedSettings.getBOOL("AllowBottomTrayButtonReordering")) return;
-
-	std::string user_dir = gDirUtilp->getLindenUserDir();
-	if (user_dir.empty()) return;
-	
-	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME);
-	LLSD settings_llsd;
-	int i = 0;
-	const resize_state_vec_t::const_iterator it_end = mButtonsOrder.end();
-	// we use numbers as keys for map which is saved in file and contains resize states as its values
-	for (resize_state_vec_t::const_iterator it = mButtonsOrder.begin(); it != it_end; ++it, i++)
-	{
-		std::string str = llformat("%d", i);
-		settings_llsd[str] = *it;		
-	}
-	llofstream file;
-	file.open(filename);
-	LLSDSerialize::toPrettyXML(settings_llsd, file);
-}
-
-void LLBottomTray::loadButtonsOrder()
-{
-	if (!gSavedSettings.getBOOL("AllowBottomTrayButtonReordering")) return;
-
-	// load per-resident sorting information
-	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME);
-
-	LLSD settings_llsd;
-	llifstream file;
-	file.open(filename);
-	if (!file.is_open()) return;
-	
-	LLSDSerialize::fromXML(settings_llsd, file);
-	
-
-	mButtonsOrder.clear();
-	mButtonsProcessOrder.clear();
-	int i = 0;
-	// getting button order from file
-	for (LLSD::map_const_iterator iter = settings_llsd.beginMap();
-		iter != settings_llsd.endMap(); ++iter, ++i)
-	{
-		std::string str = llformat("%d", i);
-		EResizeState state = (EResizeState)settings_llsd[str].asInteger();
-		mButtonsOrder.push_back(state);
-		// RS_BUTTON_SPEAK is skipped, because it shouldn't be in mButtonsProcessOrder (it does not hide or shrink).
-		if (state != RS_BUTTON_SPEAK)
-		{
-			mButtonsProcessOrder.push_back(state);
-		}		
-	}
-
-	// There are other panels in layout stack order of which is not saved. Also, panels order of which is saved,
-	// are already in layout stack but in wrong order. The most convenient way to place them is moving them 
-	// to front one by one (because in this case we don't have to pass the panel before which we want to insert our
-	// panel to movePanel()). So panels are moved in order from the end of mButtonsOrder vector(reverse iterator is used).
-	const resize_state_vec_t::const_reverse_iterator it_end = mButtonsOrder.rend();
-	// placing panels in layout stack according to button order which we loaded in previous for
-	for (resize_state_vec_t::const_reverse_iterator it = mButtonsOrder.rbegin(); it != it_end; ++it, ++i)
-	{
-		LLPanel* panel_to_move = getButtonPanel(*it);
-		mToolbarStack->movePanel(panel_to_move, NULL, true); // prepend 		
-	}
-	// Nearbychat is not stored in order settings file, but it must be the first of the panels, so moving it
-	// (along with its drag handle) manually here.
-	mToolbarStack->movePanel(getChild<LLLayoutPanel>("chat_bar_resize_handle_panel"), NULL, true);
-	mToolbarStack->movePanel(mChatBarContainer, NULL, true);
-}
-
-void LLBottomTray::onDraggableButtonMouseUp(LLUICtrl* ctrl, S32 x, S32 y)
-{
-	//if mouse up happened over area where drop is possible, change order of buttons
-	if (mLandingTab != NULL && mDraggedItem != NULL && mDragStarted)
-	{
-		if(isCursorOverDraggableArea(x, y))
-		{
-			// change order of panels in layout stack
-			mToolbarStack->movePanel(mDraggedItem, (LLPanel*)mLandingTab);
-			// change order of buttons in order vectors
-			updateButtonsOrdersAfterDnD();
-		}
-	}
-	gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
-	mDragStarted = false;
-	mDraggedItem = NULL;
-	mLandingTab = NULL;
-	mCheckForDrag = false;
-}
-
-void LLBottomTray::draw()
-{
-	LLPanel::draw();
-	if (mLandingTab)
-	{
-		static S32 w = mImageDragIndication->getWidth();
-		static S32 h = mImageDragIndication->getHeight();
-		LLRect rect = mLandingTab->calcScreenRect();
-		mImageDragIndication->draw(rect.mLeft - w/2, rect.getHeight(), w, h);
-	}
-	getChild<LLButton>("show_profile_btn")->setToggleState(LLAvatarActions::profileVisible(gAgent.getID()));
-
-	LLPanel* panel = LLFloaterSidePanelContainer::getPanel("people", "panel_people");
-	if (panel && panel->isInVisibleChain())
-	{
-		getChild<LLButton>("show_people_button")->setToggleState(true);
-	}
-	else
-	{
-		getChild<LLButton>("show_people_button")->setToggleState(false);
-	}
-
-	LLFloater* help_browser = (LLFloaterReg::findInstance("help_browser"));
-	bool help_floater_visible = (help_browser && help_browser->isInVisibleChain());
-
-	getChild<LLButton>("show_help_btn")->setToggleState(help_floater_visible);
-
-	bool openmic = LLVoiceClient::getInstance()->getUserPTTState();
-	bool voiceenabled = LLVoiceClient::getInstance()->voiceEnabled();
-	getChild<LLButton>("speak_btn")->setToggleState(openmic && voiceenabled);
-	getChild<LLOutputMonitorCtrl>("chat_zone_indicator")->setIsMuted(!voiceenabled);
-
-}
-
-bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata)
-{
-	std::string item = userdata.asString();
-	/*
-	LLLineEditor* edit_box = mNearbyChatBar->findChild<LLLineEditor>("chat_box");
-	
-	if (item == "can_cut")
-	{
-		return edit_box->canCut();
-	}
-	else if (item == "can_copy")
-	{
-		return edit_box->canCopy();
-	}
-	else if (item == "can_paste")
-	{
-		return edit_box->canPaste();
-	}
-	else if (item == "can_delete")
-	{
-		return edit_box->canDoDelete();
-	}
-	else if (item == "can_select_all")
-	{
-		return edit_box->canSelectAll() && (edit_box->getLength()>0);
-	}*/
-	return true;
-}
-
-
-void LLBottomTray::onContextMenuItemClicked(const LLSD& userdata)
-{/*
-	std::string item = userdata.asString();
-	LLLineEditor* edit_box = mNearbyChatBar->findChild<LLLineEditor>("chat_box");
-
-	if (item == "cut")
-	{
-		edit_box->cut();
-	}
-	else if (item == "copy")
-	{
-		edit_box->copy();
-	}
-	else if (item == "paste")
-	{
-		edit_box->paste();
-		edit_box->setFocus(TRUE);
-	}
-	else if (item == "delete")
-	{
-		edit_box->doDelete();
-	}
-	else if (item == "select_all")
-	{
-		edit_box->selectAll();
-	}*/
-}
-
-void LLBottomTray::log(LLView* panel, const std::string& descr)
-{
-	if (NULL == panel) return;
-	LLView* layout = panel->getParent();
-	LL_DEBUGS("Bottom Tray Rects") << descr << ": "
-		<< "panel: " << panel->getName()
-		<< ", rect: " << panel->getRect()
- 
- 
-		<< " layout: " << layout->getName()
-		<< ", rect: " << layout->getRect()
-		<< LL_ENDL;
-}
-
-void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
-{
-	static S32 debug_calling_number = 0;
-	lldebugs << "**************************************** " << ++debug_calling_number << llendl;
-
-	S32 current_width = getRect().getWidth();
-	S32 delta_width = width - current_width;
-	lldebugs << "Reshaping: " 
-		<< ", width: " << width
-		<< ", cur width: " << current_width
-		<< ", delta_width: " << delta_width
-		<< ", called_from_parent: " << called_from_parent
-		<< llendl;
-
-	if (mNearbyChatBar)			log(mNearbyChatBar, "before");
-	if (mChicletPanel)			log(mChicletPanel, "before");
-
-	// Difference between bottom tray width required to fit its children and the actual width. (see EXT-991)
-	// Positive value means that bottom tray is not wide enough.
-	// Negative value means that there is free space.
-	static S32 extra_shrink_width = 0;
-	bool should_be_reshaped = true;
-
-	if (mChicletPanel && mToolbarStack && mNearbyChatBar)
-	{
-		// Firstly, update layout stack to ensure we deal with correct panel sizes.
-		{
-			BOOL saved_anim = mToolbarStack->getAnimate();
-			// Set chiclet panel to be autoresized by default.
-			mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
-			// Disable animation to prevent layout updating in several frames.
-			mToolbarStack->setAnimate(FALSE);
-			// Force the updating of layout to reset panels collapse factor.
-			mToolbarStack->updateLayout();
-			// Restore animate state.
-			mToolbarStack->setAnimate(saved_anim);
-		}
-
-		// bottom tray is narrowed
-		if (delta_width < 0)
-		{
-			if (extra_shrink_width > 0) // not enough space
-			{
-				extra_shrink_width += llabs(delta_width);
-				should_be_reshaped = false;
-			}
-			else
-			{
-				extra_shrink_width = processWidthDecreased(delta_width);
-
-				// increase new width to extra_shrink_width value to not reshape less than bottom tray minimum
-				width += extra_shrink_width;
-			}
-		}
-		// bottom tray is widened
-		else
-		{
-			if (extra_shrink_width > delta_width)
-			{
-				// Still not enough space.
-				// Only subtract the delta from the required delta and don't reshape.
-				extra_shrink_width -= delta_width;
-				should_be_reshaped = false;
-			}
-			else 
-			{
-				if (extra_shrink_width > 0)
-				{
-					// If we have some extra shrink width let's reduce delta_width & width
-					delta_width -= extra_shrink_width;
-					width -= extra_shrink_width;
-					extra_shrink_width = 0;
-				}
-				processWidthIncreased(delta_width);
-			}
-		}
-	}
-
-	if (should_be_reshaped)
-	{
-		lldebugs << "Reshape all children with width: " << width << llendl;
-		LLPanel::reshape(width, height, called_from_parent);
-	}
-
-	if (mNearbyChatBar)			log(mNearbyChatBar, "after");
-	if (mChicletPanel)			log(mChicletPanel, "after");
-
-
-	// Restore width of the chatbar on first reshape.
-	// we can not to do this from postBuild because reshape is called from parent view on startup
-	// creation after it and reset width according to resize logic.
-	static bool needs_restore_custom_state = true;
-	if (mChatBarContainer && needs_restore_custom_state)
-	{
-		// restore custom width of chatbar panel.
-		S32 new_width = gSavedSettings.getS32("ChatBarCustomWidth");
-		if (new_width > 0)
-		{
-			mDesiredNearbyChatWidth = new_width;
-			processChatbarCustomization(new_width);
-			lldebugs << "Setting nearby chat bar width to " << new_width << " px" << llendl;
-			mChatBarContainer->reshape(new_width, mChatBarContainer->getRect().getHeight());
-		}
-		needs_restore_custom_state = false;
-	}
-
-}
-
-S32 LLBottomTray::processWidthDecreased(S32 delta_width)
-{
-	bool still_should_be_processed = true;
-
-	const S32 chiclet_panel_shrink_headroom = getChicletPanelShrinkHeadroom();
-
-	// There are four steps of processing width decrease. If in one of them required width was reached,
-	// further are not needed.
-	// 1. Decreasing width of chiclet panel.
-	if (chiclet_panel_shrink_headroom > 0)
-	{
-		// we have some space to decrease chiclet panel
-		S32 shrink_by = llmin(-delta_width, chiclet_panel_shrink_headroom);
-
-		lldebugs << "delta_width: " << delta_width
-			<< ", panel_delta_min: " << chiclet_panel_shrink_headroom
-			<< ", shrink_by: " << shrink_by
-			<< llendl;
-
-		// is chiclet panel wide enough to process resizing?
-		delta_width += chiclet_panel_shrink_headroom;
-
-		still_should_be_processed = delta_width < 0;
-
-		lldebugs << "Shrinking chiclet panel by " << shrink_by << " px" << llendl;
-		mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - shrink_by, mChicletPanel->getParent()->getRect().getHeight());
-		log(mChicletPanel, "after processing panel decreasing via chiclet panel");
-
-		lldebugs << "RS_CHICLET_PANEL" 
-			<< ", delta_width: " << delta_width
-			<< llendl;
-	}
-
-	S32 buttons_freed_width = 0;
-	// 2. Decreasing width of buttons.
-	if (still_should_be_processed)
-	{
-		processShrinkButtons(delta_width, buttons_freed_width);
-		still_should_be_processed = delta_width < 0;
-	}
-
-	// 3. Decreasing width of nearby chat.
-	const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mChatBarContainer);
-	const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();
-	if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width)
-	{
-		// we have some space to decrease chatbar panel
-		S32 chatbar_shrink_headroom = chatbar_panel_width - chatbar_panel_min_width;
-
-		S32 shrink_by = llmin(-delta_width, chatbar_shrink_headroom);
-
-		// is chatbar panel wide enough to process resizing?
-		delta_width += chatbar_shrink_headroom;
-
-		still_should_be_processed = delta_width < 0;
-
-		// chatbar should only be shrunk here, not stretched
-		if (shrink_by > 0)
-		{
-			//lldebugs << "Shrinking nearby chat bar by " << delta_panel << " px " << llendl;
-			//mChatBarContainer->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mChatBarContainer->getRect().getHeight());
-		}
-
-		log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel");
-
-		lldebugs << "RS_CHATBAR_INPUT"
-			<< ", shrink_by: " << shrink_by
-			<< ", delta_width: " << delta_width
-			<< llendl;
-	}
-
-	S32 extra_shrink_width = 0;
-	// 4. Hiding buttons if needed.
-	if (still_should_be_processed)
-	{
-		processHideButtons(delta_width, buttons_freed_width);
-
-		if (delta_width < 0)
-		{
-			extra_shrink_width = -delta_width;
-			llwarns << "There is no enough width to reshape all children: " 
-				<< extra_shrink_width << llendl;
-		}
-
-		if (buttons_freed_width > 0)
-		{
-			S32 nearby_needed_width = mDesiredNearbyChatWidth;
-			if ( 0)
-			{
-				S32 compensative_width = nearby_needed_width > buttons_freed_width ? buttons_freed_width : nearby_needed_width; 
-				log(mNearbyChatBar, "before applying compensative width");
-				lldebugs << "Extending nearby chat bar by " << compensative_width << " px" << llendl;
-				mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() + compensative_width, mChatBarContainer->getRect().getHeight() );
-				log(mNearbyChatBar, "after applying compensative width");
-				lldebugs << buttons_freed_width << llendl;
-			}
-		}
-	}
-
-	return extra_shrink_width;
-}
-
-void LLBottomTray::processWidthIncreased(S32 delta_width)
-{
-	if (delta_width <= 0) return;
-
-	// how much room we have to show hidden buttons
-	S32 available_width = delta_width + getChicletPanelShrinkHeadroom();
-
-	lldebugs << "Distributing (" << getChicletPanelShrinkHeadroom()
-		<< " + " << delta_width << ") = " << available_width << " px" << llendl;
-
-	// 1. Try showing buttons that have been auto-hidden.
-	S32 processed_width = processShowButtons(available_width);
-	lldebugs << "processed_width = " << processed_width << ", delta_width = " << delta_width << llendl;
-
-	lldebugs << "Available_width after showing buttons: " << available_width << llendl;
-
-	// If the newly shown buttons have consumed more than delta_width pixels,
-	// shrink the chiclet panel.
-	if (processed_width > delta_width)
-	{
-		// 1. use delta width of resizing
-		S32 shrink_by = processed_width - delta_width;
-
-		// 2. use width available via decreasing of chiclet panel
-		if (shrink_by > 0)
-		{
-			lldebugs << "Shrinking chiclet panel by " << shrink_by << " px" << llendl;
-			mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - shrink_by, mChicletPanel->getParent()->getRect().getHeight());
-			log(mChicletPanel, "after applying compensative width for chiclets: ");
-			lldebugs << shrink_by << llendl;
-		}
-
-		// shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels
-		delta_width -= processed_width;
-	}
-
-	// 2. Expand the nearby chat bar if needed.
-	S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();
-	lldebugs << "delta_width = " << delta_width
-		<< ", chatbar_panel_width = " << chatbar_panel_width
-		<< ", mDesiredNearbyChatWidth = " << mDesiredNearbyChatWidth << llendl;
-	if (delta_width > 0 && chatbar_panel_width < mDesiredNearbyChatWidth)
-	{
-		S32 extend_by_max = mDesiredNearbyChatWidth - chatbar_panel_width;
-		S32 extend_by = llmin(delta_width, extend_by_max);
-		lldebugs << "Unprocessed delta width: " << delta_width
-			<< " px, chatbar can be extended by " << extend_by_max
-			<< " px, extending it by " << extend_by << " px"
-			<< llendl;
-
-		delta_width -= extend_by_max;
-		lldebugs << "Extending nearby chat bar by " << extend_by << " px " << llendl;
-		mChatBarContainer->reshape(chatbar_panel_width + extend_by, mChatBarContainer->getRect().getHeight());
-		log(mNearbyChatBar, "applied unprocessed delta width");
-	}
-
-	// 3. Expand buttons that have been auto-shrunk,
-	// if we haven't yet consumed all the available headroom.
-	if (delta_width > 0)
-	{
-		S32 available_width = delta_width + getChicletPanelShrinkHeadroom();
-		processExtendButtons(available_width);
-	}
-}
-
-S32 LLBottomTray::processShowButtons(S32& available_width)
-{
-	lldebugs << "Distributing " << available_width << " px" << llendl;
-	S32 original_available_width = available_width;
-
-	// process buttons from left to right
-	resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
-	const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
-
-	for (; it != it_end; ++it)
-	{
-		// is there available space?
-		if (available_width <= 0) break;
-
-		// try to show next button
-		processShowButton(*it, available_width);
-	}
-
-	return original_available_width - available_width;
-}
-
-bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32& available_width)
-{
-	// Check if the button was previously auto-hidden (due to lack of space).
-	if (!isAutoHidden(shown_object_type))
-	{
-		return false;
-	}
-
-	// Ok. Try showing the button.
-	return showButton(shown_object_type, available_width);
-}
-
-void LLBottomTray::processHideButtons(S32& required_width, S32& buttons_freed_width)
-{
-	// process buttons from right to left
-	resize_state_vec_t::const_reverse_iterator it = mButtonsProcessOrder.rbegin();
-	const resize_state_vec_t::const_reverse_iterator it_end = mButtonsProcessOrder.rend();
-
-	for (; it != it_end; ++it)
-	{
-		// is it still necessary to hide a button?
-		if (required_width >= 0) break;
-
-		// try to hide next button
-		processHideButton(*it, required_width, buttons_freed_width);
-	}
-}
-
-void LLBottomTray::processHideButton(EResizeState processed_object_type, S32& required_width, S32& buttons_freed_width)
-{
-	lldebugs << "Trying to hide object type: " << processed_object_type << llendl;
-	LLPanel* panel = getButtonPanel(processed_object_type);
-	if (NULL == panel)
-	{
-		return;
-	}
-
-	if (panel->getVisible())
-	{
-		required_width += panel->getRect().getWidth();
-
-		if (required_width > 0)
-		{
-			buttons_freed_width += required_width;
-		}
-
-		setTrayButtonVisible(processed_object_type, false);
-
-		setAutoHidden(processed_object_type, true);
-
-		lldebugs << "processing object type: " << processed_object_type
-			<< ", buttons_freed_width: " << buttons_freed_width
-			<< llendl;
-	}
-}
-
-void LLBottomTray::processShrinkButtons(S32& required_width, S32& buttons_freed_width)
-{
-	// process buttons from right to left
-	resize_state_vec_t::const_reverse_iterator it = mButtonsProcessOrder.rbegin();
-	const resize_state_vec_t::const_reverse_iterator it_end = mButtonsProcessOrder.rend();
-
-	// iterate through buttons in the mButtonsProcessOrder first
-	for (; it != it_end; ++it)
-	{
-		// is it still necessary to hide a button?
-		if (required_width >= 0) break;
-
-		// try to shrink next button
-		processShrinkButton(*it, required_width);
-	}
-
-	// then shrink Speak button
-	if (required_width < 0)
-	{
-		S32 panel_min_width = 0;
-		std::string panel_name = mSpeakPanel->getName();
-		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);
-		if (!success)
-		{
-			lldebugs << "Panel was not found to get its min width: " << panel_name << llendl;
-		}
-		else
-		{
-			S32 panel_width = mSpeakPanel->getRect().getWidth();
-			S32 possible_shrink_width = panel_width - panel_min_width;
-
-			if (possible_shrink_width > 0)
-			{
-				if (mSpeakBtn)
-				{	
-					mSpeakBtn->setLabelVisible(false);
-				}
-
-				mSpeakPanel->reshape(panel_width - possible_shrink_width, mSpeakPanel->getRect().getHeight());
-
-				required_width += possible_shrink_width;
-
-				if (required_width > 0)
-				{
-					buttons_freed_width += required_width;
-				}
-
-				lldebugs << "Shrunk Speak button panel: " << panel_name
-					<< ", shrunk width: " << possible_shrink_width
-					<< ", rest width to process: " << required_width
-					<< llendl;
-			}
-		}
-	}
-}
-
-void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32& required_width)
-{
-	LLPanel* panel = getButtonPanel(processed_object_type);
-	if (NULL == panel)
-	{
-		return;
-	}
-
-	if (panel->getVisible())
-	{
-		S32 panel_width = panel->getRect().getWidth();
-		S32 panel_min_width = 0;
-		std::string panel_name = panel->getName();
-		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);
-		S32 possible_shrink_width = panel_width - panel_min_width;
-
-		if (!success)
-		{
-			lldebugs << "Panel was not found to get its min width: " << panel_name << llendl;
-		}
-		// we have some space to free by shrinking the button
-		else if (possible_shrink_width > 0)
-		{
-			// let calculate real width to shrink
-
-			// 1. apply all possible width
-			required_width += possible_shrink_width;
-
-			// 2. it it is too much... 
-			if (required_width > 0)
-			{
-				// reduce applied shrunk width to the excessive value.
-				possible_shrink_width -= required_width;
-				required_width = 0;
-			}
-			panel->reshape(panel_width - possible_shrink_width, panel->getRect().getHeight());
-
-			lldebugs << "Shrunk panel: " << panel_name
-				<< ", shrunk width: " << possible_shrink_width
-				<< ", rest width to process: " << required_width
-				<< llendl;
-		}
-	}
-}
-
-
-void LLBottomTray::processExtendButtons(S32& available_width)
-{
-	// do not allow extending any buttons if we have some buttons hidden via resize
-	if (isAutoHidden(RS_BUTTONS_CAN_BE_HIDDEN)) return;
-
-	lldebugs << "Distributing " << available_width << " px" << llendl;
-
-	// First try extending the Speak button.
-	if (available_width > 0)
-	{
-		if (!processExtendSpeakButton(available_width))
-		{
-			// The Speak button needs extension but lacks some space.
-			// Don't extend other buttons in this case: the Speak button
-			// should consume the available headroom first.
-			return;
-		}
-	}
-
-	// Then process the other buttons from left to right.
-	if (available_width > 0)
-	{
-		resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
-		const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
-
-		// iterate through buttons in the mButtonsProcessOrder first
-		for (; it != it_end; ++it)
-		{
-			// is there available space?
-			if (available_width <= 0) break;
-
-			// try to extend next button
-			processExtendButton(*it, available_width);
-		}
-	}
-}
-
-bool LLBottomTray::processExtendSpeakButton(S32& available_width)
-{
-	if (available_width <= 0)
-	{
-		llassert(available_width > 0);
-		return true;
-	}
-
-	const S32 panel_max_width = mObjectDefaultWidthMap[RS_BUTTON_SPEAK];
-	const S32 panel_width = mSpeakPanel->getRect().getWidth();
-	const S32 required_headroom = panel_max_width - panel_width;
-
-	if (panel_width < panel_max_width) // if the button isn't extended already
-	{
-		if (available_width < required_headroom) // not enough space
-		{
-			lldebugs << "Need (" << required_headroom << " - " << available_width << ") = "
-				<< (required_headroom - available_width) << " more px"
-				<< " to extend the Speak button"<< llendl;
-
-			return false; // Don't extend other buttons until we extend Speak.
-		}
-
-		// Reshape the Speak button to its maximum width.
-		if (mSpeakBtn) mSpeakBtn->setLabelVisible(true);
-		mSpeakPanel->reshape(panel_max_width, mSpeakPanel->getRect().getHeight());
-
-		available_width -= required_headroom;
-		llassert(available_width >= 0);
-
-		lldebugs << "Extending Speak button panel: " << mSpeakPanel->getName()
-			<< ", extended width: " << required_headroom
-			<< ", rest width to process: " << available_width
-			<< llendl;
-	}
-
-	return true;
-}
-
-void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32& available_width)
-{
-	llassert(available_width >= 0);
-
-	LLPanel* panel = getButtonPanel(processed_object_type);
-	if (NULL == panel)
-	{
-		return;
-	}
-
-	if (!panel->getVisible()) return;
-
-	// Widen the button up to its maximum width, but by not more than <available_width> px.
-	S32 panel_max_width = mObjectDefaultWidthMap[processed_object_type];
-	S32 panel_width = panel->getRect().getWidth();
-	S32 required_headroom = panel_max_width - panel_width;
-
-	S32 extend_by = llmin(available_width, required_headroom);
-	if (extend_by > 0)
-	{
-		panel->reshape(panel_width + extend_by, panel->getRect().getHeight());
-
-		// Decrease amount of headroom available for other panels.
-		available_width -= extend_by;
-
-		lldebugs << "Extending " << panel->getName()
-			<< " by " << extend_by
-			<< " px; remaining available width: " << available_width
-			<< llendl;
-	}
-}
-
-bool LLBottomTray::canButtonBeShown(EResizeState processed_object_type) const
-{
-	// Check that all buttons (that can be hidden on resize)
-	// to the left of the given one are already shown.
-
-	// process buttons in direct order (from left to right)
-	resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
-	const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
-
-	MASK buttons_before_mask = RS_NORESIZE;
-	for (; it != it_end; ++it)
-	{
-		const EResizeState button_type = *it;
-		if (button_type == processed_object_type) break;
-
-		buttons_before_mask |= button_type;
-	}
-
-	return !isAutoHidden(buttons_before_mask);
-}
-
-void LLBottomTray::initResizeStateContainers()
-{
-	// init map with objects should be processed for each type
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SPEAK, getChild<LLPanel>("speak_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_GESTURES, getChild<LLPanel>("gesture_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, getChild<LLPanel>("movement_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, getChild<LLPanel>("cam_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_DESTINATIONS, getChild<LLPanel>("destinations_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_AVATARS, getChild<LLPanel>("avatar_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, getChild<LLPanel>("snapshot_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_BUILD, getChild<LLPanel>("build_btn_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SEARCH, getChild<LLPanel>("search_btn_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_WORLD_MAP, getChild<LLPanel>("world_map_btn_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MINI_MAP, getChild<LLPanel>("mini_map_btn_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SPLITTER_1, getChild<LLPanel>("splitter_panel_1")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_PEOPLE, getChild<LLPanel>("people_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_PROFILE, getChild<LLPanel>("profile_panel")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SPLITTER_2, getChild<LLPanel>("splitter_panel_2")));
-	mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_HOWTO, getChild<LLPanel>("howto_panel")));
-
-	// init an order of processed buttons
-	mButtonsProcessOrder.push_back(RS_BUTTON_DESTINATIONS);
-	mButtonsProcessOrder.push_back(RS_BUTTON_AVATARS);
-	mButtonsProcessOrder.push_back(RS_BUTTON_SNAPSHOT);
-	mButtonsProcessOrder.push_back(RS_BUTTON_BUILD);
-	mButtonsProcessOrder.push_back(RS_BUTTON_SEARCH);
-	mButtonsProcessOrder.push_back(RS_BUTTON_WORLD_MAP);
-	mButtonsProcessOrder.push_back(RS_BUTTON_MINI_MAP);
-	mButtonsProcessOrder.push_back(RS_BUTTON_SPLITTER_1);
-	mButtonsProcessOrder.push_back(RS_BUTTON_PEOPLE);
-	mButtonsProcessOrder.push_back(RS_BUTTON_PROFILE);
-	mButtonsProcessOrder.push_back(RS_BUTTON_SPLITTER_2);
-	mButtonsProcessOrder.push_back(RS_BUTTON_HOWTO);
-	mButtonsProcessOrder.push_back(RS_BUTTON_MOVEMENT);
-	mButtonsProcessOrder.push_back(RS_BUTTON_CAMERA);
-	mButtonsProcessOrder.push_back(RS_BUTTON_GESTURES);
-
-	mButtonsOrder.push_back(RS_BUTTON_SPEAK);
-	mButtonsOrder.insert(mButtonsOrder.end(), mButtonsProcessOrder.begin(), mButtonsProcessOrder.end());
-
-	// init default widths
-
-	// process buttons that can be hidden on resize...
-	resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
-	const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
-
-	for (; it != it_end; ++it)
-	{
-		const EResizeState button_type = *it;
-		// is there an appropriate object?
-		LLPanel* button_panel = getButtonPanel(button_type);
-		if (!button_panel) continue;
-
-		// set default width for it.
-		mObjectDefaultWidthMap[button_type] = button_panel->getRect().getWidth();
-	}
-
-	// ... and add Speak button because it also can be shrunk.
-	mObjectDefaultWidthMap[RS_BUTTON_SPEAK]	   = mSpeakPanel->getRect().getWidth();
-}
-
-// this method must be called before restoring of the chat entry field on startup
-// because it resets chatbar's width according to resize logic.
-void LLBottomTray::initButtonsVisibility()
-{
-	setVisibleAndFitWidths(RS_BUTTON_SPEAK, gSavedSettings.getBOOL("EnableVoiceChat") || !mSpeakBtn );
-	setVisibleAndFitWidths(RS_BUTTON_GESTURES, gSavedSettings.getBOOL("ShowGestureButton"));
-	setVisibleAndFitWidths(RS_BUTTON_MOVEMENT, gSavedSettings.getBOOL("ShowMoveButton"));
-	setVisibleAndFitWidths(RS_BUTTON_CAMERA, gSavedSettings.getBOOL("ShowCameraButton"));
-	setVisibleAndFitWidths(RS_BUTTON_SNAPSHOT, gSavedSettings.getBOOL("ShowSnapshotButton"));
-	setVisibleAndFitWidths(RS_BUTTON_BUILD, gSavedSettings.getBOOL("ShowBuildButton"));
-	setVisibleAndFitWidths(RS_BUTTON_SEARCH, gSavedSettings.getBOOL("ShowSearchButton"));
-	setVisibleAndFitWidths(RS_BUTTON_WORLD_MAP, gSavedSettings.getBOOL("ShowWorldMapButton"));
-	setVisibleAndFitWidths(RS_BUTTON_MINI_MAP, gSavedSettings.getBOOL("ShowMiniMapButton"));
-	lldebugs << "mResizeState = " << resizeStateMaskToString(mResizeState) << llendl;
-}
-
-void LLBottomTray::setButtonsControlsAndListeners()
-{
-	// always show the speak panel if using the basic skin
-	if (mSpeakBtn)
-	{
-		gSavedSettings.getControl("EnableVoiceChat")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_SPEAK, _2));
-	}	
-
-	gSavedSettings.getControl("ShowGestureButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_GESTURES, _2));
-	gSavedSettings.getControl("ShowMoveButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_MOVEMENT, _2));
-	gSavedSettings.getControl("ShowCameraButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_CAMERA, _2));
-	gSavedSettings.getControl("ShowSnapshotButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_SNAPSHOT, _2));
-	gSavedSettings.getControl("ShowBuildButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_BUILD, _2));
-	gSavedSettings.getControl("ShowSearchButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_SEARCH, _2));
-	gSavedSettings.getControl("ShowWorldMapButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_WORLD_MAP, _2));
-	gSavedSettings.getControl("ShowMiniMapButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_MINI_MAP, _2));
-
-
-	LLButton* build_btn = getChild<LLButton>("build_btn");
-	// set control name for Build button. It is not enough to link it with Button.SetFloaterToggle in xml
-	std::string vis_control_name = LLFloaterReg::declareVisibilityControl("build");
-	// Set the button control value (toggle state) to the floater visibility control (Sets the value as well)
-	build_btn->setControlVariable(LLFloater::getControlGroup()->getControl(vis_control_name));
-}
-
-bool LLBottomTray::toggleShowButton(LLBottomTray::EResizeState button_type, const LLSD& new_visibility)
-{
-	if (LLBottomTray::instanceExists())
-	{
-		LLBottomTray::getInstance()->setTrayButtonVisibleIfPossible(button_type, new_visibility.asBoolean());
-	}
-	return true;
-}
-
-bool LLBottomTray::showButton(EResizeState button_type, S32& available_width)
-{
-	LLPanel* panel = getButtonPanel(button_type);
-	if (NULL == panel)
-	{
-		return false;
-	}
-
-	if (panel->getVisible())
-	{
-		return false;
-	}
-
-	// Check if none of the buttons to the left of the given one was auto-hidden.
-	// (we auto-show the buttons left to right).
-	if (!canButtonBeShown(button_type))
-	{
-		return false;
-	}
-
-	// Make sure we have enough room to show this button.
-	const S32 required_width = panel->getRect().getWidth();
-	if (available_width < required_width)
-	{
-		lldebugs << "Need " << (required_width - available_width) << " more px to show " << resizeStateToString(button_type) << llendl;
-		return false;
-	}
-
-	// All good. Show the button.
-	setTrayButtonVisible(button_type, true);
-
-	// Let the caller know that there is now less available space.
-	available_width -= required_width;
-
-	lldebugs << "Showing button " << resizeStateToString(button_type)
-		<< ", remaining available width: " << available_width
-		<< llendl;
-	setAutoHidden(button_type, false);
-
-	return true;
-}
-
-void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool visible)
-{
-	LLPanel* panel = getButtonPanel(shown_object_type);
-	if (NULL == panel)
-	{
-		return;
-	}
-
-	panel->setVisible(visible);
-}
-
-void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification)
-{
-	if (!setVisibleAndFitWidths(shown_object_type, visible) && visible && raise_notification)
-	{
-		LLNotificationsUtil::add("BottomTrayButtonCanNotBeShown",
-								 LLSD(),
-								 LLSD(),
-								 LLNotificationFunctorRegistry::instance().DONOTHING);
-	}
-}
-
-bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible)
-{
-	// The Speak button is treated specially: if voice is enabled,
-	// the button should be displayed no matter how much space we've got.
-	if (object_type == RS_BUTTON_SPEAK)
-	{
-		showSpeakButton(visible);
-		return true;
-	}
-
-	LLPanel* cur_panel = getButtonPanel(object_type);
-	if (NULL == cur_panel)
-	{
-		return false;
-	}
-
-	bool is_set = true;
-
-	if (visible)
-	{
-		// Assume that only chiclet panel can be auto-resized
-		const S32 available_width = getChicletPanelShrinkHeadroom();
-
-		S32 preferred_width = mObjectDefaultWidthMap[object_type];
-		S32 current_width = cur_panel->getRect().getWidth();
-		S32 result_width = 0;
-		bool decrease_width = false;
-
-		if (preferred_width > 0 && available_width >= preferred_width)
-		{
-			result_width = preferred_width;
-		}
-		else if (available_width >= current_width)
-		{
-			result_width = current_width;
-		}
-		else
-		{
-			// Calculate the possible shrunk width as difference between current and minimal widths
-			const S32 chatbar_shrunk_width =
-				mChatBarContainer->getRect().getWidth() - get_panel_min_width(mToolbarStack, mChatBarContainer);
-
-			S32 sum_of_min_widths = get_panel_min_width(mToolbarStack, mSpeakPanel);
-			S32 sum_of_curr_widths = get_curr_width(mSpeakPanel);
-
-			resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
-			const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
-
-			for (; it != it_end; ++it)
-			{
-				LLPanel* cur_panel = getButtonPanel(*it);
-				sum_of_min_widths += get_panel_min_width(mToolbarStack, cur_panel);
-				sum_of_curr_widths += get_curr_width(cur_panel);
-			}
-
-			const S32 possible_shrunk_width =
-				chatbar_shrunk_width + (sum_of_curr_widths - sum_of_min_widths);
-
-			// Minimal width of current panel
-			S32 minimal_width = 0;
-			mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width);
-
-			if ( (available_width + possible_shrunk_width) >= minimal_width)
-			{
-				// There is enough space for minimal width, but set the result_width
-				// to preferred_width so buttons widths decreasing will be done in predefined order
-				result_width = (preferred_width > 0) ? preferred_width : current_width;
-				decrease_width = true;
-			}
-			else
-			{
-				lldebugs << "Need " << (minimal_width - available_width - possible_shrunk_width)
-					<< " more px to show " << resizeStateToString(object_type) << llendl;
-
-				// Make the button uppear when we have more available space.
-				setAutoHidden(object_type, true);
-				return false;
-			}
-		}
-
-		if (result_width != current_width)
-		{
-			cur_panel->reshape(result_width, cur_panel->getRect().getHeight());
-			current_width = result_width;
-		}
-
-		is_set = showButton(object_type, current_width);
-
-		// Shrink buttons if needed
-		if (is_set && decrease_width)
-		{
-			processWidthDecreased( -result_width);
-		}
-	}
-	else
-	{
-		const S32 delta_width = get_curr_width(cur_panel);
-
-		setTrayButtonVisible(object_type, false);
-
-		// Mark button NOT to show while future bottom tray extending
-		lldebugs << "Removing " << resizeStateToString(object_type) << " from mResizeState" << llendl;
-		setAutoHidden(object_type, false);
-
-		// Extend other buttons if need
-		if (delta_width)
-		{
-			processWidthIncreased(delta_width);
-		}
-	}
-	return is_set;
-}
-
-LLPanel* LLBottomTray::getButtonPanel(EResizeState button_type)
-{
-	// Don't use the operator[] because it inserts a NULL value if the key is not found.
-	if (mStateProcessedObjectMap.count(button_type) == 0)
-	{
-		llwarns << "Cannot find a panel for " << resizeStateToString(button_type) << llendl;
-		llassert(mStateProcessedObjectMap.count(button_type) == 1);
-		return NULL;
-	}
-
-	return mStateProcessedObjectMap[button_type];
-}
-
-void LLBottomTray::showWellButton(EResizeState object_type, bool visible)
-{
-	llassert( ((RS_NOTIFICATION_WELL | RS_IM_WELL) & object_type) == object_type );
-
-	const std::string panel_name = RS_IM_WELL == object_type ? "im_well_panel" : "notification_well_panel";
-
-	LLView * panel = getChild<LLView>(panel_name);
-
-	// if necessary visibility is set nothing to do here
-	if (panel->getVisible() == (BOOL)visible) return;
-
-	S32 panel_width = panel->getRect().getWidth();
-	panel->setVisible(visible);
-
-	if (visible)
-	{
-		// method assumes that input param is a negative value
-		processWidthDecreased(-panel_width);
-	}
-	else
-	{
-		processWidthIncreased(panel_width);
-	}
-}
-
-void LLBottomTray::processChatbarCustomization(S32 new_width)
-{
-	if (NULL == mNearbyChatBar) return;
-
-	const S32 delta_width = mChatBarContainer->getRect().getWidth() - new_width;
-
-	if (delta_width == 0) return;
-
-	{
-		static unsigned dbg_cnt = 0;
-		lldebugs << llformat("*** (%03d) ************************************* %d", delta_width, ++dbg_cnt) << llendl;
-	}
-
-	mDesiredNearbyChatWidth = new_width;
-
-	const S32 available_chiclet_shrink_width = getChicletPanelShrinkHeadroom();
-	llassert(available_chiclet_shrink_width >= 0);
-
-	if (delta_width > 0) // panel gets narrowly
-	{
-		S32 total_possible_width = delta_width + available_chiclet_shrink_width;
-		processShowButtons(total_possible_width);
-		processExtendButtons(total_possible_width);
-	}
-	// here (delta_width < 0) // panel gets wider
-	else //if (-delta_width > available_chiclet_shrink_width)
-	{
-		S32 required_width = delta_width + available_chiclet_shrink_width;
-		S32 buttons_freed_width = 0;
-		processShrinkButtons(required_width, buttons_freed_width);
-		processHideButtons(required_width, buttons_freed_width);
-	}
-}
-
-S32 LLBottomTray::getChicletPanelShrinkHeadroom() const
-{
-	static const S32 min_width = mChicletPanel->getMinWidth();
-	const S32 cur_width = mChicletPanel->getParent()->getRect().getWidth();
-
-	S32 shrink_headroom = cur_width - min_width;
-	llassert(shrink_headroom >= 0); // the panel cannot get narrower than the minimum
-	return shrink_headroom;
-}
-
-// static
-std::string LLBottomTray::resizeStateToString(EResizeState state)
-{
-	const char *rs_string = "UNKNOWN_BUTTON";
-	
-	switch (state)
-	{
-		case RS_NORESIZE:               rs_string = "RS_NORESIZE";              break;
-		case RS_CHICLET_PANEL:          rs_string = "RS_CHICLET_PANEL";         break;
-		case RS_CHATBAR_INPUT:          rs_string = "RS_CHATBAR_INPUT";         break;
-		case RS_BUTTON_SNAPSHOT:        rs_string = "RS_BUTTON_SNAPSHOT";       break;
-		case RS_BUTTON_CAMERA:          rs_string = "RS_BUTTON_CAMERA";         break;
-		case RS_BUTTON_MOVEMENT:        rs_string = "RS_BUTTON_MOVEMENT";       break;
-		case RS_BUTTON_GESTURES:        rs_string = "RS_BUTTON_GESTURES";       break;
-		case RS_BUTTON_SPEAK:           rs_string = "RS_BUTTON_SPEAK";          break;
-		case RS_IM_WELL:                rs_string = "RS_IM_WELL";               break;
-		case RS_NOTIFICATION_WELL:      rs_string = "RS_NOTIFICATION_WELL";     break;
-		case RS_BUTTON_BUILD:           rs_string = "RS_BUTTON_BUILD";          break;
-		case RS_BUTTON_SEARCH:          rs_string = "RS_BUTTON_SEARCH";         break;
-		case RS_BUTTON_WORLD_MAP:       rs_string = "RS_BUTTON_WORLD_MAP";      break;
-		case RS_BUTTON_MINI_MAP:        rs_string = "RS_BUTTON_MINI_MAP";       break;
-		case RS_BUTTON_DESTINATIONS:    rs_string = "RS_BUTTON_DESTINATIONS";   break;
-		case RS_BUTTON_AVATARS:         rs_string = "RS_BUTTON_AVATARS";        break;
-		case RS_BUTTON_PEOPLE:          rs_string = "RS_BUTTON_PEOPLE";         break;
-		case RS_BUTTON_PROFILE:         rs_string = "RS_BUTTON_PROFILE";        break;
-		case RS_BUTTON_HOWTO:           rs_string = "RS_BUTTON_HOWTO";          break;
-		case RS_BUTTON_SPLITTER_1:      rs_string = "RS_BUTTON_SPLITTER_1";     break;
-		case RS_BUTTON_SPLITTER_2:      rs_string = "RS_BUTTON_SPLITTER_2";     break;
-		case RS_BUTTONS_CAN_BE_HIDDEN:  rs_string = "RS_BUTTONS_CAN_BE_HIDDEN"; break;
-		// No default to track additions.
-	}
-
-	return rs_string;
-}
-
-// static
-std::string LLBottomTray::resizeStateMaskToString(MASK mask)
-{
-	std::string res;
-
-	bool add_delimiter = false;
-    for (U32 i = 0; i < 16; i++)
-    {
-    	EResizeState state = (EResizeState) (1 << i);
-    	if (mask & state)
-    	{
-    		if (!add_delimiter)
-    		{
-    			add_delimiter = true;
-    		}
-    		else
-    		{
-    			res += ", ";
-    		}
-
-			res += resizeStateToString(state);
-    	}
-    }
-
-    if (res.empty())
-    {
-    	res = resizeStateToString(RS_NORESIZE);
-    }
-
-    res += llformat(" (0x%X)", mask);
-    return res;
-}
-
-bool LLBottomTray::isAutoHidden(MASK button_types) const
-{
-	return (mResizeState & button_types) != 0;
-}
-
-void LLBottomTray::setAutoHidden(MASK button_types, bool hide)
-{
-	if (hide)
-	{
-		mResizeState |= button_types;
-	}
-	else
-	{
-		mResizeState &= ~button_types;
-	}
-}
-
-//EOF
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
deleted file mode 100644
index e26b0792e93370eda7d2dbf3f0e284d442aacc4d..0000000000000000000000000000000000000000
--- a/indra/newview/llbottomtray.h
+++ /dev/null
@@ -1,564 +0,0 @@
-/** 
-* @file llbottomtray.h
-* @brief LLBottomTray class header file
-*
-* $LicenseInfo:firstyear=2009&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-* 
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#ifndef LL_LLBOTTOMPANEL_H
-#define LL_LLBOTTOMPANEL_H
-
-#include "llpanel.h"
-#include "llimview.h"
-#include "llbutton.h"
-
-class LLChicletPanel;
-class LLLayoutStack;
-class LLSpeakButton;
-class LLNearbyChatBar;
-class LLIMChiclet;
-class LLBottomTrayLite;
-class LLLayoutPanel;
-class LLMenuGL;
-class LLNearbyChatBarListener;
-
-// Build time optimization, generate once in .cpp file
-#ifndef LLBOTTOMTRAY_CPP
-extern template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance();
-#endif
-
-/**
- * Class for buttons that should have drag'n'drop ability in bottomtray.
- * These buttons pass mouse events handling to bottomtray.
- */
-class LLBottomtrayButton : public LLButton
-{
-public:
-	struct Params : public LLInitParam::Block<Params, LLButton::Params>
-	{
-		Optional<bool> can_drag;
-		Params()
-		: can_drag("can_drag", true){}
-	};
-	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
-	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
-	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
-
-protected:
-	LLBottomtrayButton(const Params& p)
-	:	LLButton(p),
-		mCanDrag(p.can_drag)
-	{
-
-	}
-	friend class LLUICtrlFactory;
-
-	bool mCanDrag;
-};
-
-class LLBottomTray 
-	: public LLSingleton<LLBottomTray>
-	, public LLPanel
-	, public LLIMSessionObserver
-	, public LLVoiceClientStatusObserver
-{
-	LOG_CLASS(LLBottomTray);
-	friend class LLSingleton<LLBottomTray>;
-	friend class LLBottomTrayLite;
-public:
-	~LLBottomTray();
-
-	BOOL postBuild();
-
-	LLChicletPanel*		getChicletPanel()	{return mChicletPanel;}
-	LLNearbyChatBar*		getNearbyChatBar();
-
-	void onCommitGesture(LLUICtrl* ctrl);
-
-	// LLIMSessionObserver observe triggers
-	virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id);
-	virtual void sessionRemoved(const LLUUID& session_id);
-	void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id);
-
-	S32 getTotalUnreadIMCount();
-
-	virtual void reshape(S32 width, S32 height, BOOL called_from_parent);
-
-	virtual void setVisible(BOOL visible);
-
-	/*virtual*/ S32 notifyParent(const LLSD& info);
-
-	// Implements LLVoiceClientStatusObserver::onChange() to enable the speak
-	// button when voice is available
-	/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
-
-	void showBottomTrayContextMenu(S32 x, S32 y, MASK mask);
-
-	void showSpeakButton(bool visible);
-
-	void toggleMovementControls();
-	void toggleCameraControls();
-
-	void onMouselookModeIn();
-	void onMouselookModeOut();
-
-	/**
-	 * Creates IM Chiclet based on session type (IM chat or Group chat)
-	 */
-	LLIMChiclet* createIMChiclet(const LLUUID& session_id);
-
-	// Below are methods that were introduced or overriden in bottomtray to handle drag'n'drop
-
-	virtual void draw();
-
-	/**
-	 * These three methods handle drag'n'drop, they may be called directly from child buttons.
-	 * handleHover and other virtual handle* couldn't be used here, because we should call LLPanel::handle*,
-	 * but x and y here are often outside of bottomtray.
-	 */
-	void onDraggableButtonHover(S32 x, S32 y);
-	void onDraggableButtonMouseDown(LLUICtrl* button, S32 x, S32 y);
-	void onDraggableButtonMouseUp(LLUICtrl* button, S32 x, S32 y);
-
-
-private:
-	typedef enum e_resize_state
-	{
-		RS_NORESIZE				= 0x0000,
-		RS_CHICLET_PANEL		= 0x0001,
-		RS_CHATBAR_INPUT		= 0x0002,
-		RS_BUTTON_SNAPSHOT		= 0x0004,
-		RS_BUTTON_CAMERA		= 0x0008,
-		RS_BUTTON_MOVEMENT		= 0x0010,
-		RS_BUTTON_GESTURES		= 0x0020,
-		RS_BUTTON_SPEAK			= 0x0040,
-		RS_IM_WELL				= 0x0080,
-		RS_NOTIFICATION_WELL	= 0x0100,
-		RS_BUTTON_BUILD			= 0x0200,
-		RS_BUTTON_SEARCH		= 0x0400,
-		RS_BUTTON_WORLD_MAP		= 0x0800,
-		RS_BUTTON_MINI_MAP		= 0x1000,
-		RS_BUTTON_DESTINATIONS	= 0x2000,
-		RS_BUTTON_AVATARS		= 0x4000,
-		RS_BUTTON_PEOPLE		= 0x8000,
-		RS_BUTTON_PROFILE		= 0x10000,
-		RS_BUTTON_HOWTO			= 0x20000,
-		RS_BUTTON_SPLITTER_1	= 0x40000,
-		RS_BUTTON_SPLITTER_2	= 0x80000,
-
-		/*
-		Once new button that can be hidden on resize is added don't forget to update related places:
-			- RS_BUTTONS_CAN_BE_HIDDEN enum value below.
-			- initResizeStateContainers(): mStateProcessedObjectMap and mButtonsProcessOrder
-		*/
-
-		/**
-		 * Specifies buttons which can be hidden when bottom tray is shrunk.
-		 * They are: Gestures, Movement (Move), Camera (View), Snapshot
-		 *		new: Build, Search, Map, World Map, Mini-Map, destinations, avatars
-		 */
-		RS_BUTTONS_CAN_BE_HIDDEN = RS_BUTTON_SNAPSHOT | RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES
-									| RS_BUTTON_BUILD | RS_BUTTON_SEARCH | RS_BUTTON_WORLD_MAP | RS_BUTTON_MINI_MAP
-									| RS_BUTTON_DESTINATIONS | RS_BUTTON_AVATARS
-	}EResizeState;
-
-	// Below are three methods that were introduced to handle drag'n'drop
-
-	/**
-	 * finds a panel under the specified LOCAL point
-	 */
-	LLPanel* findChildPanelByLocalCoords(S32 x, S32 y);
-
-	/**
-	 * checks whether the cursor is over an area where the dragged button may be dropped
-	 */
-	bool isCursorOverDraggableArea(S32 x, S32 y);
-
-	/**
-	 * Updates process(shrink/show/hide) order of buttons and order in which they'll be stored for further save/load.
-	 * It is called when dragged button is dropped
-	 */
-	void updateButtonsOrdersAfterDnD();
-
-	// saves order of buttons to file on disk
-	void saveButtonsOrder();
-	// reads order of buttons from file on disk
-	void loadButtonsOrder();
-
-	/**
-	 * Updates child controls size and visibility when it is necessary to reduce total width.
-	 *
-	 * Process order:
-	 *	- reduce chiclet panel to its minimal width;
-	 *  - reduce chatbar to its minimal width;
-	 *  - reduce visible buttons from right to left to their minimal width;
-	 *  - hide visible buttons from right to left;
-	 * When button is hidden chatbar extended to fill released space if it is necessary.
-	 *
-	 * @param[in] delta_width - value by which bottom tray should be shrunk. It is a negative value.
-	 * @return positive value which bottom tray can not process when it reaches its minimal width.
-	 *		Zero if there was enough space to process delta_width.
-	 */
-	S32 processWidthDecreased(S32 delta_width);
-
-	/**
-	 * Updates child controls size and visibility when it is necessary to extend total width.
-	 *
-	 * Process order:
-	 *  - show invisible buttons should be shown from left to right if possible;
-	 *  - extend visible buttons from left to right to their default width;
-	 *  - extend chatbar to its maximal width;
-	 *	- extend chiclet panel to all available space;
-	 * When chatbar & chiclet panels are wider then their minimal width they can be reduced to allow
-	 * a button gets visible in case if passed delta_width is not enough (chatbar first).
-	 *
-	 * @param[in] delta_width - value by which bottom tray should be extended. It is a positive value.
-	 */
-	void processWidthIncreased(S32 delta_width);
-
-	/** helper function to log debug messages */
-	void log(LLView* panel, const std::string& descr);
-
-	/**
-	 * Tries to show hidden by resize buttons using available width.
-	 *
-	 * Gets buttons visible if there is enough space. Reduces available_width in this case.
-	 *
-	 * @params[in, out] available_width - reference to available width to be used to show buttons.
-	 * @see processShowButton()
-	 * @return consumed pixels (difference in available width).
-	 */
-	S32 processShowButtons(S32& available_width);
-
-	/**
-	 * Tries to show panel with specified button using available width.
-	 *
-	 * Shows button specified by type if there is enough space. Reduces available_width in this case.
-	 *
-	 * @params[in] shown_object_type - type of button to be shown.
-	 * @params[in, out] available_width - reference to available width to be used to show button.
-	 *
-	 * @return true if button can be shown, false otherwise
-	 */
-	bool processShowButton(EResizeState shown_object_type, S32& available_width);
-
-	/**
-	 * Hides visible panels with all buttons that may be hidden by resize if it is necessary.
-	 *
-	 * When button gets hidden some space is released in bottom tray.
-	 * This space is taken into account for several consecutive calls for several buttons.
-	 *
-	 * @params[in, out] required_width - reference to required width to be released. This is a negative value.
-	 *			Its absolute value is decreased by shown panel width.
-	 * @params[in, out] buttons_freed_width - reference to value released over required one.
-	 *			If panel's width is more than required difference is added to buttons_freed_width.
-	 * @see processHideButton()
-	 */
-	void processHideButtons(S32& required_width, S32& buttons_freed_width);
-
-	/**
-	 * Hides panel with specified button if it is visible.
-	 *
-	 * When button gets hidden some space is released in bottom tray.
-	 * This space is taken into account for several consecutive calls for several buttons.
-	 *
-	 * @params[in] processed_object_type - type of button to be hide.
-	 * @params[in, out] required_width - reference to required width to be released. This is a negative value.
-	 *			Its absolute value is decreased by panel width.
-	 * @params[in, out] buttons_freed_width - reference to value released over required one.
-	 *			If panel's width is more than required difference is added to buttons_freed_width.
-	 */
-	void processHideButton(EResizeState processed_object_type, S32& required_width, S32& buttons_freed_width);
-
-	/**
-	 * Shrinks shown buttons to reduce total taken space.
-	 *
-	 * Shrinks buttons that may be shrunk smoothly first. Then shrinks Speak button.
-	 *
-	 * @param[in, out] required_width - reference to width value which should be released when buttons are shrunk. It is a negative value.
-	 * It is increased on the value processed by buttons.
-	 * @params[in, out] buttons_freed_width - reference to value released over required one.
-	 *			If width of panel with Speak button is more than required that difference is added
-	 *				to buttons_freed_width.
-	 *			This is because Speak button shrinks discretely unlike other buttons which are changed smoothly.
-	 */
-	void processShrinkButtons(S32& required_width, S32& buttons_freed_width);
-
-	/**
-	 * Shrinks panel with specified button if it is visible.
-	 *
-	 * @params[in] processed_object_type - type of button to be shrunk.
-	 * @param[in, out] required_width - reference to width value which should be released when button is shrunk. It is a negative value.
-	 * It is increased on the value released by the button.
-	 */
-	void processShrinkButton(EResizeState processed_object_type, S32& required_width);
-
-	/**
-	 * Extends shown buttons to increase total taken space.
-	 *
-	 * Extends buttons that may be extended smoothly first. Then extends Speak button.
-	 *
-	 * @param[in, out] available_width - reference to width value which buttons can use to be extended.
-	 *		It is a positive value. It is decreased on the value processed by buttons.
-	 */
-	void processExtendButtons(S32& available_width);
-
-	/**
-	 * Extends the Speak button if there is enough headroom.
-	 *
-	 * Unlike other buttons, the Speak buttons has only two possible widths:
-	 * the minimal one (without label) and the maximal (default) one.
-	 *
-	 * If the button is at its minimum width there is not enough headroom to
-	 * reshape it to the maximum width, the method does nothing.
-	 *
-	 * @param available_width Available headroom.
-	 * @return false if the button requires extension but there's not enough headroom, true otherwise.
-	 */
-	bool processExtendSpeakButton(S32& available_width);
-
-	/**
-	 * Extends shown button to increase total taken space.
-	 *
-	 * @params[in] processed_object_type - type of button to be extended.
-	 * @param[in, out] available_width - reference to width value which button can use to be extended.
-	 *		It is a positive value. It is decreased on the value processed by buttons.
-	 */
-	void processExtendButton(EResizeState processed_object_type, S32& available_width);
-
-	/**
-	 * Determines if specified by type object can be shown. It should be hidden by shrink before.
-	 *
-	 * Processes buttons a such way to show buttons in constant order:
-	 *   - Gestures, Move, View, Snapshot
-	 */
-	bool canButtonBeShown(EResizeState processed_object_type) const;
-
-	/**
-	 * Initializes all containers stored data related to children resize state.
-	 *
-	 * @see mStateProcessedObjectMap
-	 * @see mObjectDefaultWidthMap
-	 * @see mButtonsProcessOrder
-	 */
-	void initResizeStateContainers();
-
-	/**
-	 * Initializes buttons' visibility depend on stored Control Settings.
-	 */
-	void initButtonsVisibility();
-
-	/**
-	 * Initializes listeners of Control Settings to toggle appropriate buttons' visibility.
-	 *
-	 * @see toggleShowButton()
-	 */
-	void setButtonsControlsAndListeners();
-
-	/**
-	 * Toggles visibility of specified button depend on passed value.
-	 *
-	 * @param button_type - type of button to be toggled
-	 * @param new_visibility - new visibility of the button
-	 *
-	 * @see setButtonsControlsAndListeners()
-	 */
-	static bool toggleShowButton(EResizeState button_type, const LLSD& new_visibility);
-
-	/**
-	 * Show the button if there is enough space.
-	 *
-	 * @param[in]      button_type -    type of button to be shown.
-	 * @param[in, out] available_width  amount of available space on the bottom bar.
-	 *
-	 * @return true if button was shown, false that's not possible (not enough space, etc)
-	 */
-	bool showButton(EResizeState button_type, S32& available_width);
-
-	/**
-	 * Sets passed visibility to object specified by resize type.
-	 */
-	void setTrayButtonVisible(EResizeState shown_object_type, bool visible);
-
-	/**
-	 * Sets passed visibility to object specified by resize type if it is possible.
-	 *
-	 * If it is impossible to show required button due to there is no enough room in bottom tray
-	 * it will no be shown. Is called via context menu commands.
-	 * In this case Alert Dialog will be shown to notify user about that.
-	 *
-	 * Method also stores resize state to be processed while future bottom tray extending:
-	 *  - if hidden while resizing button should be hidden it will not be shown while extending;
-	 *  - if hidden via context menu button should be shown but there is no enough room for now
-	 *    it will be shown while extending.
-	 */
-	void setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification = true);
-
-	/**
-	 * Sets passed visibility to required button and fit widths of shown
-	 * buttons(notice that method can shrink widths to
-	 * allocate needed room in bottom tray).
-	 * Returns true if visibility of required button was set.
-	 */
-	bool setVisibleAndFitWidths(EResizeState object_type, bool visible);
-
-	/**
-	 * Get panel containing the given button.
-	 *
-	 * @see mStateProcessedObjectMap
-	 */
-	LLPanel* getButtonPanel(EResizeState button_type);
-
-	/**
-	 * Shows/hides panel with specified well button (IM or Notification)
-	 *
-	 * @param[in] object_type - type of well button to be processed.
-	 *		Must be one of RS_IM_WELL or RS_NOTIFICATION_WELL.
-	 * @param[in] visible - flag specified whether button should be shown or hidden.
-	 */
-	void showWellButton(EResizeState object_type, bool visible);
-
-	/**
-	 * Handles a customization of chatbar width.
-	 *
-	 * When chatbar gets wider layout stack will reduce chiclet panel (it is auto-resizable)
-	 *	But once chiclet panel reaches its minimal width Stack will force to reduce buttons width.
-	 *	including Speak button. The similar behavior is when chatbar gets narrowly.
-	 * This methods force resize behavior to resize buttons properly in these cases.
-	 */
-	void processChatbarCustomization(S32 new_width);
-
-	/**
-	 * @return difference between current chiclet panel width and the minimum.
-	 */
-	S32 getChicletPanelShrinkHeadroom() const;
-
-	/// Get button name for debugging.
-	static std::string resizeStateToString(EResizeState state);
-
-	/// Dump a mask for debugging
-	static std::string resizeStateMaskToString(MASK mask);
-
-	/// @return true if any of the the passed buttons have been auto-hidden due to lack of available space.
-	bool isAutoHidden(MASK button_types) const;
-
-	/**
-	 * (Un)Mark the buttons as hidden.
-	 *
-	 * Auto-hidden buttons are those that re-appear as soon as we have enough available space.
-	 */
-	void setAutoHidden(MASK button_types, bool hide);
-
-	/// Buttons automatically hidden due to lack of space.
-	MASK mResizeState;
-
-	/**
-	 * Mapping of button types to the layout panels the buttons are wrapped in.
-	 *
-	 * Used by getButtonPanel().
-	 */
-	typedef std::map<EResizeState, LLPanel*> state_object_map_t;
-	state_object_map_t mStateProcessedObjectMap;
-
-	/// Default (maximum) widths of the layout panels.
-	typedef std::map<EResizeState, S32> state_object_width_map_t;
-	state_object_width_map_t mObjectDefaultWidthMap;
-
-	typedef std::vector<EResizeState> resize_state_vec_t;
-
-	/**
-	 * Contains order in which child buttons should be processed in show/hide, extend/shrink methods.
-	 */
-	resize_state_vec_t mButtonsProcessOrder;
-
-	/**
-	 * Contains order in which child buttons are shown.
-	 * It traces order of all bottomtray buttons that may change place via drag'n'drop and should
-	 * save and load it between sessions. mButtonsProcessOrder is not enough for it because it contains only
-	 * buttons that may be hidden.
-	 */
-	resize_state_vec_t mButtonsOrder;
-
-protected:
-
-	LLBottomTray(const LLSD& key = LLSD());
-
-	static void* createNearbyChatBar(void* userdata);
-
-	void updateContextMenu(S32 x, S32 y, MASK mask);
-	void onContextMenuItemClicked(const LLSD& userdata);
-	bool onContextMenuItemEnabled(const LLSD& userdata);
-
-	// Either default or saved after user's manual resize width of nearby chat.
-	// Nearby chat will not always have it, because sometimes it can be shrunk on resize,
-	// but when possible it will be restored back to this value.
-	S32					mDesiredNearbyChatWidth;
-	LLChicletPanel* 	mChicletPanel;
-	LLPanel*			mSpeakPanel;
-	LLSpeakButton* 		mSpeakBtn;
-	LLNearbyChatBar*	mNearbyChatBar;
-	LLLayoutPanel*		mChatBarContainer;
-	LLPanel*		mNearbyCharResizeHandlePanel;
-	LLLayoutStack*		mToolbarStack;
-	LLMenuGL*			mBottomTrayContextMenu;
-	LLButton*			mCamButton;
-	LLButton*			mMovementButton;
-	LLBottomTrayLite*   mBottomTrayLite;
-	bool                mIsInLiteMode;
-
-	// Drag'n'Drop
-
-	/**
-	 * Is true if mouse down happened on draggable button.
-	 * Set false whether on drag start or on mouse up.
-	 */
-	bool mCheckForDrag;
-	/**
-	 * These two variables hold corrdinates of mouse down on draggable button.
-	 * They are used to compare with current coordinates of cursor and determine whether drag'n'drop should start.
-	 */
-	S32 mStartX;
-	S32 mStartY;
-	/**
-	 * True if drag'n'drop is happening.
-	 */
-	bool mDragStarted;
-
-	/**
-	 * Pointer to panel which is currently dragged (though it seems to user that button is dragged,
-	 * we are changing place of layout panel).
-	 */
-	LLPanel* mDraggedItem;
-	/**
-	 * Panel before which the dragged button will be inserted.
-	 */
-	LLPanel* mLandingTab;
-	/**
-	 * Image used to show position where dragged button will be dropped.
-	 */
-	LLUIImage* mImageDragIndication;
-
-	// We want only one LLNearbyChatBarListener object, so it's tied to this singleton
-	boost::shared_ptr<LLNearbyChatBarListener> mListener;
-};
-
-#endif // LL_LLBOTTOMPANEL_H
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index 59842aeb6c810294877e4e99c137adf1a0773ac3..ca635eaa8f71a5c01eb7f00a195526dd7a8570a0 100644
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -58,7 +58,10 @@ LLChannelManager::~LLChannelManager()
 {
 	for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it !=  mChannelList.end(); ++it)
 	{
-		delete (*it).channel;
+		LLScreenChannelBase* channel = it->channel.get();
+		if (!channel) continue;
+
+		delete channel;
 	}
 
 	mChannelList.clear();
@@ -84,16 +87,19 @@ void LLChannelManager::onLoginCompleted()
 	// calc a number of all offline notifications
 	for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it !=  mChannelList.end(); ++it)
 	{
+		LLScreenChannelBase* channel = it->channel.get();
+		if (!channel) continue;
+
 		// don't calc notifications for Nearby Chat
-		if((*it).channel->getChannelID() == LLUUID(gSavedSettings.getString("NearByChatChannelUUID")))
+		if(channel->getChannelID() == LLUUID(gSavedSettings.getString("NearByChatChannelUUID")))
 		{
 			continue;
 		}
 
 		// don't calc notifications for channels that always show their notifications
-		if(!(*it).channel->getDisplayToastsAlways())
+		if(!channel->getDisplayToastsAlways())
 		{
-			away_notifications +=(*it).channel->getNumberOfHiddenToasts();
+			away_notifications +=channel->getNumberOfHiddenToasts();
 		}
 	}
 
@@ -157,7 +163,7 @@ LLScreenChannelBase*	LLChannelManager::addChannel(LLScreenChannelBase* channel)
 
 	ChannelElem new_elem;
 	new_elem.id = channel->getChannelID();
-	new_elem.channel = channel;
+	new_elem.channel = channel->getHandle();
 
 	mChannelList.push_back(new_elem); 
 
@@ -189,7 +195,7 @@ LLScreenChannelBase* LLChannelManager::findChannelByID(const LLUUID& id)
 	std::vector<ChannelElem>::iterator it = find(mChannelList.begin(), mChannelList.end(), id); 
 	if(it != mChannelList.end())
 	{
-		return (*it).channel;
+		return (*it).channel.get();
 	}
 
 	return NULL;
@@ -211,7 +217,10 @@ void LLChannelManager::muteAllChannels(bool mute)
 	for (std::vector<ChannelElem>::iterator it = mChannelList.begin();
 			it != mChannelList.end(); it++)
 	{
-		it->channel->setShowToasts(!mute);
+		if (it->channel.get())
+		{
+			it->channel.get()->setShowToasts(!mute);
+		}
 	}
 }
 
diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h
index 671e545465e20c6c07d2660b9d9762981db2f764..a5de8a53271dc434fa5cae04ad7ee59d1ce47705 100644
--- a/indra/newview/llchannelmanager.h
+++ b/indra/newview/llchannelmanager.h
@@ -48,10 +48,10 @@ class LLChannelManager : public LLSingleton<LLChannelManager>
 
 	struct ChannelElem
 	{
-		LLUUID				id;
-		LLScreenChannelBase*	channel;
+		LLUUID							id;
+		LLHandle<LLScreenChannelBase>	channel;
 
-		ChannelElem() : id(LLUUID("")), channel(NULL) { }
+		ChannelElem() { }
 
 		ChannelElem(const ChannelElem &elem)
 		{
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index fb3abb132b716bd9f581eecb82e8c5ccbe013338..d6095cce07d541e48297146c7c1e2164b96b6e77 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -60,7 +60,6 @@
 #include "llui.h"
 #include "llviewermenu.h"
 #include "lluictrlfactory.h"
-#include "llbottomtray.h"
 
 //
 // Globals
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 245157923ddfee6d3fc991bf937d778b49192d30..a0763749032d64ece9629dd31fead3d5194ca6e9 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -29,7 +29,7 @@
 
 #include "llagent.h"
 #include "llavataractions.h"
-#include "llbottomtray.h"
+#include "llchicletbar.h"
 #include "lleventtimer.h"
 #include "llgroupactions.h"
 #include "lliconctrl.h"
@@ -214,10 +214,10 @@ void LLSysWellChiclet::updateWidget(bool is_window_empty)
 {
 	mButton->setEnabled(!is_window_empty);
 
-	LLSD params;
-	params["well_empty"] = is_window_empty;
-	params["well_name"] = getName();
-	notifyParent(params);
+	if (LLChicletBar::instanceExists())
+	{
+		LLChicletBar::getInstance()->showWellButton(getName(), !is_window_empty);
+	}
 }
 // virtual
 BOOL LLSysWellChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -297,7 +297,7 @@ void LLIMWellChiclet::createMenu()
 void LLIMWellChiclet::messageCountChanged(const LLSD& session_data)
 {
 	const LLUUID& session_id = session_data["session_id"];
-	const S32 counter = LLBottomTray::getInstance()->getTotalUnreadIMCount();
+	const S32 counter = LLChicletBar::getInstance()->getTotalUnreadIMCount();
 	const bool im_not_visible = !LLFloaterReg::instanceVisible("im_container")
 		&& !LLFloaterReg::instanceVisible("impanel", session_id);
 
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a17e1d13f57ede0132061742e29a1f90462a13cf
--- /dev/null
+++ b/indra/newview/llchicletbar.cpp
@@ -0,0 +1,340 @@
+/** 
+ * @file llchicletbar.cpp
+ * @brief LLChicletBar class implementation
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llchicletbar.h"
+
+// library includes
+#include "llfloaterreg.h"
+#include "lllayoutstack.h"
+
+// newview includes
+#include "llchiclet.h"
+#include "llimfloater.h" // for LLIMFloater
+#include "llsyswellwindow.h"
+
+namespace
+{
+	const std::string& PANEL_CHICLET_NAME	= "chiclet_list_panel";
+
+	S32 get_panel_min_width(LLLayoutStack* stack, LLView* panel)
+	{
+		S32 minimal_width = 0;
+		llassert(stack);
+		if ( stack && panel && panel->getVisible() )
+		{
+			stack->getPanelMinSize(panel->getName(), &minimal_width);
+		}
+		return minimal_width;
+	}
+
+	S32 get_panel_max_width(LLLayoutStack* stack, LLPanel* panel)
+	{
+		S32 max_width = 0;
+		llassert(stack);
+		if ( stack && panel && panel->getVisible() )
+		{
+			stack->getPanelMaxSize(panel->getName(), &max_width);
+		}
+		return max_width;
+	}
+
+	S32 get_curr_width(LLUICtrl* ctrl)
+	{
+		S32 cur_width = 0;
+		if ( ctrl && ctrl->getVisible() )
+		{
+			cur_width = ctrl->getRect().getWidth();
+		}
+		return cur_width;
+	}
+}
+
+LLChicletBar::LLChicletBar(const LLSD&)
+:	mChicletPanel(NULL),
+	mToolbarStack(NULL)
+{
+	// Firstly add our self to IMSession observers, so we catch session events
+	// before chiclets do that.
+	LLIMMgr::getInstance()->addSessionObserver(this);
+
+	buildFromFile("panel_chiclet_bar.xml");
+}
+
+LLChicletBar::~LLChicletBar()
+{
+	if (!LLSingleton<LLIMMgr>::destroyed())
+	{
+		LLIMMgr::getInstance()->removeSessionObserver(this);
+	}
+}
+
+LLIMChiclet* LLChicletBar::createIMChiclet(const LLUUID& session_id)
+{
+	LLIMChiclet::EType im_chiclet_type = LLIMChiclet::getIMSessionType(session_id);
+
+	switch (im_chiclet_type)
+	{
+	case LLIMChiclet::TYPE_IM:
+		return getChicletPanel()->createChiclet<LLIMP2PChiclet>(session_id);
+	case LLIMChiclet::TYPE_GROUP:
+		return getChicletPanel()->createChiclet<LLIMGroupChiclet>(session_id);
+	case LLIMChiclet::TYPE_AD_HOC:
+		return getChicletPanel()->createChiclet<LLAdHocChiclet>(session_id);
+	case LLIMChiclet::TYPE_UNKNOWN:
+		break;
+	}
+
+	return NULL;
+}
+
+//virtual
+void LLChicletBar::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id)
+{
+	if (!getChicletPanel()) return;
+
+	LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
+	if (!session) return;
+
+	// no need to spawn chiclets for participants in P2P calls called through Avaline
+	if (session->isP2P() && session->isOtherParticipantAvaline()) return;
+
+	if (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return;
+
+	LLIMChiclet* chiclet = createIMChiclet(session_id);
+	if(chiclet)
+	{
+		chiclet->setIMSessionName(name);
+		chiclet->setOtherParticipantId(other_participant_id);
+		
+		LLIMFloater::onIMChicletCreated(session_id);
+
+	}
+	else
+	{
+		llwarns << "Could not create chiclet" << llendl;
+	}
+}
+
+//virtual
+void LLChicletBar::sessionRemoved(const LLUUID& session_id)
+{
+	if(getChicletPanel())
+	{
+		// IM floater should be closed when session removed and associated chiclet closed
+		LLIMFloater* iMfloater = LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);
+		if (iMfloater != NULL)
+		{
+			iMfloater->closeFloater();
+		}
+
+		getChicletPanel()->removeChiclet(session_id);
+	}
+}
+
+void LLChicletBar::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id)
+{
+	//this is only needed in case of outgoing ad-hoc/group chat sessions
+	LLChicletPanel* chiclet_panel = getChicletPanel();
+	if (chiclet_panel)
+	{
+		//it should be ad-hoc im chiclet or group im chiclet
+		LLChiclet* chiclet = chiclet_panel->findChiclet<LLChiclet>(old_session_id);
+		if (chiclet) chiclet->setSessionId(new_session_id);
+	}
+}
+
+S32 LLChicletBar::getTotalUnreadIMCount()
+{
+	return getChicletPanel()->getTotalUnreadIMCount();
+}
+
+BOOL LLChicletBar::postBuild()
+{
+	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
+	mChicletPanel = getChild<LLChicletPanel>("chiclet_list");
+
+	showWellButton("im_well", !LLIMWellWindow::getInstance()->isWindowEmpty());
+	showWellButton("notification_well", !LLNotificationWellWindow::getInstance()->isWindowEmpty());
+
+	return TRUE;
+}
+
+void LLChicletBar::showWellButton(const std::string& well_name, bool visible)
+{
+	LLView * panel = findChild<LLView>(well_name + "_panel");
+	if (!panel)	return;
+
+	panel->setVisible(visible);
+}
+
+void LLChicletBar::log(LLView* panel, const std::string& descr)
+{
+	if (NULL == panel) return;
+	LLView* layout = panel->getParent();
+	LL_DEBUGS("Chiclet Bar Rects") << descr << ": "
+		<< "panel: " << panel->getName()
+		<< ", rect: " << panel->getRect()
+		<< " layout: " << layout->getName()
+		<< ", rect: " << layout->getRect()
+		<< LL_ENDL;
+}
+
+void LLChicletBar::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+	static S32 debug_calling_number = 0;
+	lldebugs << "**************************************** " << ++debug_calling_number << llendl;
+
+	S32 current_width = getRect().getWidth();
+	S32 delta_width = width - current_width;
+	lldebugs << "Reshaping: "
+		<< ", width: " << width
+		<< ", cur width: " << current_width
+		<< ", delta_width: " << delta_width
+		<< ", called_from_parent: " << called_from_parent
+		<< llendl;
+
+	if (mChicletPanel)			log(mChicletPanel, "before");
+
+	// Difference between chiclet bar width required to fit its children and the actual width. (see EXT-991)
+	// Positive value means that chiclet bar is not wide enough.
+	// Negative value means that there is free space.
+	static S32 extra_shrink_width = 0;
+	bool should_be_reshaped = true;
+
+	if (mChicletPanel && mToolbarStack)
+	{
+		// Firstly, update layout stack to ensure we deal with correct panel sizes.
+		{
+			BOOL saved_anim = mToolbarStack->getAnimate();
+			// Set chiclet panel to be autoresized by default.
+			mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
+			// Disable animation to prevent layout updating in several frames.
+			mToolbarStack->setAnimate(FALSE);
+			// Force the updating of layout to reset panels collapse factor.
+			mToolbarStack->updateLayout();
+			// Restore animate state.
+			mToolbarStack->setAnimate(saved_anim);
+		}
+
+		// chiclet bar is narrowed
+		if (delta_width < 0)
+		{
+			if (extra_shrink_width > 0) // not enough space
+			{
+				extra_shrink_width += llabs(delta_width);
+				should_be_reshaped = false;
+			}
+			else
+			{
+				extra_shrink_width = processWidthDecreased(delta_width);
+
+				// increase new width to extra_shrink_width value to not reshape less than chiclet bar minimum
+				width += extra_shrink_width;
+			}
+		}
+		// chiclet bar is widened
+		else
+		{
+			if (extra_shrink_width > delta_width)
+			{
+				// Still not enough space.
+				// Only subtract the delta from the required delta and don't reshape.
+				extra_shrink_width -= delta_width;
+				should_be_reshaped = false;
+			}
+			else if (extra_shrink_width > 0)
+			{
+				// If we have some extra shrink width let's reduce delta_width & width
+				delta_width -= extra_shrink_width;
+				width -= extra_shrink_width;
+				extra_shrink_width = 0;
+			}
+		}
+	}
+
+	if (should_be_reshaped)
+	{
+		lldebugs << "Reshape all children with width: " << width << llendl;
+		LLPanel::reshape(width, height, called_from_parent);
+	}
+
+	if (mChicletPanel)			log(mChicletPanel, "after");
+}
+
+S32 LLChicletBar::processWidthDecreased(S32 delta_width)
+{
+	bool still_should_be_processed = true;
+
+	const S32 chiclet_panel_shrink_headroom = getChicletPanelShrinkHeadroom();
+
+	// Decreasing width of chiclet panel.
+	if (chiclet_panel_shrink_headroom > 0)
+	{
+		// we have some space to decrease chiclet panel
+		S32 shrink_by = llmin(-delta_width, chiclet_panel_shrink_headroom);
+
+		lldebugs << "delta_width: " << delta_width
+			<< ", panel_delta_min: " << chiclet_panel_shrink_headroom
+			<< ", shrink_by: " << shrink_by
+			<< llendl;
+
+		// is chiclet panel wide enough to process resizing?
+		delta_width += chiclet_panel_shrink_headroom;
+
+		still_should_be_processed = delta_width < 0;
+
+		lldebugs << "Shrinking chiclet panel by " << shrink_by << " px" << llendl;
+		mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - shrink_by, mChicletPanel->getParent()->getRect().getHeight());
+		log(mChicletPanel, "after processing panel decreasing via chiclet panel");
+
+		lldebugs << "RS_CHICLET_PANEL"
+			<< ", delta_width: " << delta_width
+			<< llendl;
+	}
+
+	S32 extra_shrink_width = 0;
+
+	if (still_should_be_processed)
+	{
+		extra_shrink_width = -delta_width;
+		llwarns << "There is no enough width to reshape all children: "
+			<< extra_shrink_width << llendl;
+	}
+
+	return extra_shrink_width;
+}
+
+S32 LLChicletBar::getChicletPanelShrinkHeadroom() const
+{
+	static const S32 min_width = mChicletPanel->getMinWidth();
+	const S32 cur_width = mChicletPanel->getParent()->getRect().getWidth();
+
+	S32 shrink_headroom = cur_width - min_width;
+	llassert(shrink_headroom >= 0); // the panel cannot get narrower than the minimum
+	return shrink_headroom;
+}
diff --git a/indra/newview/llchicletbar.h b/indra/newview/llchicletbar.h
new file mode 100644
index 0000000000000000000000000000000000000000..224dfbb64704b6f3ccce0c60e9a18b3490465339
--- /dev/null
+++ b/indra/newview/llchicletbar.h
@@ -0,0 +1,99 @@
+/** 
+* @file llchicletbar.h
+* @brief LLChicletBar class header file
+*
+* $LicenseInfo:firstyear=2011&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2011, Linden Research, Inc.
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+* 
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+* 
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+* 
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+* $/LicenseInfo$
+*/
+
+#ifndef LL_LLCHICLETBAR_H
+#define LL_LLCHICLETBAR_H
+
+#include "llpanel.h"
+#include "llimview.h"
+
+class LLChicletPanel;
+class LLIMChiclet;
+class LLLayoutPanel;
+class LLLayoutStack;
+
+class LLChicletBar
+	: public LLSingleton<LLChicletBar>
+	, public LLPanel
+	, public LLIMSessionObserver
+{
+	LOG_CLASS(LLChicletBar);
+	friend class LLSingleton<LLChicletBar>;
+public:
+	~LLChicletBar();
+
+	BOOL postBuild();
+
+	LLChicletPanel*	getChicletPanel() { return mChicletPanel; }
+
+	// LLIMSessionObserver observe triggers
+	virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id);
+	virtual void sessionRemoved(const LLUUID& session_id);
+	void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id);
+
+	S32 getTotalUnreadIMCount();
+
+	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
+
+	/**
+	 * Creates IM Chiclet based on session type (IM chat or Group chat)
+	 */
+	LLIMChiclet* createIMChiclet(const LLUUID& session_id);
+
+	/**
+	 * Shows/hides panel with specified well button (IM or Notification)
+	 *
+	 * @param well_name - name of the well panel to be processed.
+	 * @param visible - a flag specifying whether a button should be shown or hidden.
+	 */
+	void showWellButton(const std::string& well_name, bool visible);
+
+private:
+	/**
+	 * Updates child controls size and visibility when it is necessary to reduce total width.
+	 *
+	 * @param delta_width - value by which chiclet bar should be shrunk. It is a negative value.
+	 * @returns positive value which chiclet bar can not process when it reaches its minimal width.
+	 *		Zero if there was enough space to process delta_width.
+	 */
+	S32 processWidthDecreased(S32 delta_width);
+
+	/** helper function to log debug messages */
+	void log(LLView* panel, const std::string& descr);
+
+	/**
+	 * @return difference between current chiclet panel width and the minimum.
+	 */
+	S32 getChicletPanelShrinkHeadroom() const;
+
+protected:
+	LLChicletBar(const LLSD& key = LLSD());
+
+	LLChicletPanel* 	mChicletPanel;
+	LLLayoutStack*		mToolbarStack;
+};
+
+#endif // LL_LLCHICLETBAR_H
diff --git a/indra/newview/llfloatersounddevices.cpp b/indra/newview/llfloatersounddevices.cpp
index e692f1735ae39b72ff26a4e5c745db40d6132a00..56c08065467922891df3c93139c4d2e431085dc2 100644
--- a/indra/newview/llfloatersounddevices.cpp
+++ b/indra/newview/llfloatersounddevices.cpp
@@ -28,7 +28,6 @@
 
 #include "llfloatersounddevices.h"
 
-#include "llbottomtray.h"
 #include "lldraghandle.h"
 
 #include "llpanelvoicedevicesettings.h"
@@ -55,9 +54,6 @@ LLFloaterSoundDevices::~LLFloaterSoundDevices()
 BOOL LLFloaterSoundDevices::postBuild()
 {
 	LLTransientDockableFloater::postBuild();
-		
-	LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("flyout_btn");
-	setDockControl(new LLDockControl(anchor_panel, this, getDockTongue(), LLDockControl::TOP));
 
 	setIsChrome(TRUE);
 	if (mDragHandle)
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 14d85246e947771fd0248049ba6bc0c7c597cafb..f5cda52d444e2f8f2741357a558eb4923da9d864 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -34,9 +34,9 @@
 #include "llappviewer.h"
 #include "llavatarnamecache.h"
 #include "llbutton.h"
-#include "llbottomtray.h"
 #include "llchannelmanager.h"
 #include "llchiclet.h"
+#include "llchicletbar.h"
 #include "llfloaterreg.h"
 #include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container
 #include "llinventoryfunctions.h"
@@ -117,14 +117,14 @@ void LLIMFloater::onFocusLost()
 {
 	LLIMModel::getInstance()->resetActiveSessionID();
 	
-	LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, false);
+	LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, false);
 }
 
 void LLIMFloater::onFocusReceived()
 {
 	LLIMModel::getInstance()->setActiveSessionID(mSessionID);
 
-	LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);
+	LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);
 
 	if (getVisible())
 	{
@@ -444,7 +444,7 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
 		if (floater->getDockControl() == NULL)
 		{
 			LLChiclet* chiclet =
-					LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(
+					LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(
 							session_id);
 			if (chiclet == NULL)
 			{
@@ -452,11 +452,11 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
 			}
 			else
 			{
-				LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
+				LLChicletBar::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
 			}
 
 			floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(),
-					LLDockControl::TOP,  boost::bind(&LLIMFloater::getAllowedRect, floater, _1)));
+					LLDockControl::BOTTOM));
 		}
 
 		// window is positioned, now we can show it.
@@ -466,11 +466,6 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
 	return floater;
 }
 
-void LLIMFloater::getAllowedRect(LLRect& rect)
-{
-	rect = gViewerWindow->getWorldViewRectScaled();
-}
-
 void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
 {
 	// update notification channel state
@@ -522,7 +517,7 @@ void LLIMFloater::setVisible(BOOL visible)
 
 	if(!visible)
 	{
-		LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(mSessionID);
+		LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(mSessionID);
 		if(chiclet)
 		{
 			chiclet->setToggleState(false);
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index 8a3020ea10a42a20a29f0dae37063e1a983c09ca..f7cd35b5eb28d79d85f17298880e204a84cfe7a5 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -145,8 +145,6 @@ class LLIMFloater : public LLTransientDockableFloater
 	static void*	createPanelIMControl(void* userdata);
 	static void*	createPanelGroupControl(void* userdata);
 	static void* 	createPanelAdHocControl(void* userdata);
-	// gets a rect that bounds possible positions for the LLIMFloater on a screen (EXT-1111)
-	void getAllowedRect(LLRect& rect);
 
 	// Add the "User is typing..." indicator.
 	void addTypingIndicator(const LLIMInfo* im_info);
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index b3b0c93b9954c8389034eaf483c0d2fefa7cb528..0250af6a0efce2c8231f778d4e201b0beacc160b 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -41,7 +41,6 @@
 
 #include "llagent.h"
 #include "llbutton.h"
-#include "llbottomtray.h"
 #include "llcallingcard.h"
 #include "llchannelmanager.h"
 #include "llchat.h"
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 4602533736140d877c71962cec8ac553ae87d9db..64d5152ebe82345eebf024828d049f86e5b85e16 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -46,7 +46,6 @@
 #include "llagentui.h"
 #include "llappviewer.h"
 #include "llavatariconctrl.h"
-#include "llbottomtray.h"
 #include "llcallingcard.h"
 #include "llchat.h"
 #include "llimfloater.h"
@@ -1675,24 +1674,11 @@ LLCallDialog::~LLCallDialog()
 	LLUI::removePopup(this);
 }
 
-void LLCallDialog::getAllowedRect(LLRect& rect)
-{
-	rect = gViewerWindow->getWorldViewRectScaled();
-}
-
 BOOL LLCallDialog::postBuild()
 {
 	if (!LLDockableFloater::postBuild())
 		return FALSE;
 
-	// dock the dialog to the Speak Button, where other sys messages appear
-	LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("speak_panel");
-
-	setDockControl(new LLDockControl(
-		anchor_panel, this,
-		getDockTongue(), LLDockControl::TOP,
-		boost::bind(&LLCallDialog::getAllowedRect, this, _1)));
-
 	return TRUE;
 }
 
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 0ee56c8070488b5b6d22193bc1dce892ba7d55d0..93b604d36aa2fe82216e7175f837c932899d9a99 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -508,8 +508,6 @@ class LLCallDialog : public LLDockableFloater
 	virtual bool lifetimeHasExpired();
 	virtual void onLifetimeExpired();
 
-	virtual void getAllowedRect(LLRect& rect);
-
 	/**
 	 * Sets icon depend on session.
 	 *
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 573985b76eb8da339d75733d5717ce82a42c462d..3faf190618d35a72780c30bfd617b23790f65231 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -29,7 +29,6 @@
 #include "llagentdata.h" // for gAgentID
 #include "llnearbychathandler.h"
 
-#include "llbottomtray.h"
 #include "llchatitemscontainerctrl.h"
 #include "llfirstuse.h"
 #include "llfloaterscriptdebug.h"
@@ -374,7 +373,7 @@ void LLNearbyChatScreenChannel::arrangeToasts()
 
 	if (!getParent())
 	{
-		// connect to floater snap region to get resize events
+		// connect to floater snap region just to get resize events, we don't care about being a proper widget 
 		floater_snap_region->addChild(this);
 		setFollows(FOLLOWS_ALL);
 	}
@@ -384,11 +383,12 @@ void LLNearbyChatScreenChannel::arrangeToasts()
 
 	LLRect channel_rect;
 	floater_snap_region->localRectToOtherView(floater_snap_region->getLocalRect(), &channel_rect, gFloaterView);
+	channel_rect.mLeft += 10;
 	channel_rect.mRight = channel_rect.mLeft + 300;
 
 	S32 channel_bottom = channel_rect.mBottom;
 
-	S32		bottom = channel_bottom;
+	S32		bottom = channel_bottom + 10;
 	S32		margin = gSavedSettings.getS32("ToastGap");
 
 	//sort active toasts
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 0b687009bf83cd950105b52f52739ab49ea373c7..7e47a96f44e4278a8f5e86aadeccd5b32119817b 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -84,7 +84,7 @@ void LLPanelMe::buildEditPanel()
 		//       All profile editing should go through the web.
 		//mEditPanel->childSetAction("save_btn", boost::bind(&LLPanelMe::onSaveChangesClicked, this), this);
 
-		mEditPanel->childSetAction("cancel_btn", boost::bind(&LLPanelMe::onCancelClicked, this), this);
+		//mEditPanel->childSetAction("cancel_btn", boost::bind(&LLPanelMe::onCancelClicked, this), this);
 	}
 }
 
@@ -92,12 +92,6 @@ void LLPanelMe::buildEditPanel()
 void LLPanelMe::onEditProfileClicked()
 {
 	buildEditPanel();
-	togglePanel(mEditPanel, getAvatarId()); // open
-}
-
-void LLPanelMe::onCancelClicked()
-{
-	togglePanel(mEditPanel); // close
 }
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index 22cbb9e055ac1692094acafee17640f356e6641a..b0f5d184cc8ae5fdfd19f4d82f664da303e97f52 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -57,7 +57,6 @@ class LLPanelMe : public LLPanelProfile
 	void buildEditPanel();
 
 	void onEditProfileClicked();
-	void onCancelClicked();
 
 	LLPanelMyProfileEdit *  mEditPanel;
 
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 27390fca78468e6bacf044291a140737e39e98e6..5ce59d89599fd14aaa877940185cc96a1931e3be 100755
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -261,7 +261,6 @@ void LLPanelProfile::ChildStack::dump()
 
 LLPanelProfile::LLPanelProfile()
  : LLPanel()
- , mTabCtrl(NULL)
  , mAvatarId(LLUUID::null)
 {
 	mChildStack.setParent(this);
@@ -269,10 +268,6 @@ LLPanelProfile::LLPanelProfile()
 
 BOOL LLPanelProfile::postBuild()
 {
-	mTabCtrl = getChild<LLTabContainer>("tabs");
-
-	getTabCtrl()->setCommitCallback(boost::bind(&LLPanelProfile::onTabSelected, this, _2));
-
 	LLPanelPicks* panel_picks = findChild<LLPanelPicks>(PANEL_PICKS);
 	panel_picks->setProfilePanel(this);
 
@@ -293,18 +288,7 @@ void LLPanelProfile::reshape(S32 width, S32 height, BOOL called_from_parent)
 
 void LLPanelProfile::onOpen(const LLSD& key)
 {
-	// open the desired panel
-	if (key.has("open_tab_name"))
-	{
-		getTabContainer()[PANEL_PICKS]->onClosePanel();
-
-		// onOpen from selected panel will be called from onTabSelected callback
-		getTabCtrl()->selectTabByName(key["open_tab_name"]);
-	}
-	else
-	{
-		getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
-	}
+	getTabContainer()[PANEL_PICKS]->onOpen(getAvatarId());
 
 	// support commands to open further pieces of UI
 	if (key.has("show_tab_panel"))
@@ -362,23 +346,6 @@ void LLPanelProfile::onOpen(const LLSD& key)
 	}
 }
 
-void LLPanelProfile::togglePanel(LLPanel* panel, const LLSD& key)
-{
-	// TRUE - we need to open/expand "panel"
-	bool expand = getChildList()->front() != panel;  // mTabCtrl->getVisible();
-
-	if (expand)
-	{
-		openPanel(panel, key);
-	}
-	else 
-	{
-		closePanel(panel);
-
-		getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
-	}
-}
-
 void LLPanelProfile::onTabSelected(const LLSD& param)
 {
 	std::string tab_name = param.asString();
diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h
index fca359f51e1295ef68583dbdd6546c9ffe501498..bd4457c240b35594d27d4637f0cdd61c832d7b0e 100755
--- a/indra/newview/llpanelprofile.h
+++ b/indra/newview/llpanelprofile.h
@@ -46,8 +46,6 @@ class LLPanelProfile : public LLPanel
 	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	/*virtual*/ void onOpen(const LLSD& key);
 
-	virtual void togglePanel(LLPanel*, const LLSD& key = LLSD());
-
 	virtual void openPanel(LLPanel* panel, const LLSD& params);
 
 	virtual void closePanel(LLPanel* panel);
@@ -60,8 +58,6 @@ class LLPanelProfile : public LLPanel
 
 	virtual void onTabSelected(const LLSD& param);
 
-	LLTabContainer* getTabCtrl() { return mTabCtrl; }
-
 	const LLUUID& getAvatarId() { return mAvatarId; }
 
 	void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
@@ -97,7 +93,6 @@ class LLPanelProfile : public LLPanel
 	};
 	//-- ChildStack ends ------------------------------------------------------
 
-	LLTabContainer* mTabCtrl;	
 	profile_tabs_t mTabContainer;
 	ChildStack		mChildStack;
 	LLUUID mAvatarId;
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
index 4d8e3e9e931005052c3fdf465dd7bc2a20979416..f4f52eea1977b498342d49154c54db4f3b64088b 100644
--- a/indra/newview/llscreenchannel.h
+++ b/indra/newview/llscreenchannel.h
@@ -113,6 +113,7 @@ class LLScreenChannelBase : public LLUICtrl
 	
 	// get ID of a channel
 	LLUUID	getChannelID() { return mID; }
+	LLHandle<LLScreenChannelBase> getHandle() { mRootHandle.bind(this); return mRootHandle; }
 
 protected:
 	void	updateBottom();
@@ -124,6 +125,7 @@ class LLScreenChannelBase : public LLUICtrl
 	bool		mDisplayToastsAlways;
 	// controls whether a channel shows toasts or not
 	bool		mShowToasts;
+	LLRootHandle<LLScreenChannelBase> mRootHandle;
 	// 
 	EToastAlignment		mToastAlignment;
 	EChannelAlignment	mChannelAlignment;
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 170e23e4c5d98c1583162c8ee3466e942970defa..85a7e752715fa1d75321f387016bb462bbaaff0f 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -28,9 +28,9 @@
 #include "llscriptfloater.h"
 #include "llagentcamera.h"
 
-#include "llbottomtray.h"
 #include "llchannelmanager.h"
 #include "llchiclet.h"
+#include "llchicletbar.h"
 #include "llfloaterreg.h"
 #include "lllslconstants.h"
 #include "llnotifications.h"
@@ -95,7 +95,7 @@ bool LLScriptFloater::toggle(const LLUUID& notification_id)
 		show(notification_id);
 	}
 
-	LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(notification_id, true);
+	LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(notification_id, true);
 	return true;
 }
 
@@ -131,11 +131,6 @@ void LLScriptFloater::setNotificationId(const LLUUID& id)
 	mObjectId = notification_id_to_object_id(id);
 }
 
-void LLScriptFloater::getAllowedRect(LLRect& rect)
-{
-	rect = gViewerWindow->getWorldViewRectScaled();
-}
-
 void LLScriptFloater::createForm(const LLUUID& notification_id)
 {
 	// delete old form
@@ -211,7 +206,7 @@ void LLScriptFloater::setVisible(BOOL visible)
 
 	if(!visible)
 	{
-		LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
+		LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
 		if(chiclet)
 		{
 			chiclet->setToggleState(false);
@@ -224,7 +219,7 @@ void LLScriptFloater::onMouseDown()
 	if(getNotificationId().notNull())
 	{
 		// Remove new message icon
-		LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
+		LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
 		if (chiclet == NULL)
 		{
 			llerror("Dock chiclet for LLScriptFloater doesn't exist", 0);
@@ -267,7 +262,7 @@ void LLScriptFloater::onFocusLost()
 {
 	if(getNotificationId().notNull())
 	{
-		LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), false);
+		LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), false);
 	}
 }
 
@@ -276,7 +271,7 @@ void LLScriptFloater::onFocusReceived()
 	// first focus will be received before setObjectId() call - don't toggle chiclet
 	if(getNotificationId().notNull())
 	{
-		LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), true);
+		LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), true);
 	}
 }
 
@@ -284,7 +279,7 @@ void LLScriptFloater::dockToChiclet(bool dock)
 {
 	if (getDockControl() == NULL)
 	{
-		LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(getNotificationId());
+		LLChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(getNotificationId());
 		if (chiclet == NULL)
 		{
 			llwarns << "Dock chiclet for LLScriptFloater doesn't exist" << llendl;
@@ -292,7 +287,7 @@ void LLScriptFloater::dockToChiclet(bool dock)
 		}
 		else
 		{
-			LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
+			LLChicletBar::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
 		}
 
 		// Stop saving position while we dock floater
@@ -300,7 +295,7 @@ void LLScriptFloater::dockToChiclet(bool dock)
 		setSavePosition(false);
 
 		setDockControl(new LLDockControl(chiclet, this, getDockTongue(),
-			LLDockControl::TOP,  boost::bind(&LLScriptFloater::getAllowedRect, this, _1)));
+			LLDockControl::BOTTOM));
 
 		setDocked(dock);
 
@@ -352,7 +347,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
 		script_notification_map_t::const_iterator it = findUsingObjectId(object_id);
 		if(it != mNotifications.end())
 		{
-			LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(it->first);
+			LLIMChiclet* chiclet = LLChicletBar::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(it->first);
 			if(chiclet)
 			{
 				// Pass the new_message icon state further.
@@ -375,11 +370,11 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
 	// Create inventory offer chiclet for offer type notifications
 	if( OBJ_GIVE_INVENTORY == obj_type )
 	{
-		LLBottomTray::instance().getChicletPanel()->createChiclet<LLInvOfferChiclet>(notification_id);
+		LLChicletBar::instance().getChicletPanel()->createChiclet<LLInvOfferChiclet>(notification_id);
 	}
 	else
 	{
-		LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(notification_id);
+		LLChicletBar::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(notification_id);
 	}
 
 	LLIMWellWindow::getInstance()->addObjectRow(notification_id, set_new_message);
@@ -413,7 +408,7 @@ void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
 	}
 
 	// remove related chiclet
-	LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(notification_id);
+	LLChicletBar::getInstance()->getChicletPanel()->removeChiclet(notification_id);
 
 	LLIMWellWindow::getInstance()->removeObjectRow(notification_id);
 
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index 8e959a3d0e22eb12c53d649e7d491252e7699a03..70451194b38bbde051a7f5c3a7b1a9193db1d5d8 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -185,8 +185,6 @@ class LLScriptFloater : public LLDockableFloater
 	 */
 	void createForm(const LLUUID& object_id);
 
-	/*virtual*/ void getAllowedRect(LLRect& rect);
-
 	/**
 	 * Hide all notification toasts.
 	 */
diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
deleted file mode 100644
index bbe573c546e9764579184c2d511943271b7989af..0000000000000000000000000000000000000000
--- a/indra/newview/llspeakbutton.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/** 
-* @file llspeakbutton.cpp
-* @brief LLSpeakButton class implementation
-*
-* $LicenseInfo:firstyear=2002&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-* 
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#include "llviewerprecompiledheaders.h" // must be first include
-
-#include "llbutton.h"
-#include "llfloaterreg.h"
-
-#include "llagent.h"
-#include "llbottomtray.h"
-#include "llcallfloater.h"
-#include "lloutputmonitorctrl.h"
-#include "lltransientfloatermgr.h"
-
-#include "llspeakbutton.h"
-
-#include "llbottomtray.h"
-#include "llfirstuse.h"
-
-static LLDefaultChildRegistry::Register<LLSpeakButton> t1("talk_button");
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-LLSpeakButton::Params::Params()
-:	speak_button("speak_button"),
-	show_button("show_button"),
-	monitor("monitor")
-{}
-
-LLSpeakButton::LLSpeakButton(const Params& p)
-: LLUICtrl(p)
-, mOutputMonitor(NULL)
-, mSpeakBtn(NULL)
-, mShowBtn(NULL)
-{
-	LLRect rect = p.rect();
-	LLRect speak_rect(0, rect.getHeight(), rect.getWidth(), 0);
-	LLRect show_rect = p.show_button.rect();
-	show_rect.set(0, rect.getHeight(), show_rect.getWidth(), 0);
-
-	speak_rect.mRight -= show_rect.getWidth();
-	show_rect.mLeft = speak_rect.getWidth();
-	show_rect.mRight = rect.getWidth();
-
-	LLButton::Params speak_params = p.speak_button;
-	speak_params.rect(speak_rect);
-	mSpeakBtn = LLUICtrlFactory::create<LLButton>(speak_params);
-	addChild(mSpeakBtn);
-	LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn);
-
-	mSpeakBtn->setMouseDownCallback(boost::bind(&LLSpeakButton::onMouseDown_SpeakBtn, this));
-	mSpeakBtn->setMouseUpCallback(boost::bind(&LLSpeakButton::onMouseUp_SpeakBtn, this));
-	mSpeakBtn->setToggleState(FALSE);
-
-	LLBottomtrayButton::Params show_params = p.show_button;
-	show_params.rect(show_rect);
-	mShowBtn = LLUICtrlFactory::create<LLBottomtrayButton>(show_params);
-	addChild(mShowBtn);
-	LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn);
-
-// 	mShowBtn->setClickedCallback(boost::bind(&LLSpeakButton::onClick_ShowBtn, this));
-// 	mShowBtn->setToggleState(FALSE);
-
-	static const S32 MONITOR_RIGHT_PAD = 2;
-
-	LLRect monitor_rect = p.monitor.rect();
-	S32 monitor_height = monitor_rect.getHeight();
-	monitor_rect.mLeft = speak_rect.getWidth() - monitor_rect.getWidth() - MONITOR_RIGHT_PAD;
-	monitor_rect.mRight = speak_rect.getWidth() - MONITOR_RIGHT_PAD;
-	monitor_rect.mBottom = (rect.getHeight() / 2) - (monitor_height / 2);
-	monitor_rect.mTop = monitor_rect.mBottom + monitor_height;
-
-	LLOutputMonitorCtrl::Params monitor_params = p.monitor;
-	monitor_params.draw_border(false);
-	monitor_params.rect(monitor_rect);
-	monitor_params.auto_update(true);
-	monitor_params.speaker_id(gAgentID);
-	mOutputMonitor = LLUICtrlFactory::create<LLOutputMonitorCtrl>(monitor_params);
-	mSpeakBtn->addChild(mOutputMonitor);
-
-	// never show "muted" because you can't mute yourself
-	mOutputMonitor->setIsMuted(false);
-	mOutputMonitor->setIsAgentControl(true);
-
-	//*TODO find a better place to do that
-	LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLCallFloater::sOnCurrentChannelChanged, _1), true);
-}
-
-LLSpeakButton::~LLSpeakButton()
-{
-	if(LLTransientFloaterMgr::instanceExists())
-	{
-		LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn);
-		LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn);
-	}
-}
-
-void LLSpeakButton::setSpeakToolTip(const std::string& msg)
-{
-	mSpeakBtn->setToolTip(msg);
-}
-
-void LLSpeakButton::setShowToolTip(const std::string& msg)
-{
-	mShowBtn->setToolTip(msg);
-}
-
-void LLSpeakButton::setLabelVisible(bool visible)
-{
-	static std::string label_selected = mSpeakBtn->getLabelSelected();
-	static std::string label_unselected = mSpeakBtn->getLabelUnselected();
-
-	if (visible)
-	{
-		mSpeakBtn->setLabelSelected(label_selected);
-		mSpeakBtn->setLabelUnselected(label_unselected);
-	}
-	else
-	{
-		static LLStringExplicit empty_string("");
-		mSpeakBtn->setLabelSelected(empty_string);
-		mSpeakBtn->setLabelUnselected(empty_string);
-	}
-}
-
-//////////////////////////////////////////////////////////////////////////
-/// PROTECTED SECTION
-//////////////////////////////////////////////////////////////////////////
-void LLSpeakButton::onMouseDown_SpeakBtn()
-{
-	bool down = true;
-	LLVoiceClient::getInstance()->inputUserControlState(down); // this method knows/care about whether this translates into a toggle-to-talk or down-to-talk
-	LLFirstUse::speak(false);
-}
-void LLSpeakButton::onMouseUp_SpeakBtn()
-{
-	bool down = false;
-	LLVoiceClient::getInstance()->inputUserControlState(down);
-}
-
diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h
deleted file mode 100644
index 7db01112ef09dedc435f4c703680f26c2e694494..0000000000000000000000000000000000000000
--- a/indra/newview/llspeakbutton.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/** 
-* @file llspeakbutton.h
-* @brief LLSpeakButton class header file
-*
-* $LicenseInfo:firstyear=2002&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-* 
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
-
-#ifndef LL_LLSPEAKBUTTON_H
-#define LL_LLSPEAKBUTTON_H
-
-#include "llinitparam.h"
-#include "lluictrl.h"
-
-class LLCallFloater;
-class LLButton;
-class LLOutputMonitorCtrl;
-class LLBottomtrayButton;
-
-/*
- * Button displaying voice chat status. Displays voice chat options when
- * clicked.
-*/
-class LLSpeakButton : public LLUICtrl
-{
-public:
-
-	struct Params :	public LLInitParam::Block<Params, LLUICtrl::Params>
-	{
-		Optional<LLButton::Params> speak_button;
-		Optional<LLBottomtrayButton::Params> show_button;
-		Optional<LLOutputMonitorCtrl::Params> monitor;
-
-		Params();
-	};
-
-	/*virtual*/ ~LLSpeakButton();
-	
-	// *HACK: Need to put tooltips in a translatable location,
-	// the panel that contains this button.
-	void setSpeakToolTip(const std::string& msg);
-	void setShowToolTip(const std::string& msg);
-
-	/**
-	 * Sets visibility of speak button's label according to passed parameter.
-	 *
-	 * It removes label/selected label if "visible" is false and restores otherwise.
-	 *
-	 * @param visible if true - show label and selected label.
-	 * 
-	 * @see mSpeakBtn
-	 * @see LLBottomTray::processShrinkButtons()
-	 */
-	void setLabelVisible(bool visible);
-
-protected:
-	friend class LLUICtrlFactory;
-	LLSpeakButton(const Params& p);
-
-	void onMouseDown_SpeakBtn();
-	void onMouseUp_SpeakBtn();
-
-private:
-	LLButton*	mSpeakBtn;
-	LLBottomtrayButton*	mShowBtn;
-	LLHandle<LLFloater> mPrivateCallPanel;
-	LLOutputMonitorCtrl* mOutputMonitor;
-};
-
-#endif // LL_LLSPEAKBUTTON_H
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index cb49976e5f5be5c940bb026e8ef281f0c469330a..ffe864e2207785e3436c9581bb0c300e2d850fd8 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -35,16 +35,17 @@
 #include "llfloaterreg.h"
 #include "llnotifications.h"
 
-#include "llbottomtray.h"
 #include "llscriptfloater.h"
 #include "llviewercontrol.h"
 #include "llviewerwindow.h"
 
 #include "llchiclet.h"
+#include "llchicletbar.h"
 #include "lltoastpanel.h"
 #include "llnotificationmanager.h"
 #include "llnotificationsutil.h"
 #include "llspeakers.h"
+#include "lltoolbarview.h"
 
 //---------------------------------------------------------------------------------
 LLSysWellWindow::LLSysWellWindow(const LLSD& key) : LLTransientDockableFloater(NULL, true,  key),
@@ -139,15 +140,6 @@ void LLSysWellWindow::initChannel()
 	}
 }
 
-//---------------------------------------------------------------------------------
-void LLSysWellWindow::getAllowedRect(LLRect& rect)
-{
-	rect = gViewerWindow->getWorldViewRectScaled();
-}
-
-//---------------------------------------------------------------------------------
-
-
 //---------------------------------------------------------------------------------
 void LLSysWellWindow::setVisible(BOOL visible)
 {
@@ -156,8 +148,8 @@ void LLSysWellWindow::setVisible(BOOL visible)
 		if (NULL == getDockControl() && getDockTongue().notNull())
 		{
 			setDockControl(new LLDockControl(
-				LLBottomTray::getInstance()->getChild<LLView>(getAnchorViewName()), this,
-				getDockTongue(), LLDockControl::TOP, boost::bind(&LLSysWellWindow::getAllowedRect, this, _1)));
+				LLChicletBar::getInstance()->getChild<LLView>(getAnchorViewName()), this,
+				getDockTongue(), LLDockControl::BOTTOM));
 		}
 	}
 
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index 9f8ab0181088186d780f615782e01bfda607ba24..52e53705059c2576bf6f779cfdf3c3f2eae7918b 100644
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -76,11 +76,6 @@ class LLSysWellWindow : public LLTransientDockableFloater
 	static const S32 MIN_WINDOW_WIDTH		= 318;
 
 protected:
-
-	// gets a rect that bounds possible positions for the SysWellWindow on a screen (EXT-1111)
-	void getAllowedRect(LLRect& rect);
-
-
 	// init Window's channel
 	virtual void initChannel();
 
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index e5a80f24208b78f6f62285c6150dd692a41c072a..ee72ca2ce8e86e34c405cc4cea80c08f85a364b3 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -234,7 +234,6 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("mute_object_by_name", "floater_mute_object.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGetBlockedObjectName>);
 	LLFloaterReg::add("mini_map", "floater_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMap>);
 	LLFloaterReg::add("my_inventory", "floater_my_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
-	LLFloaterReg::add("my_profile", "floater_my_profile.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
 
 	LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationConsole>);
 	LLFloaterReg::add("notification_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNotificationWellWindow>);
@@ -251,6 +250,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);
 	LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);
 	LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);
+	LLFloaterReg::add("picks", "floater_picks.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
 	LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);
 	LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview");
 	LLFloaterReg::add("preview_gesture", "floater_preview_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewGesture>, "preview");
@@ -288,7 +288,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);
 	LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
 	LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
-	LLFloaterReg::add("profile", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);	
+	LLFloaterReg::add("profile", "floater_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);	
 	LLFloaterReg::add("how_to", "floater_how_to.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);	
 
 	
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index cfbe32a871c7656570ee2735eb395f636c672c7c..1e2537f1e2dba1727b66078d6c2fb7dddced3b11 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -42,7 +42,6 @@
 #include "llagentcamera.h"
 #include "llagentwearables.h"
 #include "llagentpilot.h"
-#include "llbottomtray.h"
 #include "llcompilequeue.h"
 #include "llconsole.h"
 #include "lldaycyclemanager.h"
@@ -6893,10 +6892,12 @@ class LLToggleHowTo : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		LLFloaterWebContent::Params p;
-		p.url = gSavedSettings.getString("HowToHelpURL");
+		std::string url = gSavedSettings.getString("HowToHelpURL");
+		p.url = LLWeb::expandURLSubstitutions(url, LLSD());
 		p.show_chrome = false;
 		p.target = "__help_how_to";
 		p.show_page_title = false;
+		p.preferred_media_size = LLRect(0, 460, 335, 0);
 
 		LLFloaterReg::toggleInstanceOrBringToFront("how_to", p);
 		return true;
@@ -7798,7 +7799,7 @@ class LLWorldToggleMovementControls : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		LLBottomTray::getInstance()->toggleMovementControls();
+		LLFloaterReg::toggleInstanceOrBringToFront("moveview");
 		return true;
 	}
 };
@@ -7807,7 +7808,7 @@ class LLWorldToggleCameraControls : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		LLBottomTray::getInstance()->toggleCameraControls();
+		LLFloaterReg::toggleInstanceOrBringToFront("camera");
 		return true;
 	}
 };
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 0873e4f6ea370d0539af4524352cd173eafb2acf..5bf174646ea64e0953537b083a5ca4c3fea9a290 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -84,6 +84,7 @@
 // newview includes
 #include "llagent.h"
 #include "llbox.h"
+#include "llchicletbar.h"
 #include "llconsole.h"
 #include "llviewercontrol.h"
 #include "llcylinder.h"
@@ -186,7 +187,6 @@
 #include "llviewerjoystick.h"
 #include "llviewernetwork.h"
 #include "llpostprocess.h"
-#include "llbottomtray.h"
 #include "llnearbychatbar.h"
 #include "llagentui.h"
 #include "llwearablelist.h"
@@ -1853,13 +1853,12 @@ void LLViewerWindow::initWorldUI()
 	//getRootView()->sendChildToFront(gFloaterView);
 	//getRootView()->sendChildToFront(gSnapshotFloaterView);
 
-	// new bottom panel
-	LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container");
-	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
-	bottom_tray->setShape(bottom_tray_container->getLocalRect());
-	bottom_tray->setFollowsAll();
-	bottom_tray_container->addChild(bottom_tray);
-	bottom_tray_container->setVisible(TRUE);
+	LLPanel* chiclet_container = getRootView()->getChild<LLPanel>("chiclet_container");
+	LLChicletBar* chiclet_bar = LLChicletBar::getInstance();
+	chiclet_bar->setShape(chiclet_container->getLocalRect());
+	chiclet_bar->setFollowsAll();
+	chiclet_container->addChild(chiclet_bar);
+	chiclet_container->setVisible(TRUE);
 
 	LLRect morph_view_rect = full_window;
 	morph_view_rect.stretch( -STATUS_BAR_HEIGHT );
@@ -1947,13 +1946,17 @@ void LLViewerWindow::initWorldUI()
 	if (destinations)
 	{
 		destinations->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
-		destinations->navigateTo(gSavedSettings.getString("DestinationGuideURL"), "text/html");
+		std::string url = gSavedSettings.getString("DestinationGuideURL");
+		url = LLWeb::expandURLSubstitutions(url, LLSD());
+		destinations->navigateTo(url, "text/html");
 	}
 	LLMediaCtrl* avatar_picker = LLFloaterReg::getInstance("avatar")->findChild<LLMediaCtrl>("avatar_picker_contents");
 	if (avatar_picker)
 	{
 		avatar_picker->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
-		avatar_picker->navigateTo(gSavedSettings.getString("AvatarPickerURL"), "text/html");
+		std::string url = gSavedSettings.getString("AvatarPickerURL");
+		url = LLWeb::expandURLSubstitutions(url, LLSD());
+		avatar_picker->navigateTo(url, "text/html");
 	}
 }
 
@@ -1980,7 +1983,7 @@ void LLViewerWindow::shutdownViews()
 	// *TODO: Make LLNavigationBar part of gViewerWindow
 	if (LLNavigationBar::instanceExists())
 	{
-	delete LLNavigationBar::getInstance();
+		delete LLNavigationBar::getInstance();
 	}
 
 	// destroy menus after instantiating navbar above, as it needs
@@ -2168,10 +2171,10 @@ void LLViewerWindow::reshape(S32 width, S32 height)
 // Hide normal UI when a logon fails
 void LLViewerWindow::setNormalControlsVisible( BOOL visible )
 {
-	if(LLBottomTray::instanceExists())
+	if(LLChicletBar::instanceExists())
 	{
-		LLBottomTray::getInstance()->setVisible(visible);
-		LLBottomTray::getInstance()->setEnabled(visible);
+		LLChicletBar::getInstance()->setVisible(visible);
+		LLChicletBar::getInstance()->setEnabled(visible);
 	}
 
 	if ( gMenuBarView )
@@ -4926,8 +4929,8 @@ S32 LLViewerWindow::getChatConsoleBottomPad()
 {
 	S32 offset = 0;
 
-	if(LLBottomTray::instanceExists())
-		offset += LLBottomTray::getInstance()->getRect().getHeight();
+	if(gToolBarView)
+		offset += gToolBarView->getChild<LLView>("bottom_toolbar_panel")->getRect().getHeight();
 
 	return offset;
 }
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 90a05cd9e5bc9a4ab459424821a34a4b9ad025c4..05cd1d79b0ce83123a1017f1eb9261c8dfbc4b46 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -55,7 +55,7 @@
 #include "llimview.h" // for LLIMMgr
 #include "llparcel.h"
 #include "llviewerparcelmgr.h"
-//#include "llfirstuse.h"
+#include "llfirstuse.h"
 #include "llspeakers.h"
 #include "lltrans.h"
 #include "llviewerwindow.h"
@@ -6258,6 +6258,19 @@ void LLVivoxVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::ESta
 		it = mStatusObservers.upper_bound(observer);
 	}
 
+	// skipped to avoid speak button blinking
+	if (   status != LLVoiceClientStatusObserver::STATUS_JOINING
+		&& status != LLVoiceClientStatusObserver::STATUS_LEFT_CHANNEL)
+	{
+		bool voice_status = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
+
+		gAgent.setVoiceConnected(voice_status);
+
+		if (voice_status)
+		{
+			LLFirstUse::speak(true);
+		}
+	}
 }
 
 void LLVivoxVoiceClient::addObserver(LLFriendObserver* observer)
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 7bc5453688315fa35d31f7ba7fd12d21f5dc0178..b2f35892d0ad768b793396d0de32650d63c965a4 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -210,6 +210,7 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url,
 	substitution["VERSION_BUILD"] = LLVersionInfo::getBuild();
 	substitution["CHANNEL"] = LLVersionInfo::getChannel();
 	substitution["GRID"] = LLGridManager::getInstance()->getGridLabel();
+	substitution["GRID_LOWERCASE"] = utf8str_tolower(LLGridManager::getInstance()->getGridLabel());
 	substitution["OS"] = LLAppViewer::instance()->getOSInfo().getOSStringSimple();
 	substitution["SESSION_ID"] = gAgent.getSessionID();
 	substitution["FIRST_LOGIN"] = gAgent.isFirstLogin();
diff --git a/indra/newview/skins/default/textures/toolbar_icons/mini_map.png b/indra/newview/skins/default/textures/toolbar_icons/mini_map.png
index b66af223bb27c0b1f6a6de76d4009a740436b8f7..ab0a6540563a128313e4437fec57cee2eed02097 100644
Binary files a/indra/newview/skins/default/textures/toolbar_icons/mini_map.png and b/indra/newview/skins/default/textures/toolbar_icons/mini_map.png differ
diff --git a/indra/newview/skins/default/textures/toolbar_icons/nearbyvoice.png b/indra/newview/skins/default/textures/toolbar_icons/nearbyvoice.png
index 46e299cb94235afffdf70d3c3c3b7b2e852c2815..77a7cd5f442ee8b3a81eb54f4bf0eaa18b68d2c5 100644
Binary files a/indra/newview/skins/default/textures/toolbar_icons/nearbyvoice.png and b/indra/newview/skins/default/textures/toolbar_icons/nearbyvoice.png differ
diff --git a/indra/newview/skins/default/textures/toolbar_icons/preferences.png b/indra/newview/skins/default/textures/toolbar_icons/preferences.png
index df80d926b583a0fe3b25041f0ea024dc8ace6bb6..4ccd7b8ae1eb24466c9eaeee91ae28498c92ae2c 100644
Binary files a/indra/newview/skins/default/textures/toolbar_icons/preferences.png and b/indra/newview/skins/default/textures/toolbar_icons/preferences.png differ
diff --git a/indra/newview/skins/default/textures/toolbar_icons/view.png b/indra/newview/skins/default/textures/toolbar_icons/view.png
index 5425af87e0e2624a0d4e35c16156a53318ae8364..ddf0df7c26fd9a54a44eb77cc27878aacc3df5b8 100644
Binary files a/indra/newview/skins/default/textures/toolbar_icons/view.png and b/indra/newview/skins/default/textures/toolbar_icons/view.png differ
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 20d0fa1c91a65e9feec8e6ef7751ed1742f6877e..afe8584a2d3777e99873473ad1ea0a7ce571f33b 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  open_positioning="specified"
- specified_left="683"
- specified_bottom="0"
+ specified_left="320"
+ specified_bottom="80"
  legacy_header_height="18"
  can_minimize="true"
  can_close="true"
diff --git a/indra/newview/skins/default/xui/en/floater_chat_bar.xml b/indra/newview/skins/default/xui/en/floater_chat_bar.xml
index 92297418012859d2427d4c8701461487b107461a..989b4a0580291b268ce78582cd65674b76793bbe 100644
--- a/indra/newview/skins/default/xui/en/floater_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/floater_chat_bar.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  open_positioning="specified"
- specified_left="150"
- specified_bottom="0"
+ specified_left="320"
+ specified_bottom="10"
  height="60"
  layout="topleft"
  legacy_header_height="25"
diff --git a/indra/newview/skins/default/xui/en/floater_how_to.xml b/indra/newview/skins/default/xui/en/floater_how_to.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0369ecbeff4a5426a01c11242c1e7c56c4b05beb
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_how_to.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+  legacy_header_height="18"
+  can_resize="true"
+  can_minimize="true" 
+  height="775"
+  layout="topleft"
+  min_height="360"
+  left="10000"
+  top="10" 
+  min_width="335"
+  name="floater_how_to"
+  single_instance="true"
+  save_rect="true"
+  title="HOW TO"
+  width="780"
+  filename="floater_web_content.xml"/>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index cbbd68beb3dcb44de24515e93b3714b4f9d96f8b..b7370580af49bd7feee49fe0da5ab000d5bd19a3 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  open_positioning="specified"
- specified_left="535"
- specified_bottom="0"
+ specified_left="558"
+ specified_bottom="80"
  legacy_header_height="18"
  can_dock="false"
  can_minimize="true"
diff --git a/indra/newview/skins/default/xui/en/floater_my_profile.xml b/indra/newview/skins/default/xui/en/floater_picks.xml
similarity index 86%
rename from indra/newview/skins/default/xui/en/floater_my_profile.xml
rename to indra/newview/skins/default/xui/en/floater_picks.xml
index 713515d041972b34894fb0bf4ba563d9253768f1..2d307028e46a09c8fe871f1c4759b8e934ca679a 100644
--- a/indra/newview/skins/default/xui/en/floater_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/floater_picks.xml
@@ -3,14 +3,14 @@
  open_positioning="cascading"
  can_close="true"
  can_resize="true"
- height="570"
+ height="572"
  help_topic="sidebar_me"
  min_width="333"
  min_height="440"
- name="floater_profile"
+ name="floater_picks"
  save_rect="true"
  save_visibility="true"
- title="MY PROFILE"
+ title="Picks"
  width="333" >
    <panel
     class="panel_me"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 896532e26b8bd1283e909cf557a57bbe062c8f6e..dd818e2e0659646b6f3d1dda5f582631dfda8640 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -7,8 +7,8 @@
   layout="topleft"
   min_height="400"
   min_width="500"
-  name="floater_web_content"
-  help_topic="search"
+  name="floater_search"
+  help_topic="floater_search"
   save_rect="true"
   save_visibility="true"
   title=""
diff --git a/indra/newview/skins/default/xui/en/floater_web_profile.xml b/indra/newview/skins/default/xui/en/floater_web_profile.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0225f78a9b55f9cb2890b3c0c41f725a673944b
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_web_profile.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater name="floater_web_profile"
+         help_topic="web_profile"
+         width="780"
+         height="775"
+         filename="floater_web_content.xml"/>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 4d3d431b3a73b0ab3653df229e680290531f16c6..b4be17e677b524bc666883e4039affdf27c3bdb0 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -8,13 +8,6 @@
  tab_stop="false" 
  name="main_view"
  width="1024">
-  <view top="0"
-      follows="all"
-      height="768"
-      left="0"
-      mouse_opaque="false"
-      name="world_view_rect"
-      width="1024"/>
   <layout_stack border_size="0"
                 follows="all"
                 mouse_opaque="false"
@@ -57,6 +50,13 @@
                   tab_stop="false" 
                   name="world_panel"
                   width="1024">
+      <view top="0"
+            follows="all"
+            height="500"
+            left="0"
+            mouse_opaque="false"
+            name="world_view_rect"
+            width="1024"/>
       <panel follows="left|top|right"
              height="19"
              left="0"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
deleted file mode 100644
index 2737746c0eb462cb3ba943843dab054361c248f1..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- background_visible="true"
- bg_alpha_color="DkGray"
- bg_opaque_color="DkGray"
- chrome="true"
- follows="left|bottom|right"
- focus_root="true"
- height="33"
- layout="topleft"
- left="0"
- name="bottom_tray"
- top="28"
- width="1310">
-  <string
-     name="DragIndicationImageName"
-     value="Accordion_ArrowOpened_Off" />
-  <string
-     name="SpeakBtnToolTip"
-     value="Turns microphone on/off" />
-  <string
-     name="VoiceControlBtnToolTip"
-     value="Shows/hides voice control panel" />
-  <layout_stack
-     border_size="0"
-     clip="false"
-     follows="all"
-     height="28"
-   layout="topleft"
-   left="0"
-     mouse_opaque="false"
-     name="toolbar_stack"
-     orientation="horizontal"
-     top="0"
-     width="1310">
-    <layout_panel
-         auto_resize="false"
-         user_resize="false"
-         min_width="2"
-         width="2" />
-    <layout_panel
-         auto_resize="false"
-         layout="topleft"
-         max_width="320"
-         min_width="214"
-         height="28"
-         mouse_opaque="false"
-		 name="chat_bar_layout_panel"
-         user_resize="true"
-     width="250" >
-          <panel
-            name="chat_bar"
-            filename="panel_nearby_chat_bar.xml"
-            left="0"
-            height="28"
-        width="248"
-            top="0"
-            mouse_opaque="false"
-            follows="left|right"
-          />
-    </layout_panel>
-    <!--
-         This 5px Panel is an indicator of where the resize handle is.
-         The panel provides a gap between the resize handle icon and a button to the right.  
-        -->
-    <layout_panel
-     auto_resize="false"
-     layout="topleft"
-     max_width="5"
-     min_width="5"
-     name="chat_bar_resize_handle_panel"
-     user_resize="false"
-     width="5">
-      <icon
-       follows="top|right"
-       height="25"
-       image_name="ChatBarHandle"
-       layout="topleft"
-       left="-7"
-       name="resize_handle"
-       top="4"
-       width="5" />
-    </layout_panel>
-    <layout_panel
-        auto_resize="false"
-        follows="left|right"
-        height="28"
-        layout="topleft"
-        min_height="28"
-        min_width="59"
-        mouse_opaque="false"
-        name="speak_panel"
-        top_delta="0"
-        user_resize="false"
-        width="108">
-      <talk_button
-       follows="left|right"
-       height="23"
-       layout="topleft"
-       left="0"
-       name="talk"
-       top="5"
-       width="105">
-        <show_button
-         tab_stop="true">
-          <init_callback
-           function="Button.SetDockableFloaterToggle"
-           parameter="voice_controls" />
-        </show_button>
-        <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales.
-                 & pad_right is default value for long label which can be right aligned. See EXT-6318 -->
-        <speak_button
-         halign="center"
-         label="Speak"
-         label_selected="Speak"
-         name="speak_btn"
-         pad_right="20"
-         tab_stop="true"
-         use_ellipses="true" />
-      </talk_button>
-    </layout_panel>
-    <layout_panel
-         auto_resize="false"
-         follows="right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="65"
-         mouse_opaque="false"
-         name="gesture_panel"
-         top_delta="0"
-         user_resize="false"
-         width="85">
-      <gesture_combo_list
-             follows="left|right"
-             height="23"
-             label="Gesture"
-             layout="topleft"
-             left="0"
-             name="Gesture"
-             tool_tip="Shows/hides gestures"
-             top="5"
-             width="82">
-        <combo_button
-                 pad_right="10"
-                 use_ellipses="true" />
-        <combo_list
-                 page_lines="17" />
-      </gesture_combo_list>
-    </layout_panel>
-    <layout_panel
-         auto_resize="false"
-     follows="right"
-     height="28"
-     layout="topleft"
-     min_height="28"
-     min_width="52"
-     mouse_opaque="false"
-     name="movement_panel"
-     user_resize="false"
-     width="83">
-      <bottomtray_button
-       follows="left|right"
-       height="23"
-       image_pressed="PushButton_Press"
-       image_pressed_selected="PushButton_Selected_Press"
-       image_selected="PushButton_Selected_Press"
-       is_toggle="true"
-       label="Move"
-       layout="topleft"
-       name="movement_btn"
-       tool_tip="Shows/hides movement controls"
-       top="5"
-       use_ellipses="true"
-       width="80">
-        <init_callback
-         function="Button.SetDockableFloaterToggle"
-         parameter="moveview" />
-      </bottomtray_button>
-
-    </layout_panel>
-    <layout_panel
-     auto_resize="false"
-         follows="left|right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="52"
-         mouse_opaque="false"
-         name="cam_panel"
-         user_resize="false"
-         width="83">
-      <bottomtray_button
-             follows="left|right"
-             height="23"
-             image_pressed="PushButton_Press"
-             image_pressed_selected="PushButton_Selected_Press"
-             image_selected="PushButton_Selected_Press"
-             is_toggle="true"
-             label="View"
-             layout="topleft"
-             left="0"
-             name="camera_btn"
-             tool_tip="Shows/hides camera controls"
-             top="5"
-             use_ellipses="true"
-             width="80">
-        <init_callback
-                 function="Button.SetDockableFloaterToggle"
-                 parameter="camera" />
-      </bottomtray_button>
-    </layout_panel>
-    <layout_panel
-         auto_resize="false"
-         follows="left|right"
-         height="28"
-         layout="topleft"
-     min_width="40"
-		  mouse_opaque="false"
-     name="snapshot_panel"
-		  user_resize="false"
-     width="39">
-      <bottomtray_button
-			follows="left|right"
-			height="23"
-       image_overlay="Snapshot_Off"
-			image_pressed="PushButton_Press"
-			image_pressed_selected="PushButton_Selected_Press"
-			image_selected="PushButton_Selected_Press"
-       is_toggle="true"
-			layout="topleft"
-			left="0"
-       name="snapshots"
-       tool_tip="Take snapshot"
-			top="5"
-       width="36">
-        <init_callback
-         function="Button.SetFloaterToggle"
-         parameter="snapshot" />
-      </bottomtray_button>
-    </layout_panel>
-    <layout_panel
-		  auto_resize="false"
-		  follows="left|right"
-		  height="28"
-		  layout="topleft"
-		  min_height="28"
-     min_width="52"
-		  mouse_opaque="false"
-     name="build_btn_panel"
-		  user_resize="false"
-     width="83">
-      <!--*FIX: Build Floater is not opened with default registration. Will be fixed soon.
-Disabled for now.
--->
-      <bottomtray_button
-			follows="left|right"
-			height="23"
-			image_pressed="PushButton_Press"
-			image_pressed_selected="PushButton_Selected_Press"
-			image_selected="PushButton_Selected_Press"
-       is_toggle="true"
-       label="Build"
-			layout="topleft"
-			left="0"
-       name="build_btn"
-       tool_tip="Shows/hides Build Tools"
-			top="5"
-			use_ellipses="true"
-       width="80">
-        <commit_callback
-         function="Build.Toggle"
-         parameter="build" />
-      </bottomtray_button>
-    </layout_panel>
-    <layout_panel
-		  auto_resize="false"
-		  follows="left|right"
-		  height="28"
-		  layout="topleft"
-         min_height="28"
-     min_width="52"
-         mouse_opaque="false"
-     name="search_btn_panel"
-         user_resize="false"
-         width="83">
-            <bottomtray_button
-             follows="left|right"
-             height="23"
-             image_pressed="PushButton_Press"
-             image_pressed_selected="PushButton_Selected_Press"
-             image_selected="PushButton_Selected_Press"
-             is_toggle="true"
-             label="Search"
-             layout="topleft"
-             left="0"
-             name="search_btn"
-             tool_tip="Shows/hides Search"
-             top="5"
-             use_ellipses="true"
-             width="80">
-                <init_callback
-                 function="Button.SetFloaterToggle"
-                 parameter="search" />
-            </bottomtray_button>
-        </layout_panel>
-        <layout_panel
-         auto_resize="false"
-         follows="left|right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="52"
-         mouse_opaque="false"
-         name="world_map_btn_panel"
-         user_resize="false"
-         width="83">
-            <bottomtray_button
-             follows="left|right"
-             height="23"
-             image_pressed="PushButton_Press"
-             image_pressed_selected="PushButton_Selected_Press"
-             image_selected="PushButton_Selected_Press"
-             is_toggle="true"
-             label="Map"
-             layout="topleft"
-             left="0"
-             name="world_map_btn"
-             tool_tip="Shows/hides World Map"
-             top="5"
-             use_ellipses="true"
-             width="80">
-                <init_callback
-                 function="Button.SetFloaterToggle"
-                 parameter="world_map" />
-            </bottomtray_button>
-        </layout_panel>
-        <layout_panel
-         auto_resize="false"
-         follows="left|right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-     min_width="62"
-         mouse_opaque="false"
-         name="mini_map_btn_panel"
-         user_resize="false"
-         width="83">
-            <bottomtray_button
-             follows="left|right"
-             height="23"
-             image_pressed="PushButton_Press"
-             image_pressed_selected="PushButton_Selected_Press"
-             image_selected="PushButton_Selected_Press"
-             is_toggle="true"
-             label="Mini-map"
-             layout="topleft"
-             left="0"
-             name="mini_map_btn"
-             tool_tip="Shows/hides mini-map"
-             top="5"
-             use_ellipses="true"
-             width="80">
-                <init_callback
-                 function="Button.SetFloaterToggle"
-                 parameter="mini_map" />
-            </bottomtray_button>
-        </layout_panel>
-        <layout_panel
-         follows="left|right"
-         height="30"
-         layout="topleft"
-         min_width="95"
-         mouse_opaque="false"
-         name="chiclet_list_panel"
-         top="0"
-         user_resize="false"
-         width="189">
-<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same
-as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991-->
-      <chiclet_panel
-             chiclet_padding="4"
-             follows="left|right"
-             height="24"
-             layout="topleft"
-             left="1"
-             min_width="95"
-             mouse_opaque="false"
-             name="chiclet_list"
-             top="7"
-             width="189">
-        <button
-                 auto_resize="true"
-                 follows="right"
-                 height="29"
-                 image_hover_selected="SegmentedBtn_Left_Over"
-                 image_hover_unselected="SegmentedBtn_Left_Over"
-                 image_overlay="Arrow_Small_Left"
-                 image_pressed="SegmentedBtn_Left_Press"
-                 image_pressed_selected="SegmentedBtn_Left_Press"
-                 image_selected="SegmentedBtn_Left_Off"
-                 image_unselected="SegmentedBtn_Left_Off"
-                 layout="topleft"
-                 name="chicklet_left_scroll_button"
-                 tab_stop="false"
-                 top="-28"
-                 visible="false"
-                 width="7" />
-        <button
-                 auto_resize="true"
-                 follows="right"
-                 height="29"
-                 image_hover_selected="SegmentedBtn_Right_Over"
-                 image_hover_unselected="SegmentedBtn_Right_Over"
-                 image_overlay="Arrow_Small_Right"
-                 image_pressed="SegmentedBtn_Right_Press"
-                 image_pressed_selected="SegmentedBtn_Right_Press"
-                 image_selected="SegmentedBtn_Right_Off"
-                 image_unselected="SegmentedBtn_Right_Off"
-                 layout="topleft"
-                 name="chicklet_right_scroll_button"
-                 tab_stop="false"
-                 top="-28"
-                 visible="false"
-                 width="7" />
-      </chiclet_panel>
-    </layout_panel>
-    <layout_panel auto_resize="false"
-                      user_resize="false"
-                      width="4"
-                      min_width="4"/>
-    <layout_panel
-         auto_resize="false"
-         follows="right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="37"
-         name="im_well_panel"
-         top="0"
-         user_resize="false"
-         width="37">
-      <chiclet_im_well
-             follows="right"
-             height="28"
-             layout="topleft"
-             left="0"
-             max_displayed_count="99"
-             name="im_well"
-             top="0"
-             width="35">
-        <!--
-Emulate 4 states of button by background images, see details in EXT-3147. The same should be for notification_well button
-xml attribute           Description
-image_unselected        "Unlit" - there are no new messages
-image_selected          "Unlit" + "Selected" - there are no new messages and the Well is open
-image_pressed           "Lit" - there are new messages
-image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well is open
-             -->
-        <button
-                 auto_resize="true"
-                 follows="right"
-                 halign="center"
-                 height="23"
-                 image_overlay="Unread_IM"
-                 image_overlay_alignment="center"
-                 image_pressed="WellButton_Lit"
-                 image_pressed_selected="WellButton_Lit_Selected"
-                 image_selected="PushButton_Press"
-                 label_color="Black"
-                 left="0"
-                 name="Unread IM messages"
-                 tool_tip="Conversations"
-                 width="34">
-          <init_callback
-                     function="Button.SetDockableFloaterToggle"
-                     parameter="im_well_window" />
-        </button>
-      </chiclet_im_well>
-    </layout_panel>
-    <layout_panel
-         auto_resize="false"
-         follows="right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="37"
-         name="notification_well_panel"
-         top="0"
-         user_resize="false"
-         width="37">
-      <chiclet_notification
-             follows="right"
-             height="23"
-             layout="topleft"
-             left="0"
-             max_displayed_count="99"
-             name="notification_well"
-             top="5"
-             width="35">
-        <button
-                 auto_resize="true"
-                 bottom_pad="3"
-                 follows="right"
-                 halign="center"
-                 height="23"
-                 image_overlay="Notices_Unread"
-                 image_overlay_alignment="center"
-                 image_pressed="WellButton_Lit"
-                 image_pressed_selected="WellButton_Lit_Selected"
-                 image_selected="PushButton_Press"
-                 label_color="Black"
-                 left="0"
-                 name="Unread"
-                 tool_tip="Notifications"
-                 width="34">
-          <init_callback
-                     function="Button.SetDockableFloaterToggle"
-                     parameter="notification_well_window" />
-        </button>
-      </chiclet_notification>
-    </layout_panel>
-    <layout_panel
-		   auto_resize="false"
-		   user_resize="false"
-		   min_width="4"
-		   name="DUMMY2"
-		   width="8" />
-  </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..355a76e05f9ec40589d805138918e332b1268797
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="false"
+ chrome="true"
+ follows="left|top|right"
+ height="30"
+ layout="topleft"
+ mouse_opaque="false"
+ name="chiclet_bar"
+ width="1310">
+  <layout_stack
+     border_size="0"
+     clip="false"
+     follows="all"
+     height="30"
+     layout="topleft"
+     left="0"
+     mouse_opaque="false"
+     name="toolbar_stack"
+     orientation="horizontal"
+     top="0"
+     width="1310">
+        <layout_panel
+         follows="left|right"
+         height="30"
+         layout="topleft"
+         min_width="95"
+         mouse_opaque="false"
+         name="chiclet_list_panel"
+         top="0"
+         user_resize="false"
+         width="189">
+      <chiclet_panel
+             chiclet_padding="4"
+             follows="left|right"
+             height="24"
+             layout="topleft"
+             left="1"
+             min_width="95"
+             mouse_opaque="false"
+             name="chiclet_list"
+             top="7"
+             width="189">
+        <button
+                 auto_resize="true"
+                 follows="right"
+                 height="29"
+                 image_hover_selected="SegmentedBtn_Left_Over"
+                 image_hover_unselected="SegmentedBtn_Left_Over"
+                 image_overlay="Arrow_Small_Left"
+                 image_pressed="SegmentedBtn_Left_Press"
+                 image_pressed_selected="SegmentedBtn_Left_Press"
+                 image_selected="SegmentedBtn_Left_Off"
+                 image_unselected="SegmentedBtn_Left_Off"
+                 layout="topleft"
+                 name="chicklet_left_scroll_button"
+                 tab_stop="false"
+                 top="-28"
+                 visible="false"
+                 width="7" />
+        <button
+                 auto_resize="true"
+                 follows="right"
+                 height="29"
+                 image_hover_selected="SegmentedBtn_Right_Over"
+                 image_hover_unselected="SegmentedBtn_Right_Over"
+                 image_overlay="Arrow_Small_Right"
+                 image_pressed="SegmentedBtn_Right_Press"
+                 image_pressed_selected="SegmentedBtn_Right_Press"
+                 image_selected="SegmentedBtn_Right_Off"
+                 image_unselected="SegmentedBtn_Right_Off"
+                 layout="topleft"
+                 name="chicklet_right_scroll_button"
+                 tab_stop="false"
+                 top="-28"
+                 visible="false"
+                 width="7" />
+      </chiclet_panel>
+    </layout_panel>
+    <layout_panel auto_resize="false"
+                      user_resize="false"
+                      width="4"
+                      min_width="4"/>
+    <layout_panel
+         auto_resize="false"
+         follows="right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="37"
+         name="im_well_panel"
+         top="0"
+         user_resize="false"
+         width="37">
+      <chiclet_im_well
+             follows="right"
+             height="28"
+             layout="topleft"
+             left="0"
+             max_displayed_count="99"
+             name="im_well"
+             top="0"
+             width="35">
+        <!--
+Emulate 4 states of button by background images, see details in EXT-3147. The same should be for notification_well button
+xml attribute           Description
+image_unselected        "Unlit" - there are no new messages
+image_selected          "Unlit" + "Selected" - there are no new messages and the Well is open
+image_pressed           "Lit" - there are new messages
+image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well is open
+             -->
+        <button
+                 auto_resize="true"
+                 follows="right"
+                 halign="center"
+                 height="23"
+                 image_overlay="Unread_IM"
+                 image_overlay_alignment="center"
+                 image_pressed="WellButton_Lit"
+                 image_pressed_selected="WellButton_Lit_Selected"
+                 image_selected="PushButton_Press"
+                 label_color="Black"
+                 left="0"
+                 name="Unread IM messages"
+                 tool_tip="Conversations"
+                 width="34">
+          <init_callback
+                     function="Button.SetDockableFloaterToggle"
+                     parameter="im_well_window" />
+        </button>
+      </chiclet_im_well>
+    </layout_panel>
+    <layout_panel
+         auto_resize="false"
+         follows="right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="37"
+         name="notification_well_panel"
+         top="0"
+         user_resize="false"
+         width="37">
+      <chiclet_notification
+             follows="right"
+             height="23"
+             layout="topleft"
+             left="0"
+             max_displayed_count="99"
+             name="notification_well"
+             top="5"
+             width="35">
+        <button
+                 auto_resize="true"
+                 bottom_pad="3"
+                 follows="right"
+                 halign="center"
+                 height="23"
+                 image_overlay="Notices_Unread"
+                 image_overlay_alignment="center"
+                 image_pressed="WellButton_Lit"
+                 image_pressed_selected="WellButton_Lit_Selected"
+                 image_selected="PushButton_Press"
+                 label_color="Black"
+                 left="0"
+                 name="Unread"
+                 tool_tip="Notifications"
+                 width="34">
+          <init_callback
+                     function="Button.SetDockableFloaterToggle"
+                     parameter="notification_well_window" />
+        </button>
+      </chiclet_notification>
+    </layout_panel>
+  </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml
index 84b5d11ba71481c837615d58e0ab9a9127e652f5..23e7814cada591fa479954084bb2a4051c107880 100644
--- a/indra/newview/skins/default/xui/en/panel_me.xml
+++ b/indra/newview/skins/default/xui/en/panel_me.xml
@@ -10,43 +10,10 @@
  name="panel_me"
  top="0"
  width="333">
-   <!--<text
-    type="string"
-    follows="top|left|right"
-    font="SansSerifHugeBold"
-    height="20"
-    layout="topleft"
-    left="15"
-    name="user_name"
-    text_color="white"
-    top="0"
-    mouse_opaque="true"
-    width="280">
-          (Loading...)
-   </text> -->
-    <tab_container
-     follows="all"
-     height="555"
-     halign="center"
-     layout="topleft"
-     left="5"
-     name="tabs"
-     tab_min_width="95"
-     tab_height="30"
-     tab_position="top"
-     top_pad="10"
-     width="317">
-      <panel
-         class="panel_my_profile"
-         filename="panel_my_profile.xml"
-         label="MY PROFILE"
-         help_topic="panel_my_profile_tab"
-         name="panel_profile" />
-      <panel
-         class="panel_picks"
-         filename="panel_picks.xml"
-         label="MY PICKS"
-         help_topic="panel_my_picks_tab"
-         name="panel_picks" />
-    </tab_container>
+    <panel
+        class="panel_picks"
+        filename="panel_picks.xml"
+        label="MY PICKS"
+        help_topic="panel_my_picks_tab"
+        name="panel_picks"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index 7daa52b2d980c984bb2165846e1cafee1647a87e..24046d5cca6e5f8cf3ddd985eac70e7d67a0c440 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -117,7 +117,7 @@
     </scroll_container>
     <panel
      follows="left|right|bottom"
-     height="35"
+     height="23"
      layout="topleft"
      top_pad="5"
      left="8"
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 87e263726d2b7643725afc007af6905b70e86a4e..85f402dfa246df7b06013db678751e897b1acce5 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -4,12 +4,12 @@ bg_opaque_color="DkGray2"
        background_visible="true"
        background_opaque="true"
  follows="all"
- height="548"
+ height="571"
  label="Picks"
  layout="topleft"
- left="0"
+ left="8"
  name="panel_picks"
- top="0"
+ top_pad="0"
  width="313">
  <string
   name="no_picks"
@@ -30,7 +30,7 @@ bg_opaque_color="DkGray2"
  <accordion
   fit_parent="true" 
   follows="all"
-  height="485"
+  height="514"
   layout="topleft"
   left="0"
   name="accordion"
@@ -81,10 +81,10 @@ bg_opaque_color="DkGray2"
        left="1"
        height="27"
        label="bottom_panel"
-       layout="bottom"
+       layout="topleft"
        name="edit_panel"
-       top_pad="-2"
-       width="313">
+       top_pad="0"
+       width="312">
          
          <layout_stack
 		  follows="bottom|left|right"
@@ -149,8 +149,9 @@ bg_opaque_color="DkGray2"
          follows="bottom|left|right"
          layout="topleft"
          left="0"
-         height="40"
+         height="30"
          name="buttons_cucks"
+         top_pad="0"
          width="313">
       
       <layout_stack
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
deleted file mode 100644
index 0f330a7b981b53e2622d95962f8c52a46c062eab..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<!-- Side tray cannot show background because it is always
-	partially on screen to hold tab buttons. -->
-<side_tray
-  name="sidebar"
-  background_visible="false"
-  mouse_opaque="true"
-  width="333"
-  collapsed="true"
->
-  <!-- Individual tabs must show background to have seemless
-	appearance up to tray panel header word like "Home".
-	Embedded panels are inset by a pixel and so their
-	backgrounds will not block the world fully. -->
-
-  <sidetray_tab
-    name="sidebar_openclose"
-    help_topic="sidebar_openclose"
-    tab_title="Toggle Sidebar"
-    description="Toggle Sidebar."
-    image="TabIcon_Open_Off"
-	image_selected="TabIcon_Close_Off"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-    <panel /> <!-- dummy panel, never to actually be seen -->
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_home"
-    help_topic="sidebar_home"
-    tab_title="Home"
-    description="Home."
-    image="TabIcon_Home_Off"
-    image_selected="TabIcon_Home_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <panel
-        class="panel_sidetray_home"
-        name="panel_home"
-        filename="panel_sidetray_home_tab.xml"
-        label="home"
-      />
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_me"
-    help_topic="sidebar_me"
-    tab_title="My Profile"
-    description="Edit your public profile and Picks."
-    image="TabIcon_Me_Off"
-    image_selected="TabIcon_Me_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-    <panel_container
-      name="panel_container"
-      default_panel_name="panel_me"
-      width="333"
-    >
-      <panel
-        class="panel_me"
-        name="panel_me"
-        filename="panel_me.xml"
-        label="Me"
-      />
-
-    </panel_container>
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_people"
-    help_topic="sidebar_people"
-    tab_title="People"
-    description="Find your friends, contacts and people nearby."
-    image="TabIcon_People_Off"
-    image_selected="TabIcon_People_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-    <panel_container
-      name="panel_container"
-      default_panel_name="panel_people"
-      width="333"
-    >
-      <panel
-        class="panel_people"
-        name="panel_people"
-        filename="panel_people.xml"
-      />
-      <panel
-        class="panel_profile_view"
-        name="panel_profile_view"
-        filename="panel_profile_view.xml"
-      />
-      <panel
-        class="panel_group_info_sidetray"
-        name="panel_group_info_sidetray"
-        filename="panel_group_info_sidetray.xml"
-        label="Group Profile"
-        font="SansSerifBold"
-      />
-      <panel
-        class="panel_block_list_sidetray"
-        name="panel_block_list_sidetray"
-        filename="panel_block_list_sidetray.xml"
-        label="Blocked Residents &amp; Objects"
-        font="SansSerifBold"
-      />
-
-    </panel_container>
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_places"
-    help_topic="sidebar_places"
-    tab_title="Places"
-    label="Places"
-    description="Find places to go and places you&apos;ve visited before."
-    image="TabIcon_Places_Off"
-	image_selected="TabIcon_Places_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <panel
-        class="panel_places"
-        name="panel_places"
-        filename="panel_places.xml"
-        label="Places"
-        font="SansSerifBold"
-      />
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_inventory"
-    help_topic="sidebar_inventory"
-    tab_title="My Inventory"
-    description="Browse your inventory."
-    image="TabIcon_Things_Off"
-    image_selected="TabIcon_Things_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <badge location="top_left" location_percent_vcenter="50" location_percent_hcenter="95" />
-      <panel
-        class="sidepanel_inventory"
-        name="sidepanel_inventory"
-        filename="sidepanel_inventory.xml"
-        label="Edit Inventory"
-        font="SansSerifBold"
-      />
-  </sidetray_tab>
-
-  <sidetray_tab
-    name="sidebar_appearance"
-    help_topic="sidebar_appearance"
-    tab_title="My Appearance"
-    description="Change your appearance and current look."
-    image="TabIcon_Appearance_Off"
-    image_selected="TabIcon_Appearance_Selected"
-    mouse_opaque="false"
-    background_visible="true"
-  >
-      <panel
-        class="sidepanel_appearance"
-        name="sidepanel_appearance"
-        filename="sidepanel_appearance.xml"
-        label="Edit Appearance"
-        font="SansSerifBold"
-      />
-  </sidetray_tab>
-
-</side_tray>
diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
index 5475fcd245434e220c35e6f2560d74a02eeb776a..3c69a0cb6cc37d72adc25d1a0b9adee72fdf07b9 100644
--- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
@@ -64,14 +64,32 @@
                     user_resize="false"
                     mouse_opaque="false"
                     height="100"
-                    width="100">
+                    width="200">
         <view top="0"
               follows="all"
               height="100"
               left="0"
               mouse_opaque="false"
               name="floater_snap_region"
-              width="100"/>
+              width="200"/>
+        <view top="0"
+              follows="left|top|bottom"
+              height="100"
+              left="0"
+              mouse_opaque="false"
+              name="minimized_floaters_region"
+              width="160"/>
+        <panel follows="left|top|right"
+               layout="topleft"
+               height="30"
+               left_pad="10"
+               mouse_opaque="false"
+               name="chiclet_container"
+               tab_stop="false"
+               top="0"
+               bg_visible="false"
+               width="20">
+        </panel>          
         <panel bottom="100"
                follows="left|right|bottom"
                height="25"
@@ -80,7 +98,7 @@
                tab_stop="false"
                name="stand_stop_flying_container"
                visible="false"
-               width="100"/>
+               width="200"/>
       </layout_panel>
       <layout_panel name="right_toolbar_panel"
                     auto_resize="false"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 04fc5c868c06cf1f28e55f1c7e1b24494c8e2d0d..78e10d207c5ded3f1d26e47c70aa17bd4d06f4c8 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3683,7 +3683,7 @@ Try enclosing path to the editor with double quotes.
   <string name="Command_AboutLand_Tooltip">Information about the land you're visiting</string>
   <string name="Command_Appearance_Tooltip">Change your avatar</string>
   <string name="Command_Avatar_Tooltip">Choose a complete avatar</string>
-  <string name="Command_Build_Tooltip">Building objects and reshaping them</string>
+  <string name="Command_Build_Tooltip">Building objects and reshaping terrain</string>
   <string name="Command_Chat_Tooltip">Chat with people nearby using text</string>
   <string name="Command_Compass_Tooltip">Compass</string>
   <string name="Command_Destinations_Tooltip">Destinations of interest</string>