diff --git a/dev/core/src/com/google/gwt/dev/CompilePerms.java b/dev/core/src/com/google/gwt/dev/CompilePerms.java
index b2e7072..87f4b3a 100644
--- a/dev/core/src/com/google/gwt/dev/CompilePerms.java
+++ b/dev/core/src/com/google/gwt/dev/CompilePerms.java
@@ -172,22 +172,19 @@
 
   /**
    * Compile a single permutation.
+   * 
+   * @throws UnableToCompleteException if the permutation compile fails
    */
   public static PermutationResult compile(TreeLogger logger,
-      Permutation permutation, UnifiedAst unifiedAst) {
-    try {
-      final String js = JavaToJavaScriptCompiler.compilePermutation(logger,
-          unifiedAst, permutation.getRebindAnswers());
-      return new PermutationResult() {
-        public String getJs() {
-          return js;
-        }
-      };
-    } catch (UnableToCompleteException e) {
-      // We intentionally don't pass in the exception here since the real
-      // cause has been logged.
-      return null;
-    }
+      Permutation permutation, UnifiedAst unifiedAst)
+      throws UnableToCompleteException {
+    final String js = JavaToJavaScriptCompiler.compilePermutation(logger,
+        unifiedAst, permutation.getRebindAnswers());
+    return new PermutationResult() {
+      public String getJs() {
+        return js;
+      }
+    };
   }
 
   /**
diff --git a/dev/core/src/com/google/gwt/dev/CompilePermsServer.java b/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
index ac4cc42..3f080f8 100644
--- a/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
+++ b/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
@@ -16,6 +16,7 @@
 package com.google.gwt.dev;
 
 import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.core.ext.TreeLogger.Type;
 import com.google.gwt.dev.jjs.UnifiedAst;
 import com.google.gwt.dev.util.arg.ArgHandlerLogLevel;
@@ -290,10 +291,22 @@
     Permutation p = (Permutation) in.readObject();
     logger.log(TreeLogger.SPAM, "Permutation read");
 
-    PermutationResult result = CompilePerms.compile(logger.branch(
-        TreeLogger.DEBUG, "Compiling"), p, ast);
-    logger.log(TreeLogger.DEBUG, "Successfully compiled permutation");
-    out.writeObject(result);
+    Throwable caught = null;
+    try {
+      PermutationResult result = CompilePerms.compile(logger.branch(
+          TreeLogger.DEBUG, "Compiling"), p, ast);
+      out.writeObject(result);
+      out.flush();
+      logger.log(TreeLogger.DEBUG, "Successfully compiled permutation");
+      return;
+    } catch (UnableToCompleteException e) {
+      caught = e;
+    } catch (Throwable e) {
+      logger.log(TreeLogger.ERROR, "Compile failed", e);
+      caught = e;
+    }
+
+    out.writeObject(caught);
     out.flush();
     logger.log(TreeLogger.SPAM, "Sent result");
   }
diff --git a/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
index 137144d..a039d07 100644
--- a/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
@@ -141,7 +141,13 @@
         out.writeBoolean(true);
         out.writeObject(permutation);
         out.flush();
-        return (PermutationResult) in.readObject();
+        Object result = in.readObject();
+        if (result instanceof Throwable) {
+          Throwable t = (Throwable) result;
+          logger.log(TreeLogger.ERROR, "Error from external worker", t);
+          throw new UnableToCompleteException();
+        }
+        return (PermutationResult) result;
       } catch (IOException e) {
         logger.log(TreeLogger.WARN, "Lost communication with remote process", e);
         throw new TransientWorkerException(
diff --git a/dev/core/src/com/google/gwt/dev/PermutationWorker.java b/dev/core/src/com/google/gwt/dev/PermutationWorker.java
index 80e69cd..26afa3d 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationWorker.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationWorker.java
@@ -32,8 +32,7 @@
    * 
    * @throws TransientWorkerException if the Permutation should be tried again
    *           on another worker
-   * @throws UnableToCompleteException due to a fatal error
-   * @return <code>null</code> if the compile failed
+   * @throws UnableToCompleteException if the compile fails for any reason
    */
   PermutationResult compile(TreeLogger logger, Permutation permutation)
       throws TransientWorkerException, UnableToCompleteException;
diff --git a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
index 507f9ba..ef828ac 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
@@ -70,15 +70,9 @@
             TreeLogger logger = work.getLogger();
             try {
               PermutationResult result = worker.compile(logger, work.getPerm());
-              if (result == null) {
-                logger.log(TreeLogger.ERROR, "Compilation failed");
-                return;
-              } else {
-                Util.writeObjectAsFile(logger, work.getResultFile(), result);
-                logger.log(TreeLogger.DEBUG,
-                    "Successfully compiled permutation");
-                resultsQueue.put(Result.SUCCESS);
-              }
+              Util.writeObjectAsFile(logger, work.getResultFile(), result);
+              logger.log(TreeLogger.DEBUG, "Successfully compiled permutation");
+              resultsQueue.put(Result.SUCCESS);
             } catch (TransientWorkerException e) {
               logger.log(TreeLogger.DEBUG,
                   "Worker died, will retry Permutation", e);
