diff --git a/pmd/etc/grammar/cpp.jj b/pmd-cpp/etc/grammar/cpp.jj
similarity index 100%
rename from pmd/etc/grammar/cpp.jj
rename to pmd-cpp/etc/grammar/cpp.jj
diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml
new file mode 100644
index 0000000000..5a60f1e785
--- /dev/null
+++ b/pmd-cpp/pom.xml
@@ -0,0 +1,185 @@
+
+
+ 4.0.0
+ pmd-cpp
+ PMD C++
+
+
+ net.sourceforge.pmd
+ pmd-aggregate
+ 5.1.4-SNAPSHOT
+
+
+
+
+
+ maven-resources-plugin
+
+ false
+
+ ${*}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+ true
+
+
+ generate-sources
+ generate-sources
+
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+
+
+ add-javacc-generated-sources
+
+ add-source
+
+
+
+ ${project.build.directory}/generated-sources/javacc
+
+
+
+
+
+
+
+
+ com.atlassian.maven.plugins
+ maven-clover2-plugin
+
+ ${java.version}
+ ${basedir}/../pmd/licences/clover2.license
+
+
+
+ pre-site
+
+ instrument
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-site-plugin
+
+ ${project.build.directory}/generated-xdocs
+
+
+
+
+
+
+ net.sourceforge.pmd
+ pmd
+ ${project.version}
+
+
+ net.sourceforge.pmd
+ pmd-test
+ ${project.version}
+
+
+ org.apache.ant
+ ant
+ provided
+
+
+ org.apache.ant
+ ant-testutil
+ test
+
+
+ jaxen
+ jaxen
+
+
+ xercesImpl
+ xerces
+
+
+ xalan
+ xalan
+
+
+ icu4j
+ com.ibm.icu
+
+
+
+
+ com.beust
+ jcommander
+
+
+ org.ow2.asm
+ asm
+
+
+ net.sourceforge.saxon
+ saxon
+
+
+ net.sourceforge.saxon
+ saxon
+ dom
+ runtime
+
+
+ junit
+ junit
+ test
+
+
+ xerces
+ xercesImpl
+ jar
+ compile
+
+
+ net.java.dev.javacc
+ javacc
+
+
+ commons-io
+ commons-io
+
+
+ org.mockito
+ mockito-all
+ test
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.slf4j
+ slf4j-api
+ test
+
+
+
diff --git a/pmd-cpp/src/main/ant/alljavacc.xml b/pmd-cpp/src/main/ant/alljavacc.xml
new file mode 100644
index 0000000000..4066ee3a6f
--- /dev/null
+++ b/pmd-cpp/src/main/ant/alljavacc.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pmd/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java
rename to pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPLanguage.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java
rename to pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/cpp/ContinuationReader.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/ContinuationReader.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/cpp/ContinuationReader.java
rename to pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/ContinuationReader.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppHandler.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppHandler.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppHandler.java
rename to pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppHandler.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppLanguageModule.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppLanguageModule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppLanguageModule.java
rename to pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppLanguageModule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppParser.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppParser.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppParser.java
rename to pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppParser.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppTokenManager.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppTokenManager.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/cpp/CppTokenManager.java
rename to pmd-cpp/src/main/java/net/sourceforge/pmd/lang/cpp/CppTokenManager.java
diff --git a/pmd-cpp/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language b/pmd-cpp/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language
new file mode 100644
index 0000000000..ecb3ec91fa
--- /dev/null
+++ b/pmd-cpp/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language
@@ -0,0 +1 @@
+net.sourceforge.pmd.lang.cpp.CppLanguageModule
diff --git a/pmd/src/test/java/net/sourceforge/pmd/lang/cpp/ContinuationReaderTest.java b/pmd-cpp/src/test/java/net/sourceforge/pmd/lang/cpp/ContinuationReaderTest.java
similarity index 100%
rename from pmd/src/test/java/net/sourceforge/pmd/lang/cpp/ContinuationReaderTest.java
rename to pmd-cpp/src/test/java/net/sourceforge/pmd/lang/cpp/ContinuationReaderTest.java
diff --git a/pmd/src/main/ant/alljavacc.xml b/pmd/src/main/ant/alljavacc.xml
index 16e5203830..62bf7de2e9 100644
--- a/pmd/src/main/ant/alljavacc.xml
+++ b/pmd/src/main/ant/alljavacc.xml
@@ -4,7 +4,7 @@
+ depends="checkUpToDate,init,dummyjjtree,jspjjtree,cleanup" />
@@ -146,21 +146,4 @@ public class]]>
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pmd/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language b/pmd/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language
index a77173966e..e5bb864700 100644
--- a/pmd/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language
+++ b/pmd/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language
@@ -1,4 +1,3 @@
-net.sourceforge.pmd.lang.cpp.CppLanguageModule
net.sourceforge.pmd.lang.fortran.FortranLanguageModule
net.sourceforge.pmd.lang.jsp.JspLanguageModule
net.sourceforge.pmd.lang.php.PhpLanguageModule
diff --git a/pom.xml b/pom.xml
index ef91a87a3e..6a7bd2c6e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -632,6 +632,7 @@
pmd-javascript
pmd-vm
pmd-plsql
+ pmd-cpp
pmd-dist