diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 6c08ec74315e12529bf9bd31c0c0d82ecb881abd..06781f1bdf3986ce9862e9a06c8b1de4e153d5c4 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -989,11 +989,27 @@ void LLButton::resize(LLUIString label)
 	// get current btn length 
 	S32 btn_width =getRect().getWidth();
     // check if it need resize 
-	if (mAutoResize == TRUE)
+	if (mAutoResize)
 	{ 
-		if (btn_width - (mRightHPad + mLeftHPad) < label_width)
+		S32 min_width = label_width + mLeftHPad + mRightHPad;
+		if (mImageOverlay)
 		{
-			setRect(LLRect( getRect().mLeft, getRect().mTop, getRect().mLeft + label_width + mLeftHPad + mRightHPad , getRect().mBottom));
+			switch(mImageOverlayAlignment)
+			{
+			case LLFontGL::LEFT:
+			case LLFontGL::RIGHT:
+				min_width += mImageOverlay->getWidth() + mImgOverlayLabelSpace;
+				break;
+			case LLFontGL::HCENTER:
+				break;
+			default:
+				// draw nothing
+				break;
+			}
+		}
+		if (btn_width < min_width)
+		{
+			reshape(min_width, getRect().getHeight());
 		}
 	} 
 }
diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp
index 6be616b980940fba6a529f49e73213b13c379204..783990780b204ddb93f96279cf27a7144ed1be9a 100644
--- a/indra/llui/llcommandmanager.cpp
+++ b/indra/llui/llcommandmanager.cpp
@@ -37,12 +37,19 @@
 #include <boost/foreach.hpp>
 
 
+//
+// LLCommandId class
+//
+
+const LLCommandId LLCommandId::null("null command");
+
 //
 // LLCommand class
 //
 
 LLCommand::Params::Params()
 	: function("function")
+	, available_in_toybox("available_in_toybox", false)
 	, icon("icon")
 	, label_ref("label_ref")
 	, name("name")
@@ -53,9 +60,10 @@ LLCommand::Params::Params()
 
 LLCommand::LLCommand(const LLCommand::Params& p)
 	: mFunction(p.function)
+	, mAvailableInToybox(p.available_in_toybox)
 	, mIcon(p.icon)
+	, mIdentifier(p.name)
 	, mLabelRef(p.label_ref)
-	, mName(p.name)
 	, mParam(p.param)
 	, mTooltipRef(p.tooltip_ref)
 {
@@ -90,26 +98,26 @@ LLCommand * LLCommandManager::getCommand(U32 commandIndex)
 	return mCommands[commandIndex];
 }
 
-LLCommand * LLCommandManager::getCommand(const std::string& commandName)
+LLCommand * LLCommandManager::getCommand(const LLCommandId& commandId)
 {
-	LLCommand * command_name_match = NULL;
+	LLCommand * command_match = NULL;
 
-	CommandIndexMap::const_iterator found = mCommandIndices.find(commandName);
+	CommandIndexMap::const_iterator found = mCommandIndices.find(commandId);
 	
 	if (found != mCommandIndices.end())
 	{
-		command_name_match = mCommands[found->second];
+		command_match = mCommands[found->second];
 	}
 
-	return command_name_match;
+	return command_match;
 }
 
 void LLCommandManager::addCommand(LLCommand * command)
 {
-	mCommandIndices[command->name()] = mCommands.size();
+	mCommandIndices[command->id()] = mCommands.size();
 	mCommands.push_back(command);
 
-	llinfos << "Successfully added command: " << command->name() << llendl;
+	lldebugs << "Successfully added command: " << command->id().name() << llendl;
 }
 
 //static
diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h
index 24378ecd620b3b62251484b61cd19110001417ca..8435d915f30d399f8f440600169997994663f6ad 100644
--- a/indra/llui/llcommandmanager.h
+++ b/indra/llui/llcommandmanager.h
@@ -31,11 +31,62 @@
 #include "llsingleton.h"
 
 
+class LLCommand;
+class LLCommandManager;
+
+
+class LLCommandId
+{
+public:
+	friend class LLCommand;
+	friend class LLCommandManager;
+
+	struct Params : public LLInitParam::Block<Params>
+	{
+		Mandatory<std::string> name;
+
+		Params()
+		:	name("name")
+		{}
+	};
+
+	LLCommandId(const std::string& name)
+		: mName(name)
+	{}
+
+	LLCommandId(const Params& p)
+	:	mName(p.name)
+	{}
+
+	const std::string& name() const { return mName; }
+
+	bool operator!=(const LLCommandId& command) const
+	{
+		return (mName != command.mName);
+	}
+
+	bool operator==(const LLCommandId& command) const
+	{
+		return (mName == command.mName);
+	}
+
+	bool operator<(const LLCommandId& command) const
+	{
+		return (mName < command.mName);
+	}
+
+	static const LLCommandId null;
+
+private:
+	std::string mName;
+};
+
 class LLCommand
 {
 public:
 	struct Params : public LLInitParam::Block<Params>
 	{
+		Mandatory<bool>			available_in_toybox;
 		Mandatory<std::string>	function;
 		Mandatory<std::string>	icon;
 		Mandatory<std::string>	label_ref;
@@ -48,18 +99,21 @@ class LLCommand
 
 	LLCommand(const LLCommand::Params& p);
 
+	const bool availableInToybox() const { return mAvailableInToybox; }
 	const std::string& functionName() const { return mFunction; }
 	const std::string& icon() const { return mIcon; }
+	const LLCommandId& id() const { return mIdentifier; }
 	const std::string& labelRef() const { return mLabelRef; }
-	const std::string& name() const { return mName; }
 	const std::string& param() const { return mParam; }
 	const std::string& tooltipRef() const { return mTooltipRef; }
 
 private:
+	LLCommandId mIdentifier;
+
+	bool        mAvailableInToybox;
 	std::string mFunction;
 	std::string mIcon;
 	std::string mLabelRef;
-	std::string	mName;
 	std::string mParam;
 	std::string mTooltipRef;
 };
@@ -84,7 +138,7 @@ class LLCommandManager
 
 	U32 commandCount() const;
 	LLCommand * getCommand(U32 commandIndex);
-	LLCommand * getCommand(const std::string& commandName);
+	LLCommand * getCommand(const LLCommandId& commandId);
 
 	static bool load();
 
@@ -92,7 +146,7 @@ class LLCommandManager
 	void addCommand(LLCommand * command);
 
 private:
-	typedef std::map<std::string, U32>	CommandIndexMap;
+	typedef std::map<LLCommandId, U32>	CommandIndexMap;
 	typedef std::vector<LLCommand *>	CommandVector;
 	
 	CommandVector	mCommands;
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index b1c27126d9b6d09410b7b4c3e160e31475c08a98..6e39fcd714f3f19eb636466b8f64cd32300cec24 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -97,6 +97,7 @@ void LLDockControl::getAllowedRect(LLRect& rect)
 
 void LLDockControl::repositionDockable()
 {
+	if (!mDockWidget) return;
 	LLRect dockRect = mDockWidget->calcScreenRect();
 	LLRect rootRect;
 	mGetAllowedRectCallback(rootRect);
@@ -160,7 +161,7 @@ bool LLDockControl::isDockVisible()
 			case TOP:
 			{
 				// check is dock inside parent rect
-				// assume that parent for all dockable flaoters
+				// assume that parent for all dockable floaters
 				// is the root view
 				LLRect dockParentRect =
 						mDockWidget->getRootView()->calcScreenRect();
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 6cac841cdeacb3fceb58351b210fa7d2b2840e41..badba7a416cc0f3a8227fdd96aa0236cdd138c6b 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -947,7 +947,7 @@ LLMenuItemBranchGL::LLMenuItemBranchGL(const LLMenuItemBranchGL::Params& p)
 
 LLMenuItemBranchGL::~LLMenuItemBranchGL()
 {
-	LLView::deleteViewByHandle(mBranchHandle);
+	delete mBranchHandle.get();
 }
 
 // virtual
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index e052c1c876583a560c308ea9f48dd1d15831a2ba..2fb9f249d48e95cdea050320673dcd154c725a96 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -30,10 +30,12 @@
 #include <boost/foreach.hpp>
 #include "lltoolbar.h"
 
-#include "llcommandmanager.h"
+#include "llmenugl.h"
 #include "lltrans.h"
 
-static LLDefaultChildRegistry::Register<LLToolBar> r1("toolbar");
+// uncomment this and remove the one in llui.cpp when there is an external reference to this translation unit
+// thanks, MSVC!
+//static LLDefaultChildRegistry::Register<LLToolBar> r1("toolbar");
 
 namespace LLToolBarEnums
 {
@@ -49,34 +51,97 @@ namespace LLToolBarEnums
 		return orientation;
 	}
 }
+
 using namespace LLToolBarEnums;
 
+
+namespace LLInitParam
+{
+	void TypeValues<ButtonType>::declareValues()
+	{
+		declare("icons_with_text",	BTNTYPE_ICONS_WITH_TEXT);
+		declare("icons_only",		BTNTYPE_ICONS_ONLY);
+	}
+
+	void TypeValues<SideType>::declareValues()
+	{
+		declare("bottom",	SIDE_BOTTOM);
+		declare("left",		SIDE_LEFT);
+		declare("right",	SIDE_RIGHT);
+		declare("top",		SIDE_TOP);
+	}
+}
+
 LLToolBar::Params::Params()
 :	button_display_mode("button_display_mode"),
-	buttons("button"),
-	side("side"),
+	commands("command"),
+	side("side", SIDE_TOP),
 	button_icon("button_icon"),
 	button_icon_and_text("button_icon_and_text"),
+	read_only("read_only", false),
 	wrap("wrap", true),
 	min_button_width("min_button_width", 0),
 	max_button_width("max_button_width", S32_MAX),
-	background_image("background_image")
+	button_height("button_height"),
+	pad_left("pad_left"),
+	pad_top("pad_top"),
+	pad_right("pad_right"),
+	pad_bottom("pad_bottom"),
+	pad_between("pad_between"),
+	button_panel("button_panel")
 {}
 
 LLToolBar::LLToolBar(const LLToolBar::Params& p)
 :	LLUICtrl(p),
+	mReadOnly(p.read_only),
 	mButtonType(p.button_display_mode),
 	mSideType(p.side),
 	mWrap(p.wrap),
 	mNeedsLayout(false),
-	mCenterPanel(NULL),
+	mButtonPanel(NULL),
 	mCenteringStack(NULL),
-	mMinButtonWidth(p.min_button_width),
-	mMaxButtonWidth(p.max_button_width),
-	mBackgroundImage(p.background_image)
+	mMinButtonWidth(llmin(p.min_button_width(), p.max_button_width())),
+	mMaxButtonWidth(llmax(p.max_button_width(), p.min_button_width())),
+	mButtonHeight(p.button_height),
+	mPadLeft(p.pad_left),
+	mPadRight(p.pad_right),
+	mPadTop(p.pad_top),
+	mPadBottom(p.pad_bottom),
+	mPadBetween(p.pad_between),
+	mPopupMenuHandle()
 {
-	mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon;
 	mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text;
+	mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon;
+}
+
+LLToolBar::~LLToolBar()
+{
+	delete mPopupMenuHandle.get();
+}
+
+void LLToolBar::createContextMenu()
+{
+	if (!mPopupMenuHandle.get())
+	{
+		LLUICtrl::CommitCallbackRegistry::Registrar& commit_reg = LLUICtrl::CommitCallbackRegistry::defaultRegistrar();
+		commit_reg.add("Toolbars.EnableSetting", boost::bind(&LLToolBar::onSettingEnable, this, _2));
+
+		LLUICtrl::EnableCallbackRegistry::Registrar& enable_reg = LLUICtrl::EnableCallbackRegistry::defaultRegistrar();
+		enable_reg.add("Toolbars.CheckSetting", boost::bind(&LLToolBar::isSettingChecked, this, _2));
+
+		LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu>("menu_toolbars.xml", LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance());
+
+		if (menu)
+		{
+			menu->setBackgroundColor(LLUIColorTable::instance().getColor("MenuPopupBgColor"));
+
+			mPopupMenuHandle = menu->getHandle();
+		}
+		else
+		{
+			llwarns << "Unable to load toolbars context menu." << llendl;
+		}
+	}
 }
 
 void LLToolBar::initFromParams(const LLToolBar::Params& p)
@@ -91,6 +156,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
 	centering_stack_p.rect = getLocalRect();
 	centering_stack_p.follows.flags = FOLLOWS_ALL;
 	centering_stack_p.orientation = orientation;
+	centering_stack_p.mouse_opaque = false;
 
 	mCenteringStack = LLUICtrlFactory::create<LLLayoutStack>(centering_stack_p);
 	addChild(mCenteringStack);
@@ -100,6 +166,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
 	border_panel_p.rect = getLocalRect();
 	border_panel_p.auto_resize = true;
 	border_panel_p.user_resize = false;
+	border_panel_p.mouse_opaque = false;
 	
 	mCenteringStack->addChild(LLUICtrlFactory::create<LLLayoutPanel>(border_panel_p));
 
@@ -109,84 +176,148 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
 	center_panel_p.auto_resize = false;
 	center_panel_p.user_resize = false;
 	center_panel_p.fit_content = true;
-	mCenterPanel = LLUICtrlFactory::create<LLLayoutPanel>(center_panel_p);
-	mCenteringStack->addChild(mCenterPanel);
+	LLLayoutPanel* center_panel = LLUICtrlFactory::create<LLLayoutPanel>(center_panel_p);
+	mCenteringStack->addChild(center_panel);
+
+	LLPanel::Params button_panel_p(p.button_panel);
+	button_panel_p.rect = center_panel->getLocalRect();
+		button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT;
+	mButtonPanel = LLUICtrlFactory::create<LLPanel>(button_panel_p);
+	center_panel->addChild(mButtonPanel);
 	
 	mCenteringStack->addChild(LLUICtrlFactory::create<LLLayoutPanel>(border_panel_p));
 
-	BOOST_FOREACH (LLToolBarButton::Params button_p, p.buttons)
+	BOOST_FOREACH (const LLCommandId::Params& command_id, p.commands)
 	{
-		// buttons always follow left and top, for all orientations
-		button_p.follows.flags = FOLLOWS_LEFT|FOLLOWS_TOP;
-		button_p.fillFrom(mButtonParams[mButtonType]);
+		mButtonCommands.push_back(command_id);
+	}
+	createButtons();
 
-		LLRect button_rect(button_p.rect);
-		{ // remove any offset from button
-			if (orientation == LLLayoutStack::HORIZONTAL)
-			{
-				button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight());
-			}
-			else // VERTICAL
+	mNeedsLayout = true;
+}
+
+bool LLToolBar::addCommand(const LLCommandId& commandId)
+{
+	LLCommand * command = LLCommandManager::instance().getCommand(commandId);
+
+	bool add_command = (command != NULL);
+
+	mButtonCommands.push_back(commandId);
+	createButtons();
+
+	return add_command;
+}
+
+bool LLToolBar::hasCommand(const LLCommandId& commandId) const
+{
+	bool has_command = false;
+
+	if (commandId != LLCommandId::null)
+	{
+		for (std::list<LLCommandId>::const_iterator cmd = mButtonCommands.begin(); cmd != mButtonCommands.end(); ++cmd)
+		{
+			if ((*cmd) == commandId)
 			{
-				button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight());
+				has_command = true;
+				break;
 			}
 		}
+	}
 
-		// use our calculated rect
-		button_p.rect = button_rect;
-		LLToolBarButton* buttonp = LLUICtrlFactory::create<LLToolBarButton>(button_p);
+	return has_command;
+}
 
-		mButtons.push_back(buttonp);
-		mCenterPanel->addChild(buttonp);
+bool LLToolBar::enableCommand(const LLCommandId& commandId, bool enabled)
+{
+	LLButton * command_button = NULL;
+	
+	if (commandId != LLCommandId::null)
+	{
+		command_button = mButtonPanel->findChild<LLButton>(commandId.name());
 
-		mNeedsLayout = true;
+		if (command_button)
+		{
+			command_button->setEnabled(enabled);
+		}
 	}
+
+	return (command_button != NULL);
 }
 
-bool LLToolBar::addCommand(LLCommand * command)
+BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
 {
-	//
-	// Init basic toolbar button params
-	//
+	BOOL handle_it_here = !mReadOnly;
 
-	LLToolBarButton::Params button_p;
-	button_p.fillFrom(mButtonParams[mButtonType]);
+	if (handle_it_here)
+	{
+		createContextMenu();
+		LLContextMenu * menu = (LLContextMenu *) mPopupMenuHandle.get();
 
-	button_p.name = command->name();
-	button_p.label = LLTrans::getString(command->labelRef());
-	button_p.tool_tip = LLTrans::getString(command->tooltipRef());
+		if (menu)
+		{
+			menu->show(x, y);
+			LLMenuGL::showPopup(this, menu, x, y);
+		}
+	}
 
-	//
-	// Set up the button rectangle
-	//
+	return handle_it_here;
+}
 
-	S32 btn_width = mMinButtonWidth;
-	S32 btn_height = mButtonParams[mButtonType].rect.height;
+BOOL LLToolBar::isSettingChecked(const LLSD& userdata)
+{
+	BOOL retval = FALSE;
 
-	if ((mSideType == LLToolBarEnums::SIDE_BOTTOM) || (mSideType == LLToolBarEnums::SIDE_TOP))
+	const std::string setting_name = userdata.asString();
+
+	if (setting_name == "icons_and_labels")
 	{
-		btn_height = getRect().getHeight();
+		retval = (mButtonType == BTNTYPE_ICONS_WITH_TEXT);
+	}
+	else if (setting_name == "icons_only")
+	{
+		retval = (mButtonType == BTNTYPE_ICONS_ONLY);
 	}
 
-	LLRect button_rect;
-	button_rect.setOriginAndSize(0, 0, btn_width, btn_height);
-
-	button_p.rect = button_rect;
+	return retval;
+}
 
-	//
-	// Add it to the list of buttons
-	//
+void LLToolBar::onSettingEnable(const LLSD& userdata)
+{
+	llassert(!mReadOnly);
 
-	LLToolBarButton * toolbar_button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
+	const std::string setting_name = userdata.asString();
 
-	toolbar_button->reshape(llclamp(toolbar_button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), toolbar_button->getRect().getHeight());
+	const ButtonType current_button_type = mButtonType;
 
-	mButtons.push_back(toolbar_button);
-	mCenterPanel->addChild(toolbar_button);
+	if (setting_name == "icons_and_labels")
+	{
+		mButtonType = BTNTYPE_ICONS_WITH_TEXT;
+	}
+	else if (setting_name == "icons_only")
+	{
+		mButtonType = BTNTYPE_ICONS_ONLY;
+	}
 
-	mNeedsLayout = true;
+	if(current_button_type != mButtonType)
+	{
+		createButtons();
+	}
+}
 
-	return true;
+void LLToolBar::resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth)
+{
+	// make buttons in current row all same girth
+	BOOST_FOREACH(LLToolBarButton* button, buttons_in_row)
+	{
+		if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL)
+		{
+			button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth);
+		}
+		else // VERTICAL
+		{
+			button->reshape(max_row_girth, button->getRect().getHeight());
+		}
+	}
 }
 
 void LLToolBar::updateLayoutAsNeeded()
@@ -195,23 +326,53 @@ void LLToolBar::updateLayoutAsNeeded()
 
 	LLLayoutStack::ELayoutOrientation orientation = getOrientation(mSideType);
 	
-	// our terminology for orientation-agnostic layout is that
+	// our terminology for orientation-agnostic layout is such that
 	// length refers to a distance in the direction we stack the buttons 
 	// and girth refers to a distance in the direction buttons wrap
-	S32 row_running_length = 0;
-	S32 max_length = (orientation == LLLayoutStack::HORIZONTAL)
-					? getRect().getWidth()
-					: getRect().getHeight();
 	S32 max_row_girth = 0;
-	S32 cur_start = 0;
-	S32 cur_row = 0;
+	S32 max_row_length = 0;
+
+	S32 max_length;
+	S32 max_total_girth;
+	S32 cur_start;
+	S32 cur_row ;
+	S32 row_pad_start;
+	S32 row_pad_end;
+	S32 girth_pad_end;
+	S32 row_running_length;
+
+	if (orientation == LLLayoutStack::HORIZONTAL)
+	{
+		max_length = getRect().getWidth() - mPadLeft - mPadRight;
+		max_total_girth = getRect().getHeight() - mPadTop - mPadBottom;
+		row_pad_start = mPadLeft;
+		row_pad_end = mPadRight;
+		cur_row = mPadTop;
+		girth_pad_end = mPadBottom;
+	}
+	else // VERTICAL
+	{
+		max_length = getRect().getHeight() - mPadTop - mPadBottom;
+		max_total_girth = getRect().getWidth() - mPadLeft - mPadRight;
+		row_pad_start = mPadTop;
+		row_pad_end = mPadBottom;
+		cur_row = mPadLeft;
+		girth_pad_end = mPadRight;
+	}
+	
+	row_running_length = row_pad_start;
+	cur_start = row_pad_start;
+
 
-	LLRect panel_rect = mCenterPanel->getLocalRect();
+	LLRect panel_rect = mButtonPanel->getLocalRect();
 
 	std::vector<LLToolBarButton*> buttons_in_row;
 
-		BOOST_FOREACH(LLToolBarButton* button, mButtons)
-		{
+	BOOST_FOREACH(LLToolBarButton* button, mButtons)
+	{
+		button->reshape(mMinButtonWidth, mButtonHeight);
+		button->autoResize();
+
 		S32 button_clamped_width = llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth);
 		S32 button_length = (orientation == LLLayoutStack::HORIZONTAL)
 							? button_clamped_width
@@ -220,37 +381,29 @@ void LLToolBar::updateLayoutAsNeeded()
 							? button->getRect().getHeight()
 							: button_clamped_width;
 		
-		// handle wrapping
-		if (row_running_length + button_length > max_length 
-			&& cur_start != 0) // not first button in row
-		{ // go ahead and wrap
+		// wrap if needed
+		if (mWrap
+			&& row_running_length + button_length > max_length	// out of room...
+			&& cur_start != row_pad_start)						// ...and not first button in row
+		{
 			if (orientation == LLLayoutStack::VERTICAL)
-			{
-				// row girth is clamped to allowable button widths
+			{	// row girth (width in this case) is clamped to allowable button widths
 				max_row_girth = llclamp(max_row_girth, mMinButtonWidth, mMaxButtonWidth);
 			}
+
 			// make buttons in current row all same girth
-			BOOST_FOREACH(LLToolBarButton* button, buttons_in_row)
-			{
-				if (orientation == LLLayoutStack::HORIZONTAL)
-				{
-					button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth);
-		}	
-				else // VERTICAL
-		{
-					button->reshape(max_row_girth, button->getRect().getHeight());
-				}
-		}
+			resizeButtonsInRow(buttons_in_row, max_row_girth);
 			buttons_in_row.clear();
 
-			row_running_length = 0;
-			cur_start = 0;
-			cur_row += max_row_girth;
+			max_row_length = llmax(max_row_length, row_running_length);
+			row_running_length = row_pad_start;
+			cur_start = row_pad_start;
+			cur_row += max_row_girth + mPadBetween;
 			max_row_girth = 0;
 	}
 
-		LLRect button_rect;
-		if (orientation == LLLayoutStack::HORIZONTAL)
+	LLRect button_rect;
+	if (orientation == LLLayoutStack::HORIZONTAL)
 	{
 			button_rect.setLeftTopAndSize(cur_start, panel_rect.mTop - cur_row, button_clamped_width, button->getRect().getHeight());
 		}
@@ -262,15 +415,20 @@ void LLToolBar::updateLayoutAsNeeded()
 
 		buttons_in_row.push_back(button);
 
-		row_running_length += button_length;
+		row_running_length += button_length + mPadBetween;
 		cur_start = row_running_length;
 		max_row_girth = llmax(button_girth, max_row_girth);
 	}
 
 	// final resizing in "girth" direction
-	S32 total_girth = cur_row + max_row_girth; // increment by size of final row
+	S32 total_girth =	cur_row				// current row position...
+						+ max_row_girth		// ...incremented by size of final row...
+						+ girth_pad_end;	// ...plus padding reserved on end
+	max_row_length = llmax(max_row_length, row_running_length - mPadBetween + row_pad_end);
 
-	// grow and optionally shift toolbar to accomodate buttons
+	resizeButtonsInRow(buttons_in_row, max_row_girth);
+
+	// grow and optionally shift toolbar to accommodate buttons
 	if (orientation == LLLayoutStack::HORIZONTAL)
 	{
 		if (mSideType == SIDE_TOP)
@@ -279,6 +437,7 @@ void LLToolBar::updateLayoutAsNeeded()
 		}
 
 		reshape(getRect().getWidth(), total_girth);
+		mButtonPanel->reshape(max_row_length, total_girth);
 	}
 	else // VERTICAL
 	{
@@ -286,10 +445,12 @@ void LLToolBar::updateLayoutAsNeeded()
 		{ // shift left to maintain right edge
 			translate(getRect().getWidth() - total_girth, 0);
 		}
+		
 		reshape(total_girth, getRect().getHeight());
-		}
+		mButtonPanel->reshape(total_girth, max_row_length);
+	}
 
-	// recenter toolbar buttons
+	// re-center toolbar buttons
 	mCenteringStack->updateLayout();
 
 	// don't clear flag until after we've resized ourselves, to avoid laying out every frame
@@ -300,12 +461,6 @@ void LLToolBar::updateLayoutAsNeeded()
 void LLToolBar::draw()
 {
 	updateLayoutAsNeeded();
-
-	{	// draw background
-		LLRect bg_rect;
-		localRectToOtherView(mCenterPanel->getRect(),&bg_rect, this);
-		mBackgroundImage->draw(bg_rect);		 
-	}
 	LLUICtrl::draw();
 }
 
@@ -315,20 +470,29 @@ void LLToolBar::reshape(S32 width, S32 height, BOOL called_from_parent)
 	mNeedsLayout = true;
 }
 
-namespace LLInitParam
+void LLToolBar::createButtons()
 {
-	void TypeValues<ButtonType>::declareValues()
+	BOOST_FOREACH(LLToolBarButton* button, mButtons)
 	{
-		declare("icons_only",		BTNTYPE_ICONS_ONLY);
-		declare("icons_with_text",	BTNTYPE_ICONS_WITH_TEXT);
+		delete button;
 	}
-
-	void TypeValues<SideType>::declareValues()
+	mButtons.clear();
+	
+	BOOST_FOREACH(LLCommandId& command_id, mButtonCommands)
 	{
-		declare("none",		SIDE_NONE);
-		declare("bottom",	SIDE_BOTTOM);
-		declare("left",		SIDE_LEFT);
-		declare("right",	SIDE_RIGHT);
-		declare("top",		SIDE_TOP);
+		LLCommand* commandp = LLCommandManager::instance().getCommand(command_id);
+		if (!commandp) continue;
+
+		LLToolBarButton::Params button_p;
+		button_p.label = LLTrans::getString(commandp->labelRef());
+		button_p.image_overlay = LLUI::getUIImage(commandp->icon());
+		button_p.overwriteFrom(mButtonParams[mButtonType]);
+		LLToolBarButton* button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
+
+		mButtons.push_back(button);
+		mButtonPanel->addChild(button);
 	}
+
+	mNeedsLayout = true;
 }
+
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 85cd6d5170b2af8ed5285cb4bc33a673aba9e638..75ae499a3dbf25ce0a198de093c63edd6fe3472e 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -28,12 +28,11 @@
 #ifndef LL_LLTOOLBAR_H
 #define LL_LLTOOLBAR_H
 
-#include "lluictrl.h"
-#include "lllayoutstack.h"
 #include "llbutton.h"
-
-
-class LLCommand;
+#include "llcommandmanager.h"
+#include "lllayoutstack.h"
+#include "lluictrl.h"
+#include "llcommandmanager.h"
 
 
 class LLToolBarButton : public LLButton
@@ -51,15 +50,14 @@ namespace LLToolBarEnums
 {
 	enum ButtonType
 	{
-		BTNTYPE_ICONS_ONLY = 0,
-		BTNTYPE_ICONS_WITH_TEXT,
+		BTNTYPE_ICONS_WITH_TEXT = 0,
+		BTNTYPE_ICONS_ONLY,
 
 		BTNTYPE_COUNT
 	};
 
 	enum SideType
 	{
-		SIDE_NONE = 0,
 		SIDE_BOTTOM,
 		SIDE_LEFT,
 		SIDE_RIGHT,
@@ -97,13 +95,22 @@ class LLToolBar
 		Optional<LLToolBarButton::Params>		button_icon,
 												button_icon_and_text;
 
-		Optional<bool>							wrap;
+		Optional<bool>							read_only,
+												wrap;
+
 		Optional<S32>							min_button_width,
-												max_button_width;
+												max_button_width,
+												button_height;
+		
+		Optional<S32>							pad_left,
+												pad_top,
+												pad_right,
+												pad_bottom,
+												pad_between;
 		// get rid of this
-		Multiple<LLToolBarButton::Params>		buttons;
+		Multiple<LLCommandId::Params>			commands;
 
-		Optional<LLUIImage*>					background_image;
+		Optional<LLPanel::Params>				button_panel;
 
 		Params();
 	};
@@ -111,33 +118,51 @@ class LLToolBar
 	// virtuals
 	void draw();
 	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 
-	bool addCommand(LLCommand * command);
+	bool addCommand(const LLCommandId& commandId);
+	bool hasCommand(const LLCommandId& commandId) const;
+	bool enableCommand(const LLCommandId& commandId, bool enabled);
 
 protected:
 	friend class LLUICtrlFactory;
 	LLToolBar(const Params&);
+	~LLToolBar();
 
 	void initFromParams(const Params&);
 
 private:
+	void createContextMenu();
 	void updateLayoutAsNeeded();
+	void createButtons();
+	void resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth);
+	BOOL isSettingChecked(const LLSD& userdata);
+	void onSettingEnable(const LLSD& userdata);
+
+	const bool						mReadOnly;
 
 	std::list<LLToolBarButton*>		mButtons;
+	std::list<LLCommandId>			mButtonCommands;
 	LLToolBarEnums::ButtonType		mButtonType;
 	LLLayoutStack*					mCenteringStack;
 	LLLayoutStack*					mWrapStack;
-	LLLayoutPanel*					mCenterPanel;
+	LLPanel*						mButtonPanel;
 	LLToolBarEnums::SideType		mSideType;
 
 	bool							mWrap;
 	bool							mNeedsLayout;
 	S32								mMinButtonWidth,
-									mMaxButtonWidth;
-
-	LLUIImagePtr					mBackgroundImage;
+									mMaxButtonWidth,
+									mButtonHeight,
+									mPadLeft,
+									mPadRight,
+									mPadTop,
+									mPadBottom,
+									mPadBetween;
 
 	LLToolBarButton::Params			mButtonParams[LLToolBarEnums::BTNTYPE_COUNT];
+
+	LLHandle<class LLContextMenu>			mPopupMenuHandle;
 };
 
 
diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp
index 590cd4ffcafaa961010e59760b53971125c97b34..9df6f4946f03d44c420f4c7409fe26157dcf1324 100644
--- a/indra/llui/lltoolbarview.cpp
+++ b/indra/llui/lltoolbarview.cpp
@@ -37,7 +37,10 @@ LLToolBarView* gToolBarView = NULL;
 static LLDefaultChildRegistry::Register<LLToolBarView> r("toolbar_view");
 
 LLToolBarView::LLToolBarView(const LLToolBarView::Params& p)
-:	LLUICtrl(p)
+:	LLUICtrl(p),
+	mToolbarLeft(NULL),
+	mToolbarRight(NULL),
+	mToolbarBottom(NULL)
 {
 }
 
@@ -51,21 +54,46 @@ LLToolBarView::~LLToolBarView()
 {
 }
 
+BOOL LLToolBarView::postBuild()
+{
+	mToolbarLeft   = getChild<LLToolBar>("toolbar_left");
+	mToolbarRight  = getChild<LLToolBar>("toolbar_right");
+	mToolbarBottom = getChild<LLToolBar>("toolbar_bottom");
+	return TRUE;
+}
+
+bool LLToolBarView::hasCommand(const LLCommandId& commandId) const
+{
+	bool has_command = false;
+	if (mToolbarLeft && !has_command)
+	{
+		has_command = mToolbarLeft->hasCommand(commandId);
+	}
+	if (mToolbarRight && !has_command)
+	{
+		has_command = mToolbarRight->hasCommand(commandId);
+	}
+	if (mToolbarBottom && !has_command)
+	{
+		has_command = mToolbarBottom->hasCommand(commandId);
+	}
+	return has_command;
+}
+
 void LLToolBarView::draw()
 {
 	static bool debug_print = true;
 	static S32 old_width = 0;
 	static S32 old_height = 0;
 
-	LLToolBar* toolbar_bottom = getChild<LLToolBar>("toolbar_bottom");
-	LLToolBar* toolbar_left = getChild<LLToolBar>("toolbar_left");
-	LLToolBar* toolbar_right = getChild<LLToolBar>("toolbar_right");
-	LLPanel* sizer_left = getChild<LLPanel>("sizer_left");
+	//LLPanel* sizer_left = getChild<LLPanel>("sizer_left");
+	
+	LLRect bottom_rect, left_rect, right_rect;
+
+	if (mToolbarBottom) mToolbarBottom->localRectToOtherView(mToolbarBottom->getLocalRect(), &bottom_rect, this);
+	if (mToolbarLeft)   mToolbarLeft->localRectToOtherView(mToolbarLeft->getLocalRect(), &left_rect, this);
+	if (mToolbarRight)  mToolbarRight->localRectToOtherView(mToolbarRight->getLocalRect(), &right_rect, this);
 	
-	LLRect bottom_rect = toolbar_bottom->getRect();
-	LLRect left_rect = toolbar_left->getRect();
-	LLRect right_rect = toolbar_right->getRect();
-	LLRect sizer_left_rect = sizer_left->getRect();
 	
 	if ((old_width != getRect().getWidth()) || (old_height != getRect().getHeight()))
 		debug_print = true;
@@ -76,18 +104,21 @@ void LLToolBarView::draw()
 		llinfos << "Merov debug : draw bottom  rect = " << bottom_rect.mLeft << ", " << bottom_rect.mTop << ", " << bottom_rect.mRight << ", " << bottom_rect.mBottom << llendl; 
 		llinfos << "Merov debug : draw left    rect = " << left_rect.mLeft << ", " << left_rect.mTop << ", " << left_rect.mRight << ", " << left_rect.mBottom << llendl; 
 		llinfos << "Merov debug : draw right   rect = " << right_rect.mLeft << ", " << right_rect.mTop << ", " << right_rect.mRight << ", " << right_rect.mBottom << llendl; 
-		llinfos << "Merov debug : draw s left  rect = " << sizer_left_rect.mLeft << ", " << sizer_left_rect.mTop << ", " << sizer_left_rect.mRight << ", " << sizer_left_rect.mBottom << llendl; 
 		old_width = ctrl_rect.getWidth();
 		old_height = ctrl_rect.getHeight();
 		debug_print = false;
 	}
 	// Debug draw
 	LLColor4 back_color = LLColor4::blue;
+	LLColor4 back_color_vert = LLColor4::red;
+	LLColor4 back_color_hori = LLColor4::yellow;
 	back_color[VALPHA] = 0.5f;
-//	gl_rect_2d(getLocalRect(), back_color, TRUE);
-//	gl_rect_2d(bottom_rect, LLColor4::red, TRUE);
-//	gl_rect_2d(left_rect, LLColor4::green, TRUE);
-//	gl_rect_2d(right_rect, LLColor4::yellow, TRUE);
+	back_color_hori[VALPHA] = 0.5f;
+	back_color_vert[VALPHA] = 0.5f;
+	//gl_rect_2d(getLocalRect(), back_color, TRUE);
+	gl_rect_2d(bottom_rect, back_color_hori, TRUE);
+	gl_rect_2d(left_rect, back_color_vert, TRUE);
+	gl_rect_2d(right_rect, back_color_vert, TRUE);
 	
 	LLUICtrl::draw();
 }
diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h
index 73278e226b0b7167b6d2015c8bfe843fa6f7d2d2..2e7885f3911300ceb4a2137fa5ae86a2ac144447 100644
--- a/indra/llui/lltoolbarview.h
+++ b/indra/llui/lltoolbarview.h
@@ -29,6 +29,8 @@
 #define LL_LLTOOLBARVIEW_H
 
 #include "lluictrl.h"
+#include "lltoolbar.h"
+#include "llcommandmanager.h"
 
 class LLUICtrlFactory;
 
@@ -38,9 +40,17 @@ class LLToolBarView : public LLUICtrl
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> {};
+	
 	virtual ~LLToolBarView();
+	/*virtual*/ BOOL postBuild();
+
 	virtual void draw();
 
+	bool hasCommand(const LLCommandId& commandId) const;
+	
+	// valid children for LLToolBarView are stored in this registry
+	typedef LLDefaultChildRegistry child_registry_t;
+
 protected:
 	friend class LLUICtrlFactory;
 	LLToolBarView(const Params&);
@@ -48,7 +58,9 @@ class LLToolBarView : public LLUICtrl
 	void initFromParams(const Params&);
 
 private:
-	LLHandle<LLView>	mSnapView;
+	LLToolBar*	mToolbarLeft;
+	LLToolBar*	mToolbarRight;
+	LLToolBar*	mToolbarBottom;
 };
 
 extern LLToolBarView* gToolBarView;
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index a4303780fd3e9f937fb17be8257eaf8897bb5c38..4f129ccfba110ca6516bfcdbc56dbca5c6c808e4 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -96,6 +96,7 @@ static LLDefaultChildRegistry::Register<LLSearchEditor> register_search_editor("
 
 // register other widgets which otherwise may not be linked in
 static LLDefaultChildRegistry::Register<LLLoadingIndicator> register_loading_indicator("loading_indicator");
+static LLDefaultChildRegistry::Register<LLToolBar> register_toolbar("toolbar");
 
 //
 // Functions
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 60452b9ae4d578817759761bdde98f7313c6a2de..e10c2f0d1e21f230474e2079e913728360d443dd 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1826,13 +1826,6 @@ LLView* LLView::findNextSibling(LLView* child)
 	return (next_it != mChildList.end()) ? *next_it : NULL;
 }
 
-void LLView::deleteViewByHandle(LLHandle<LLView> handle)
-{
-	LLView* viewp = handle.get();
-
-	delete viewp;
-}
-
 
 LLCoordGL getNeededTranslation(const LLRect& input, const LLRect& constraint, BOOL allow_partial_outside)
 {
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 594a5eec6be9b8927f45b76d66c9730ad326dae7..7a1b2e4ba047872aee08b9cd79347ddc9f170326 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -482,7 +482,6 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 	// return query for iterating over focus roots in tab order
 	static const LLCtrlQuery & getFocusRootsQuery();
 
-	static void deleteViewByHandle(LLHandle<LLView> handle);
 	static LLWindow*	getWindow(void) { return LLUI::sWindow; }
 
 	// Set up params after XML load before calling new(),
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index 5cb8ddffcd4a656fc8c578ff0cb2a3a6a36ef195..4a33b24075ab0f42de4d8b8ba3ba564f5b8df72f 100644
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <commands>
   <command name="avatar"
+           available_in_toybox="true"
            icon="Command_Avatar_Icon"
            label_ref="Command_Avatar_Label"
            tooltip_ref="Command_Avatar_Tooltip"
@@ -8,6 +9,7 @@
            param="avatar"
            />
   <command name="build"
+           available_in_toybox="true"
            icon="Command_Build_Icon"
            label_ref="Command_Build_Label"
            tooltip_ref="Command_Build_Tooltip"
@@ -15,6 +17,7 @@
            param="build"
            />
   <command name="chat"
+           available_in_toybox="true"
            icon="Command_Chat_Icon"
            label_ref="Command_Chat_Label"
            tooltip_ref="Command_Chat_Tooltip"
@@ -22,6 +25,7 @@
            param="chat"
            />
   <command name="compass"
+           available_in_toybox="false"
            icon="Command_Compass_Icon"
            label_ref="Command_Compass_Label"
            tooltip_ref="Command_Compass_Tooltip"
@@ -29,6 +33,7 @@
            param="compass"
            />
   <command name="gestures"
+           available_in_toybox="true"
            icon="Command_Gestures_Icon"
            label_ref="Command_Gestures_Label"
            tooltip_ref="Command_Gestures_Tooltip"
@@ -36,6 +41,7 @@
            param="gestures"
            />
   <command name="howto"
+           available_in_toybox="true"
            icon="Command_HowTo_Icon"
            label_ref="Command_HowTo_Label"
            tooltip_ref="Command_HowTo_Tooltip"
@@ -43,6 +49,7 @@
            param="howto"
            />
   <command name="landmarks"
+           available_in_toybox="true"
            icon="Command_Landmarks_Icon"
            label_ref="Command_Landmarks_Label"
            tooltip_ref="Command_Landmarks_Tooltip"
@@ -50,13 +57,23 @@
            param="landmarks"
            />
   <command name="map"
+           available_in_toybox="true"
            icon="Command_Map_Icon"
            label_ref="Command_Map_Label"
            tooltip_ref="Command_Map_Tooltip"
            function="Floater.ToolbarToggle"
            param="map"
            />
+  <command name="minimap"
+           available_in_toybox="true"
+           icon="Command_MiniMap_Icon"
+           label_ref="Command_MiniMap_Label"
+           tooltip_ref="Command_MiniMap_Tooltip"
+           function="Floater.ToolbarToggle"
+           param="minimap"
+           />
   <command name="move"
+           available_in_toybox="true"
            icon="Command_Move_Icon"
            label_ref="Command_Move_Label"
            tooltip_ref="Command_Move_Tooltip"
@@ -64,6 +81,7 @@
            param="move"
            />
   <command name="myland"
+           available_in_toybox="true"
            icon="Command_MyLand_Icon"
            label_ref="Command_MyLand_Label"
            tooltip_ref="Command_MyLand_Tooltip"
@@ -71,6 +89,7 @@
            param="myland"
            />
   <command name="mystuff"
+           available_in_toybox="true"
            icon="Command_MyStuff_Icon"
            label_ref="Command_MyStuff_Label"
            tooltip_ref="Command_MyStuff_Tooltip"
@@ -78,6 +97,7 @@
            param="mystuff"
            />
   <command name="people"
+           available_in_toybox="true"
            icon="Command_People_Icon"
            label_ref="Command_People_Label"
            tooltip_ref="Command_People_Tooltip"
@@ -85,6 +105,7 @@
            param="people"
            />
   <command name="places"
+           available_in_toybox="true"
            icon="Command_Places_Icon"
            label_ref="Command_Places_Label"
            tooltip_ref="Command_Places_Tooltip"
@@ -92,6 +113,7 @@
            param="places"
            />
   <command name="search"
+           available_in_toybox="true"
            icon="Command_Search_Icon"
            label_ref="Command_Search_Label"
            tooltip_ref="Command_Search_Tooltip"
@@ -99,6 +121,7 @@
            param="search"
            />
   <command name="settings"
+           available_in_toybox="true"
            icon="Command_Settings_Icon"
            label_ref="Command_Settings_Label"
            tooltip_ref="Command_Settings_Tooltip"
@@ -106,6 +129,7 @@
            param="settings"
            />
   <command name="shop"
+           available_in_toybox="true"
            icon="Command_Shop_Icon"
            label_ref="Command_Shop_Label"
            tooltip_ref="Command_Shop_Tooltip"
@@ -113,6 +137,7 @@
            param="shop"
            />
   <command name="snapshot"
+           available_in_toybox="true"
            icon="Command_Snapshot_Icon"
            label_ref="Command_Snapshot_Label"
            tooltip_ref="Command_Snapshot_Tooltip"
@@ -120,6 +145,7 @@
            param="snapshot"
            />
   <command name="speak"
+           available_in_toybox="true"
            icon="Command_Speak_Icon"
            label_ref="Command_Speak_Label"
            tooltip_ref="Command_Speak_Tooltip"
@@ -127,6 +153,7 @@
            param="speak"
            />
   <command name="upload"
+           available_in_toybox="true"
            icon="Command_Upload_Icon"
            label_ref="Command_Upload_Label"
            tooltip_ref="Command_Upload_Tooltip"
@@ -134,6 +161,7 @@
            param="upload"
            />
   <command name="view"
+           available_in_toybox="true"
            icon="Command_View_Icon"
            label_ref="Command_View_Label"
            tooltip_ref="Command_View_Tooltip"
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f1db72e5cc0b58b30000253da8dd8ed4179ddc33..9a06423422f5d04e5f22a03330cab37cdb242947 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1858,7 +1858,7 @@
     <key>Type</key>
     <string>Boolean</string>
     <key>Value</key>
-    <integer>1</integer>
+    <integer>0</integer>
   </map>
     <key>Cursor3D</key>
     <map>
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 0b17d64eb078a60daeebc5f3d33a2412f45b8395..836c580ea89033ae1b3131251a6ecdc6a272ef3a 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -403,8 +403,8 @@ LLFavoritesBarCtrl::~LLFavoritesBarCtrl()
 {
 	gInventory.removeObserver(this);
 
-	LLView::deleteViewByHandle(mOverflowMenuHandle);
-	LLView::deleteViewByHandle(mContextMenuHandle);
+	delete mOverflowMenuHandle.get();
+	delete mContextMenuHandle.get();
 }
 
 BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 00dc7b1627500a411bb3421ec5d2bbf2b500dac5..9d020517d84c275cf2f6a2e39e0c20f9931ffb2f 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2112,7 +2112,7 @@ LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key)
 // Destroys the object
 LLFloaterSnapshot::~LLFloaterSnapshot()
 {
-	LLView::deleteViewByHandle(impl.mPreviewHandle);
+	delete impl.mPreviewHandle.get();
 
 	//unfreeze everything else
 	gSavedSettings.setBOOL("FreezeTime", FALSE);
diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp
index eaaaeb3357a0b4012e59e31db7330fb2114cf320..beb928ea3619a17e6b5e90340e4bc5554a294423 100644
--- a/indra/newview/llfloatertoybox.cpp
+++ b/indra/newview/llfloatertoybox.cpp
@@ -32,6 +32,7 @@
 #include "llcommandmanager.h"
 #include "llpanel.h"
 #include "lltoolbar.h"
+#include "lltoolbarview.h"
 
 
 LLFloaterToybox::LLFloaterToybox(const LLSD& key)
@@ -63,7 +64,13 @@ BOOL LLFloaterToybox::postBuild()
 	{
 		LLCommand * command = cmdMgr.getCommand(i);
 
-		mToolBar->addCommand(command);
+		if (command->availableInToybox())
+		{
+			mToolBar->addCommand(command->id());
+
+			llassert(gToolBarView != NULL);
+			mToolBar->enableCommand(command->id(), !gToolBarView->hasCommand(command->id()));
+		}
 	}
 
 	return TRUE;
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 9ba5f827e254b47b4d809077acdacdb12d26829b..6ec2598e4479ee7b0ecfdee947b8598571380442 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -299,7 +299,7 @@ LLFolderView::~LLFolderView( void )
 	mAutoOpenItems.removeAllNodes();
 	gIdleCallbacks.deleteFunction(idle, this);
 
-	LLView::deleteViewByHandle(mPopupMenuHandle);
+	delete mPopupMenuHandle.get();
 
 	mAutoOpenItems.removeAllNodes();
 	clearSelection();
@@ -1969,7 +1969,7 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 void LLFolderView::deleteAllChildren()
 {
 	closeRenamer();
-	LLView::deleteViewByHandle(mPopupMenuHandle);
+	delete mPopupMenuHandle.get();
 	mPopupMenuHandle = LLHandle<LLView>();
 	mScrollContainer = NULL;
 	mRenameItem = NULL;
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index c3e6e1c2dca29c0fd9ea096a3110148559bc9b41..f7ed1116cbd38c05ca55c59971812d1b08ee62f7 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -95,7 +95,7 @@ LLGroupList::LLGroupList(const Params& p)
 LLGroupList::~LLGroupList()
 {
 	gAgent.removeListener(this);
-	LLView::deleteViewByHandle(mContextMenuHandle);
+	delete mContextMenuHandle.get();
 }
 
 // virtual
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index e3a7b749ea6be37294d2204355fe42feb2988928..177aa4f5c81dd0a6958a8d2c62801521b3124823 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -526,11 +526,11 @@ LLPanelPeople::~LLPanelPeople()
 		LLVoiceClient::getInstance()->removeObserver(this);
 	}
 
-	LLView::deleteViewByHandle(mGroupPlusMenuHandle);
-	LLView::deleteViewByHandle(mNearbyViewSortMenuHandle);
-	LLView::deleteViewByHandle(mFriendsViewSortMenuHandle);
-	LLView::deleteViewByHandle(mGroupsViewSortMenuHandle);
-	LLView::deleteViewByHandle(mRecentViewSortMenuHandle);
+	delete mGroupPlusMenuHandle.get();
+	delete mNearbyViewSortMenuHandle.get();
+	delete mFriendsViewSortMenuHandle.get();
+	delete mGroupsViewSortMenuHandle.get();
+	delete mRecentViewSortMenuHandle.get();
 
 }
 
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 9b35e78134a5d59faa992a703e7a97b00113ef48..dfa8c75493f53f0d6735b79c4a364ad5d940761b 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -388,7 +388,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
 LLTeleportHistoryPanel::~LLTeleportHistoryPanel()
 {
 	LLTeleportHistoryFlatItemStorage::instance().purge();
-	LLView::deleteViewByHandle(mGearMenuHandle);
+	delete mGearMenuHandle.get();
 }
 
 BOOL LLTeleportHistoryPanel::postBuild()
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 5355e77bfc49d56bea355f33cb8103c3143c9593..6d69932e934cdbaa03f5f1be1572a2386b02dee0 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1779,16 +1779,17 @@ void LLViewerWindow::initBase()
 	mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle();
 	mLoginPanelHolder = main_view->getChild<LLView>("login_panel_holder")->getHandle();
 
-	// Update the toolbar global holder
+	// Create the toolbar view
 	// *TODO: Eventually, suppress the existence of this debug setting and turn toolbar FUI on permanently
 	if (gSavedSettings.getBOOL("DebugToolbarFUI"))
 	{
 		// Get a pointer to the toolbar view holder
 		LLPanel* panel_holder = main_view->getChild<LLPanel>("toolbar_view_holder");
 		// Load the toolbar view from file 
-		gToolBarView = LLUICtrlFactory::getInstance()->createFromFile<LLToolBarView>("panel_toolbar_view.xml", panel_holder, LLPanel::child_registry_t::instance());
-		// Attach it to the toolbar view holder
-		//panel_holder->addChild(gToolBarView);
+		gToolBarView = LLUICtrlFactory::getInstance()->createFromFile<LLToolBarView>("panel_toolbar_view.xml", panel_holder, LLDefaultChildRegistry::instance());
+		gToolBarView->setShape(panel_holder->getLocalRect());
+		// Hide the toolbars for the moment: we'll make them visible after logging in world (see LLViewerWindow::initWorldUI())
+		gToolBarView->setVisible(FALSE);
 	}
 
 	// Constrain floaters to inside the menu and status bar regions.
@@ -1953,6 +1954,12 @@ void LLViewerWindow::initWorldUI()
 	buttons_panel->setShape(buttons_panel_container->getLocalRect());
 	buttons_panel->setFollowsAll();
 	buttons_panel_container->addChild(buttons_panel);
+
+	// Make the toolbars visible
+	if (gToolBarView)
+	{
+		gToolBarView->setVisible(TRUE);
+	}
 }
 
 // Destroy the UI
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index d68594097ce1b417f69597ada21473bdbccdb4da..be68c2873e0b6dd4095a929b76321ea02101f11d 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -133,6 +133,7 @@ with the same filename but different name
   <texture name="Command_HowTo_Icon"     file_name="icons/SL_Logo.png" preload="true" />
   <texture name="Command_Landmarks_Icon" file_name="icons/SL_Logo.png" preload="true" />
   <texture name="Command_Map_Icon"       file_name="icons/SL_Logo.png" preload="true" />
+  <texture name="Command_MiniMap_Icon"   file_name="icons/SL_Logo.png" preload="true" />
   <texture name="Command_Move_Icon"      file_name="icons/SL_Logo.png" preload="true" />
   <texture name="Command_MyLand_Icon"    file_name="icons/SL_Logo.png" preload="true" />
   <texture name="Command_MyStuff_Icon"   file_name="icons/SL_Logo.png" preload="true" />
@@ -758,4 +759,27 @@ with the same filename but different name
   <texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/>
   <texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
   <texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>
+
+  <texture name="Command_Avatar_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Build_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Chat_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Compass_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Gestures_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_HowTo_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Landmarks_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Map_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_MiniMap_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Move_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_MyLand_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_MyStuff_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_People_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Places_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Search_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Settings_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Shop_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Snapshot_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Speak_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_Upload_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+  <texture name="Command_View_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+
 </textures>
diff --git a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml
index 85f0f104fcf1e04907407c90cab3f915e00f2fbe..fbfbe51a699ef6f74369115df3b60a79868f19c3 100644
--- a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml
@@ -13,44 +13,35 @@
            width="500"
            left="0"
            top="20"
-           min_width="100"
+           min_button_width="0"
+           max_button_width="100"
            side="top">
-    <button auto_resize="true"
-            label="Button"/>
-    <button auto_resize="true"
-            label="Button with long label"/>
-    <button auto_resize="true"
-            label="Button with longest label of all"/>
+    <command name="avatar"/>
+    <command name="build"/>
+    <command name="chat"/>
   </toolbar>
   <toolbar name="test_toolbar_left"
            follows="left|bottom|top"
            height="380"
-           width="100"
+           width="200"
            left="0"
            top="70"
-           min_width="100"           
+           min_button_width="100"           
            side="left">
-    <button height="30"
-            label="Button"/>
-    <button height="50"
-            label="Button with long label"/>
-    <button height="60"
-            label="Button with longest label of all"/>
+    <command name="avatar"/>
+    <command name="build"/>
+    <command name="chat"/>
   </toolbar>
   <toolbar name="test_toolbar_right"
            follows="right|bottom|top"
            height="380"
-           width="100"
+           width="200"
            right="500"
            top="70"
-           min_width="100"
            side="right">
-    <button auto_resize="true"
-            label="Button 1"/>
-    <button auto_resize="true"
-            label="Button with long label"/>
-    <button auto_resize="true"
-            label="Button with longest label of all"/>
+    <command name="avatar"/>
+    <command name="build"/>
+    <command name="chat"/>
   </toolbar>
   <toolbar name="test_toolbar_bottom"
            follows="left|right|bottom"
@@ -58,13 +49,10 @@
            width="500"
            left="0"
            bottom="500"
-           min_width="100"
+           min_button_width="100"
            side="bottom">
-    <button auto_resize="true"
-            label="Button"/>
-    <button auto_resize="true"
-            label="Button with long label"/>
-    <button auto_resize="true"
-            label="Button with longest label of all"/>
+    <command name="avatar"/>
+    <command name="build"/>
+    <command name="chat"/>
   </toolbar>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml
index 5f3a59d9647de462fc73bb1c37df99da29c8c1c9..60a39b0bff77bf48d391fe846808650cf4395033 100644
--- a/indra/newview/skins/default/xui/en/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/en/floater_toybox.xml
@@ -14,17 +14,17 @@
   save_rect="true"
   single_instance="true"
   title="Customize toolbars"
-  width="658">
+  width="650">
   <text
     follows="left|top"
     font="SansSerifMedium"
     halign="left"
     height="20"
     layout="topleft"
-    left="40"
+    left="20"
     length="1"
     name="toybox label 1"
-    right="-40"
+    right="-20"
     top="35"
     type="string">
       Add or remove buttons by dragging them to or from the toolbars.
@@ -35,21 +35,28 @@
     halign="left"
     height="20"
     layout="topleft"
-    left="40"
+    left="20"
     length="1"
     name="toybox label 2"
-    right="-40"
+    right="-20"
     top="55"
     type="string">
       Buttons will appear as shown or as icon-only depending on each toolbar's settings.
   </text>
   <toolbar
     bottom="395"
-    left="40"
+    button_display_mode="icons_with_text"
+    left="20"
     max_button_width="140"
-    min_button_width="140"
+    min_button_width="70"
     name="toybox_toolbar"
-    right="-40"
+    pad_left="5"
+    pad_right="5"
+    pad_top="5"
+    pad_bottom="5"
+    pad_between="15"
+    read_only="true"
+    right="-20"
     side="top"
     top="85">
   </toolbar>
@@ -59,7 +66,7 @@
     label="Restore defaults"
     label_selected="Restore defaults"
     layout="topleft"
-    left="40"
+    left="20"
     name="btn_restore_defaults"
     top="415"
     width="130">
diff --git a/indra/newview/skins/default/xui/en/menu_toolbars.xml b/indra/newview/skins/default/xui/en/menu_toolbars.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de13fec6701eccac9af05690649e8a763ae25c4b
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_toolbars.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+      layout="topleft"
+      name="Toolbars Popup"
+      visible="false">
+  <menu_item_call label="Choose buttons..."
+                  layout="topleft"
+                  name="Chose Buttons">
+    <menu_item_call.on_click function="Floater.Show"
+                             parameter="toybox" />
+  </menu_item_call>
+  <menu_item_separator layout="topleft" />
+  <menu_item_check label="Icons and labels"
+                   layout="topleft"
+                   name="icons_and_labels">
+    <on_click function="Toolbars.EnableSetting"
+              parameter="icons_and_labels" />
+    <on_check function="Toolbars.CheckSetting"
+              parameter="icons_and_labels" />
+  </menu_item_check>
+  <menu_item_check label="Icons only"
+                   layout="topleft"
+                   name="icons_only">
+    <on_click function="Toolbars.EnableSetting"
+              parameter="icons_only" />
+    <on_check function="Toolbars.CheckSetting"
+              parameter="icons_only" />
+  </menu_item_check>
+</context_menu>
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 33a19bcdb0e9d19bf56a6560f0ea4ad7d8295dfd..23ea516b867159a3132579f04bb48e4146fa38fe 100644
--- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
@@ -5,51 +5,101 @@
  name="toolbar view"
  height="500"
  width="1024"
+ left="0"
+ top="0" 
  mouse_opaque="false"
  tab_stop="false"
  visible="true">
- <toolbar
-  follows="top|bottom|left"
-  layout="topleft"
-  name="toolbar_left"
-  height="500"
-  width="30"
-  left="0"
-  top="0" 
-  side="left"
-  visible="true" />
- <toolbar
-  follows="right|bottom|left"
-  layout="topleft"
-  name="toolbar_bottom"
-  height="30"
-  width="964"
-  left="30"
-  top="470" 
-  side="bottom"
-  visible="true" />
- <toolbar
-  follows="top|bottom|right"
-  layout="topleft"
-  name="toolbar_right"
-  height="500"
-  width="30"
-  left="994"
-  top="0" 
-  side="right"
-  visible="true" />
- <panel
-  follows="right|bottom|left"
-  layout="topleft"
-  name="sizer_left"
-  height="500"
-  width="30"
-  left="0"
-  top="0" 
-  background_opaque="false"
-  border_visible="false"
-  background_visible="true"
-  bg_opaque_image="Toast_Over"
-  bg_alpha_image="Toast_Background"
-  visible="true" />
+  <layout_stack name="bottom_toolbar_stack"
+                orientation="vertical"
+                left="0"
+                top="0"
+                width="1024"
+                height="500"
+                follows="all"
+                mouse_opaque="false">
+  <layout_panel name="vertical_toolbar_panel"
+                auto_resize="true"
+                user_resize="false"
+                width="1024"
+                height="500"
+                mouse_opaque="false">
+    <layout_stack name="vertical_toolbar_stack"
+                  orientation="horizontal"
+                  left="0"
+                  top="0"
+                  width="1024"
+                  height="500"
+                  follows="all"
+                  mouse_opaque="false">
+      <layout_panel name="left_toolbar_panel"
+                    fit_content="true"
+                    auto_resize="false"
+                    user_resize="false"
+                    height="500"
+                    width="30"
+                    mouse_opaque="false">
+        <toolbar follows="left|top|bottom"
+                 name="toolbar_left"
+                 height="500"
+                 width="30"
+                 left="0"
+                 top="0"
+                 side="left"
+                 button_display_mode="icons_only">
+          <command name="avatar"/>
+          <command name="build"/>
+          <command name="chat"/>
+        </toolbar>
+      </layout_panel>
+      <layout_panel name="non_toolbar_panel"
+                    auto_resize="true"
+                    user_resize="false"
+                    mouse_opaque="false"/>
+      <layout_panel name="right_toolbar_panel"
+                    fit_content="true"
+                    auto_resize="false"
+                    user_resize="false"
+                    height="500"
+                    width="30"
+                    mouse_opaque="false">
+        <toolbar
+          follows="right|top|bottom"
+          name="toolbar_right"
+          height="500"
+          width="30"
+          left="0"
+          top="0"
+          side="right"
+          button_display_mode="icons_only">
+          <command name="avatar"/>
+          <command name="build"/>
+          <command name="chat"/>
+        </toolbar>
+      </layout_panel>
+    </layout_stack>
+  </layout_panel>
+  <layout_panel name="bottom_toolbar_panel"
+                fit_content="true"
+                auto_resize="false"
+                user_resize="false"
+                height="30"
+                width="1024"
+                mouse_opaque="false">
+    <toolbar layout="topleft"
+             name="toolbar_bottom"
+             height="30"
+             width="1024"
+             left="0"
+             top="0"
+             side="bottom"
+             follows="left|right|bottom"
+             button_display_mode="icons_with_text"
+             visible="true">
+      <command name="avatar"/>
+      <command name="build"/>
+      <command name="chat"/>
+    </toolbar>
+  </layout_panel>
+  </layout_stack>
 </toolbar_view>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index d4c2bc50ca46f3f002bae19a78ee440886975900..feea555fdcf0f03c897f6eab1316382e057c5beb 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3668,6 +3668,8 @@ Try enclosing path to the editor with double quotes.
   <string name="Command_Landmarks_Tooltip"></string>
   <string name="Command_Map_Label">Map</string>
   <string name="Command_Map_Tooltip"></string>
+  <string name="Command_MiniMap_Label">Mini Map</string>
+  <string name="Command_MiniMap_Tooltip"></string>
   <string name="Command_Move_Label">Move</string>
   <string name="Command_Move_Tooltip"></string>
   <string name="Command_MyLand_Label">My Land</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml
index a7f73c0c7c63421843a2e72a2e61abda66042689..32bc88cc9a8b135de0d6122e1659261be0d29959 100644
--- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml
@@ -1,15 +1,24 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<toolbar background_image = "Rounded_Rect">
-  <button_icon_and_text
-    follows="none"
-    height="30"
-    chrome="true"
-    auto_resize="true"
-    />
-  <button_icon
-  follows="none"
-  height="30"
-  chrome="true"
-  auto_resize="true"
-    />
+<toolbar button_height="30"
+         pad_left="5"
+         pad_right="5"
+         pad_top="5"
+         pad_bottom="5"
+         pad_between="5"
+         mouse_opaque="false"
+         read_only="false">
+  <button_panel name="button_panel"
+                bg_opaque_image="Rounded_Rect"
+                background_visible="true"
+                background_opaque="true"/>
+  <button_icon_and_text follows="left|top"
+                        chrome="true"
+                        image_overlay_alignment="left"
+                        use_ellipses="true"
+                        auto_resize="true"/>
+  <button_icon follows="left|top"
+               label=""
+               chrome="true"
+               use_ellipses="true"
+               auto_resize="true"/>
 </toolbar>