diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index e1203971ea1a2d387183e4072b0eb36dd64de4a7..0c4c857022da7c7aa1ddc48103fd843ffce7e829 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2664,18 +2664,26 @@ void LLFloater::setInstanceName(const std::string& name)
 	mInstanceName = name;
 	if (!mInstanceName.empty())
 	{
+		std::string ctrl_name = mInstanceName;
+
+		// Add the key to the control name if appropriate.
+		if (mKey.isString() && !mKey.asString().empty())
+		{
+			ctrl_name += "_" + mKey.asString();
+		}
+
 		// save_rect and save_visibility only apply to registered floaters
 		if (!mRectControl.empty())
 		{
-			mRectControl = LLFloaterReg::declareRectControl(mInstanceName);
+			mRectControl = LLFloaterReg::declareRectControl(ctrl_name);
 		}
 		if (!mVisibilityControl.empty())
 		{
-			mVisibilityControl = LLFloaterReg::declareVisibilityControl(mInstanceName);
+			mVisibilityControl = LLFloaterReg::declareVisibilityControl(ctrl_name);
 		}
 		if(!mDocStateControl.empty())
 		{
-			mDocStateControl = LLFloaterReg::declareDockStateControl(mInstanceName);
+			mDocStateControl = LLFloaterReg::declareDockStateControl(ctrl_name);
 		}
 
 	}
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 3d6fc0d8fd6452eadef7a823db86fd0d24fbe879..3f0c1fa946ece4b4c87d048994c79e23e946534d 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -214,10 +214,10 @@ void LLSideTrayTab::toggleTabDocked()
 {
 	std::string tab_name = getName();
 
-	LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab_name));
+	LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);
 	if (!floater_tab) return;
 
-	LLFloaterReg::toggleInstance("side_bar_tab", LLSD().with("name", tab_name));
+	LLFloaterReg::toggleInstance("side_bar_tab", tab_name);
 
 	LLSideTray* side_tray = LLSideTray::getInstance();
 
@@ -336,7 +336,7 @@ public:
 
 			tab->toggleTabDocked();
 
-			LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab->getName()));
+			LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName());
 			if (!floater_tab) return FALSE;
 
 			LLRect original_rect = floater_tab->getRect();
@@ -502,7 +502,7 @@ LLPanel* LLSideTray::openChildPanel(LLSideTrayTab* tab, const std::string& panel
 	}
 	else
 	{
-		LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab_name));
+		LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);
 		if (!floater_tab) return NULL;
 
 		// Restore the floater if it was minimized.
diff --git a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml
index 1466c2d2a59e0e3f2da60bcf61801c3915e39dd0..35df6a37f6f514439af1638cc5d67c8df4a35886 100644
--- a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml
+++ b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <floater
  can_close="false"
- can_resize="true">
+ can_resize="true"
+ save_rect="true"
+ >
 </floater>