diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 2ce1616af7f00743197b93a8a574d7b599327d2c..83a39ba22c28c83288d89dcc166b415d723d6f1a 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -219,6 +219,7 @@ public:
     void setupRenderPassNode(QSGTexture *layer, const QRect &rect, QSGNode *) override
     {
         Q_ASSERT(layer);
+        Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end());
         QSGInternalImageNode *imageNode = static_cast<QSGInternalImageNode*>(*m_nodeIterator++);
         imageNode->setTargetRect(rect);
         imageNode->setInnerTargetRect(rect);
@@ -231,6 +232,7 @@ public:
                                  QSGTextureNode::TextureCoordinatesTransformMode texCoordTransForm,
                                  QSGNode *) override
     {
+        Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end());
         QSGTextureNode *textureNode = static_cast<QSGTextureNode*>(*m_nodeIterator++);
         if (textureNode->texture() != texture) {
             textureNode->setTexture(texture);
@@ -249,6 +251,7 @@ public:
     void setupTiledContentNode(QSGTexture *texture, const QRect &rect, const QRectF &sourceRect,
                                QSGTexture::Filtering filtering, QSGNode *) override
     {
+        Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end());
         QSGTextureNode *textureNode = static_cast<QSGTextureNode*>(*m_nodeIterator++);
         if (textureNode->texture() != texture) {
             textureNode->setTexture(texture);
@@ -264,6 +267,7 @@ public:
     }
     void setupSolidColorNode(const QRect &rect, const QColor &color, QSGNode *) override
     {
+        Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end());
          QSGRectangleNode *rectangleNode = static_cast<QSGRectangleNode*>(*m_nodeIterator++);
 
          if (rectangleNode->rect() != rect)
@@ -275,6 +279,7 @@ public:
     void setupDebugBorderNode(QSGGeometry *geometry, QSGFlatColorMaterial *material,
                               QSGNode *) override
     {
+        Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end());
         QSGGeometryNode *geometryNode = static_cast<QSGGeometryNode*>(*m_nodeIterator++);
 
         geometryNode->setGeometry(geometry);
@@ -754,6 +759,8 @@ void DelegatedFrameNode::preprocess()
 static bool areSharedQuadStatesEqual(const viz::SharedQuadState *layerState,
                                      const viz::SharedQuadState *prevLayerState)
 {
+    if (layerState->sorting_context_id != 0 || prevLayerState->sorting_context_id != 0)
+        return false;
     if (layerState->is_clipped != prevLayerState->is_clipped
         || layerState->clip_rect != prevLayerState->clip_rect)
         return false;
@@ -791,8 +798,6 @@ static bool areRenderPassStructuresEqual(viz::CompositorFrame *frameData,
         for (; it != end && prevIt != prevEnd; ++it, ++prevIt) {
             const viz::DrawQuad *quad = *it;
             const viz::DrawQuad *prevQuad = *prevIt;
-            if (!areSharedQuadStatesEqual(quad->shared_quad_state, prevQuad->shared_quad_state))
-                return false;
             if (quad->material != prevQuad->material)
                 return false;
 #ifndef QT_NO_OPENGL
@@ -803,7 +808,8 @@ static bool areRenderPassStructuresEqual(viz::CompositorFrame *frameData,
                 return false;
 #endif // GL_OES_EGL_image_external
 #endif // QT_NO_OPENGL
-
+            if (!areSharedQuadStatesEqual(quad->shared_quad_state, prevQuad->shared_quad_state))
+                return false;
         }
     }
     return true;