diff --git a/tools/api-checker/config/gwt15_16userApi.conf b/tools/api-checker/config/gwt15_16userApi.conf
index e42fa8f..895be36 100644
--- a/tools/api-checker/config/gwt15_16userApi.conf
+++ b/tools/api-checker/config/gwt15_16userApi.conf
@@ -1,18 +1,19 @@
 #existing API
 
+dirRoot_old @OLDROOT@/
 name_old gwt15userApi
 #sourceFiles and excludedFiles are specified as colon-separated list of files
-sourceFiles_old @OLDROOT@/dev/core/super:@OLDROOT@/user/super:@OLDROOT@/user/src
-excludedFiles_old @OLDROOT@/user/src/com/google/gwt/benchmarks:@OLDROOT@/user/src/com/google/gwt/junit:@OLDROOT@/user/src/com/google/gwt/i18n/rebind:@OLDROOT@/user/src/com/google/gwt/i18n/tools:@OLDROOT@/user/src/com/google/gwt/json:@OLDROOT@/user/src/com/google/gwt/user/rebind:@OLDROOT@/user/src/com/google/gwt/user/server:@OLDROOT@/user/src/com/google/gwt/user/tools:@OLDROOT@/user/super/com/google/gwt/benchmarks:@OLDROOT@/user/super/com/google/gwt/junit:@OLDROOT@/user/super/com/google/gwt/user
+sourceFiles_old dev/core/super:user/src:user/super
+excludedFiles_old user/src/com/google/gwt/benchmarks:user/src/com/google/gwt/i18n/rebind:user/src/com/google/gwt/i18n/tools:user/src/com/google/gwt/json:user/src/com/google/gwt/junit:user/src/com/google/gwt/user/client/rpc/core/java/util/LinkedHashMap_CustomFieldSerializer.java:user/src/com/google/gwt/user/rebind:user/src/com/google/gwt/user/server:user/src/com/google/gwt/user/tools:user/super/com/google/gwt/benchmarks:user/super/com/google/gwt/junit
 
 ##############################################
 #new Api
 
+dirRoot_new ./
 name_new gwt16userApi
 #sourceFiles and excludedFiles are specified as colon-separated list of files
-sourceFiles_new ./dev/core/super:./user/super:./user/src
-#:dev/core/src
-excludedFiles_new ./user/src/com/google/gwt/benchmarks:./user/src/com/google/gwt/junit:./user/src/com/google/gwt/i18n/rebind:./user/src/com/google/gwt/i18n/tools:./user/src/com/google/gwt/json:./user/src/com/google/gwt/user/rebind:./user/src/com/google/gwt/user/server:./user/src/com/google/gwt/user/tools:./user/super/com/google/gwt/benchmarks:./user/super/com/google/gwt/junit:./user/super/com/google/gwt/user
+sourceFiles_new dev/core/super:user/src:user/super
+excludedFiles_new user/src/com/google/gwt/benchmarks:user/src/com/google/gwt/i18n/rebind:user/src/com/google/gwt/i18n/tools:user/src/com/google/gwt/json:user/src/com/google/gwt/junit:user/src/com/google/gwt/user/client/rpc/core/java/util/LinkedHashMap_CustomFieldSerializer.java:user/src/com/google/gwt/user/rebind:user/src/com/google/gwt/user/server:user/src/com/google/gwt/user/tools:user/super/com/google/gwt/benchmarks:user/super/com/google/gwt/junit
 
 ##############################################
 #excluded packages
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java
index 84a5235..8aeb887 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java
@@ -24,6 +24,7 @@
 import com.google.gwt.core.ext.typeinfo.NotFoundException;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.dev.javac.CompilationUnit;
+import com.google.gwt.dev.javac.CompilationUnitInvalidator;
 import com.google.gwt.dev.javac.JdtCompiler;
 import com.google.gwt.dev.javac.TypeOracleMediator;
 import com.google.gwt.dev.javac.impl.FileCompilationUnit;
@@ -171,11 +172,11 @@
    */
   public String getApiAsString() {
     StringBuffer sb = new StringBuffer();
-    sb.append("Api: " + name + "\n\n");
+    sb.append("Api: " + name + ", size = " + apiPackages.size() + "\n\n");
     List<ApiPackage> sortedApiPackages = new ArrayList<ApiPackage>(
         apiPackages.values());
     Collections.sort(sortedApiPackages);
-    for (ApiPackage apiPackage : apiPackages.values()) {
+    for (ApiPackage apiPackage : sortedApiPackages) {
       sb.append(apiPackage.getApiAsString());
     }
     return sb.toString();
@@ -204,7 +205,7 @@
   String getName() {
     return name;
   }
-  
+
   boolean isApiClass(JClassType classType) {
     Boolean ret = apiClassCache.get(classType);
     if (ret != null) {
@@ -269,8 +270,8 @@
         if (file.getName().endsWith("java")) {
           pkgName = extractPackageNameFromFile(file);
           if (pkgName == null) {
-            logger.log(TreeLogger.WARN, "Not adding file = "
-                + file.toString() + ", because packageName = null", null);
+            logger.log(TreeLogger.WARN, "Not adding file = " + file.toString()
+                + ", because packageName = null", null);
           } else {
             logger.log(TreeLogger.DEBUG, "adding pkgName = " + pkgName
                 + ", file = " + file.toString(), null);
@@ -332,12 +333,18 @@
   private TypeOracle createTypeOracleFromSources() throws NotFoundException,
       IOException, UnableToCompleteException {
     numFilesCount = 0;
-    TypeOracleMediator mediator = new TypeOracleMediator();
     Set<CompilationUnit> units = new HashSet<CompilationUnit>();
     for (File tempFile : sourceTrees) {
       addCompilationUnitsInPath(units, tempFile);
     }
     JdtCompiler.compile(units);
+    if (CompilationUnitInvalidator.invalidateUnitsWithErrors(logger, units)) {
+      logger.log(TreeLogger.ERROR, "Unable to build typeOracle for "
+          + getName());
+      throw new UnableToCompleteException();
+    }
+
+    TypeOracleMediator mediator = new TypeOracleMediator();
     mediator.refresh(logger, units);
     logger.log(TreeLogger.INFO, "API " + name
         + ", Finished with building typeOracle, added " + numFilesCount
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java
index b67dbc5..99309c5 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java
@@ -79,7 +79,7 @@
 
   String getApiAsString() {
     StringBuffer sb = new StringBuffer();
-    sb.append(name + "\n");
+    sb.append(name + ", size = " + apiClasses.size() + "\n");
     ArrayList<ApiClass> apiClassesList = new ArrayList<ApiClass>(
         apiClasses.values());
     Collections.sort(apiClassesList);
