diff --git a/dev/core/src/com/google/gwt/core/ext/soyc/impl/DependencyRecorder.java b/dev/core/src/com/google/gwt/core/ext/soyc/impl/DependencyRecorder.java
index a8f648e..de9d906 100644
--- a/dev/core/src/com/google/gwt/core/ext/soyc/impl/DependencyRecorder.java
+++ b/dev/core/src/com/google/gwt/core/ext/soyc/impl/DependencyRecorder.java
@@ -107,7 +107,7 @@
    */
   protected void recordDependenciesImpl(TreeLogger logger, JProgram jprogram) {
 
-    logger = logger.branch(TreeLogger.INFO,
+    logger = logger.branch(TreeLogger.DEBUG,
         "Creating dependencies file for the compile report");
 
     ControlFlowAnalyzer dependencyAnalyzer = new ControlFlowAnalyzer(jprogram);
@@ -124,7 +124,6 @@
       writer.write(builder.toString());
       Utility.close(writer);
 
-      logger.log(TreeLogger.INFO, "Done");
     } catch (Throwable e) {
       logger.log(TreeLogger.ERROR, "Could not write dependency file.", e);
     }
diff --git a/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java b/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java
index 044de32..5af2202 100644
--- a/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java
+++ b/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java
@@ -108,7 +108,7 @@
       Utility.close(writer);
       pw.close();
 
-      logger.log(TreeLogger.INFO, "Done");
+      logger.log(TreeLogger.DEBUG, "Done");
 
     } catch (Throwable e) {
       logger.log(TreeLogger.ERROR, "Could not open dependency file.", e);
diff --git a/dev/core/src/com/google/gwt/dev/CompilePerms.java b/dev/core/src/com/google/gwt/dev/CompilePerms.java
index d033f5d..c64151c 100644
--- a/dev/core/src/com/google/gwt/dev/CompilePerms.java
+++ b/dev/core/src/com/google/gwt/dev/CompilePerms.java
@@ -198,9 +198,9 @@
       throws UnableToCompleteException {
     final TreeLogger branch = logger.branch(TreeLogger.INFO, "Compiling "
         + perms.length + " permutation" + (perms.length > 1 ? "s" : ""));
-    PermutationWorkerFactory.compilePermutations(logger, precompilation, perms,
+    PermutationWorkerFactory.compilePermutations(branch, precompilation, perms,
         localWorkers, resultFiles);
-    branch.log(TreeLogger.INFO, "Permutation compile succeeded");
+    logger.log(TreeLogger.INFO, "Compile of permutations succeeded");
   }
 
   public static void main(String[] args) {
diff --git a/dev/core/src/com/google/gwt/dev/CompilePermsServer.java b/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
index e119a8e..012aac7 100644
--- a/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
+++ b/dev/core/src/com/google/gwt/dev/CompilePermsServer.java
@@ -296,8 +296,8 @@
 
     Throwable caught = null;
     try {
-      PermutationResult result = CompilePerms.compile(logger.branch(
-          TreeLogger.DEBUG, "Compiling"), p, ast);
+      logger.log(TreeLogger.DEBUG, "Compiling");
+      PermutationResult result = CompilePerms.compile(logger, p, ast);
       resultFile.set(logger, result);
       logger.log(TreeLogger.DEBUG, "Successfully compiled permutation");
     } catch (UnableToCompleteException e) {
diff --git a/dev/core/src/com/google/gwt/dev/Compiler.java b/dev/core/src/com/google/gwt/dev/Compiler.java
index 442e047..178c37c 100644
--- a/dev/core/src/com/google/gwt/dev/Compiler.java
+++ b/dev/core/src/com/google/gwt/dev/Compiler.java
@@ -210,10 +210,11 @@
 
           precompilation = null; // No longer needed, so save the memory
 
-          Link.link(logger.branch(TreeLogger.INFO, "Linking into "
-              + options.getWarDir().getPath()), module, generatedArtifacts,
-              allPerms, resultFiles, options.getWarDir(),
-              options.getExtraDir(), precompileOptions);
+          File absPath = new File(options.getWarDir(), module.getName());
+          absPath = absPath.getAbsoluteFile();
+          Link.link(logger.branch(TreeLogger.TRACE, "Linking into " + absPath),
+              module, generatedArtifacts, allPerms, resultFiles,
+              options.getWarDir(), options.getExtraDir(), precompileOptions);
 
           long compileDone = System.currentTimeMillis();
           long delta = compileDone - compileStart;
diff --git a/dev/core/src/com/google/gwt/dev/GWTCompiler.java b/dev/core/src/com/google/gwt/dev/GWTCompiler.java
index 5a6b4e4..9e74f56 100644
--- a/dev/core/src/com/google/gwt/dev/GWTCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/GWTCompiler.java
@@ -202,7 +202,7 @@
 
           precompilation = null; // No longer needed, so save the memory
 
-          Link.legacyLink(logger.branch(TreeLogger.INFO, "Linking into "
+          Link.legacyLink(logger.branch(TreeLogger.TRACE, "Linking into "
               + options.getOutDir().getPath()), module, generatedArtifacts,
               allPerms, resultFiles, options.getOutDir(), precompileOptions);
 
diff --git a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
index 7d3ff6c..93fbe54 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
@@ -249,9 +249,10 @@
     List<Work> work = new ArrayList<Work>(permutations.length);
     for (int i = 0; i < permutations.length; ++i) {
       Permutation perm = permutations[i];
-      TreeLogger permLogger = logger.branch(TreeLogger.DEBUG,
-          "Worker permutation " + perm.getId() + " of " + permutations.length);
-      work.add(new Work(permLogger, perm, resultFiles.get(i)));
+      int printId = perm.getId() + 1;
+      logger.log(TreeLogger.DEBUG, 
+          "Creating worker permutation " + printId + " of " + permutations.length);
+      work.add(new Work(logger, perm, resultFiles.get(i)));
     }
 
     // Create the workers.
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index 7d80596..126aab2 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -210,6 +210,9 @@
       UnifiedAst unifiedAst, Map<String, String> rebindAnswers,
       PropertyOracle[] propertyOracles, int permutationId)
       throws UnableToCompleteException {
+
+    int printId = permutationId + 1;
+    logger.log(TreeLogger.INFO, "Compiling permutation " + printId + "...");
     long permStart = System.currentTimeMillis();
     try {
       if (JProgram.isTracingEnabled()) {
@@ -358,7 +361,7 @@
           makeSoycArtifact(logger, permutationId, jprogram, js, sizeBreakdowns,
               sourceInfoMaps, dependencies, map, obfuscateMap));
 
-      System.out.println("Permutation took "
+      logger.log(TreeLogger.TRACE, "Permutation took "
           + (System.currentTimeMillis() - permStart) + " ms");
       return toReturn;
     } catch (Throwable e) {
