diff --git a/dev/core/src/com/google/gwt/dev/GWTShell.java b/dev/core/src/com/google/gwt/dev/GWTShell.java
index a009e2c..be9390d 100644
--- a/dev/core/src/com/google/gwt/dev/GWTShell.java
+++ b/dev/core/src/com/google/gwt/dev/GWTShell.java
@@ -292,7 +292,7 @@
 
     /**
      * Load a module.
-     *
+     * 
      * @param moduleName name of the module to load
      * @param logger TreeLogger to use
      * @return the loaded module
@@ -420,8 +420,8 @@
 
     registerHandler(new ArgHandlerLogLevel() {
       @Override
-      public String[] getDefaultArgs() {
-        return new String[] {getTag(), doGetDefaultLogLevel()};
+      protected Type getDefaultLogLevel() {
+        return doGetDefaultLogLevel();
       }
 
       @Override
@@ -670,8 +670,8 @@
    * Can be override to change the default log level in subclasses. JUnit does
    * this for example.
    */
-  protected String doGetDefaultLogLevel() {
-    return "INFO";
+  protected Type doGetDefaultLogLevel() {
+    return Type.INFO;
   }
 
   /**
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
index b79675f..ee08e85 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
@@ -20,16 +20,33 @@
 import com.google.gwt.util.tools.ArgHandler;
 
 /**
- * Arugment handler for processing the log level flag.
+ * Argument handler for processing the log level flag.
  */
 public abstract class ArgHandlerLogLevel extends ArgHandler {
 
-  public String[] getDefaultArgs() {
-    return new String[]{getTag(), "INFO"};
+  private static final String OPTIONS_STRING = computeOptionsString();
+
+  private static String computeOptionsString() {
+    StringBuffer sb = new StringBuffer();
+    Type[] values = Type.values();
+    for (int i = 0, c = values.length; i < c; ++i) {
+      if (i > 0) {
+        sb.append(", ");
+      }
+      if (i + 1 == c) {
+        sb.append("or ");
+      }
+      sb.append(values[i].name());
+    }
+    return sb.toString();
+  }
+
+  public final String[] getDefaultArgs() {
+    return new String[] {getTag(), getDefaultLogLevel().name()};
   }
 
   public String getPurpose() {
-    return "The level of logging detail: ERROR, WARN, INFO, TRACE, DEBUG, SPAM, or ALL";
+    return "The level of logging detail: " + OPTIONS_STRING;
   }
 
   public String getTag() {
@@ -37,23 +54,29 @@
   }
 
   public String[] getTagArgs() {
-    return new String[]{"level"};
+    return new String[] {"level"};
   }
 
   public int handle(String[] args, int startIndex) {
     if (startIndex + 1 < args.length) {
-      TreeLogger.Type level = TreeLogger.Type.valueOf(args[startIndex + 1]);
-      if (level != null) {
+      try {
+        Type level = Type.valueOf(args[startIndex + 1]);
         setLogLevel(level);
         return 1;
+      } catch (IllegalArgumentException e) {
+        // Argument did not match any enum value; fall through to error case.
       }
     }
 
     System.err.println(getTag() + " should be followed by one of");
-    System.err.println("  ERROR, WARN, INFO, TRACE, DEBUG, SPAM, or ALL");
+    System.err.println("  " + OPTIONS_STRING);
     return -1;
   }
 
   public abstract void setLogLevel(Type level);
 
+  protected Type getDefaultLogLevel() {
+    return Type.INFO;
+  }
+
 }
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index 2237ccd..9249024 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -17,6 +17,7 @@
 
 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.BootStrapPlatform;
 import com.google.gwt.dev.GWTShell;
 import com.google.gwt.dev.cfg.ModuleDef;
@@ -352,8 +353,8 @@
   }
 
   @Override
-  protected String doGetDefaultLogLevel() {
-    return "WARN";
+  protected Type doGetDefaultLogLevel() {
+    return Type.WARN;
   }
 
   /**
