diff --git a/pmd/etc/grammar/VmParser.jjt b/pmd-vm/etc/grammar/VmParser.jjt
similarity index 100%
rename from pmd/etc/grammar/VmParser.jjt
rename to pmd-vm/etc/grammar/VmParser.jjt
diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml
new file mode 100644
index 0000000000..7b84f12c7b
--- /dev/null
+++ b/pmd-vm/pom.xml
@@ -0,0 +1,178 @@
+
+
+ 4.0.0
+ pmd-vm
+ PMD Velocity
+
+
+ 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
+
+
+
+
+
+
+
+
+ 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-vm/src/main/ant/alljavacc.xml b/pmd-vm/src/main/ant/alljavacc.xml
new file mode 100644
index 0000000000..cab38ed72f
--- /dev/null
+++ b/pmd-vm/src/main/ant/alljavacc.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ public class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmHandler.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmLanguageModule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmParser.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmParser.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmParser.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmParser.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmTokenManager.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmTokenManager.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/VmTokenManager.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/VmTokenManager.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTAddNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTAddNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTAddNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTAddNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDivNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDivNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDivNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDivNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTEscape.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTEscape.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTEscape.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTEscape.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMathNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMathNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMathNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMathNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMethod.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMethod.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMethod.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMethod.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTModNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTModNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTModNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTModNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMulNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMulNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMulNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTMulNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTReference.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTReference.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTReference.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTReference.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTStringLiteral.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTStringLiteral.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTStringLiteral.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTStringLiteral.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTSubtractNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTSubtractNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTSubtractNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTSubtractNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/MacroParseException.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/MacroParseException.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/MacroParseException.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/MacroParseException.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/NodeUtils.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/NodeUtils.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/NodeUtils.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/NodeUtils.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/TemplateParseException.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/TemplateParseException.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/TemplateParseException.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/TemplateParseException.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/TokenMgrError.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/TokenMgrError.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/TokenMgrError.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/TokenMgrError.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmNode.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmNode.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmNode.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmParserVisitorAdapter.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmParserVisitorAdapter.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmParserVisitorAdapter.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/VmParserVisitorAdapter.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Block.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Block.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Block.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Block.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/BlockMacro.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/BlockMacro.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/BlockMacro.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/BlockMacro.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Break.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Break.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Break.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Break.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Define.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Define.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Define.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Define.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Directive.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Directive.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Directive.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Directive.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/DirectiveConstants.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/DirectiveConstants.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/DirectiveConstants.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/DirectiveConstants.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Evaluate.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Evaluate.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Evaluate.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Evaluate.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Foreach.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Foreach.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Foreach.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Foreach.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Include.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Include.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Include.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Include.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/InputBase.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/InputBase.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/InputBase.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/InputBase.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Literal.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Literal.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Literal.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Literal.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Macro.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Macro.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Macro.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Macro.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Parse.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Parse.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Parse.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Parse.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/RuntimeMacro.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/RuntimeMacro.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/RuntimeMacro.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/RuntimeMacro.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Stop.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Stop.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/Stop.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/Stop.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/VelocimacroProxy.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/VelocimacroProxy.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/directive/VelocimacroProxy.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/directive/VelocimacroProxy.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractStatisticalVmRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractStatisticalVmRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractStatisticalVmRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractStatisticalVmRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/AbstractVmRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleChainVisitor.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleViolationFactory.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleViolationFactory.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleViolationFactory.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/VmRuleViolationFactory.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidDeeplyNestedIfStmtsRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidDeeplyNestedIfStmtsRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidDeeplyNestedIfStmtsRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidDeeplyNestedIfStmtsRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidReassigningParametersRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidReassigningParametersRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidReassigningParametersRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/AvoidReassigningParametersRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/CollapsibleIfStatementsRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/CollapsibleIfStatementsRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/CollapsibleIfStatementsRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/CollapsibleIfStatementsRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyForeachStmtRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyForeachStmtRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyForeachStmtRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyForeachStmtRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyIfStmtRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyIfStmtRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyIfStmtRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/EmptyIfStmtRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/ExcessiveTemplateLengthRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/ExcessiveTemplateLengthRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/ExcessiveTemplateLengthRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/ExcessiveTemplateLengthRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/NoInlineJavaScriptRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/NoInlineJavaScriptRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/NoInlineJavaScriptRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/NoInlineJavaScriptRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/UnusedMacroParameterRule.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/UnusedMacroParameterRule.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/UnusedMacroParameterRule.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/rule/basic/UnusedMacroParameterRule.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/util/DirectiveMapper.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/util/DirectiveMapper.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/util/DirectiveMapper.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/util/DirectiveMapper.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/util/LogUtil.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/util/LogUtil.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/util/LogUtil.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/util/LogUtil.java
diff --git a/pmd/src/main/java/net/sourceforge/pmd/lang/vm/util/VelocityCharStream.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/util/VelocityCharStream.java
similarity index 100%
rename from pmd/src/main/java/net/sourceforge/pmd/lang/vm/util/VelocityCharStream.java
rename to pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/util/VelocityCharStream.java
diff --git a/pmd-vm/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language b/pmd-vm/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language
new file mode 100644
index 0000000000..aa6c6924ac
--- /dev/null
+++ b/pmd-vm/src/main/resources/META-INF/services/net.sourceforge.pmd.lang.Language
@@ -0,0 +1 @@
+net.sourceforge.pmd.lang.vm.VmLanguageModule
diff --git a/pmd/src/main/resources/rulesets/vm/basic.xml b/pmd-vm/src/main/resources/rulesets/vm/basic.xml
similarity index 100%
rename from pmd/src/main/resources/rulesets/vm/basic.xml
rename to pmd-vm/src/main/resources/rulesets/vm/basic.xml
diff --git a/pmd/src/main/resources/rulesets/vm/rulesets.properties b/pmd-vm/src/main/resources/rulesets/vm/rulesets.properties
similarity index 100%
rename from pmd/src/main/resources/rulesets/vm/rulesets.properties
rename to pmd-vm/src/main/resources/rulesets/vm/rulesets.properties
diff --git a/pmd/src/test/java/net/sourceforge/pmd/lang/vm/VmParserTest.java b/pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/VmParserTest.java
similarity index 97%
rename from pmd/src/test/java/net/sourceforge/pmd/lang/vm/VmParserTest.java
rename to pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/VmParserTest.java
index a3f41622af..e8568cd9a2 100644
--- a/pmd/src/test/java/net/sourceforge/pmd/lang/vm/VmParserTest.java
+++ b/pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/VmParserTest.java
@@ -10,7 +10,6 @@ import net.sourceforge.pmd.lang.LanguageVersionHandler;
import net.sourceforge.pmd.lang.Parser;
import net.sourceforge.pmd.lang.ast.Node;
-import net.sourceforge.pmd.lang.java.JavaLanguageModule;
import org.junit.Assert;
import org.junit.Test;
diff --git a/pmd/src/test/java/net/sourceforge/pmd/lang/vm/rule/basic/BasicRulesTest.java b/pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/rule/basic/BasicRulesTest.java
similarity index 100%
rename from pmd/src/test/java/net/sourceforge/pmd/lang/vm/rule/basic/BasicRulesTest.java
rename to pmd-vm/src/test/java/net/sourceforge/pmd/lang/vm/rule/basic/BasicRulesTest.java
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidDeeplyNestedIfStmts.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidDeeplyNestedIfStmts.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidDeeplyNestedIfStmts.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidDeeplyNestedIfStmts.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidReassigningParameters.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidReassigningParameters.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidReassigningParameters.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/AvoidReassigningParameters.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/CollapsibleIfStatements.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/CollapsibleIfStatements.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/CollapsibleIfStatements.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/CollapsibleIfStatements.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyForeachStmt.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyForeachStmt.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyForeachStmt.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyForeachStmt.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyIfStmt.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyIfStmt.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyIfStmt.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/EmptyIfStmt.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/ExcessiveTemplateLength.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/ExcessiveTemplateLength.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/ExcessiveTemplateLength.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/ExcessiveTemplateLength.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineJavaScript.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineJavaScript.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineJavaScript.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineJavaScript.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineStyles.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineStyles.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineStyles.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/NoInlineStyles.xml
diff --git a/pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/UnusedMacroParameter.xml b/pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/UnusedMacroParameter.xml
similarity index 100%
rename from pmd/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/UnusedMacroParameter.xml
rename to pmd-vm/src/test/resources/net/sourceforge/pmd/lang/vm/rule/basic/xml/UnusedMacroParameter.xml
diff --git a/pmd/src/main/ant/alljavacc.xml b/pmd/src/main/ant/alljavacc.xml
index 7b30050e7a..f2ffd9d646 100644
--- a/pmd/src/main/ant/alljavacc.xml
+++ b/pmd/src/main/ant/alljavacc.xml
@@ -4,7 +4,7 @@
+ depends="checkUpToDate,init,dummyjjtree,jspjjtree,cppjavacc,plsqljjtree,cleanup" />
@@ -218,53 +218,4 @@ public class]]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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 9a9da64fbf..0104075131 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
@@ -4,6 +4,5 @@ net.sourceforge.pmd.lang.jsp.JspLanguageModule
net.sourceforge.pmd.lang.php.PhpLanguageModule
net.sourceforge.pmd.lang.plsql.PLSQLLanguageModule
net.sourceforge.pmd.lang.ruby.RubyLanguageModule
-net.sourceforge.pmd.lang.vm.VmLanguageModule
net.sourceforge.pmd.lang.xml.XmlLanguageModule
net.sourceforge.pmd.lang.xsl.XslLanguageModule
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 7a75abd77f..bb987ed014 100644
--- a/pom.xml
+++ b/pom.xml
@@ -630,6 +630,7 @@
pmd-test
pmd-java
pmd-javascript
+ pmd-vm
pmd-dist