diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 773995cb869a95b6e6e2f083c4fcb2ee4a0a9e00..0c329c69b23fa6be4e98174d5235671de092641d 100755
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -802,6 +802,7 @@ BOOL LLProfile::generate(const LLProfileParams& params, BOOL path_open,F32 detai
 			{
 				// Scale by 4 to generate proper tex coords.
 				mProfile[i].mul(scale);
+				llassert(mProfile[i].isFinite3());
 			}
 
 			if (hollow)
@@ -839,6 +840,7 @@ BOOL LLProfile::generate(const LLProfileParams& params, BOOL path_open,F32 detai
 			{
 				// Scale by 3 to generate proper tex coords.
 				mProfile[i].mul(scale);
+				llassert(mProfile[i].isFinite3());
 			}
 
 			if (path_open)
@@ -989,6 +991,7 @@ BOOL LLProfile::generate(const LLProfileParams& params, BOOL path_open,F32 detai
 			{
 				mOpen = FALSE;
 				mProfile.push_back(mProfile[0]);
+				llassert(mProfile[0].isFinite3());
 				mTotal++;
 			}
 		}
@@ -2127,7 +2130,7 @@ BOOL LLVolume::generate()
 			{
 				rot_mat.rotate(*profile++, tmp);
 				dst->setAdd(tmp,offset);
-				llassert(less_than_max_mag(*dst));
+				llassert(dst->isFinite3());
 				++dst;
 			}
 		}
@@ -2840,6 +2843,8 @@ void LLVolume::sculptGeneratePlaceholder()
 			p[1] = (F32)(sin(F_PI * v) * sin(2.0 * F_PI * u) * RADIUS);
 			p[2] = (F32)(cos(F_PI * v) * RADIUS);
 
+			llassert(pt.isFinite3());
+
 		}
 		line += sizeT;
 	}
@@ -2927,6 +2932,8 @@ void LLVolume::sculptGenerateMapVertices(U16 sculpt_width, U16 sculpt_height, S8
 				LLVector4a scale(-1.f,1,1,1);
 				pt.mul(scale);
 			}
+
+			llassert(pt.isFinite3());
 		}
 		
 		line += sizeT;
@@ -5552,12 +5559,14 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 			tc->mV[0] = (*p)[0]+0.5f;
 			tc->mV[1] = (*p)[1]+0.5f;
 
-			llassert(less_than_max_mag(*src));
+			llassert(src->isFinite3());
 			update_min_max(min,max,*src);
 			update_min_max(min_uv, max_uv, *tc);
 		
 			*pos = *src;
 		
+			llassert(pos->isFinite3());
+
 			++p;
 			++tc;
 			++src;
@@ -5577,11 +5586,13 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 			tc->mV[0] = (*p)[0]+0.5f;
 			tc->mV[1] = 0.5f - (*p)[1];
 		
-			llassert(less_than_max_mag(*src));
+			llassert(src->isFinite3());
 			update_min_max(min,max,*src);
 			update_min_max(min_uv, max_uv, *tc);
 		
 			*pos = *src;
+
+			llassert(pos->isFinite3());
 		
 			++p;
 			++tc;
@@ -6468,8 +6479,11 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 		// mQ = { 0, a[X]*b[Y] - a[Y]*b[X], a[Z]*b[X] - a[X]*b[Z], a[Y]*b[Z] - a[Z]*b[Y] }
 		vector1 = _mm_sub_ps( vector2, _mm_mul_ps( amQ, bmQ ));
 
+		llassert(v1.isFinite3());
+
 		v1.store4a((F32*) output);
 
+		
 		output++;
 		idx += 3;
 	}
@@ -6498,14 +6512,8 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 		n1.add(c);
 		n2.add(c);
 		
-		llassert(llfinite(c.getF32ptr()[0]));
-		llassert(llfinite(c.getF32ptr()[1]));
-		llassert(llfinite(c.getF32ptr()[2]));
-
-		llassert(!llisnan(c.getF32ptr()[0]));
-		llassert(!llisnan(c.getF32ptr()[1]));
-		llassert(!llisnan(c.getF32ptr()[2]));
-
+		llassert(c.isFinite3());
+		
 		//even out quad contributions
 		switch (i%2+1)
 		{
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 33d4b65d4a80c707141e5e730734e115518d8d43..c6c1090f45c573f06f3538700982f1d5ec0b0880 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1073,8 +1073,6 @@ class LLAdvancedCheckInfoDisplay : public view_listener_t
 		U32 info_display = info_display_from_string( userdata.asString() );
 		bool new_value = false;
 
-		LL_INFOS("ViewerMenu") << "check " << userdata.asString() << LL_ENDL;
-
 		if ( info_display != 0 )
 		{
 			new_value = LLPipeline::toggleRenderDebugControl( (void*)info_display );
diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp
index 96cd43a8abeae4e996647fd2e1a849505cef4393..163c90019fcd256ce0968d3cbe4af0d934cbffbc 100755
--- a/indra/newview/llviewerpartsim.cpp
+++ b/indra/newview/llviewerpartsim.cpp
@@ -160,7 +160,11 @@ LLViewerPartGroup::LLViewerPartGroup(const LLVector3 &center_agent, const F32 bo
 	}
 	mVOPartGroupp->setViewerPartGroup(this);
 	mVOPartGroupp->setPositionAgent(getCenterAgent());
+	
+	mBoxSide = box_side;
+
 	F32 scale = box_side * 0.5f;
+
 	mVOPartGroupp->setScale(LLVector3(scale,scale,scale));
 	
 	//gPipeline.addObject(mVOPartGroupp);
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
index 095de2060cfcea4ea15e0d8f6e674730684873c1..2daa07ed8c3eb6d76a38b71899019321f5b4b489 100755
--- a/indra/newview/llviewerpartsim.h
+++ b/indra/newview/llviewerpartsim.h
@@ -105,6 +105,9 @@ class LLViewerPartGroup
 
 	void shift(const LLVector3 &offset);
 
+	F32 getBoxRadius() { return mBoxRadius; }
+	F32 getBoxSide() { return mBoxSide; }
+
 	typedef std::vector<LLViewerPart*>  part_list_t;
 	part_list_t mParticles;
 
@@ -125,6 +128,7 @@ class LLViewerPartGroup
 protected:
 	LLVector3 mCenterAgent;
 	F32 mBoxRadius;
+	F32 mBoxSide;
 	LLVector3 mMinObjPos;
 	LLVector3 mMaxObjPos;
 
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index a65de0c047b62565c2aad093ee9345abfae608fe..1630b5d484b8ea3b0e2a253e85066715e071d26b 100755
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -176,24 +176,28 @@ BOOL LLVOPartGroup::isActive() const
 
 F32 LLVOPartGroup::getBinRadius()
 { 
-	return mScale.mV[0]*2.f;
+	return mViewerPartGroupp->getBoxSide();
 }
 
 void LLVOPartGroup::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
 {		
 	const LLVector3& pos_agent = getPositionAgent();
 
-	newMin.load3( (pos_agent - mScale).mV);
-	newMax.load3( (pos_agent + mScale).mV);
+	LLVector4a scale;
+	LLVector4a p;
+
+	p.load3(pos_agent.mV);
+
+	scale.splat(mScale.mV[0]+mViewerPartGroupp->getBoxSide()*0.5f);
+
+	newMin.setSub(p, scale);
+	newMax.setAdd(p,scale);
 
 	llassert(newMin.isFinite3());
 	llassert(newMax.isFinite3());
 
-	LLVector4a pos;
-	pos.load3(pos_agent.mV);
-
-	llassert(pos.isFinite3());
-	mDrawable->setPositionGroup(pos);
+	llassert(p.isFinite3());
+	mDrawable->setPositionGroup(p);
 }
 
 void LLVOPartGroup::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
@@ -459,6 +463,7 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
 	}
 
 	//record max scale (used to stretch bounding box for visibility culling)
+	
 	mScale.set(max_scale, max_scale, max_scale);
 
 	mDrawable->movePartition();