diff --git a/graphics/psdrv/graphics.c b/graphics/psdrv/graphics.c
index 318800d3bc557c7590079a2705ab41a662759fca..a819dc198d482bf5f57a3ffa7552614f596c8586 100644
--- a/graphics/psdrv/graphics.c
+++ b/graphics/psdrv/graphics.c
@@ -152,6 +152,9 @@ static BOOL PSDRV_DrawArc( DC *dc, INT left, INT top,
 
     if(lines == 2) /* pie */
         PSDRV_WriteMoveTo(dc, x, y);
+    else
+        PSDRV_WriteNewPath( dc );
+
     PSDRV_WriteArc(dc, x, y, w, h, start_angle, end_angle);
     if(lines == 1 || lines == 2) { /* chord or pie */
         PSDRV_WriteClosePath(dc);
diff --git a/graphics/psdrv/ps.c b/graphics/psdrv/ps.c
index 892a51acec43b72e5864f8f7c187b4b4398031d1..f7e5aab22ecc5a1199882524a55febce2df012c7 100644
--- a/graphics/psdrv/ps.c
+++ b/graphics/psdrv/ps.c
@@ -511,10 +511,6 @@ BOOL PSDRV_WriteArc(DC *dc, INT x, INT y, INT w, INT h, double ang1,
     /* Make angles -ve and swap order because we're working with an upside
        down y-axis */
     sprintf(buf, psarc, x, y, w, h, -ang2, -ang1);
-
-    /* Write newpath operator to ensure there's no line segment drawn
-       from the current point to the beginning of the arc. */
-    PSDRV_WriteNewPath( dc );
     return PSDRV_WriteSpool(dc, buf, strlen(buf));
 }