void wxPropertyGrid::DrawItems( wxDC& dc,
                                 unsigned int topy,
                                 unsigned int bottomy,
-                                const wxRect* clipRect )
+                                const wxRect* drawRect )
 {
     if ( m_frozen || m_height < 1 || bottomy < topy || !m_pState )
         return;
 
     m_pState->EnsureVirtualHeight();
 
-    wxRect tempClipRect;
-    if ( !clipRect )
+    wxRect tempDrawRect;
+    if ( !drawRect )
     {
-        tempClipRect = wxRect(0,topy,m_pState->m_width,bottomy);
-        clipRect = &tempClipRect;
+        tempDrawRect = wxRect(0, topy,
+                              m_pState->m_width,
+                              bottomy);
+        drawRect = &tempDrawRect;
     }
 
     // items added check
         {
             if ( !m_doubleBuffer )
             {
-                paintFinishY = clipRect->y;
+                paintFinishY = drawRect->y;
                 dcPtr = NULL;
             }
             else
 
         if ( dcPtr )
         {
-            dc.SetClippingRegion( *clipRect );
-            paintFinishY = DoDrawItems( *dcPtr, clipRect, isBuffered );
+            dc.SetClippingRegion( *drawRect );
+            paintFinishY = DoDrawItems( *dcPtr, drawRect, isBuffered );
+            int drawBottomY = drawRect->y + drawRect->height;
 
             // Clear area beyond bottomY?
-            if ( paintFinishY < (clipRect->y+clipRect->height) )
+            if ( paintFinishY < drawBottomY )
             {
                 dcPtr->SetPen(m_colEmptySpace);
                 dcPtr->SetBrush(m_colEmptySpace);
-                dcPtr->DrawRectangle( 0, paintFinishY, m_width,
-                                     (clipRect->y+clipRect->height) );
+                dcPtr->DrawRectangle(0, paintFinishY,
+                                     m_width,
+                                     drawBottomY );
             }
+
+            dc.DestroyClippingRegion();
         }
 
     #if wxPG_DOUBLE_BUFFER
         if ( bufferDC )
         {
-            dc.Blit( clipRect->x, clipRect->y, clipRect->width,
-                     clipRect->height,
+            dc.Blit( drawRect->x, drawRect->y, drawRect->width,
+                     drawRect->height,
                      bufferDC, 0, 0, wxCOPY );
-            dc.DestroyClippingRegion();  // Is this really necessary?
             delete bufferDC;
         }
     #endif
         // Just clear the area
         dc.SetPen(m_colEmptySpace);
         dc.SetBrush(m_colEmptySpace);
-        dc.DrawRectangle(*clipRect);
+        dc.DrawRectangle(*drawRect);
     }
 }
 
     }
 #endif
 
-    return y + yRelMod;
+    return y;
 }
 
 // -----------------------------------------------------------------------