diff --git a/src/Canvas/ShivaVG/src/shPipeline.c b/src/Canvas/ShivaVG/src/shPipeline.c
index 1e07bc56a..005c9c690 100644
--- a/src/Canvas/ShivaVG/src/shPipeline.c
+++ b/src/Canvas/ShivaVG/src/shPipeline.c
@@ -332,8 +332,20 @@ VG_API_CALL void vgDrawPath(VGPath path, VGbitfield paintModes)
     
     /* Tesselate into stencil */
     glEnable(GL_STENCIL_TEST);
-    glStencilFunc(GL_ALWAYS, 0, 0);
-    glStencilOp(GL_INVERT, GL_INVERT, GL_INVERT);
+
+    if( context->fillRule == VG_EVEN_ODD )
+    {
+      glStencilFunc(GL_ALWAYS, 0, 0);
+      glStencilOp(GL_INVERT, GL_INVERT, GL_INVERT);
+    }
+    else
+    {
+      // pseudo non-zero fill rule. Fill everything at least covered once, don't
+      // care for possible decrements.
+      // TODO implement real non-zero fill-rule
+      glStencilFunc(GL_ALWAYS, 1, 1);
+      glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
+    }
     glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
     shDrawVertices(p, GL_TRIANGLE_FAN);
     
diff --git a/src/Canvas/elements/path.cxx b/src/Canvas/elements/path.cxx
index f7c9ddafe..a6cc76682 100644
--- a/src/Canvas/elements/path.cxx
+++ b/src/Canvas/elements/path.cxx
@@ -210,7 +210,7 @@ namespace canvas
         {
           vgSetPaint(_paint_fill, VG_FILL_PATH);
 
-          vgSetf(VG_FILL_RULE, VG_NON_ZERO); // TODO make user configurable
+          vgSeti(VG_FILL_RULE, VG_NON_ZERO); // TODO make user configurable
         }
 
         // And finally draw the path