diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 4ab38bada03b44e82e32e839c9c76be85e82a08c..8b665fcdd5231714a0d3b1123aa6cc1267ac04fc 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -54,7 +54,7 @@
 @ stub GdipClonePen
 @ stub GdipCloneRegion
 @ stub GdipCloneStringFormat
-@ stub GdipClosePathFigure
+@ stdcall GdipClosePathFigure(ptr)
 @ stub GdipClosePathFigures
 @ stub GdipCombineRegionPath
 @ stub GdipCombineRegionRect
diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c
index f8d2d49261cf07d38ee512deb9ed10098898d843..c06576cc18647057243b63c6d33017adf6f4668d 100644
--- a/dlls/gdiplus/graphicspath.c
+++ b/dlls/gdiplus/graphicspath.c
@@ -90,6 +90,19 @@ GpStatus WINGDIPAPI GdipAddPathLine2(GpPath *path, GDIPCONST GpPointF *points,
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipClosePathFigure(GpPath* path)
+{
+    if(!path)
+        return InvalidParameter;
+
+    if(path->pathdata.Count > 0){
+        path->pathdata.Types[path->pathdata.Count - 1] |= PathPointTypeCloseSubpath;
+        path->newfigure = TRUE;
+    }
+
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipCreatePath(GpFillMode fill, GpPath **path)
 {
     if(!path)
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 42a60b9ffc22d01670fe69f226cf1ec4fad5b1dc..3546883005f0f0d1206c456a9fca5a7671b32695 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -49,6 +49,7 @@ GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
 GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
 
 GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);
 GpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**);
 GpStatus WINGDIPAPI GdipDeletePath(GpPath*);