diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationState.java b/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
index 605b933..9a854e1 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
@@ -52,12 +52,12 @@
   private final CompileMoreLater compileMoreLater;
 
   /**
-   * Unmodifiable view of {@link #classFileMap).
+   * Unmodifiable view of {@link #classFileMap}.
    */
   private final Map<String, CompiledClass> exposedClassFileMap = Collections.unmodifiableMap(classFileMap);
 
   /**
-   * Unmodifiable view of {@link #classFileMapBySource).
+   * Unmodifiable view of {@link #classFileMapBySource}.
    */
   private final Map<String, CompiledClass> exposedClassFileMapBySource = Collections.unmodifiableMap(classFileMapBySource);
 
@@ -85,8 +85,7 @@
   public void addGeneratedCompilationUnits(TreeLogger logger,
       Collection<GeneratedUnit> generatedUnits) {
     Event generatedUnitsAddEvent = SpeedTracerLogger.start(
-        DevModeEventType.GENERATED_UNITS_ADD);
-
+        DevModeEventType.COMP_STATE_ADD_GENERATED_UNITS);
     try {
       logger = logger.branch(TreeLogger.DEBUG, "Adding '"
           + generatedUnits.size() + "' new generated units");
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
index bcf9938..f7ba73c 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
@@ -24,9 +24,11 @@
 import com.google.gwt.dev.js.ast.JsRootScope;
 import com.google.gwt.dev.resource.Resource;
 import com.google.gwt.dev.util.StringInterner;
+import com.google.gwt.dev.util.log.speedtracer.CompilerEventType;
 import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
+import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.EventType;
 
 import org.apache.commons.collections.map.AbstractReferenceMap;
 import org.apache.commons.collections.map.ReferenceIdentityMap;
@@ -63,7 +65,7 @@
 
       public void process(CompilationUnitBuilder builder,
           CompilationUnitDeclaration cud, List<CompiledClass> compiledClasses) {
-        Event compilationStateBuilderProcess = SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+        Event event = SpeedTracerLogger.start(DevModeEventType.CSB_PROCESS);
         try {
           Map<MethodDeclaration, JsniMethod> jsniMethods = JsniCollector.collectJsniMethods(
               cud, builder.getSource(), JsRootScope.INSTANCE,
@@ -128,7 +130,7 @@
           }
           newlyBuiltUnits.add(unit);
         } finally {
-          compilationStateBuilderProcess.end();
+          event.end();
         }
       }
     }
@@ -159,11 +161,12 @@
 
     public Collection<CompilationUnit> addGeneratedTypes(TreeLogger logger,
         Collection<GeneratedUnit> generatedUnits) {
-      Event compilationStateBuilderProcess = SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+      Event event = 
+        SpeedTracerLogger.start(DevModeEventType.CSB_ADD_GENERATED_TYPES);
       try {
         return doBuildGeneratedTypes(logger, generatedUnits, this);
       } finally {
-        compilationStateBuilderProcess.end();
+        event.end();
       }
     }
 
@@ -181,7 +184,8 @@
 
     Collection<CompilationUnit> compile(TreeLogger logger,
         Collection<CompilationUnitBuilder> builders,
-        Map<CompilationUnitBuilder, CompilationUnit> cachedUnits) {
+        Map<CompilationUnitBuilder, CompilationUnit> cachedUnits,
+        EventType eventType) {
       // Initialize the set of valid classes to the initially cached units.
       for (CompilationUnit unit : cachedUnits.values()) {
         for (CompiledClass cc : unit.getCompiledClasses()) {
@@ -196,8 +200,14 @@
       do {
         // Compile anything that needs to be compiled.
         this.newlyBuiltUnits = new ArrayList<CompilationUnit>();
-
-        compiler.doCompile(builders);
+        
+        Event jdtCompilerEvent = SpeedTracerLogger.start(eventType);
+        try {
+          compiler.doCompile(builders);
+        } finally {
+          jdtCompilerEvent.end();
+        }
+        
         resultUnits.addAll(this.newlyBuiltUnits);
         builders.clear();
 
@@ -276,21 +286,21 @@
 
   public static CompilationState buildFrom(TreeLogger logger,
       Set<Resource> resources) {
-    Event compilationStateBuilderProcessEvent = SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+    Event event = SpeedTracerLogger.start(DevModeEventType.CSB_BUILD_FROM_ORACLE);
     try {
       return instance.doBuildFrom(logger, resources, null);
     } finally {
-      compilationStateBuilderProcessEvent.end();
+      event.end();
     }
   }
 
   public static CompilationState buildFrom(TreeLogger logger,
       Set<Resource> resources, AdditionalTypeProviderDelegate delegate) {
-    Event compilationStateBuilderProcessEvent = SpeedTracerLogger.start(DevModeEventType.COMPILATION_STATE_BUILDER_PROCESS);
+    Event event = SpeedTracerLogger.start(DevModeEventType.CSB_BUILD_FROM_ORACLE);
     try {
       return instance.doBuildFrom(logger, resources, delegate);
     } finally {
-      compilationStateBuilderProcessEvent.end();
+      event.end();
     }
   }
 
@@ -383,7 +393,7 @@
       builders.add(builder);
     }
     Collection<CompilationUnit> resultUnits = compileMoreLater.compile(logger,
-        builders, cachedUnits);
+        builders, cachedUnits, CompilerEventType.JDT_COMPILER_CSB_FROM_ORACLE);
     return new CompilationState(logger, resultUnits, compileMoreLater);
   }
 
@@ -418,6 +428,7 @@
         builders.add(builder);
       }
     }
-    return compileMoreLater.compile(logger, builders, cachedUnits);
+    return compileMoreLater.compile(logger, builders, cachedUnits,
+     CompilerEventType.JDT_COMPILER_CSB_GENERATED);
   }
 }
diff --git a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
index 464f8b0..17de260 100644
--- a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
@@ -684,12 +684,9 @@
       return false;
     }
 
-    Event jdtCompilerEvent = SpeedTracerLogger.start(
-        CompilerEventType.JDT_COMPILER2, "phase", "compile");
     compilerImpl = new CompilerImpl();
     compilerImpl.compile(icus.toArray(new ICompilationUnit[icus.size()]));
     compilerImpl = null;
-    jdtCompilerEvent.end("# icus", "" + icus.size());
     return true;
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java b/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
index fce859f..8de68d6 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/AbstractCompiler.java
@@ -165,9 +165,12 @@
       @Override
       public void compile(ICompilationUnit[] sourceUnits) {
         SpeedTracerLogger.Event compileEvent = SpeedTracerLogger.start(
-            CompilerEventType.JDT_COMPILER3);
-        super.compile(sourceUnits);
-        compileEvent.end();
+            CompilerEventType.JDT_COMPILER_SANDBOX);
+        try {
+          super.compile(sourceUnits);
+        } finally {
+          compileEvent.end();
+        }
         cuds = null;
       }
 
diff --git a/dev/core/src/com/google/gwt/dev/util/log/speedtracer/CompilerEventType.java b/dev/core/src/com/google/gwt/dev/util/log/speedtracer/CompilerEventType.java
index 9d3d4a3..eb90244 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/speedtracer/CompilerEventType.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/speedtracer/CompilerEventType.java
@@ -32,13 +32,15 @@
   GENERATOR_RPC("Generator RPC", "#3300CC"), //
   GENERATOR_RPC_STOB("Generator RPC STOB", "#3300CC"), //
   GENERATOR_RPC_TYPE_SERIALIZER("Generator RPC Type Serializer", "#3300CC"), //
-  GENERATOR_RPC_FIELD_SERIALIZER("Generator RPC Field Serializer", "#3300CC"), //
+  GENERATOR_RPC_FIELD_SERIALIZER(
+      "Generator RPC Field Serializer", "#3300CC"), //
   GENERATOR_UIBINDER("Generator UiBinder", "#FFFF00"), //
   GENERATOR_GIN("Generator GIN", "#009900"), //
   GENERATOR_OTHER("Generator (Other)", "Red"), //
-  JDT_COMPILER("JdtCompiler1", "#6c6"), //
-  JDT_COMPILER2("JdtCompiler2", "#0c0"), //
-  JDT_COMPILER3("JdtCompiler3", "#494"), //
+  JDT_COMPILER("JdtCompiler", "#6c6"), //
+  JDT_COMPILER_CSB_FROM_ORACLE("JdtCompiler CSB FromOracle", "LimeGreen"), //
+  JDT_COMPILER_CSB_GENERATED("JdtCompiler CSB Generated", "DarkSeaGreen"), //
+  JDT_COMPILER_SANDBOX("JdtCompiler Sandbox", "#494"), //
   LINK("Link", "LawnGreen"), //
   MAKE_SOYC_ARTIFACTS("MakeSoycArtifacts", "Chartreuse"), //
   MODULE_DEF("ModuleDef", "BlueViolet"), //
@@ -50,7 +52,7 @@
   PRECOMPILE_CORE("CoreCompiler", "Crimson"), //
   WRITE_OBJECT_AS_FILE("WriteObjectAsFile", "Magenta"), //
   BUILD_AST("BuildAST", "DarkGoldenRod"), //
-  FUNCTION_CLUSTER("JsFunctionClusterer","Cornflower"), //
+  FUNCTION_CLUSTER("JsFunctionClusterer", "Cornflower"), //
   BLOCKED("Blocked", "FloralWhite"), //
   GET_ALL_REBINDS("GetAllPossibleRebindAnswers", "Brown"), //
   FIND_ENTRY_POINTS("FindEntryPoints", "SlateGray"), //
@@ -59,11 +61,11 @@
   RECORD_REBINDS("RecordRebinds", "Chocolate"), //
   BUILD_TYPE_MAP_FOR_AST("BuildTypeMapForAST", "LightSeaGreen"), //
   GET_COMPILATION_UNITS("GetCompilationUnitDeclarations", "Gainsboro"), //
-  GENERATE_JAVA_AST("GenerateJavaAST", "DodgerBlue"),
+  GENERATE_JAVA_AST("GenerateJavaAST", "DodgerBlue"), //
   ARTIFICIAL_RESCUE_REORDER("ArtificialRescueReorder", "LightCyan"), //
   FIX_ASSIGNMENT_TO_UNBOX("FixAssignmentToUnbox", "Orange"), //
-  ASSERTION_NORMALIZER("AssertionNormalizer","LightPink"), //
-  ASSERTION_REMOVER("AssertionRemover","LightSalmon"), //
+  ASSERTION_NORMALIZER("AssertionNormalizer", "LightPink"), //
+  ASSERTION_REMOVER("AssertionRemover", "LightSalmon"), //
   REPLACE_REBINDS("ReplaceRebinds", "Snow"), //
   CREATE_UNIFIED_AST("CreateUnifiedAST", "BlueViolet"), //
   CHECK_FOR_ERRORS("CheckForErrors", "DimGrey"), //
diff --git a/dev/core/src/com/google/gwt/dev/util/log/speedtracer/DevModeEventType.java b/dev/core/src/com/google/gwt/dev/util/log/speedtracer/DevModeEventType.java
index c011fe9..6ddaecb 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/speedtracer/DevModeEventType.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/speedtracer/DevModeEventType.java
@@ -23,10 +23,11 @@
  */
 public enum DevModeEventType implements EventType {
   CLASS_BYTES_REWRITE("Class bytes rewrite", "DarkBlue"), //
-  COMPILATION_STATE_BUILDER_PROCESS("CompilationStateBuilder process",
-      "Teal"), //
   CREATE_UI("Create UI", "BlueViolet"), //
-  GENERATED_UNITS_ADD("Generated units add", "Brown"), //
+  CSB_ADD_GENERATED_TYPES("CSB Add Generated Types", "SteelBlue"), //
+  CSB_BUILD_FROM_ORACLE("CSB Build From Oracle", "SlateGray"), //
+  CSB_PROCESS("CSB Process", "Teal"), //
+  COMP_STATE_ADD_GENERATED_UNITS("Comp State Add Generated Units", "Brown"), //
   JAVA_TO_JS_CALL("Java to JS call", "LightSkyBlue"), //
   JETTY_STARTUP("Jetty startup", "Orchid"), //
   JS_TO_JAVA_CALL("JS to Java call", "Orange"), //
