diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java
index 185ac08..687225f 100644
--- a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java
+++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java
@@ -146,11 +146,8 @@
 
     // Parentheses added to eliminate strict JS warning in Firefox.
     for (var part; parts.length && (part = parts.shift());) {
-        if (cur[part]) {
-            cur = cur[part];
-        } else {
-            cur = cur[part] = optCtor || {};
-        }
+        // assign the constructor to the last node (when parts is empty)
+        cur = cur[part] = cur[part] || !parts.length && optCtor || {};
     }
     return cur;
   }-*/;
diff --git a/user/test/com/google/gwt/core/client/interop/JsExportTest.java b/user/test/com/google/gwt/core/client/interop/JsExportTest.java
index fa5215e..1c044d8 100644
--- a/user/test/com/google/gwt/core/client/interop/JsExportTest.java
+++ b/user/test/com/google/gwt/core/client/interop/JsExportTest.java
@@ -18,6 +18,8 @@
 import static com.google.gwt.core.client.ScriptInjector.TOP_WINDOW;
 
 import com.google.gwt.core.client.ScriptInjector;
+import com.google.gwt.core.client.js.JsExport;
+import com.google.gwt.core.client.js.JsNamespace;
 import com.google.gwt.junit.client.GWTTestCase;
 
 /**
@@ -144,8 +146,42 @@
     return obj.getInstance();
   }-*/;
 
+  @JsExport
+  @JsNamespace("bar.foo.baz")
+  static class MyExportedClassCorrectNamespace {
+    public MyExportedClassCorrectNamespace() { }
+  }
+
+  public void testExportClass_correctNamespace() {
+    assertNull(getGlobalByQualifiedName("bar.MyExportedClassCorrectNamespace"));
+    assertNull(getGlobalByQualifiedName("bar.foo.MyExportedClassCorrectNamespace"));
+    assertTrue(isFunction(getGlobalByQualifiedName("bar.foo.baz.MyExportedClassCorrectNamespace")));
+    Object o = newInstance(getGlobalByQualifiedName("bar.foo.baz.MyExportedClassCorrectNamespace"));
+    assertNotNull(o);
+    assertTrue(o instanceof MyExportedClassCorrectNamespace);
+  }
+
+  private native Object getGlobalByQualifiedName(String qualifiedName) /*-{
+    var components = qualifiedName.split('\.');
+    var scope = $global;
+    for (var i = 0; i < components.length; i++) {
+      scope = scope[components[i]];
+    }
+    return scope;
+  }-*/;
+
+  private native boolean isFunction(Object object) /*-{
+    return typeof object == "function";
+  }-*/;
+
+  private native Object newInstance(Object jsConstructor) /*-{
+    return new jsConstructor;
+  }-*/;
+
   public void testExportClass_implicitConstructor() {
-    assertNotNull(createMyExportedClassWithImplicitConstructor());
+    Object o = createMyExportedClassWithImplicitConstructor();
+    assertNotNull(o);
+    assertTrue(o instanceof MyExportedClassWithImplicitConstructor);
   }
 
   private native Object createMyExportedClassWithImplicitConstructor() /*-{
diff --git a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithImplicitConstructor.java b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithImplicitConstructor.java
index f4d62a5..f74c39f 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithImplicitConstructor.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithImplicitConstructor.java
@@ -23,5 +23,4 @@
  */
 @JsExport
 public class MyExportedClassWithImplicitConstructor {
-
 }
