diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index c5d7d1db5694bcbbc7c06d418cd889e634097216..a5fd3ea55252bdb89ca7ee284833043021d4bb24 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1951,6 +1951,12 @@ void LLFloater::setCanDrag(BOOL can_drag)
 	}
 }
 
+bool LLFloater::getCanDrag()
+{
+	return mDragHandle->getEnabled();
+}
+
+
 void LLFloater::updateTitleButtons()
 {
 	static LLUICachedControl<S32> floater_close_box_size ("UIFloaterCloseBoxSize", 0);
@@ -2181,7 +2187,7 @@ void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
 		LLFloater* floaterp = (LLFloater*)viewp;
 		if (floaterp->isDependent())
 		{
-			// dependents use same follow flags as their "dependee"
+			// dependents are moved with their "dependee"
 			continue;
 		}
 
@@ -2209,7 +2215,11 @@ void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
 				translate_y = new_top - old_top;
 			}
 
-			floaterp->translate(translate_x, translate_y);
+			// don't reposition immovable floaters
+			if (floaterp->getCanDrag())
+			{
+				floaterp->translate(translate_x, translate_y);
+			}
 			BOOST_FOREACH(LLHandle<LLFloater> dependent_floater, floaterp->mDependents)
 			{
 				if (dependent_floater.get())
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 4e8c539144fde7c586279a928f5f75770e38e685..8886ae3393c4a9f1ec6479b47077eaa48e83389a 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -234,6 +234,7 @@ class LLFloater : public LLPanel
 	void			setCanTearOff(BOOL can_tear_off);
 	virtual void	setCanResize(BOOL can_resize);
 	void			setCanDrag(BOOL can_drag);
+	bool			getCanDrag();
 	void			setHost(LLMultiFloater* host);
 	BOOL			isResizable() const				{ return mResizable; }
 	void			setResizeLimits( S32 min_width, S32 min_height );
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index a7dabeb56373ddba317c3ffefd820265e57f5cbf..e9b4d4d96db64547d65ca87455cf6c9bc6d1f7e1 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1893,6 +1893,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>DebugHideEmptySystemFolders</key>
+    <map>
+      <key>Comment</key>
+      <string>Hide empty system folders when on</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DebugInventoryFilters</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
index a179b61cffc78c7c61ade5cd39935c2ffa079588..c39df7efce3019dd646b644bb8725b35e8a8067a 100644
--- a/indra/newview/llviewerfoldertype.cpp
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -30,6 +30,7 @@
 #include "lldictionary.h"
 #include "llmemory.h"
 #include "llvisualparam.h"
+#include "llviewercontrol.h"
 
 static const std::string empty_string;
 
@@ -266,7 +267,7 @@ BOOL LLViewerFolderType::lookupIsQuietType(LLFolderType::EType folder_type)
 bool LLViewerFolderType::lookupIsHiddenIfEmpty(LLFolderType::EType folder_type)
 {
 	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
-	if (entry)
+	if (gSavedSettings.getBOOL("DebugHideEmptySystemFolders") && entry)
 	{
 		return entry->mHideIfEmpty;
 	}