Index: solr/common-build.xml
===================================================================
--- solr/common-build.xml	(revision 1151355)
+++ solr/common-build.xml	(working copy)
@@ -78,87 +78,6 @@
     -->
   <property name="solr.spec.version" value="4.0.0.${dateversion}" />
 
-  <!-- solr depends on the following modules/contribs -->	
-  <module-uptodate name="analysis/common" jarfile="${common.dir}/../modules/analysis/build/common/lucene-analyzers-common-${version}.jar"
-        property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-  <module-uptodate name="analysis/phonetic" jarfile="${common.dir}/../modules/analysis/build/phonetic/lucene-analyzers-phonetic-${version}.jar"
-        property="analyzers-phonetic.uptodate" classpath.property="analyzers-phonetic.jar"/>
-  <module-uptodate name="suggest" jarfile="${common.dir}/../modules/suggest/build/lucene-suggest-${version}.jar"
-        property="suggest.uptodate" classpath.property="suggest.jar"/>
-  <module-uptodate name="grouping" jarfile="${common.dir}/../modules/grouping/build/lucene-grouping-${version}.jar"
-        property="grouping.uptodate" classpath.property="grouping.jar"/>
-  <module-uptodate name="queries" jarfile="${common.dir}/../modules/queries/build/lucene-queries-${version}.jar"
-        property="queries.uptodate" classpath.property="queries.jar"/>
-  <module-uptodate name="queryparser" jarfile="${common.dir}/../modules/queryparser/build/lucene-queryparser-${version}.jar"
-        property="queryparser.uptodate" classpath.property="queryparser.jar"/>
-  <contrib-uptodate name="highlighter" property="highlighter.uptodate" classpath.property="highlighter.jar"/>
-  <contrib-uptodate name="memory" property="memory.uptodate" classpath.property="memory.jar"/>
-  <contrib-uptodate name="misc" property="misc.uptodate" classpath.property="misc.jar"/>
-  <contrib-uptodate name="queries-contrib" contrib-src-name="queries" property="queries-contrib.uptodate" classpath.property="queries-contrib.jar"/>
-  <contrib-uptodate name="spatial" property="spatial.uptodate" classpath.property="spatial.jar"/>
-
-  <target name="compile-analyzers-common" unless="analyzers-common.uptodate">
-  	<ant dir="${common.dir}/../modules/analysis/common" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-analyzers-phonetic" unless="analyzers-phonetic.uptodate">
-  	<ant dir="${common.dir}/../modules/analysis/phonetic" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-suggest" unless="suggest.uptodate">
-  	<ant dir="${common.dir}/../modules/suggest" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-grouping" unless="grouping.uptodate">
-  	<ant dir="${common.dir}/../modules/grouping" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-queries" unless="queries.uptodate">
-  	<ant dir="${common.dir}/../modules/queries" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-queryparser" unless="queryparser.uptodate">
-  	<ant dir="${common.dir}/../modules/queryparser" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-highlighter" unless="highlighter.uptodate">
-  	<ant dir="${common.dir}/contrib/highlighter" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-memory" unless="memory.uptodate">
-  	<ant dir="${common.dir}/contrib/memory" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-misc" unless="misc.uptodate">
-  	<ant dir="${common.dir}/contrib/misc" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-queries-contrib" unless="queries-contrib.uptodate">
-  	<ant dir="${common.dir}/contrib/queries" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="compile-spatial" unless="spatial.uptodate">
-  	<ant dir="${common.dir}/contrib/spatial" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <!-- xml-query-parser contrib is required by the "luke" target -->
-  <target name="compile-xml-query-parser" unless="xml-query-parser.uptodate">
-  	<ant dir="${common.dir}/contrib/xml-query-parser" target="compile-core" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-
   <path id="solr.base.classpath">
   	<pathelement path="${analyzers-common.jar}"/>
   	<pathelement path="${analyzers-phonetic.jar}"/>
@@ -203,7 +122,7 @@
   </macrodef>
 
   <target name="validate" depends="validate-solr"/>
-  <target name="validate-solr" depends="check-legal-solr" unless="validated-solr"/>
+  <target name="validate-solr" depends="check-legal-solr" unless="validated-solr.uptodate"/>
 
   <target name="check-legal-solr" depends="compile-tools">
     <java classname="org.apache.lucene.validation.DependencyChecker" failonerror="true" fork="true">
@@ -237,7 +156,7 @@
       <arg value="-c" />
       <arg value="${common-solr.dir}/core/src/test-files/solr/lib" />
     </java>
-    <property name="validated-solr" value="true"/>
+    <property name="validated-solr.uptodate" value="true"/>
   </target>
   <path id="tools.runtime.classpath">
     <pathelement location="${common.dir}/build/classes/tools"/>
@@ -250,18 +169,20 @@
     <mkdir dir="${maven.dist.dir}"/>
   </target>
 
-  <target name="prep-lucene-jars"
-          depends="compile-analyzers-common, compile-analyzers-phonetic, compile-suggest,
-                   compile-highlighter, compile-memory, compile-misc, compile-queries-contrib,
-                   compile-spatial, compile-grouping, compile-queries, compile-queryparser">
+  <target name="prep-lucene-jars" 
+  	      depends="jar-lucene-core, jar-analyzers-phonetic, jar-suggest, jar-highlighter, jar-memory,
+  	               jar-misc, jar-queries-contrib, jar-spatial, jar-grouping, jar-queries, jar-queryparser">
+  	  <property name="solr.deps.compiled" value="true"/>
+  </target>
+	
+  <target name="lucene-jars-to-solr" depends="prep-lucene-jars">
+    <!-- TODO: clean this up -->
+    <sequential>
     <ant dir="${common.dir}" target="default" inheritall="false">
       <propertyset refid="uptodate.and.compiled.properties"/>
     </ant>
-  </target>
-
-  <target name="lucene-jars-to-solr" depends="prep-lucene-jars">
     <copy todir="${lucene-libs}" preservelastmodified="true" flatten="true" failonerror="true" overwrite="true">
-      <fileset file="${common.dir}/build/lucene-core-${version}.jar" />
+      <fileset file="${lucene-core.jar}" />
       <fileset file="${analyzers-common.jar}" />
       <fileset file="${analyzers-phonetic.jar}" />
       <fileset file="${suggest.jar}" />
@@ -274,6 +195,7 @@
       <fileset file="${queries-contrib.jar}" />
       <fileset file="${spatial.jar}" />
     </copy>
+    </sequential>
   </target>
 
   <!-- Shared core/solrj/test-framework/contrib targets -->
@@ -285,6 +207,9 @@
             spec.version="${solr.spec.version}"/>
   </target>
 
+  <target name="compile-core" depends="prep-lucene-jars,common.compile-core"/>
+  <target name="compile-test" depends="compile-solr-test-framework,common.compile-test"/>
+
   <target name="dist" depends="jar-core">
     <copy file="${build.dir}/${fullnamever}.jar" todir="${dist}"/>
   </target>
@@ -361,14 +286,15 @@
     <ant dir="${common-solr.dir}/test-framework" target="compile-core" inheritAll="false">
       <propertyset refid="uptodate.and.compiled.properties"/>
     </ant>
+  	<property name="solr.core.compiled" value="true"/>
     <property name="solr.test.framework.compiled" value="true"/>
   </target>
 
   <!-- Solr contrib targets -->
-  <target name="build-contrib" depends="compile-test"
-          description="Builds all contrib modules and their tests">
-    <contrib-crawl target="build-artifacts-and-tests"/>
+  <target name="compile-contrib" description="Compile contrib modules">
+  	<contrib-crawl target="compile-core"/>
   </target>
+
   <target name="contribs-add-to-war">
     <mkdir dir="${dest}/web"/>
     <delete dir="${dest}/web" includes="**/*" failonerror="false"/>
Index: solr/core/build.xml
===================================================================
--- solr/core/build.xml	(revision 1151355)
+++ solr/core/build.xml	(working copy)
@@ -20,15 +20,8 @@
 
   <import file="../common-build.xml"/>
 
-  <target name="compile-core" unless="solr.core.compiled"
-          depends="prep-lucene-jars, compile-solrj, common.compile-core">
-    <property name="solr.core.compiled" value="true"/>
-  </target>
+  <target name="compile-core" depends="compile-solrj,common-solr.compile-core"/>
 
-  <target name="compile-test" depends="compile-solr-test-framework,common.compile-test"/>
-
-  <target name="test" depends="compile-test,junit-mkdir,junit-sequential,junit-parallel"/>
-
   <target name="dist-maven" depends="jar-core,javadocs,jar-src,contrib-build.dist-maven">
     <m2-deploy-with-pom-template pom.xml="${common-solr.dir}/lib/solr-commons-csv-pom.xml.template"
                                  jar.file="${common-solr.dir}/lib/commons-csv-1.0-SNAPSHOT-r966014.jar" />
@@ -36,4 +29,4 @@
     <m2-deploy-with-pom-template pom.xml="${common-solr.dir}/lib/apache-solr-noggit-pom.xml.template"
                                  jar.file="${common-solr.dir}/lib/apache-solr-noggit-r1099557.jar" />
   </target>
-</project>
\ No newline at end of file
+</project>
Index: solr/solrj/build.xml
===================================================================
--- solr/solrj/build.xml	(revision 1151355)
+++ solr/solrj/build.xml	(working copy)
@@ -27,10 +27,6 @@
   	<path refid="test.base.classpath"/>
   </path>
 
-  <target name="compile-test" depends="compile-solr-test-framework,common.compile-test"/>
-
-  <target name="test" depends="compile-test,junit-mkdir,junit-sequential,junit-parallel"/>
-
   <target name="dist" depends="common-solr.dist">
     <mkdir  dir="${dist}/solrj-lib" />
     <copy todir="${dist}/solrj-lib">
Index: solr/build.xml
===================================================================
--- solr/build.xml	(revision 1151355)
+++ solr/build.xml	(working copy)
@@ -40,7 +40,7 @@
   <!-- ========================================================================= -->
  
   <target name="example" description="Creates a runnable example configuration."
-          depends="prep-lucene-jars,dist-contrib,dist-war,build-contrib">
+          depends="dist-contrib,dist-war">
     <copy file="${dist}/${fullnamever}.war"
           tofile="${example}/webapps/${ant.project.name}.war"/>
     <jar destfile="${example}/exampledocs/post.jar"
@@ -88,6 +88,13 @@
     <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}" proxyuser="${proxy.user}" proxypassword="${proxy.password}"/>
   </target>
  
+
+  <target name="compile-xml-query-parser">
+  	<ant dir="${common.dir}/contrib/xml-query-parser" target="compile-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+  </target>
+
   <property  name="luke.version" value="1.0.1"/>
   <available file="luke/luke-${luke.version}.jar" property="luke.jar.exists" />
   <target name="luke-download" unless="luke.jar.exists" depends="proxy.setup,compile-xml-query-parser">
@@ -120,7 +127,7 @@
   <!-- ========================================================================= -->
   
   <target name="compile" description="Compile the source code."
-          depends="compile-core, build-contrib"/>
+          depends="compile-core, compile-contrib"/>
   <target name="test" description="Validate, then run core, solrj, and contrib unit tests."
           depends="validate-solr, test-core, test-jsp, test-contrib"/>
   <target name="test-core" description="Runs the core and solrj unit tests."
@@ -139,18 +146,21 @@
   
   <!-- Solrj targets -->
   <target name="test-solrj" description="Test java client">
-    <ant dir="solrj" target="test" inheritAll="false"/>
+    <ant dir="solrj" target="test" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
   </target>
   
   <!-- Solr contrib targets -->
-  <target name="test-contrib" description="Run contrib unit tests."
-          depends="build-contrib">
+  <target name="test-contrib" description="Run contrib unit tests.">
     <contrib-crawl target="test" failonerror="true"/>
   </target>
   
   <!-- test-framework targets -->
   <target name="javadocs-test-framework">  <!-- Called from Jenkins build script --> 
-    <ant dir="test-framework" target="javadocs" inheritAll="false"/>
+    <ant dir="test-framework" target="javadocs" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+  	</ant>
   </target>
   
   <!-- Webapp targets -->
Index: solr/contrib/dataimporthandler-extras/build.xml
===================================================================
--- solr/contrib/dataimporthandler-extras/build.xml	(revision 1151355)
+++ solr/contrib/dataimporthandler-extras/build.xml	(working copy)
@@ -30,7 +30,7 @@
                          classpath.property="solr-dataimporthandler.jar"/>
 
   <target name="compile-solr-dataimporthandler" unless="solr-dataimporthandler.uptodate">
-  	<ant dir="${common-solr.dir}/contrib/dataimporthandler" target="default" inheritAll="false">
+  	<ant dir="${common-solr.dir}/contrib/dataimporthandler" target="compile-core" inheritAll="false">
       <propertyset refid="uptodate.and.compiled.properties"/>
     </ant>
   </target>
@@ -54,5 +54,5 @@
   </path>
 
   <target name="compile-core" depends="compile-solr-dataimporthandler, solr-contrib-build.compile-core"/>
-  <target name="compile-test" depends="compile-solr-dataimporthandler-tests, contrib-build.compile-test"/>
+  <target name="compile-test" depends="compile-solr-dataimporthandler-tests, common-solr.compile-test"/>
 </project>
Index: solr/contrib/analysis-extras/build.xml
===================================================================
--- solr/contrib/analysis-extras/build.xml	(revision 1151355)
+++ solr/contrib/analysis-extras/build.xml	(working copy)
@@ -25,13 +25,6 @@
 
   <import file="../contrib-build.xml"/>
 
-  <module-uptodate name="analysis/icu" jarfile="${common.dir}/../modules/analysis/build/icu/lucene-analyzers-icu-${version}.jar"
-	    property="analyzers-icu.uptodate" classpath.property="analyzers-icu.jar"/>
-  <module-uptodate name="analysis/smartcn" jarfile="${common.dir}/../modules/analysis/build/smartcn/lucene-analyzers-smartcn-${version}.jar"
-		property="analyzers-smartcn.uptodate" classpath.property="analyzers-smartcn.jar"/>
-  <module-uptodate name="analysis/stempel" jarfile="${common.dir}/../modules/analysis/build/stempel/lucene-analyzers-stempel-${version}.jar"
-		property="analyzers-stempel.uptodate" classpath.property="analyzers-stempel.jar"/>
-
   <path id="classpath">
   	<pathelement path="${analyzers-icu.jar}"/>
   	<pathelement path="${analyzers-smartcn.jar}"/>
@@ -39,26 +32,8 @@
     <path refid="solr.base.classpath"/>
   </path>
 
-  <target name="compile-analyzers-icu" unless="analyzers-icu.uptodate">
-  	<ant dir="${common.dir}/../modules/analysis/icu" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-
-  <target name="compile-analyzers-smartcn" unless="analyzers-smartcn.uptodate">
-  	<ant dir="${common.dir}/../modules/analysis/smartcn" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-
-  <target name="compile-analyzers-stempel" unless="analyzers-stempel.uptodate">
-  	<ant dir="${common.dir}/../modules/analysis/stempel" target="default" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-
   <target name="module-jars-to-solr"
-          depends="compile-analyzers-icu, compile-analyzers-smartcn, compile-analyzers-stempel">
+          depends="jar-analyzers-icu, jar-analyzers-smartcn, jar-analyzers-stempel">
     <mkdir dir="${build.dir}/lucene-libs"/>
     <copy todir="${build.dir}/lucene-libs" preservelastmodified="true" flatten="true" failonerror="true" overwrite="true">
       <fileset file="${analyzers-icu.jar}"/>
@@ -67,5 +42,6 @@
     </copy>
   </target>
 
-  <target name="compile-core" depends="module-jars-to-solr, solr-contrib-build.compile-core"/>
+  <target name="compile-core" depends="jar-analyzers-icu, jar-analyzers-smartcn, jar-analyzers-stempel, solr-contrib-build.compile-core"/>
+  <target name="dist" depends="module-jars-to-solr, common-solr.dist"/>
 </project>
Index: solr/contrib/contrib-build.xml
===================================================================
--- solr/contrib/contrib-build.xml	(revision 1151355)
+++ solr/contrib/contrib-build.xml	(working copy)
@@ -23,15 +23,8 @@
 
   <import file="../common-build.xml"/>
 
-  <target name="build-solr" unless="solr.core.compiled">
-    <ant dir="${common-solr.dir}/core" target="compile-test" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-    <property name="solr.core.compiled" value="true"/>
-  </target>
+  <target name="compile-core" depends="compile-solr-core,compile-solrj,common-solr.compile-core"/>
 
-  <target name="compile-core" depends="build-solr, common.compile-core"/>
-
   <!-- redefine common-solr.test, and exclude 'validate-solr' dependency, since it should only run at solr/ level -->
   <target name="test" depends="compile-test,junit-mkdir,junit-sequential,junit-parallel" description="Runs unit tests"/>
 
Index: modules/join/build.xml
===================================================================
--- modules/join/build.xml	(revision 1151355)
+++ modules/join/build.xml	(working copy)
@@ -10,9 +10,6 @@
   <property name="build.dir" location="build/" />
   <property name="dist.dir" location="dist/" />
 
-  <module-uptodate name="grouping" jarfile="${common.dir}/../modules/grouping/build/lucene-grouping-${version}.jar"
-		   property="grouping.uptodate" classpath.property="grouping.jar"/>
-
   <path id="classpath">
     <pathelement path="${grouping.jar}"/>
     <path refid="base.classpath"/>
@@ -27,13 +24,7 @@
   <property name="dist.dir" location="dist/" />
   <property name="maven.dist.dir" location="../dist/maven" />
 
-  <target name="compile-grouping" unless="grouping.uptodate">
-    <subant target="default">
-      <fileset dir="${common.dir}/../modules/grouping" includes="build.xml"/>
-    </subant>
-  </target>
+  <target name="init" depends="contrib-build.init,jar-grouping"/>
 
-  <target name="init" depends="contrib-build.init,compile-grouping"/>
-
   <target name="dist-maven" depends="jar-core,javadocs,contrib-build.dist-maven" />
 </project>
Index: modules/facet/build.xml
===================================================================
--- modules/facet/build.xml	(revision 1151355)
+++ modules/facet/build.xml	(working copy)
@@ -29,10 +29,6 @@
   <property name="build.dir" location="build/" />
   <property name="dist.dir" location="dist/" />
 
-  <!-- TODO, cut over tests to MockAnalyzer etc and nuke this dependency -->
-  <module-uptodate name="analysis/common" jarfile="${common.dir}/../modules/analysis/build/common/lucene-analyzers-common-${version}.jar"
-      property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-
   <path id="examples.classpath">
     <path refid="classpath" />
     <pathelement location="${build.dir}/classes/java" />
@@ -42,10 +38,12 @@
   <path id="test.classpath">
     <path refid="test.base.classpath" />
     <pathelement location="${build.dir}/classes/examples" />
+    <!-- TODO, cut over tests to MockAnalyzer etc and nuke this dependency -->
     <pathelement path="${analyzers-common.jar}" />
   </path>
 
   <path id="classpath">
+    <!-- TODO, cut over tests to MockAnalyzer etc and nuke this dependency -->
     <pathelement path="${analyzers-common.jar}" />
     <path refid="base.classpath"/>
   </path>
@@ -62,12 +60,6 @@
           title="Lucene Search Engine: ${ant.project.name}-examples" />
   </target>
 
-  <target name="jar-analyzers-common" unless="analyzers-common.uptodate">
-    <subant target="jar-core">
-      <fileset dir="${common.dir}/../modules/analysis/common" includes="build.xml"/>
-    </subant>
-  </target>
-    
   <target name="compile-core" depends="jar-analyzers-common,common.compile-core,compile-examples" description="Compiles facet classes" />
 
   <target name="jar-core" depends="common.jar-core,jar-examples" />
Index: modules/analysis/icu/build.xml
===================================================================
--- modules/analysis/icu/build.xml	(revision 1151355)
+++ modules/analysis/icu/build.xml	(working copy)
@@ -38,9 +38,6 @@
 
   <import file="../../../lucene/contrib/contrib-build.xml"/>
 
-  <module-uptodate name="analysis/common" jarfile="../build/common/lucene-analyzers-common-${version}.jar"
-    property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-
   <path id="classpath">
     <pathelement path="${analyzers-common.jar}"/>
     <path refid="base.classpath"/>
@@ -56,15 +53,8 @@
     <pathelement location="${build.dir}/classes/java"/>
   </path>
 
-  <target name="compile-core" depends="build-analyzers-common, common.compile-core" />
+  <target name="compile-core" depends="jar-analyzers-common, common.compile-core" />
 
-  <target name="build-analyzers-common" unless="analyzers-common.uptodate">
-    <echo>ICU building dependency ${analyzers-common.jar}</echo>
-    <ant antfile="../common/build.xml" target="default" inheritall="false" dir="../common">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-
   <property name="gennorm2.src.dir" value="src/data/utr30"/>
   <property name="gennorm2.src.files" 
   	value="nfkc.txt nfkc_cf.txt BasicFoldings.txt DiacriticFolding.txt DingbatFolding.txt HanRadicalFolding.txt NativeDigitFolding.txt"/>
Index: modules/analysis/smartcn/build.xml
===================================================================
--- modules/analysis/smartcn/build.xml	(revision 1151355)
+++ modules/analysis/smartcn/build.xml	(working copy)
@@ -28,9 +28,6 @@
 
   <import file="../../../lucene/contrib/contrib-build.xml"/>
 
-  <module-uptodate name="analysis/common" jarfile="../build/common/lucene-analyzers-common-${version}.jar"
-    property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-
   <path id="classpath">
     <pathelement path="${analyzers-common.jar}"/>
     <path refid="base.classpath"/>
@@ -45,12 +42,5 @@
     <pathelement location="${build.dir}/classes/java"/>
   </path>
 
-  <target name="compile-core" depends="build-analyzers-common, common.compile-core" />
-
-  <target name="build-analyzers-common" unless="analyzers-common.uptodate">
-    <echo>Smartcn building dependency ${analyzers-common.jar}</echo>
-    <ant antfile="../common/build.xml" target="default" inheritall="false" dir="../common">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
+  <target name="compile-core" depends="jar-analyzers-common, common.compile-core" />
 </project>
Index: modules/analysis/morfologik/build.xml
===================================================================
--- modules/analysis/morfologik/build.xml	(revision 1151355)
+++ modules/analysis/morfologik/build.xml	(working copy)
@@ -36,9 +36,6 @@
 
   <import file="../../../lucene/contrib/contrib-build.xml"/>
 
-  <module-uptodate name="analysis/common" jarfile="../build/common/lucene-analyzers-common-${version}.jar"
-    property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-
   <path id="classpath">
     <pathelement path="${analyzers-common.jar}"/>
     <path refid="base.classpath"/>
@@ -52,10 +49,5 @@
     <pathelement location="${build.dir}/classes/java"/>
   </path>
 
-  <target name="compile-core" depends="build-analyzers-common, common.compile-core" />
-
-  <target name="build-analyzers-common" unless="analyzers-common.uptodate">
-    <echo>Morfologik building dependency ${analyzers-common.jar}</echo>
-    <ant antfile="../common/build.xml" target="default" inheritall="false" dir="../common" />
-  </target>
+  <target name="compile-core" depends="jar-analyzers-common, common.compile-core" />
 </project>
Index: modules/analysis/phonetic/build.xml
===================================================================
--- modules/analysis/phonetic/build.xml	(revision 1151355)
+++ modules/analysis/phonetic/build.xml	(working copy)
@@ -37,9 +37,6 @@
 
   <import file="../../../lucene/contrib/contrib-build.xml"/>
 
-  <module-uptodate name="analysis/common" jarfile="../build/common/lucene-analyzers-common-${version}.jar"
-    property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-
   <path id="classpath">
     <pathelement path="${analyzers-common.jar}"/>
     <path refid="base.classpath"/>
@@ -55,12 +52,5 @@
     <pathelement location="${build.dir}/classes/java"/>
   </path>
 
-  <target name="compile-core" depends="build-analyzers-common, common.compile-core" />
-
-  <target name="build-analyzers-common" unless="analyzers-common.uptodate">
-    <echo>phonetic building dependency ${analyzers-common.jar}</echo>
-    <ant antfile="../common/build.xml" target="default" inheritall="false" dir="../common">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
+  <target name="compile-core" depends="jar-analyzers-common, common.compile-core" />
 </project>
Index: modules/analysis/stempel/build.xml
===================================================================
--- modules/analysis/stempel/build.xml	(revision 1151355)
+++ modules/analysis/stempel/build.xml	(working copy)
@@ -28,9 +28,6 @@
 
   <import file="../../../lucene/contrib/contrib-build.xml"/>
 
-  <module-uptodate name="analysis/common" jarfile="../build/common/lucene-analyzers-common-${version}.jar"
-    property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-
   <path id="classpath">
     <pathelement path="${analyzers-common.jar}"/>
     <path refid="base.classpath"/>
@@ -44,13 +41,5 @@
     <pathelement location="${build.dir}/classes/java"/>
   </path>	
 
-  <target name="compile-core" depends="build-analyzers-common, common.compile-core"/>
-
-  <target name="build-analyzers-common" unless="analyzers-common.uptodate">
-    <echo>Stempel building dependency ${analyzers-common.jar}</echo>
-    <ant antfile="../common/build.xml" target="default" inheritall="false" dir="../common">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-    <property name="analyzers-common.uptodate" value="true"/>
-  </target>
+  <target name="compile-core" depends="jar-analyzers-common, common.compile-core"/>
 </project>
Index: modules/benchmark/build.xml
===================================================================
--- modules/benchmark/build.xml	(revision 1151355)
+++ modules/benchmark/build.xml	(working copy)
@@ -33,16 +33,6 @@
     <!-- the tests have some parallel problems -->
     <property name="tests.threadspercpu" value="0"/>
 
-    <contrib-uptodate name="highlighter" property="highlighter.uptodate" classpath.property="highlighter.jar"/>
-    <module-uptodate name="analysis/icu" jarfile="${common.dir}/../modules/analysis/build/icu/lucene-analyzers-icu-${version}.jar"
-      property="analyzers-icu.uptodate" classpath.property="analyzers-icu.jar"/>
-    <!-- analyzers common needs a hack for the jar file: -->
-    <module-uptodate name="analysis/common" jarfile="${common.dir}/../modules/analysis/build/common/lucene-analyzers-common-${version}.jar"
-      property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-    <contrib-uptodate name="memory" property="memory.uptodate" classpath.property="memory.jar"/>
-
-    <module-uptodate name="queryparser" property="queryparser.uptodate" classpath.property="queryparser.jar"/>
-
     <target name="check-files">
         <available file="temp/news20.tar.gz" property="news20.exists"/>
 
@@ -209,7 +199,7 @@
     <fileset dir="${common.dir}/../modules/analysis/icu/lib" includes="icu4j*.jar"/>
 	</path>
 	
-	<target name="collation" depends="compile,compile-analyzers-icu,top-100k-wiki-word-files">
+	<target name="collation" depends="compile,jar-analyzers-icu,top-100k-wiki-word-files">
 	    <echo>Running contrib/benchmark with alg file: ${collation.alg.file}</echo>
 	    <java fork="true" classname="org.apache.lucene.benchmark.byTask.Benchmark" 
 	          maxmemory="${task.mem}" output="${collation.output.file}">
@@ -251,33 +241,7 @@
       <echo>Benchmark output in JIRA table format is in file: ${shingle.jira.output.file}</echo>
     </target>
 
-    <target name="compile-highlighter" unless="highlighter.uptodate">
-      <subant target="default">
-         <fileset dir="${common.dir}/contrib/highlighter" includes="build.xml"/>
-      </subant>
-    </target>
-    <target name="compile-analyzers-icu" unless="analyzers-icu.uptodate">
-      <subant target="default">
-         <fileset dir="${common.dir}/../modules/analysis/icu" includes="build.xml"/>
-      </subant>
-    </target>
-    <target name="compile-analyzers-common" unless="analyzers-common.uptodate">
-      <subant target="default">
-        <fileset dir="${common.dir}/../modules/analysis/common" includes="build.xml"/>
-      </subant>
-    </target>
-    <target name="compile-memory" unless="memory.uptodate">
-      <subant target="default">
-         <fileset dir="${common.dir}/contrib/memory" includes="build.xml"/>
-      </subant>
-    </target>
-    <target name="compile-queryparser" unless="queryparser.uptodate">
-      <subant target="default">
-         <fileset dir="${common.dir}/../modules/queryparser" includes="build.xml"/>
-      </subant>
-    </target>
-
-    <target name="init" depends="contrib-build.init,compile-memory,compile-highlighter,compile-analyzers-common,compile-queryparser"/>
+    <target name="init" depends="contrib-build.init,jar-memory,jar-highlighter,jar-analyzers-common,jar-queryparser"/>
   
     <target name="clean-javacc">
       <fileset dir="src/java/org/apache/lucene/benchmark/byTask/feeds/demohtml" includes="*.java">
Index: lucene/contrib/demo/build.xml
===================================================================
--- lucene/contrib/demo/build.xml	(revision 1151355)
+++ lucene/contrib/demo/build.xml	(working copy)
@@ -27,41 +27,13 @@
 
   <import file="../contrib-build.xml"/>
 
-  <module-uptodate name="analysis/common" jarfile="${common.dir}/../modules/analysis/build/common/lucene-analyzers-common-${version}.jar"
-      property="analyzers-common.uptodate" classpath.property="analyzers-common.jar"/>
-  <module-uptodate name="queryparser" property="queryparser.uptodate" classpath.property="queryparser.jar"/>
+  <target name="init" depends="contrib-build.init,jar-lucene-core"/>
   
-  <property name="lucene.jar" value="${common.dir}/build/lucene-core-${version}.jar"/>
-  <target name="lucene-jar-uptodate" unless="lucene.jar.uptodate">
-    <uptodate property="lucene.jar.uptodate" targetfile="${lucene.jar}">
-     	<srcfiles dir="${common.dir}/src/java" includes="**/*.java"/>
-    </uptodate>
-  </target>
-  <target name="jar-lucene" depends="build-lucene" unless="lucene.jar.uptodate">
-    <ant dir="${common.dir}" target="jar-core" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  <target name="init" depends="contrib-build.init,lucene-jar-uptodate,jar-lucene"/>
-  
   <path id="classpath">
 	 <pathelement path="${analyzers-common.jar}"/>
    <pathelement path="${queryparser.jar}"/>
-   <pathelement path="${lucene.jar}"/>
+   <pathelement path="${lucene-core.jar}"/>
   </path>
 
-  <target name="compile-core" depends="jar-analyzers-common,build-queryparser,common.compile-core" />
-
-  <target name="jar-analyzers-common" unless="analyzers-common.uptodate">
-    <subant target="jar-core">
-      <fileset dir="${common.dir}/../modules/analysis/common" includes="build.xml"/>
-    </subant>
-  </target>
-
-  <target name="build-queryparser" unless="queryparser.uptodate">
-    <echo>Demo building dependency modules/queryparser</echo>
-    <subant target="default">
-      <fileset dir="${common.dir}/../modules/queryparser" includes="build.xml"/>
-    </subant>
-  </target>
+  <target name="compile-core" depends="jar-analyzers-common,jar-queryparser,common.compile-core" />
 </project>
Index: lucene/contrib/memory/build.xml
===================================================================
--- lucene/contrib/memory/build.xml	(revision 1151355)
+++ lucene/contrib/memory/build.xml	(working copy)
@@ -25,20 +25,10 @@
 
   <import file="../contrib-build.xml"/>
 
-  <module-uptodate name="queryparser" property="queryparser.uptodate" classpath.property="queryparser.jar"/>
-
   <path id="test.classpath">
     <pathelement path="${queryparser.jar}"/>
     <path refid="test.base.classpath"/>
   </path>
 
-  <target name="compile-core" depends="build-queryparser,common.compile-core" />
-
-  <target name="build-queryparser" unless="queryparser.uptodate">
-    <echo>Memory building dependency modules/queryparser</echo>
-    <ant dir="${common.dir}/../modules/queryparser" target="default" inheritall="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-    <property name="queryparser.uptodate" value="true"/>
-  </target>
+  <target name="compile-core" depends="jar-queryparser,common.compile-core" />
 </project>
Index: lucene/contrib/contrib-build.xml
===================================================================
--- lucene/contrib/contrib-build.xml	(revision 1151355)
+++ lucene/contrib/contrib-build.xml	(working copy)
@@ -54,15 +54,7 @@
     <pathelement path="${java.class.path}"/>
   </path>
 
-  <target name="build-lucene" unless="core.compiled">
-    <ant dir="${common.dir}" target="compile-test" inheritAll="false">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-    <!-- set the property for this ant execution to speed up later tasks depending on this -->
-    <property name="core.compiled" value="true"/>
-  </target>
-  
-  <target name="init" depends="common.init,build-lucene"/>
+  <target name="init" depends="common.init,compile-lucene-core"/>
   <target name="compile-test" depends="init" if="contrib.has.tests">
     <antcall target="common.compile-test" inheritRefs="true" />
   </target>
@@ -117,14 +109,10 @@
   
   <macrodef name="contrib-uptodate">
     <attribute name="name"/>
-    <attribute name="property" default="@{name}.uptodate"/>
+    <attribute name="property"/>
+    <attribute name="jarfile"/>
     <attribute name="contrib-src-name" default="@{name}"/>
-    <attribute name="classpath.property" default="@{name}.jar"/>
-    <!-- set jarfile only, if the target jar file has no generic name, applies to analyzers with its common and smartcn subdir -->
-    <attribute name="jarfile" default="${common.dir}/build/contrib/@{name}/lucene-@{name}-${version}.jar"/>
     <sequential>
-      <!--<echo message="Checking '@{jarfile}' against source folder '${common.dir}/contrib/@{name}/src/java'"/>-->
-      <property name="@{classpath.property}" location="@{jarfile}"/>
       <uptodate property="@{property}" targetfile="@{jarfile}">
         <srcfiles dir="${common.dir}/contrib/@{contrib-src-name}/src/java" includes="**/*.java"/>
       </uptodate>
@@ -133,16 +121,167 @@
 
   <macrodef name="module-uptodate">
     <attribute name="name"/>
-    <attribute name="property" default="@{name}.uptodate"/>
+    <attribute name="property"/>
+    <attribute name="jarfile"/>
     <attribute name="module-src-name" default="@{name}"/>
-    <attribute name="classpath.property" default="@{name}.jar"/>
-    <!-- set jarfile only, if the target jar file has no generic name, applies to analyzers with its common and smartcn subdir -->
-    <attribute name="jarfile" default="${common.dir}/../modules/@{module-src-name}/build/lucene-@{name}-${version}.jar"/>
     <sequential>
-      <property name="@{classpath.property}" location="@{jarfile}"/>
       <uptodate property="@{property}" targetfile="@{jarfile}">
       	<srcfiles dir="${common.dir}/../modules/@{module-src-name}/src/java" includes="**/*.java"/>
       </uptodate>
     </sequential>
   </macrodef>
-</project>
+
+  <property name="analyzers-common.jar" value="${common.dir}/../modules/analysis/build/common/lucene-analyzers-common-${version}.jar"/>
+  <target name="check-analyzers-common-uptodate" unless="analyzers-common.uptodate">
+    <module-uptodate name="analysis/common" jarfile="${analyzers-common.jar}" property="analyzers-common.uptodate"/>
+  </target>
+  <target name="jar-analyzers-common" unless="analyzers-common.uptodate" depends="check-analyzers-common-uptodate">
+    <ant dir="${common.dir}/../modules/analysis/common" target="jar-core" inheritall="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="analyzers-common.uptodate" value="true"/>
+  </target>
+
+  <property name="analyzers-icu.jar" value="${common.dir}/../modules/analysis/build/icu/lucene-analyzers-icu-${version}.jar"/>
+  <target name="check-analyzers-icu-uptodate" unless="analyzers-icu.uptodate">
+    <module-uptodate name="analysis/icu" jarfile="${analyzers-icu.jar}" property="analyzers-icu.uptodate"/>
+  </target>
+  <target name="jar-analyzers-icu" unless="analyzers-icu.uptodate" depends="check-analyzers-icu-uptodate">
+  	<ant dir="${common.dir}/../modules/analysis/icu" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="analyzers-icu.uptodate" value="true"/>
+  </target>
+
+  <property name="analyzers-phonetic.jar" value="${common.dir}/../modules/analysis/build/phonetic/lucene-analyzers-phonetic-${version}.jar"/>
+  <target name="check-analyzers-phonetic-uptodate" unless="analyzers-phonetic.uptodate">
+    <module-uptodate name="analysis/phonetic" jarfile="${analyzers-phonetic.jar}" property="analyzers-phonetic.uptodate"/>
+  </target>
+  <target name="jar-analyzers-phonetic" unless="analyzers-phonetic.uptodate" depends="check-analyzers-phonetic-uptodate">
+  	<ant dir="${common.dir}/../modules/analysis/phonetic" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+  </target>
+
+
+  <property name="analyzers-smartcn.jar" value="${common.dir}/../modules/analysis/build/smartcn/lucene-analyzers-smartcn-${version}.jar"/>
+  <target name="check-analyzers-smartcn-uptodate" unless="analyzers-smartcn.uptodate">
+    <module-uptodate name="analysis/smartcn" jarfile="${analyzers-smartcn.jar}" property="analyzers-smartcn.uptodate"/>
+  </target>
+  <target name="jar-analyzers-smartcn" unless="analyzers-smartcn.uptodate" depends="check-analyzers-smartcn-uptodate">
+  	<ant dir="${common.dir}/../modules/analysis/smartcn" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="analyzers-smartcn.uptodate" value="true"/>
+  </target>
+
+  <property name="analyzers-stempel.jar" value="${common.dir}/../modules/analysis/build/stempel/lucene-analyzers-stempel-${version}.jar"/>
+  <target name="check-analyzers-stempel-uptodate" unless="analyzers-stempel.uptodate">
+    <module-uptodate name="analysis/stempel" jarfile="${analyzers-stempel.jar}" property="analyzers-stempel.uptodate"/>
+  </target>
+  <target name="jar-analyzers-stempel" unless="analyzers-stempel.uptodate" depends="check-analyzers-stempel-uptodate">
+  	<ant dir="${common.dir}/../modules/analysis/stempel" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="analyzers-stempel.uptodate" value="true"/>
+  </target>
+
+  <property name="grouping.jar" value="${common.dir}/../modules/grouping/build/lucene-grouping-${version}.jar"/>
+  <target name="check-grouping-uptodate" unless="grouping.uptodate">
+    <module-uptodate name="grouping" jarfile="${grouping.jar}" property="grouping.uptodate"/>
+  </target>
+  <target name="jar-grouping" unless="grouping.uptodate" depends="check-grouping-uptodate">
+  	<ant dir="${common.dir}/../modules/grouping" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="grouping.uptodate" value="true"/>
+  </target>
+
+  <property name="highlighter.jar" value="${common.dir}/build/contrib/highlighter/lucene-highlighter-${version}.jar"/>
+  <target name="check-highlighter-uptodate" unless="highlighter.uptodate">
+    <contrib-uptodate name="highlighter" jarfile="${highlighter.jar}" property="highlighter.uptodate"/>
+  </target>
+  <target name="jar-highlighter" unless="highlighter.uptodate" depends="check-highlighter-uptodate">
+    <ant dir="${common.dir}/contrib/highlighter" target="jar-core" inheritall="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="highlighter.uptodate" value="true"/>
+  </target>
+
+  <property name="memory.jar" value="${common.dir}/build/contrib/memory/lucene-memory-${version}.jar"/>
+  <target name="check-memory-uptodate" unless="memory.uptodate">
+    <contrib-uptodate name="memory" jarfile="${memory.jar}" property="memory.uptodate"/>
+  </target>
+  <target name="jar-memory" unless="memory.uptodate" depends="check-memory-uptodate">
+    <ant dir="${common.dir}/contrib/memory" target="jar-core" inheritall="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="memory.uptodate" value="true"/>
+  </target>
+
+  <property name="misc.jar" value="${common.dir}/build/contrib/misc/lucene-misc-${version}.jar"/>
+  <target name="check-misc-uptodate" unless="misc.uptodate">
+    <contrib-uptodate name="misc" jarfile="${misc.jar}" property="misc.uptodate"/>
+  </target>
+  <target name="jar-misc" unless="misc.uptodate" depends="check-misc-uptodate">
+  	<ant dir="${common.dir}/contrib/misc" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="misc.uptodate" value="true"/>
+  </target>
+
+  <property name="queries.jar" value="${common.dir}/../modules/queries/build/lucene-queries-${version}.jar"/>
+  <target name="check-queries-uptodate" unless="queries.uptodate">
+    <module-uptodate name="queries" jarfile="${queries.jar}" property="queries.uptodate"/>
+  </target>
+  <target name="jar-queries" unless="queries.uptodate" depends="check-queries-uptodate">
+  	<ant dir="${common.dir}/../modules/queries" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="queries.uptodate" value="true"/>
+  </target>
+
+  <property name="queries-contrib.jar" value="${common.dir}/build/contrib/queries-contrib/lucene-queries-contrib-${version}.jar"/>
+  <target name="check-queries-contrib-uptodate" unless="queries-contrib.uptodate">
+    <contrib-uptodate name="queries-contrib" jarfile="${queries-contrib.jar}" contrib-src-name="queries" property="queries-contrib.uptodate"/>
+  </target>
+  <target name="jar-queries-contrib" unless="queries-contrib.uptodate" depends="check-queries-contrib-uptodate">
+    <ant dir="${common.dir}/contrib/queries" target="jar-core" inheritall="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="queries-contrib.uptodate" value="true"/>
+  </target>
+
+  <property name="queryparser.jar" value="${common.dir}/../modules/queryparser/build/lucene-queryparser-${version}.jar"/>
+  <target name="check-queryparser-uptodate" unless="queryparser.uptodate">
+    <module-uptodate name="queryparser" jarfile="${queryparser.jar}" property="queryparser.uptodate"/>
+  </target>
+  <target name="jar-queryparser" unless="queryparser.uptodate" depends="check-queryparser-uptodate">
+    <ant dir="${common.dir}/../modules/queryparser" target="jar-core" inheritall="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="queryparser.uptodate" value="true"/>
+  </target>
+
+  <property name="spatial.jar" value="${common.dir}/build/contrib/spatial/lucene-spatial-${version}.jar"/>
+  <target name="check-spatial-uptodate" unless="spatial.uptodate">
+    <contrib-uptodate name="spatial" jarfile="${spatial.jar}" property="spatial.uptodate"/>
+  </target>
+  <target name="jar-spatial" unless="spatial.uptodate" depends="check-spatial-uptodate">
+  	<ant dir="${common.dir}/contrib/spatial" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="spatial.uptodate" value="true"/>
+  </target>
+
+  <property name="suggest.jar" value="${common.dir}/../modules/suggest/build/lucene-suggest-${version}.jar"/>
+  <target name="check-suggest-uptodate" unless="suggest.uptodate">
+    <module-uptodate name="suggest" jarfile="${suggest.jar}" property="suggest.uptodate"/>
+  </target>
+  <target name="jar-suggest" unless="suggest.uptodate" depends="check-suggest-uptodate">
+  	<ant dir="${common.dir}/../modules/suggest" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="suggest.uptodate" value="true"/>
+  </target>
+</project>
\ No newline at end of file
Index: lucene/contrib/spatial/build.xml
===================================================================
--- lucene/contrib/spatial/build.xml	(revision 1151355)
+++ lucene/contrib/spatial/build.xml	(working copy)
@@ -25,21 +25,10 @@
 
   <import file="../contrib-build.xml"/>
 
-  <contrib-uptodate name="queries-contrib" contrib-src-name="queries" property="queries.uptodate" classpath.property="queries.jar" />
-
   <path id="classpath">
-    <pathelement path="${queries.jar}"/>
+    <pathelement path="${queries-contrib.jar}"/>
     <path refid="base.classpath"/>
   </path>
 
-  <target name="compile-core" depends="build-queries, common.compile-core" />
-
-  <target name="build-queries" unless="queries.uptodate">
-    <echo>Misc building dependency ${queries.jar}</echo>
-    <ant antfile="../queries/build.xml" target="default" inheritall="false" dir="../queries">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-    <property name="queries.uptodate" value="true"/>
-  </target>
-  
+  <target name="compile-core" depends="jar-queries-contrib, common.compile-core" />
 </project>
Index: lucene/contrib/xml-query-parser/build.xml
===================================================================
--- lucene/contrib/xml-query-parser/build.xml	(revision 1151355)
+++ lucene/contrib/xml-query-parser/build.xml	(working copy)
@@ -25,14 +25,9 @@
 
   <import file="../contrib-build.xml"/>
 
-  <contrib-uptodate name="queries-contrib" contrib-src-name="queries" property="queries-contrib.uptodate" classpath.property="queries-contrib.jar"/>
-  <property name="lucene.jar" location="${common.dir}/build/lucene-core-${version}.jar"/>
   <property name="servlet.jar" location="${common.dir}/lib/servlet-api-2.4.jar"/>
   <available property="servlet.jar.present" type="file" file="${servlet.jar}"/>
-  <module-uptodate name="queryparser" property="queryparser.uptodate" classpath.property="queryparser.jar"/>
-  <module-uptodate name="queries" property="queries.uptodate" classpath.property="queries.jar"/>
 
-
   <path id="classpath">
     <pathelement path="${queries-contrib.jar}"/>
     <pathelement path="${queryparser.jar}"/>
@@ -49,27 +44,17 @@
     <path refid="base.classpath"/>
   </path>
 
-  <target name="compile-core" depends="build-queries-contrib,build-queryparser,build-queries,common.compile-core" />
+  <target name="compile-core" depends="jar-queries-contrib,jar-queryparser,jar-queries,common.compile-core" />
 
-  <target name="build-queries-contrib" unless="queries-contrib.uptodate">
-    <echo>XML Parser building dependency ${queries.jar}</echo>
-    <ant antfile="../queries/build.xml" target="default" inheritall="false" dir="../queries">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-    <property name="queries-contrib.uptodate" value="true"/>
-  </target>
-
   <!-- override contrib-build.xml target to also build web demo -->
   <target name="build-artifacts-and-tests" depends="jar, compile-test,build-web-demo" />
 
-  <target name="default" depends="jar-core,build-web-demo"/>
+  <target name="default" depends="jar-lucene-core,jar-core,build-web-demo"/>
 
   <target name="build-web-demo"  description="Compiles demo" if="servlet.jar.present">
 
     <echo>XML Parser compiling web demo</echo>
 
-    <ant dir="${common.dir}" target="jar-core" inheritAll="false"/>
-
     <compile
       srcdir="src/demo/java"
       destdir="${build.dir}/classes/webdemo">
@@ -82,24 +67,9 @@
         <include name="${final.name}.jar"/>
       </lib>
       <lib file="${queries.jar}"/>
-      <lib file="${lucene.jar}"/>
+      <lib file="${lucene-core.jar}"/>
       <classes dir="${build.dir}/classes/webdemo"/>
     </war>
 
   </target>
-
-  <target name="build-queryparser" unless="queryparser.uptodate">
-    <echo>XML QueryParser building dependency modules/queryparser</echo>
-    <subant target="default">
-      <fileset dir="${common.dir}/../modules/queryparser" includes="build.xml"/>
-    </subant>
-  </target>
-
-  <target name="build-queries" unless="queries.uptodate">
-    <echo>XML QueryParser building dependency modules/queries</echo>
-    <subant target="default">
-      <fileset dir="${common.dir}/../modules/queries" includes="build.xml"/>
-    </subant>
-  </target>
-
 </project>
Index: lucene/contrib/highlighter/build.xml
===================================================================
--- lucene/contrib/highlighter/build.xml	(revision 1151355)
+++ lucene/contrib/highlighter/build.xml	(working copy)
@@ -25,28 +25,11 @@
 
   <import file="../contrib-build.xml"/>
 
-  <contrib-uptodate name="memory" property="memory.uptodate" classpath.property="memory.jar"/>
-  <contrib-uptodate name="queries-contrib" contrib-src-name="queries" property="queries.uptodate" classpath.property="queries.jar"/>
-
   <path id="classpath">
     <pathelement path="${memory.jar}"/>
-    <pathelement path="${queries.jar}"/>
+    <pathelement path="${queries-contrib.jar}"/>
     <path refid="base.classpath"/>
   </path>
 
-  <target name="compile-core" depends="build-memory, build-queries, common.compile-core" />
-
-  <target name="build-memory" unless="memory.uptodate">
-    <echo>Highlighter building dependency contrib/memory</echo>
-    <ant antfile="../memory/build.xml" target="default" inheritall="false" dir="../memory">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
-  
-  <target name="build-queries" unless="queries.uptodate">
-    <echo>Highlighter building dependency contrib/queries</echo>
-    <ant antfile="../queries/build.xml" target="default" inheritall="false" dir="../queries">
-      <propertyset refid="uptodate.and.compiled.properties"/>
-    </ant>
-  </target>
+  <target name="compile-core" depends="jar-memory, jar-queries-contrib, common.compile-core" />
 </project>
Index: lucene/common-build.xml
===================================================================
--- lucene/common-build.xml	(revision 1151355)
+++ lucene/common-build.xml	(working copy)
@@ -441,6 +441,25 @@
     </sequential>
   </macrodef>
 
+  <property name="lucene-core.jar" value="${common.dir}/build/lucene-core-${version}.jar"/>
+  <target name="check-lucene-core-uptodate" unless="lucene-core.uptodate">
+    <uptodate property="lucene-core.uptodate" targetfile="${lucene-core.jar}">
+     	<srcfiles dir="${common.dir}/src/java" includes="**/*.java"/>
+    </uptodate>
+  </target>
+  <target name="jar-lucene-core" unless="lucene-core.uptodate" depends="check-lucene-core-uptodate">
+    <ant dir="${common.dir}" target="jar-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="lucene-core.uptodate" value="true"/>
+  </target>
+  <target name="compile-lucene-core" unless="core.compiled">
+    <ant dir="${common.dir}" target="compile-core" inheritAll="false">
+      <propertyset refid="uptodate.and.compiled.properties"/>
+    </ant>
+    <property name="core.compiled" value="true"/>
+  </target>
+
   <target name="compile-test-framework" depends="compile-core">
   	<compile-test-macro srcdir="${tests-framework.src.dir}" destdir="${common.dir}/build/classes/test-framework"
   						test.classpath="test.classpath"/>
Index: lucene/build.xml
===================================================================
--- lucene/build.xml	(revision 1151355)
+++ lucene/build.xml	(working copy)
@@ -561,4 +561,8 @@
             title="Lucene Search Engine: Test Framework" />
   </target>
 
+  <!-- Override common-build.xml definition to check for the jar already being up-to-date -->
+  <target name="jar-core" depends="check-lucene-core-uptodate,compile-core" unless="lucene-core.uptodate">
+    <jarify/>
+  </target>
 </project>
