diff --git a/.hgtags b/.hgtags
index 361483c3180ea4debab6c7b92964df7ebb4a4343..d58131992041c5ad1b731e4431810d7aaa737952 100755
--- a/.hgtags
+++ b/.hgtags
@@ -356,3 +356,5 @@ e664473c16df1d82ffaff382e7b3e023da202d52 3.4.2-beta2
 2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209
 f7bedce18ad52283e6072814db23318907261487 DRTVWR-238
 7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210
+e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243
+73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index ef412a6bbf2d8a3aeec0b92edeb7579aa2209b54..f5bf900d0da84f71838baa7343c695d25cfbdbdc 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -96,6 +96,18 @@ LLVolumeImplFlexible::~LLVolumeImplFlexible()
 //static
 void LLVolumeImplFlexible::updateClass()
 {
+	// XXX stinson 11/13/2012 : This hack removes the optimization for limiting the number of flexi-prims
+	// updated.  With the optimization, flexi-prims attached to the users avatar were not being
+	// animated correctly immediately following teleport.  With the optimization removed, the bug went away.
+#define XXX_STINSON_MAINT_1890_HACK_FIX 1
+#if XXX_STINSON_MAINT_1890_HACK_FIX
+	for (std::vector<LLVolumeImplFlexible*>::iterator iter = sInstanceList.begin();
+		iter != sInstanceList.end();
+		++iter)
+	{
+		(*iter)->doIdleUpdate();
+	}
+#else // XXX_STINSON_MAINT_1890_HACK_FIX
 	std::vector<S32>::iterator delay_iter = sUpdateDelay.begin();
 
 	for (std::vector<LLVolumeImplFlexible*>::iterator iter = sInstanceList.begin();
@@ -109,6 +121,7 @@ void LLVolumeImplFlexible::updateClass()
 		}
 		++delay_iter;
 	}
+#endif // XXX_STINSON_MAINT_1890_HACK_FIX
 }
 
 LLVector3 LLVolumeImplFlexible::getFramePosition() const
@@ -431,6 +444,15 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
 		//the object is not visible
 		return ;
 	}
+
+	// stinson 11/12/2012: Need to check with davep on the following.
+	// Skipping the flexible update if render res is negative.  If we were to continue with a negative value,
+	// the subsequent S32 num_render_sections = 1<<mRenderRes; code will specify a really large number of
+	// render sections which will then create a length exception in the std::vector::resize() method.
+	if (mRenderRes < 0)
+	{
+		return;
+	}
 	
 	S32 num_sections = 1 << mSimulateRes;
 
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 91dd44131906119ec58dfc2301f689675691c921..ea2dc60b07cbbd896cca3636f2afe43d79f90959 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -2578,26 +2578,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;
 }