diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 678898797f0ef7464e527c2a1298fed9c7457af6..d9f4aa009b572ed85a124844e04358b689eb7846 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -2577,26 +2577,59 @@ static LLFastTimer::DeclareTimer FTM_REBUILD_PRIORITY_GROUPS("Rebuild Priority G
 
 void LLPipeline::clearRebuildGroups()
 {
+	LLSpatialGroup::sg_vector_t	hudGroups;
+
 	mGroupQ1Locked = true;
 	// Iterate through all drawables on the priority build queue,
 	for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ1.begin();
 		 iter != mGroupQ1.end(); ++iter)
 	{
 		LLSpatialGroup* group = *iter;
-		group->clearState(LLSpatialGroup::IN_BUILD_Q1);
+
+		// If the group contains HUD objects, save the group
+		if (group->isHUDGroup())
+		{
+			hudGroups.push_back(group);
+		}
+		// Else, no HUD objects so clear the build state
+		else
+		{
+			group->clearState(LLSpatialGroup::IN_BUILD_Q1);
+		}
 	}
+
+	// Clear the group
 	mGroupQ1.clear();
+
+	// Copy the saved HUD groups back in
+	mGroupQ1.assign(hudGroups.begin(), hudGroups.end());
 	mGroupQ1Locked = false;
 
+	// Clear the HUD groups
+	hudGroups.clear();
+
 	mGroupQ2Locked = true;
 	for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ2.begin();
 		 iter != mGroupQ2.end(); ++iter)
 	{
 		LLSpatialGroup* group = *iter;
-		group->clearState(LLSpatialGroup::IN_BUILD_Q2);
-	}	
 
+		// If the group contains HUD objects, save the group
+		if (group->isHUDGroup())
+		{
+			hudGroups.push_back(group);
+		}
+		// Else, no HUD objects so clear the build state
+		else
+		{
+			group->clearState(LLSpatialGroup::IN_BUILD_Q2);
+		}
+	}	
+	// Clear the group
 	mGroupQ2.clear();
+
+	// Copy the saved HUD groups back in
+	mGroupQ2.assign(hudGroups.begin(), hudGroups.end());
 	mGroupQ2Locked = false;
 }