diff --git a/src/mol-gl/webgl/render-item.ts b/src/mol-gl/webgl/render-item.ts
index 721d4720e9147509950284e433bbe79a59c473d8..a9a8244b0571a8877afbb116b711e18902fcbe36 100644
--- a/src/mol-gl/webgl/render-item.ts
+++ b/src/mol-gl/webgl/render-item.ts
@@ -117,9 +117,11 @@ export function createRenderItem(ctx: Context, drawMode: DrawMode, shaderCode: S
             program.setUniforms(uniformValues)
             if (oesVertexArrayObject && vertexArray) {
                 oesVertexArrayObject.bindVertexArrayOES(vertexArray)
+                // TODO need to bind elements buffer explicitely since it is not always recorded in the VAO
+                if (elementsBuffer) elementsBuffer.bind()
             } else {
-                program.bindAttributes(attributeBuffers)
                 if (elementsBuffer) elementsBuffer.bind()
+                program.bindAttributes(attributeBuffers)
             }
             program.bindTextures(textures)
             if (elementsBuffer) {
diff --git a/src/mol-gl/webgl/vertex-array.ts b/src/mol-gl/webgl/vertex-array.ts
index eef6217aa50859de5b7cb7d86c440724dce539fc..aaf92f2754036dca4b0e5cbb89f13e5e6b748d9a 100644
--- a/src/mol-gl/webgl/vertex-array.ts
+++ b/src/mol-gl/webgl/vertex-array.ts
@@ -14,8 +14,8 @@ export function createVertexArray(ctx: Context, program: Program, attributeBuffe
     if (oesVertexArrayObject) {
         vertexArray = oesVertexArrayObject.createVertexArrayOES()
         oesVertexArrayObject.bindVertexArrayOES(vertexArray)
-        program.bindAttributes(attributeBuffers)
         if (elementsBuffer) elementsBuffer.bind()
+        program.bindAttributes(attributeBuffers)
         ctx.vaoCount += 1
         oesVertexArrayObject.bindVertexArrayOES(null!)
     }