diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 5c0e1c9c3bd729b68f91ab52088a31bed34927a4..0ed3c09091cff833173c2c123c43fe920a23038f 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -1087,7 +1087,8 @@ LLRender::LLRender()
 	mQuadCycle(0),
     mMode(LLRender::TRIANGLES),
     mCurrTextureUnitIndex(0),
-    mLineWidth(1.f)
+    mLineWidth(1.f),
+    mDummyVAO(0)
 {	
 	mTexUnits.reserve(LL_NUM_TEXTURE_LAYERS);
 	for (U32 i = 0; i < LL_NUM_TEXTURE_LAYERS; i++)
@@ -1135,9 +1136,8 @@ void LLRender::init()
 	if (sGLCoreProfile && !LLVertexBuffer::sUseVAO)
 	{ //bind a dummy vertex array object so we're core profile compliant
 #ifdef GL_ARB_vertex_array_object
-		U32 ret;
-		glGenVertexArrays(1, &ret);
-		glBindVertexArray(ret);
+		glGenVertexArrays(1, &mDummyVAO);
+		glBindVertexArray(mDummyVAO);
 #endif
 	}
 
@@ -1154,6 +1154,14 @@ void LLRender::init()
 
 void LLRender::shutdown()
 {
+    if (mDummyVAO != 0)
+    { //bind a dummy vertex array object so we're core profile compliant
+#ifdef GL_ARB_vertex_array_object
+        glDeleteVertexArrays(1, &mDummyVAO);
+#endif
+        mDummyVAO = 0;
+    }
+
 	for (U32 i = 0; i < mTexUnits.size(); i++)
 	{
 		delete mTexUnits[i];
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index 194891b95eccf452a51a21c6f95d0520f165fd83..5c2c74b58b1d5baa039090f103ae6aca9464234b 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -508,6 +508,7 @@ class LLRender
 	eBlendFactor mCurrBlendAlphaDFactor;
 
 	F32				mMaxAnisotropy;
+    U32             mDummyVAO;
 
 	std::vector<LLVector3> mUIOffset;
 	std::vector<LLVector3> mUIScale;