diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index c555f556fa46388646b1b232d3412792eb73a3d7..c01c15391de812273bea8f96c7ebcd03f19dbaa1 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -2051,7 +2051,8 @@ LLGLState::LLGLState(LLGLenum state, S32 enabled) :
 	if (mState)
 	{
 		mWasEnabled = sStateMap[state];
-		llassert(mWasEnabled == glIsEnabled(state));
+        // we can't actually assert on this as queued changes to state are not reflected by glIsEnabled
+		//llassert(mWasEnabled == glIsEnabled(state));
 		setEnabled(enabled);
 		stop_glerror();
 	}
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 0c53d48c088c685d428921a40c855dc45f64a4b2..1b910d91b2ef3d1eb2353766b443a8c52cfc55bf 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -953,6 +953,17 @@ S32 LLVertexBuffer::determineUsage(S32 usage)
 	    }
 	}
 	
+    if (ret_usage == 0)
+    {
+            if (sDisableVBOMapping)
+		    { //always use stream draw if VBO mapping is disabled
+			    ret_usage = GL_STREAM_DRAW_ARB;
+		    }
+		    else
+		    {
+			    ret_usage = GL_DYNAMIC_DRAW_ARB;
+		    }
+    }
 	return ret_usage;
 }
 
@@ -982,6 +993,8 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage)
 	mMappable(false),
 	mFence(NULL)
 {
+    llassert(mUsage != 0);
+
 	mMappable = (mUsage == GL_DYNAMIC_DRAW_ARB && !sDisableVBOMapping);
 
 	//zero out offsets
@@ -1527,7 +1540,7 @@ bool LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices)
 bool LLVertexBuffer::useVBOs() const
 {
 	//it's generally ineffective to use VBO for things that are streaming on apple
-	return (mUsage != 0);
+	return sEnableVBOs && (mUsage != 0);
 }
 
 //----------------------------------------------------------------------------