diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index affa7241d1e78a1ee4e6d0a38b7585c504dad803..f4814558342357c9030113d9a374c7ea5bea0677 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -73,7 +73,8 @@ LLToolBarView::LLToolBarView(const LLToolBarView::Params& p)
 	mToolbarRight(NULL),
 	mToolbarBottom(NULL),
 	mDragStarted(false),
-	mDragToolbarButton(NULL)
+	mDragToolbarButton(NULL),
+	mToolbarsLoaded(false)
 {
 }
 
@@ -244,6 +245,7 @@ bool LLToolBarView::loadToolbars(bool force_default)
 			}
 		}
 	}
+	mToolbarsLoaded = true;
 	return true;
 }
 
@@ -255,6 +257,10 @@ bool LLToolBarView::loadDefaultToolbars()
 	if (gToolBarView)
 	{
 		retval = gToolBarView->loadToolbars(true);
+		if (retval)
+		{
+			gToolBarView->saveToolbars();
+		}
 	}
 
 	return retval;
@@ -262,6 +268,9 @@ bool LLToolBarView::loadDefaultToolbars()
 
 void LLToolBarView::saveToolbars() const
 {
+	if (!mToolbarsLoaded)
+		return;
+	
 	// Build the parameter tree from the toolbar data
 	LLToolBarView::ToolbarSet toolbar_set;
 	if (mToolbarLeft)
@@ -460,6 +469,9 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t
 				int new_rank = toolbar->getRankFromPosition(x,y);
 				toolbar->addCommand(command_id, new_rank);
 			}
+			
+			// Save the new toolbars configuration
+			gToolBarView->saveToolbars();
 		}
 		else
 		{
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
index 8cafbc93082dd335054654dfd09194640228909a..ea14e471cdf16b5e53daa5a2d4fcf7ad2763354a 100644
--- a/indra/newview/lltoolbarview.h
+++ b/indra/newview/lltoolbarview.h
@@ -100,6 +100,7 @@ class LLToolBarView : public LLUICtrl
 	LLToolBar*	mToolbarLeft;
 	LLToolBar*	mToolbarRight;
 	LLToolBar*	mToolbarBottom;
+	bool		mToolbarsLoaded;
 	
 	bool				mDragStarted;
 	LLToolBarButton*	mDragToolbarButton;