diff --git a/user/src/com/google/gwt/core/client/JavaScriptException.java b/user/src/com/google/gwt/core/client/JavaScriptException.java
index aefa2bc..b2005e5 100644
--- a/user/src/com/google/gwt/core/client/JavaScriptException.java
+++ b/user/src/com/google/gwt/core/client/JavaScriptException.java
@@ -24,10 +24,6 @@
  */
 public final class JavaScriptException extends RuntimeException {
 
-  private static String constructMessage(Object e) {
-    return "(" + getName(e) + "): " + getDescription(e) + getProperties(e);
-  }
-
   private static String getDescription(Object e) {
     if (e instanceof JavaScriptObject) {
       return getDescription0((JavaScriptObject) e);
@@ -40,14 +36,6 @@
     return (e == null) ? null : e.message;
   }-*/;
 
-  private static JavaScriptObject getException(Object e) {
-    if (e instanceof JavaScriptObject) {
-      return (JavaScriptObject) e;
-    } else {
-      return null;
-    }
-  }
-
   private static String getName(Object e) {
     if (e == null) {
       return "null";
@@ -86,34 +74,36 @@
    * The original description of the JavaScript exception this class wraps,
    * initialized as <code>e.message</code>.
    */
-  private final String description;
+  private String description;
 
   /**
    * The underlying exception this class wraps.
    */
-  private final JavaScriptObject exception;
+  private final Object e;
+
+  /**
+   * A constructed message describing this exception.
+   */
+  private String message;
 
   /**
    * The original type name of the JavaScript exception this class wraps,
    * initialized as <code>e.name</code>.
    */
-  private final String name;
+  private String name;
 
   /**
    * @param e the object caught in JavaScript that triggered the exception
    */
   public JavaScriptException(Object e) {
-    super(constructMessage(e));
-    this.name = getName(e);
-    this.description = getDescription(e);
-    this.exception = getException(e);
+    this.e = e;
   }
 
   public JavaScriptException(String name, String description) {
-    super("JavaScript " + name + " exception: " + description);
+    this.message = "JavaScript " + name + " exception: " + description;
     this.name = name;
     this.description = description;
-    this.exception = null;
+    this.e = null;
   }
 
   /**
@@ -127,7 +117,7 @@
     super(message);
     this.name = null;
     this.description = message;
-    this.exception = null;
+    this.e = null;
   }
 
   /**
@@ -135,6 +125,9 @@
    * <code>null</code>.
    */
   public String getDescription() {
+    if (description == null) {
+      init();
+    }
     return description;
   }
 
@@ -142,7 +135,15 @@
    * Returns the original JavaScript the exception; may be <code>null</code>.
    */
   public JavaScriptObject getException() {
-    return exception;
+    return (e instanceof JavaScriptObject) ? (JavaScriptObject) e : null;
+  }
+
+  @Override
+  public String getMessage() {
+    if (message == null) {
+      init();
+    }
+    return message;
   }
 
   /**
@@ -150,7 +151,16 @@
    * <code>null</code>.
    */
   public String getName() {
+    if (name == null) {
+      init();
+    }
     return name;
   }
+  
+  private void init() {
+    name = getName(e);
+    description = getDescription(e);
+    message = "(" + name + "): " + description + getProperties(e);
+  }
 
 }
