diff --git a/common/draw_panel.cpp b/common/draw_panel.cpp
index 23c97a2..bf178a9 100644
--- a/common/draw_panel.cpp
+++ b/common/draw_panel.cpp
@@ -728,17 +728,13 @@ void EDA_DRAW_PANEL::DrawGrid( wxDC* aDC )
     // high and grid is slowly drawn on some platforms. An other way using blit transfert was used,
     // a long time ago, but it did not give very good results.
     // The better way is highly dependent on the platform and the graphic card.
-#ifndef __WXMAC__
     GRSetColorPen( aDC, GetParent()->GetGridColor() );
-#else
-    // On mac (Cocoa), a point isn't a pixel and being of size 1 don't survive to antialiasing
-    GRSetColorPen( aDC, GetParent()->GetGridColor(), aDC->DeviceToLogicalXRel(2) );
-#endif
 
-    int xpos;
     double right = ( double ) m_ClipBox.GetRight();
     double bottom = ( double ) m_ClipBox.GetBottom();
 
+#if !(defined(__WXMAC__) && defined(USE_WX_GRAPHICS_CONTEXT))
+    int xpos;
     for( double x = (double) org.x; x <= right; x += gridSize.x )
     {
         xpos = KiROUND( x );
@@ -748,6 +744,25 @@ void EDA_DRAW_PANEL::DrawGrid( wxDC* aDC )
             aDC->DrawPoint( xpos, KiROUND( y )  );
         }
     }
+#else
+    // aDC should be a wxGCDC due to USE_WX_GRAPHICS_CONTEXT
+    wxGCDC *gcdc = dynamic_cast<wxGCDC *>( aDC );
+    if (gcdc) {
+        wxGraphicsContext *gc = gcdc->GetGraphicsContext();
+
+        // disable antialiasing for the grid points
+        wxAntialiasMode old = gc->GetAntialiasMode();
+        gc->SetAntialiasMode(wxANTIALIAS_NONE);
+        // draw grid
+        wxGraphicsPath path = gc->CreatePath();
+        for( double x = (double) org.x; x <= right; x += gridSize.x )
+            for( double y = (double) org.y; y <= bottom; y += gridSize.y )
+                path.AddCircle( x, y, 0.0 );
+        gc->StrokePath(path);
+        // restore antialias mode
+        gc->SetAntialiasMode(old);
+    }
+#endif
 }
 
 // Set to 1 to draw auxirilary axis as lines, 0 to draw as target (circle with cross)
