diff --git a/tools/api-checker/config/gwt15_16userApi.conf b/tools/api-checker/config/gwt15_16userApi.conf
index 512204b..e8da6bf 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
+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
+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);
