diff --git a/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx b/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx
index daf38cdcdf4e432c4ccc5efcf216ed0ca9052b28..4ca6cffc6c477e7db11f67f10b4e4323d8e4bff7 100644
--- a/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx
+++ b/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx
@@ -2185,7 +2185,7 @@ void vtkOpenGLPolyDataMapper::UpdateShaders(
     gss->Delete();
 
     // if the shader changed reinitialize the VAO
-    if (newShader != cellBO.Program)
+    if (newShader != cellBO.Program || cellBO.Program->GetMTime() > cellBO.AttributeUpdateTime)
     {
       cellBO.Program = newShader;
       // reset the VAO as the shader has changed
@@ -2197,6 +2197,11 @@ void vtkOpenGLPolyDataMapper::UpdateShaders(
   else
   {
     renWin->GetShaderCache()->ReadyShaderProgram(cellBO.Program);
+    if (cellBO.Program->GetMTime() > cellBO.AttributeUpdateTime)
+    {
+      // reset the VAO as the shader has changed
+      cellBO.VAO->ReleaseGraphicsResources();
+    }
   }
 
   if (cellBO.Program)
@@ -2234,7 +2239,8 @@ void vtkOpenGLPolyDataMapper::SetMapperShaderParameters(
 
   if (cellBO.IBO->IndexCount &&
     (this->VBOs->GetMTime() > cellBO.AttributeUpdateTime ||
-      cellBO.ShaderSourceTime > cellBO.AttributeUpdateTime))
+      cellBO.ShaderSourceTime > cellBO.AttributeUpdateTime ||
+      cellBO.VAO->GetMTime() > cellBO.AttributeUpdateTime))
   {
     cellBO.VAO->Bind();
 
diff --git a/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx b/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx
index 43e53045b00a2feaf135e35ed7a6878188c778e0..20b240d150d975789c5985826a494ae2be08db91 100644
--- a/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx
+++ b/Rendering/OpenGL2/vtkOpenGLVertexArrayObject.cxx
@@ -226,6 +226,7 @@ void vtkOpenGLVertexArrayObject::Release()
       }
     }
   }
+  this->Modified();
 }
 
 void vtkOpenGLVertexArrayObject::ShaderProgramChanged()
diff --git a/Rendering/OpenGL2/vtkShaderProgram.cxx b/Rendering/OpenGL2/vtkShaderProgram.cxx
index 56d5c9288279fe911ba483c5134a403507154fb5..8a654ef114da2ac0ebc6368b628804b79173020a 100644
--- a/Rendering/OpenGL2/vtkShaderProgram.cxx
+++ b/Rendering/OpenGL2/vtkShaderProgram.cxx
@@ -541,6 +541,7 @@ void vtkShaderProgram::ReleaseGraphicsResources(vtkWindow* win)
   {
     this->TransformFeedback->ReleaseGraphicsResources();
   }
+  this->Modified();
 }
 
 bool vtkShaderProgram::EnableAttributeArray(const char* name)