diff --git a/build.xml b/build.xml
index bad7399..ae82d7e 100755
--- a/build.xml
+++ b/build.xml
@@ -171,10 +171,6 @@
 	
   <target name="apicheck-nobuild" 
     description="[action] Checks API compatibility to prior GWT revision">
-    <copy tofile="${gwt.build.out}/userApi.conf" filtering="false"
-          file="${gwt.apicheck.config}"
-          overwrite="true">
-    </copy>
     <java failonerror="true" fork="true"
           classname="com.google.gwt.tools.apichecker.ApiCompatibilityChecker">
       <jvmarg line="-Xmx512m" />
@@ -188,7 +184,7 @@
       <arg value="-refJar"/>
       <arg path="${gwt.root}/tools/api-checker/reference/gwt-dev-modified.jar:${gwt.root}/tools/api-checker/reference/gwt-user-modified.jar"/>
       <arg value="-configFile"/>
-      <arg file="${gwt.build.out}/userApi.conf"/>
+      <arg file="${gwt.apicheck.config}"/>
       <arg value="-logLevel"/>
       <arg value="ERROR"/>
     </java>
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiCompatibilityChecker.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiCompatibilityChecker.java
index d1cc813..5d926f1 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiCompatibilityChecker.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiCompatibilityChecker.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -53,8 +53,8 @@
 /**
  * {@link ApiCompatibilityChecker} Main class to check if the new API is
  * compatible with the existing API.
- * 
- * 
+ *
+ *
  * <p>
  * To compute API diffs, follow these 2 steps:
  * <ol>
@@ -62,14 +62,14 @@
  * <li>call getApiDiff on the {@code ApiDiffGenerator}
  * </ol>
  * </p>
- * 
+ *
  * <p>
  * An {@code ApiContainer} object is a list of {@link ApiPackage} objects.
  * {@code ApiPackage} objects themselves are list of {@link ApiClass} objects.
  * {@code ApiClass} objects contain list of {@code ApiConstructor}, {@code
  * ApiMethod}, and {@code JField} objects.
  * </p>
- * 
+ *
  * <p>
  * Each {@code ApiDiffGenerator} object computes the list of intersecting and
  * missing {@link ApiPackageDiffGenerator} objects. Each {@code
@@ -80,12 +80,12 @@
  * for constructors, {@link ApiMethod} for methods, and {@link ApiField} for
  * fields.
  * </p>
- * 
+ *
  * <p>
  * For each intersecting API member, a list of {@link ApiChange} objects is
  * stored. Each ApiChange object encodes a specific {@code ApiChange} like
  * adding the 'final' keyword to the API member.
- * 
+ *
  */
 public class ApiCompatibilityChecker extends ToolBase {
 
@@ -212,7 +212,7 @@
       // initialize the ant scanner
       excludeScanner = new ZipScanner();
       List<String> list = new ArrayList<String>(excludedPaths);
-      excludeScanner.setIncludes(list.toArray(new String[0]));
+      excludeScanner.setIncludes(list.toArray(new String[list.size()]));
       excludeScanner.addDefaultExcludes();
       excludeScanner.setCaseSensitive(true);
       excludeScanner.init();
@@ -284,10 +284,12 @@
 
     private boolean isIncluded(String fileName) {
       if (excludeScanner.match(fileName)) {
+        logger.log(TreeLogger.SPAM, fileName + " is excluded");
         return false;
       }
       for (String includedPath : includedPaths) {
         if (fileName.startsWith(includedPath)) {
+          logger.log(TreeLogger.SPAM, fileName + " is not excluded, and is included by " + includedPath);
           return true;
         }
       }
@@ -319,9 +321,9 @@
 
       String fullExcludedPaths[] = new String[excludedPathsAsString.size()];
       int count = 0;
-      String dirRootCanonicalPath = getFileFromName("dirRoot: ", dirRoot).getCanonicalPath();
+      String dirRootAbsolutePath = getFileFromName("dirRoot: ", dirRoot).getAbsolutePath();
       for (String excludedPath : excludedPathsAsString) {
-        fullExcludedPaths[count++] = dirRootCanonicalPath + "/" + excludedPath;
+        fullExcludedPaths[count++] = dirRootAbsolutePath + "/" + excludedPath;
       }
 
       // initialize the ant scanner
@@ -372,7 +374,7 @@
         if (file.getName().startsWith(".") || file.getName().equals("CVS")) {
           continue;
         }
-        if (isExcludedFile(file.getCanonicalPath())) {
+        if (isExcludedFile(file.getAbsolutePath())) {
           // do not process the subtree
           logger.log(TreeLogger.DEBUG,
               "not traversing " + file.toURI().toURL(), null);
@@ -904,7 +906,7 @@
    * "java.util.ArrayList::size() MISSING". The {@code ApiElement} is
    * represented as the string obtained by invoking the getRelativeSignature()
    * method on {@link ApiElement}.
-   * 
+   *
    */
   private Set<String> readWhiteListFromFile(FileReader fr) throws IOException {
     Set<String> hashSet = new HashSet<String>();
