diff --git a/build/Makefile-msvcproj.mak b/build/Makefile-msvcproj.mak
new file mode 100644
index 000000000..6640a709a
--- /dev/null
+++ b/build/Makefile-msvcproj.mak
@@ -0,0 +1,56 @@
+# Centralized autotools file
+# To create the Visual C++ projects
+# from the templates
+# Author: Fan, Chun-wei
+# August 30, 2012
+
+# Required Items to call this:
+# MSVC_PROJECT: name of project
+# MSVC_PROJECT_SRCDIR: subdir of source tree where sources for this project is found
+# MSVC_PROJECT_SRCS: source files to build
+# MSVC_PROJECT_EXCLUDES: source files to exclude from MSVC_PROJECT_SRCS, use dummy if none,
+# wildcards (*) are allowed, seperated by |
+# DISTCLEANFILES: Define an empty one if not previously defined
+
+# Create the complete Visual C++ 2008/2010 project files
+
+$(top_builddir)/build/win32/vs9/$(MSVC_PROJECT).vcproj: $(top_srcdir)/build/win32/vs9/$(MSVC_PROJECT).vcprojin
+ for F in `echo $(MSVC_PROJECT_SRCS) | sed 's/\.\///g' | tr '/' '\\'`; do \
+ case $$F in \
+ $(MSVC_PROJECT_EXCLUDES)) \
+ ;; \
+ *.c) echo ' ' \
+ ;; \
+ esac; \
+ done | sort -u >$(MSVC_PROJECT).sourcefiles
+ $(CPP) -P - <$(top_srcdir)/build/win32/vs9/$(MSVC_PROJECT).vcprojin >$@
+ rm $(MSVC_PROJECT).sourcefiles
+
+$(top_builddir)/build/win32/vs10/$(MSVC_PROJECT).vcxproj: $(top_srcdir)/build/win32/vs10/$(MSVC_PROJECT).vcxprojin
+ for F in `echo $(MSVC_PROJECT_SRCS) | sed 's/\.\///g' | tr '/' '\\'`; do \
+ case $$F in \
+ $(MSVC_PROJECT_EXCLUDES)) \
+ ;; \
+ *.c) echo ' ' \
+ ;; \
+ esac; \
+ done | sort -u >$(MSVC_PROJECT).vs10.sourcefiles
+ $(CPP) -P - <$(top_srcdir)/build/win32/vs10/$(MSVC_PROJECT).vcxprojin >$@
+ rm $(MSVC_PROJECT).vs10.sourcefiles
+
+$(top_builddir)/build/win32/vs10/$(MSVC_PROJECT).vcxproj.filters: $(top_srcdir)/build/win32/vs10/$(MSVC_PROJECT).vcxproj.filtersin
+ for F in `echo $(MSVC_PROJECT_SRCS) | sed 's/\.\///g' | tr '/' '\\'`; do \
+ case $$F in \
+ $(MSVC_PROJECT_EXCLUDES)) \
+ ;; \
+ *.c) echo ' Source Files' \
+ ;; \
+ esac; \
+ done | sort -u >$(MSVC_PROJECT).vs10.sourcefiles.filters
+ $(CPP) -P - <$(top_srcdir)/build/win32/vs10/$(MSVC_PROJECT).vcxproj.filtersin >$@
+ rm $(MSVC_PROJECT).vs10.sourcefiles.filters
+
+DISTCLEANFILES += \
+ $(top_builddir)/build/win32/vs9/$(MSVC_PROJECT).vcproj \
+ $(top_builddir)/build/win32/vs10/$(MSVC_PROJECT).vcxproj \
+ $(top_builddir)/build/win32/vs10/$(MSVC_PROJECT).vcxproj.filters
diff --git a/build/win32/vs10/Makefile.am b/build/win32/vs10/Makefile.am
index bfc0d66a1..b54bae633 100644
--- a/build/win32/vs10/Makefile.am
+++ b/build/win32/vs10/Makefile.am
@@ -4,8 +4,12 @@ EXTRA_DIST = \
cogl.props \
cogl.vcxproj \
cogl.vcxprojin \
- cogl.vcxproj.filters \
- cogl.vcxproj.filtersin \
+ cogl.vcxproj.filters \
+ cogl.vcxproj.filtersin \
+ cogl-path.vcxproj \
+ cogl-path.vcxprojin \
+ cogl-path.vcxproj.filters \
+ cogl-path.vcxproj.filtersin \
cogl-pango.vcxproj \
cogl-pango.vcxprojin \
cogl-pango.vcxproj.filters \
diff --git a/build/win32/vs9/Makefile.am b/build/win32/vs9/Makefile.am
index 96b0a06ee..0e93a3b67 100644
--- a/build/win32/vs9/Makefile.am
+++ b/build/win32/vs9/Makefile.am
@@ -4,6 +4,8 @@ EXTRA_DIST = \
cogl.vsprops \
cogl.vcproj \
cogl.vcprojin \
+ cogl-path.vcproj \
+ cogl-path.vcprojin \
cogl-pango.vcproj \
cogl-pango.vcprojin \
test-conformance-cogl.vcproj \
diff --git a/cogl-path/Makefile.am b/cogl-path/Makefile.am
index 49558c067..8212a507a 100644
--- a/cogl-path/Makefile.am
+++ b/cogl-path/Makefile.am
@@ -91,3 +91,15 @@ cogl_pathheaders_HEADERS = $(source_h)
if USE_GLIB
nodist_cogl_pathheaders_HEADERS = cogl-path-enum-types.h
endif
+
+dist-hook: \
+ $(top_builddir)/build/win32/vs9/cogl-path.vcproj \
+ $(top_builddir)/build/win32/vs10/cogl-path.vcxproj \
+ $(top_builddir)/build/win32/vs10/cogl-path.vcxproj.filters
+
+MSVC_PROJECT = cogl-path
+MSVC_PROJECT_SRCDIR = cogl-path
+MSVC_PROJECT_SRCS = $(source_c)
+MSVC_PROJECT_EXCLUDES = dummy
+
+include $(top_srcdir)/build/Makefile-msvcproj.mak