diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index 45567d58599aac5847296b870e49c6e32f269371..75c7d91f8a770516a1dd612956cf7309ed1baed4 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -213,6 +213,14 @@ bool LLToolBar::addCommand(const LLCommandId& commandId)
 	return add_command;
 }
 
+void LLToolBar::clearCommandsList()
+{
+	// Clears the commands list
+	mButtonCommands.clear();
+	// This will clear the buttons
+	createButtons();
+}
+
 bool LLToolBar::hasCommand(const LLCommandId& commandId) const
 {
 	bool has_command = false;
@@ -278,7 +286,7 @@ BOOL LLToolBar::isSettingChecked(const LLSD& userdata)
 
 	const std::string setting_name = userdata.asString();
 
-	if (setting_name == "icons_and_labels")
+	if (setting_name == "icons_with_text")
 	{
 		retval = (mButtonType == BTNTYPE_ICONS_WITH_TEXT);
 	}
@@ -296,18 +304,23 @@ void LLToolBar::onSettingEnable(const LLSD& userdata)
 
 	const std::string setting_name = userdata.asString();
 
-	const ButtonType current_button_type = mButtonType;
-
-	if (setting_name == "icons_and_labels")
+	if (setting_name == "icons_with_text")
 	{
-		mButtonType = BTNTYPE_ICONS_WITH_TEXT;
+		setButtonType(BTNTYPE_ICONS_WITH_TEXT);
 	}
 	else if (setting_name == "icons_only")
 	{
-		mButtonType = BTNTYPE_ICONS_ONLY;
+		setButtonType(BTNTYPE_ICONS_ONLY);
 	}
+}
 
-	if(current_button_type != mButtonType)
+void LLToolBar::setButtonType(LLToolBarEnums::ButtonType button_type)
+{
+	bool regenerate_buttons = (mButtonType != button_type);
+	
+	mButtonType = button_type;
+	
+	if (regenerate_buttons)
 	{
 		createButtons();
 	}
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 8e484c7e13b4862f453308fae449ba8e48cba58e..03b1756988def9c993f86afea017b77511a6a3cc 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -123,7 +123,6 @@ class LLToolBar
 	bool addCommand(const LLCommandId& commandId);
 	bool hasCommand(const LLCommandId& commandId) const;
 	bool enableCommand(const LLCommandId& commandId, bool enabled);
-	command_id_list_t& getCommandsList() { return mButtonCommands; }
 
 protected:
 	friend class LLUICtrlFactory;
@@ -132,6 +131,13 @@ class LLToolBar
 
 	void initFromParams(const Params&);
 
+public:
+	// Methods used in loading and saving toolbar settings
+	void setButtonType(LLToolBarEnums::ButtonType button_type);
+	LLToolBarEnums::ButtonType getButtonType() { return mButtonType; }
+	command_id_list_t& getCommandsList() { return mButtonCommands; }
+	void clearCommandsList();
+					   
 private:
 	void createContextMenu();
 	void updateLayoutAsNeeded();
diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp
index f60598edcb12c64f2063d7c7760546cbf8fbd578..1c6cf3230b10d0b078e4f9090417f5cfbb89a38c 100644
--- a/indra/llui/lltoolbarview.cpp
+++ b/indra/llui/lltoolbarview.cpp
@@ -41,7 +41,8 @@ LLToolBarView* gToolBarView = NULL;
 static LLDefaultChildRegistry::Register<LLToolBarView> r("toolbar_view");
 
 LLToolBarView::Toolbar::Toolbar()
-:	commands("command")
+:	button_display_mode("button_display_mode"),
+	commands("command")
 {}
 
 LLToolBarView::ToolbarSet::ToolbarSet()
@@ -112,13 +113,17 @@ bool LLToolBarView::addCommand(const LLCommandId& command, LLToolBar* toolbar)
 	return true;
 }
 
-bool LLToolBarView::loadToolbars()
+bool LLToolBarView::loadToolbars(bool force_default)
 {	
 	LLToolBarView::ToolbarSet toolbar_set;
 	
-	// Load the default toolbars.xml file
+	// Load the toolbars.xml file
 	std::string toolbar_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "toolbars.xml");
-	if (!gDirUtilp->fileExists(toolbar_file)) 
+	if (force_default)
+	{
+		toolbar_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "toolbars.xml");
+	}
+	else if (!gDirUtilp->fileExists(toolbar_file)) 
 	{
 		llwarns << "User toolbars def not found -> use default" << llendl;
 		toolbar_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "toolbars.xml");
@@ -145,9 +150,28 @@ bool LLToolBarView::loadToolbars()
 		return false;
 	}
 	
+	// Clear the toolbars now before adding the loaded commands and settings
+	if (mToolbarLeft)
+	{
+		mToolbarLeft->clearCommandsList();
+	}
+	if (mToolbarRight)
+	{
+		mToolbarRight->clearCommandsList();
+	}
+	if (mToolbarBottom)
+	{
+		mToolbarBottom->clearCommandsList();
+	}
+	
 	// Add commands to each toolbar
 	if (toolbar_set.left_toolbar.isProvided() && mToolbarLeft)
 	{
+		if (toolbar_set.left_toolbar.button_display_mode.isProvided())
+		{
+			U32 button_type = toolbar_set.left_toolbar.button_display_mode;
+			mToolbarLeft->setButtonType((LLToolBarEnums::ButtonType)(button_type));
+		}
 		BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.left_toolbar.commands)
 		{
 			addCommand(LLCommandId(command),mToolbarLeft);
@@ -155,6 +179,11 @@ bool LLToolBarView::loadToolbars()
 	}
 	if (toolbar_set.right_toolbar.isProvided() && mToolbarRight)
 	{
+		if (toolbar_set.right_toolbar.button_display_mode.isProvided())
+		{
+			U32 button_type = toolbar_set.right_toolbar.button_display_mode;
+			mToolbarRight->setButtonType((LLToolBarEnums::ButtonType)(button_type));
+		}
 		BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.right_toolbar.commands)
 		{
 			addCommand(LLCommandId(command),mToolbarRight);
@@ -162,6 +191,11 @@ bool LLToolBarView::loadToolbars()
 	}
 	if (toolbar_set.bottom_toolbar.isProvided() && mToolbarBottom)
 	{
+		if (toolbar_set.bottom_toolbar.button_display_mode.isProvided())
+		{
+			U32 button_type = toolbar_set.bottom_toolbar.button_display_mode;
+			mToolbarBottom->setButtonType((LLToolBarEnums::ButtonType)(button_type));
+		}
 		BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.bottom_toolbar.commands)
 		{
 			addCommand(LLCommandId(command),mToolbarBottom);
@@ -176,14 +210,17 @@ void LLToolBarView::saveToolbars() const
 	LLToolBarView::ToolbarSet toolbar_set;
 	if (mToolbarLeft)
 	{
+		toolbar_set.left_toolbar.button_display_mode = (int)(mToolbarLeft->getButtonType());
 		addToToolset(mToolbarLeft->getCommandsList(),toolbar_set.left_toolbar);
 	}
 	if (mToolbarRight)
 	{
+		toolbar_set.right_toolbar.button_display_mode = (int)(mToolbarRight->getButtonType());
 		addToToolset(mToolbarRight->getCommandsList(),toolbar_set.right_toolbar);
 	}
 	if (mToolbarBottom)
 	{
+		toolbar_set.bottom_toolbar.button_display_mode = (int)(mToolbarBottom->getButtonType());
 		addToToolset(mToolbarBottom->getCommandsList(),toolbar_set.bottom_toolbar);
 	}
 	
diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h
index b19841997b4b03c2f393dbcc9b31864881775a12..efe6920db8aa9ad2ee9d55b69cd99add74541845 100644
--- a/indra/llui/lltoolbarview.h
+++ b/indra/llui/lltoolbarview.h
@@ -50,7 +50,8 @@ class LLToolBarView : public LLUICtrl
 	// the user folder for the user specific (saved) settings
 	struct Toolbar : public LLInitParam::Block<Toolbar>
 	{
-		Multiple<LLCommandId::Params>	commands;
+		Mandatory<U32>                button_display_mode;
+		Multiple<LLCommandId::Params> commands;
 		Toolbar();
 	};
 	struct ToolbarSet : public LLInitParam::Block<ToolbarSet>
@@ -70,7 +71,8 @@ class LLToolBarView : public LLUICtrl
 	// Checks if the commandId is being used somewhere in one of the toolbars
 	bool hasCommand(const LLCommandId& commandId) const;
 	// Loads the toolbars from the existing user or default settings
-	bool loadToolbars();	// return false if load fails
+	bool loadToolbars(bool force_default = false);	// return false if load fails
+	bool loadDefaultToolbars() { return loadToolbars(true); }
 	
 protected:
 	friend class LLUICtrlFactory;
diff --git a/indra/newview/app_settings/toolbars.xml b/indra/newview/app_settings/toolbars.xml
index 55327ea919ab21817b2d11ceef299fcb3c4d4e26..19dec78c639f8f552d20e606d6dc244d650baf65 100644
--- a/indra/newview/app_settings/toolbars.xml
+++ b/indra/newview/app_settings/toolbars.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <toolbars>
-  <bottom_toolbar>
+  <bottom_toolbar
+    button_display_mode="0">
     <command name="chat"/>
     <command name="speak"/>
     <command name="places"/>
@@ -10,7 +11,8 @@
     <command name="move"/>
     <command name="howto"/>
   </bottom_toolbar>
-  <left_toolbar>
+  <left_toolbar
+    button_display_mode="1">
     <command name="avatar"/>
     <command name="inventory"/>
     <command name="snapshot"/>
diff --git a/indra/newview/skins/default/xui/en/menu_toolbars.xml b/indra/newview/skins/default/xui/en/menu_toolbars.xml
index de13fec6701eccac9af05690649e8a763ae25c4b..59912b5503639e7a1087d1496396e61740973c31 100644
--- a/indra/newview/skins/default/xui/en/menu_toolbars.xml
+++ b/indra/newview/skins/default/xui/en/menu_toolbars.xml
@@ -12,11 +12,11 @@
   <menu_item_separator layout="topleft" />
   <menu_item_check label="Icons and labels"
                    layout="topleft"
-                   name="icons_and_labels">
+                   name="icons_with_text">
     <on_click function="Toolbars.EnableSetting"
-              parameter="icons_and_labels" />
+              parameter="icons_with_text" />
     <on_check function="Toolbars.CheckSetting"
-              parameter="icons_and_labels" />
+              parameter="icons_with_text" />
   </menu_item_check>
   <menu_item_check label="Icons only"
                    layout="topleft"