diff --git a/user/test/com/google/gwt/core/client/interop/AbstractJsType.java b/user/test/com/google/gwt/core/client/interop/AbstractJsType.java
index 5f059e5..8e07404 100644
--- a/user/test/com/google/gwt/core/client/interop/AbstractJsType.java
+++ b/user/test/com/google/gwt/core/client/interop/AbstractJsType.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
  * This concrete test class is *directly* annotated as a @JsType.
diff --git a/user/test/com/google/gwt/core/client/interop/ConcreteJsType.java b/user/test/com/google/gwt/core/client/interop/ConcreteJsType.java
index 74c89e4..55529f1 100644
--- a/user/test/com/google/gwt/core/client/interop/ConcreteJsType.java
+++ b/user/test/com/google/gwt/core/client/interop/ConcreteJsType.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
  * This concrete test class is *directly* annotated as a @JsType.
diff --git a/user/test/com/google/gwt/core/client/interop/ConcreteJsTypeJsSubclass.java b/user/test/com/google/gwt/core/client/interop/ConcreteJsTypeJsSubclass.java
index 9e89e41..f9506ec 100644
--- a/user/test/com/google/gwt/core/client/interop/ConcreteJsTypeJsSubclass.java
+++ b/user/test/com/google/gwt/core/client/interop/ConcreteJsTypeJsSubclass.java
@@ -15,12 +15,9 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
-
 /**
  * This test class exposes parent jsmethod as non-jsmethod.
  */
-@JsType
 class ConcreteJsTypeJsSubclass extends ConcreteJsType implements SubclassInterface {
 }
 
diff --git a/user/test/com/google/gwt/core/client/interop/ElementLikeJsInterface.java b/user/test/com/google/gwt/core/client/interop/ElementLikeNativeInterface.java
similarity index 83%
rename from user/test/com/google/gwt/core/client/interop/ElementLikeJsInterface.java
rename to user/test/com/google/gwt/core/client/interop/ElementLikeNativeInterface.java
index a3ff6c6..2881058 100644
--- a/user/test/com/google/gwt/core/client/interop/ElementLikeJsInterface.java
+++ b/user/test/com/google/gwt/core/client/interop/ElementLikeNativeInterface.java
@@ -16,14 +16,14 @@
 package com.google.gwt.core.client.interop;
 
 
-import com.google.gwt.core.client.js.JsProperty;
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
 
 /**
  * An interface that represent part of HTML element's contract.
  */
-@JsType
-public interface ElementLikeJsInterface {
+@JsType(isNative = true)
+public interface ElementLikeNativeInterface {
   @JsProperty
   String getTagName();
 }
diff --git a/user/test/com/google/gwt/core/client/interop/ElementLikeJsInterfaceImpl.java b/user/test/com/google/gwt/core/client/interop/ElementLikeNativeInterfaceImpl.java
similarity index 89%
rename from user/test/com/google/gwt/core/client/interop/ElementLikeJsInterfaceImpl.java
rename to user/test/com/google/gwt/core/client/interop/ElementLikeNativeInterfaceImpl.java
index 7a9d81a..8821150 100644
--- a/user/test/com/google/gwt/core/client/interop/ElementLikeJsInterfaceImpl.java
+++ b/user/test/com/google/gwt/core/client/interop/ElementLikeNativeInterfaceImpl.java
@@ -18,7 +18,7 @@
 /**
  * Implements ElementLikeJsInterface.
  */
-public class ElementLikeJsInterfaceImpl implements ElementLikeJsInterface {
+public class ElementLikeNativeInterfaceImpl implements ElementLikeNativeInterface {
   @Override
   public String getTagName() {
     return "mytag";
diff --git a/user/test/com/google/gwt/core/client/interop/HTMLButtonElement.java b/user/test/com/google/gwt/core/client/interop/HTMLButtonElement.java
index 7c1c532..fa178c9 100644
--- a/user/test/com/google/gwt/core/client/interop/HTMLButtonElement.java
+++ b/user/test/com/google/gwt/core/client/interop/HTMLButtonElement.java
@@ -15,8 +15,9 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsType;
 
-@JsType(prototype = "HTMLButtonElement")
-class HTMLButtonElement extends HTMLElement {
+@JsType(namespace = JsPackage.GLOBAL, name = "HTMLButtonElement", isNative = true)
+class HTMLButtonElement extends HTMLElementConcreteNativeJsType {
 }
diff --git a/user/test/com/google/gwt/core/client/interop/HTMLElement.java b/user/test/com/google/gwt/core/client/interop/HTMLElement.java
deleted file mode 100644
index 41e9c3a..0000000
--- a/user/test/com/google/gwt/core/client/interop/HTMLElement.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.core.client.interop;
-
-import com.google.gwt.core.client.js.JsType;
-
-@JsType(prototype = "HTMLElement")
-class HTMLElement {
-}
diff --git a/user/test/com/google/gwt/core/client/interop/HTMLAnotherElement.java b/user/test/com/google/gwt/core/client/interop/HTMLElementAnotherConcreteNativeJsType.java
similarity index 75%
copy from user/test/com/google/gwt/core/client/interop/HTMLAnotherElement.java
copy to user/test/com/google/gwt/core/client/interop/HTMLElementAnotherConcreteNativeJsType.java
index 2c2ca7e..7ea72ed 100644
--- a/user/test/com/google/gwt/core/client/interop/HTMLAnotherElement.java
+++ b/user/test/com/google/gwt/core/client/interop/HTMLElementAnotherConcreteNativeJsType.java
@@ -15,8 +15,9 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsType;
 
-@JsType(prototype = "HTMLElement")
-class HTMLAnotherElement {
+@JsType(namespace = JsPackage.GLOBAL, name = "HTMLElement", isNative = true)
+class HTMLElementAnotherConcreteNativeJsType {
 }
diff --git a/user/test/com/google/gwt/core/client/interop/HTMLAnotherElement.java b/user/test/com/google/gwt/core/client/interop/HTMLElementConcreteNativeJsType.java
similarity index 76%
rename from user/test/com/google/gwt/core/client/interop/HTMLAnotherElement.java
rename to user/test/com/google/gwt/core/client/interop/HTMLElementConcreteNativeJsType.java
index 2c2ca7e..4bd6936 100644
--- a/user/test/com/google/gwt/core/client/interop/HTMLAnotherElement.java
+++ b/user/test/com/google/gwt/core/client/interop/HTMLElementConcreteNativeJsType.java
@@ -15,8 +15,9 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsType;
 
-@JsType(prototype = "HTMLElement")
-class HTMLAnotherElement {
+@JsType(namespace = JsPackage.GLOBAL, name = "HTMLElement", isNative = true)
+class HTMLElementConcreteNativeJsType {
 }
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 1c044d8..11d3fd5 100644
--- a/user/test/com/google/gwt/core/client/interop/JsExportTest.java
+++ b/user/test/com/google/gwt/core/client/interop/JsExportTest.java
@@ -18,10 +18,10 @@
 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;
 
+import jsinterop.annotations.JsType;
+
 /**
  * Tests JsExport.
  */
@@ -146,8 +146,7 @@
     return obj.getInstance();
   }-*/;
 
-  @JsExport
-  @JsNamespace("bar.foo.baz")
+  @JsType(namespace = "bar.foo.baz")
   static class MyExportedClassCorrectNamespace {
     public MyExportedClassCorrectNamespace() { }
   }
@@ -411,8 +410,8 @@
   public void testEnum_exportedFields() {
     assertEquals(1, getPublicStaticFinalFieldInEnum());
 
-    // explicitly marked @JsExport fields must be final
-    // but ones that are in a @JsExported class don't need to be final
+    // explicitly marked @JsType() fields must be final
+    // but ones that are in a @JsType()ed class don't need to be final
     assertEquals(2, getPublicStaticFieldInEnum());
   }
 
diff --git a/user/test/com/google/gwt/core/client/interop/JsFunctionTest.java b/user/test/com/google/gwt/core/client/interop/JsFunctionTest.java
index 8bb7025..242e0eb 100644
--- a/user/test/com/google/gwt/core/client/interop/JsFunctionTest.java
+++ b/user/test/com/google/gwt/core/client/interop/JsFunctionTest.java
@@ -138,7 +138,7 @@
     assertNotNull(c1);
     MyJsFunctionIdentityInterface c2 = (MyJsFunctionIdentityInterface) createFunction();
     assertNotNull(c2);
-    ElementLikeJsInterface i = (ElementLikeJsInterface) createFunction();
+    ElementLikeNativeInterface i = (ElementLikeNativeInterface) createFunction();
     assertNotNull(i);
     try {
       MyJsFunctionInterfaceImpl c3 = (MyJsFunctionInterfaceImpl) createFunction();
@@ -150,7 +150,7 @@
   }
 
   public void testCast_fromJsObject() {
-    ElementLikeJsInterface obj = (ElementLikeJsInterface) createObject();
+    ElementLikeNativeInterface obj = (ElementLikeNativeInterface) createObject();
     assertNotNull(obj);
     try {
       MyJsFunctionInterface c = (MyJsFunctionInterface) createObject();
@@ -185,9 +185,11 @@
     assertNotNull(c3);
     MyJsFunctionIdentityInterface c4 = (MyJsFunctionIdentityInterface) object;
     assertNotNull(c4);
+    ElementLikeNativeInterface c5 = (ElementLikeNativeInterface) object;
+    assertNotNull(c5);
     try {
-      ElementLikeJsInterface c5 = (ElementLikeJsInterface) object;
-      assertNotNull(c5);
+      HTMLElementConcreteNativeJsType c6 = (HTMLElementConcreteNativeJsType) object;
+      assertNotNull(c6);
       fail("ClassCastException should be caught.");
     } catch (ClassCastException cce) {
       // Expected.
@@ -206,7 +208,7 @@
     assertTrue(object instanceof MyJsFunctionIdentityInterface);
     assertTrue(object instanceof MyJsFunctionWithOnlyInstanceofReference);
     assertFalse(object instanceof MyJsFunctionInterfaceImpl);
-    assertTrue(object instanceof ElementLikeJsInterface);
+    assertTrue(object instanceof ElementLikeNativeInterface);
   }
 
   public void testInstanceOf_jsObject() {
@@ -215,7 +217,7 @@
     assertFalse(object instanceof MyJsFunctionIdentityInterface);
     assertFalse(object instanceof MyJsFunctionWithOnlyInstanceofReference);
     assertFalse(object instanceof MyJsFunctionInterfaceImpl);
-    assertTrue(object instanceof ElementLikeJsInterface);
+    assertTrue(object instanceof ElementLikeNativeInterface);
   }
 
   public void testInstanceOf_javaInstance() {
@@ -224,7 +226,8 @@
     assertTrue(object instanceof MyJsFunctionInterfaceImpl);
     assertTrue(object instanceof MyJsFunctionIdentityInterface);
     assertTrue(object instanceof MyJsFunctionWithOnlyInstanceofReference);
-    assertFalse(object instanceof ElementLikeJsInterface);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertFalse(object instanceof HTMLElementConcreteNativeJsType);
   }
 
   // uncomment when Java8 is supported.
diff --git a/user/test/com/google/gwt/core/client/interop/JsListInterface.java b/user/test/com/google/gwt/core/client/interop/JsListInterface.java
index 885647d..0976b77 100644
--- a/user/test/com/google/gwt/core/client/interop/JsListInterface.java
+++ b/user/test/com/google/gwt/core/client/interop/JsListInterface.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 @JsType
 interface JsListInterface {
diff --git a/user/test/com/google/gwt/core/client/interop/JsPropertyTest.java b/user/test/com/google/gwt/core/client/interop/JsPropertyTest.java
index 73c6a64..ce4dd93 100644
--- a/user/test/com/google/gwt/core/client/interop/JsPropertyTest.java
+++ b/user/test/com/google/gwt/core/client/interop/JsPropertyTest.java
@@ -17,12 +17,15 @@
 
 import static com.google.gwt.core.client.ScriptInjector.TOP_WINDOW;
 
+import static jsinterop.annotations.JsPackage.GLOBAL;
+
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.ScriptInjector;
-import com.google.gwt.core.client.js.JsProperty;
-import com.google.gwt.core.client.js.JsType;
 import com.google.gwt.junit.client.GWTTestCase;
 
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+
 /**
  * Tests JsProperty functionality.
  */
@@ -138,7 +141,7 @@
     assertEquals(12 + SET_X, obj.x);
   }
 
-  @JsType(prototype = "JsPropertyTest_MyNativeJsType")
+  @JsType(isNative = true, namespace = GLOBAL, name = "JsPropertyTest_MyNativeJsType")
   static class MyNativeJsType {
 
     public static int staticX;
@@ -196,7 +199,7 @@
     assertEquals(52, mc.getY());
   }
 
-  @JsType(prototype = "JsPropertyTest_MyNativeJsTypeInterface")
+  @JsType(isNative = true, namespace = GLOBAL, name = "JsPropertyTest_MyNativeJsTypeInterface")
   interface MyNativeJsTypeInterface {
     @JsProperty
     int getX();
@@ -318,7 +321,7 @@
     assertEquals(5 + SET_PARENT_X, ((OtherAccidentalImplementer) object).x);
   }
 
-  @JsType
+  @JsType(isNative = true)
   interface MyJsTypeInterfaceWithProtectedNames {
     String var();
 
@@ -341,7 +344,7 @@
     assertEquals("import2", obj.getImport());
   }
 
-  @JsType
+  @JsType(isNative = true)
   interface JsTypeIsProperty {
 
     @JsProperty
@@ -361,7 +364,7 @@
     assertFalse(object.isX());
   }
 
-  @JsType
+  @JsType(isNative = true)
   interface JsTypeGetProperty {
 
     @JsProperty
diff --git a/user/test/com/google/gwt/core/client/interop/JsTypeArrayTest.java b/user/test/com/google/gwt/core/client/interop/JsTypeArrayTest.java
index eb64663..b938e95 100644
--- a/user/test/com/google/gwt/core/client/interop/JsTypeArrayTest.java
+++ b/user/test/com/google/gwt/core/client/interop/JsTypeArrayTest.java
@@ -15,10 +15,11 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsProperty;
-import com.google.gwt.core.client.js.JsType;
 import com.google.gwt.junit.client.GWTTestCase;
 
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+
 /**
  * Tests JsType with array functionality.
  */
@@ -31,7 +32,7 @@
 
   /* MAKE SURE EACH TYPE IS ONLY USED ONCE PER TEST CASE */
 
-  @JsType
+  @JsType(isNative = true)
   interface SimpleJsTypeReturnFromNative { }
 
   public void testJsTypeArray_returnFromNative() {
@@ -44,21 +45,21 @@
     return [{}, {}];
   }-*/;
 
-  @JsType
-  interface SimpleJsTypeReturnFromNativeWithACall {
+  @JsType(isNative = true)
+  interface SimpleJsTypeReturnFromNativeWithAMethod {
     @JsProperty int getId();
   }
 
   public void testJsTypeArray_returnFromNativeWithACall() {
-    SimpleJsTypeReturnFromNativeWithACall[] array = returnJsTypeWithIdsFromNative();
+    SimpleJsTypeReturnFromNativeWithAMethod[] array = returnJsTypeWithIdsFromNative();
     assertEquals(2, array[1].getId());
   }
 
-  private native SimpleJsTypeReturnFromNativeWithACall[] returnJsTypeWithIdsFromNative() /*-{
+  private native SimpleJsTypeReturnFromNativeWithAMethod[] returnJsTypeWithIdsFromNative() /*-{
     return [{id:1}, {id:2}];
   }-*/;
 
-  @JsType
+  @JsType(isNative = true)
   interface SimpleJsTypeAsAField { }
 
   @JsType
@@ -79,7 +80,7 @@
     holder.arrayField = [{}, {}];
   }-*/;
 
-  @JsType
+  @JsType(isNative = true)
   interface SimpleJsTypeAsAParam { }
 
   @JsType
@@ -103,7 +104,7 @@
     holder.setArrayParam([{}, {}]);
   }-*/;
 
-  @JsType
+  @JsType(isNative = true)
   interface SimpleJsTypeReturnForMultiDimArray {
     @JsProperty int getId();
   }
diff --git a/user/test/com/google/gwt/core/client/interop/JsTypeRunnable.java b/user/test/com/google/gwt/core/client/interop/JsTypeRunnable.java
index 21bb672..316bf05 100644
--- a/user/test/com/google/gwt/core/client/interop/JsTypeRunnable.java
+++ b/user/test/com/google/gwt/core/client/interop/JsTypeRunnable.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
  * Causes the run() function of any implementor to be exported.
diff --git a/user/test/com/google/gwt/core/client/interop/JsTypeTest.java b/user/test/com/google/gwt/core/client/interop/JsTypeTest.java
index 14d9ae9..2173649 100644
--- a/user/test/com/google/gwt/core/client/interop/JsTypeTest.java
+++ b/user/test/com/google/gwt/core/client/interop/JsTypeTest.java
@@ -17,15 +17,19 @@
 
 import static com.google.gwt.core.client.ScriptInjector.TOP_WINDOW;
 
+import static jsinterop.annotations.JsPackage.GLOBAL;
+
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.ScriptInjector;
-import com.google.gwt.core.client.js.JsFunction;
-import com.google.gwt.core.client.js.JsProperty;
-import com.google.gwt.core.client.js.JsType;
 import com.google.gwt.junit.client.GWTTestCase;
 
 import java.util.Iterator;
 
+import jsinterop.annotations.JsFunction;
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+
 /**
  * Tests JsType functionality.
  */
@@ -38,8 +42,7 @@
 
   @Override
   protected void gwtSetUp() throws Exception {
-    ScriptInjector.fromString("function JsTypeTest_MyNativeJsTypeInterface() {}\n"
-        + "function JsTypeTest_MyNativeJsType() {}\n"
+    ScriptInjector.fromString("function JsTypeTest_MyNativeJsType() {}\n"
         + "JsTypeTest_MyNativeJsType.prototype.sum = "
         + "    function sum(bias) { return this.y + bias; };")
         .setWindow(TOP_WINDOW).inject();
@@ -123,7 +126,7 @@
     PlainParentType plainParentType = new PlainParentType();
     RevealedOverrideSubType revealedOverrideSubType = new RevealedOverrideSubType();
 
-    // PlainParentType is neither @JsExport or @JsType and so exports no functions.
+    // PlainParentType is neither @JsType or @JsType and so exports no functions.
     assertFalse(hasField(plainParentType, "run"));
 
     // RevealedOverrideSubType defines no functions itself, it only inherits them, but it still
@@ -141,7 +144,7 @@
     assertEquals(100, subclassInterface.publicMethodAlsoExposedAsNonJsMethod());
   }
 
-  @JsType(prototype = "JsTypeTest_MyNativeJsTypeInterface")
+  @JsType(isNative = true)
   interface MyNativeJsTypeInterface {
   }
 
@@ -150,20 +153,20 @@
 
   public void testCasts() {
     Object myClass;
-    assertNotNull(myClass = (ElementLikeJsInterface) createMyNativeJsTypeInterface());
-    assertNotNull(myClass = (MyNativeJsTypeInterface) createMyNativeJsTypeInterface());
-    assertNotNull(myClass = (HTMLElement) createNativeButton());
+    assertNotNull(myClass = (ElementLikeNativeInterface) createMyNativeJsType());
+    assertNotNull(myClass = (MyNativeJsTypeInterface) createMyNativeJsType());
+    assertNotNull(myClass = (HTMLElementConcreteNativeJsType) createNativeButton());
 
     try {
-      assertNotNull(myClass = (HTMLElement) createMyNativeJsTypeInterface());
+      assertNotNull(myClass = (HTMLElementConcreteNativeJsType) createMyNativeJsType());
       fail();
     } catch (ClassCastException cce) {
       // Expected.
     }
 
     // Test cross cast for native types
-    Object nativeButton1 = (HTMLElement) createNativeButton();
-    Object nativeButton2 = (HTMLAnotherElement) nativeButton1;
+    Object nativeButton1 = (HTMLElementConcreteNativeJsType) createNativeButton();
+    Object nativeButton2 = (HTMLElementAnotherConcreteNativeJsType) nativeButton1;
 
     /*
      * If the optimizations are turned on, it is possible for the compiler to dead-strip the
@@ -177,25 +180,32 @@
   /**
    * A test class marked with JsType but isn't referenced from any Java code except instanceof.
    */
-  @JsType(prototype = "JsTypeTest_MyNativeJsTypeInterface")
-  public interface MyJsInterfaceWithPrototypeAndOnlyInstanceofReference {
+  @JsType(isNative = true)
+  public interface MyNativeJsTypeInterfaceAndOnlyInstanceofReference {
+  }
+
+  /**
+   * A test class marked with JsType but isn't referenced from any Java code except instanceof.
+   */
+  @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "JsTypeTest_MyNativeJsType")
+  public static class AliasToMyNativeJsTypeWithOnlyInstanceofReference {
   }
 
   public void testInstanceOf_jsoWithProto() {
-    Object object = createMyNativeJsTypeInterface();
+    Object object = createMyNativeJsType();
 
     assertTrue(object instanceof Object);
-    assertFalse(object instanceof HTMLAnotherElement);
+    assertFalse(object instanceof HTMLElementAnotherConcreteNativeJsType);
     assertFalse(object instanceof HTMLButtonElement);
-    assertFalse(object instanceof HTMLElement);
+    assertFalse(object instanceof HTMLElementConcreteNativeJsType);
     assertFalse(object instanceof Iterator);
     assertTrue(object instanceof MyNativeJsTypeInterface);
     assertFalse(object instanceof MyNativeJsTypeInterfaceImpl);
-    assertTrue(object instanceof ElementLikeJsInterface);
-    assertFalse(object instanceof ElementLikeJsInterfaceImpl);
-    assertTrue(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
-    assertTrue(object instanceof MyJsInterfaceWithPrototypeAndOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsClassWithPrototypeAndOnlyInstanceofReference);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertFalse(object instanceof ElementLikeNativeInterfaceImpl);
+    assertFalse(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
+    assertTrue(object instanceof MyNativeJsTypeInterfaceAndOnlyInstanceofReference);
+    assertTrue(object instanceof AliasToMyNativeJsTypeWithOnlyInstanceofReference);
     assertFalse(object instanceof ConcreteJsType);
   }
 
@@ -203,17 +213,17 @@
     Object object = JavaScriptObject.createObject();
 
     assertTrue(object instanceof Object);
-    assertFalse(object instanceof HTMLAnotherElement);
+    assertFalse(object instanceof HTMLElementAnotherConcreteNativeJsType);
     assertFalse(object instanceof HTMLButtonElement);
-    assertFalse(object instanceof HTMLElement);
+    assertFalse(object instanceof HTMLElementConcreteNativeJsType);
     assertFalse(object instanceof Iterator);
-    assertFalse(object instanceof MyNativeJsTypeInterface);
+    assertTrue(object instanceof MyNativeJsTypeInterface);
     assertFalse(object instanceof MyNativeJsTypeInterfaceImpl);
-    assertTrue(object instanceof ElementLikeJsInterface);
-    assertFalse(object instanceof ElementLikeJsInterfaceImpl);
-    assertTrue(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsInterfaceWithPrototypeAndOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsClassWithPrototypeAndOnlyInstanceofReference);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertFalse(object instanceof ElementLikeNativeInterfaceImpl);
+    assertFalse(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
+    assertTrue(object instanceof MyNativeJsTypeInterfaceAndOnlyInstanceofReference);
+    assertFalse(object instanceof AliasToMyNativeJsTypeWithOnlyInstanceofReference);
     assertFalse(object instanceof ConcreteJsType);
   }
 
@@ -221,36 +231,36 @@
     Object object = createNativeButton();
 
     assertTrue(object instanceof Object);
-    assertTrue(object instanceof HTMLAnotherElement);
+    assertTrue(object instanceof HTMLElementAnotherConcreteNativeJsType);
     assertTrue(object instanceof HTMLButtonElement);
-    assertTrue(object instanceof HTMLElement);
+    assertTrue(object instanceof HTMLElementConcreteNativeJsType);
     assertFalse(object instanceof Iterator);
-    assertFalse(object instanceof MyNativeJsTypeInterface);
+    assertTrue(object instanceof MyNativeJsTypeInterface);
     assertFalse(object instanceof MyNativeJsTypeInterfaceImpl);
-    assertTrue(object instanceof ElementLikeJsInterface);
-    assertFalse(object instanceof ElementLikeJsInterfaceImpl);
-    assertTrue(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsInterfaceWithPrototypeAndOnlyInstanceofReference);
-    assertTrue(object instanceof MyJsClassWithPrototypeAndOnlyInstanceofReference);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertFalse(object instanceof ElementLikeNativeInterfaceImpl);
+    assertFalse(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
+    assertTrue(object instanceof MyNativeJsTypeInterfaceAndOnlyInstanceofReference);
+    assertFalse(object instanceof AliasToMyNativeJsTypeWithOnlyInstanceofReference);
     assertFalse(object instanceof ConcreteJsType);
   }
 
   public void testInstanceOf_implementsJsType() {
     // Foils type tightening.
-    Object object = alwaysTrue() ? new ElementLikeJsInterfaceImpl() : new Object();
+    Object object = alwaysTrue() ? new ElementLikeNativeInterfaceImpl() : new Object();
 
     assertTrue(object instanceof Object);
-    assertFalse(object instanceof HTMLAnotherElement);
+    assertFalse(object instanceof HTMLElementAnotherConcreteNativeJsType);
     assertFalse(object instanceof HTMLButtonElement);
-    assertFalse(object instanceof HTMLElement);
+    assertFalse(object instanceof HTMLElementConcreteNativeJsType);
     assertFalse(object instanceof Iterator);
-    assertFalse(object instanceof MyNativeJsTypeInterface);
+    assertTrue(object instanceof MyNativeJsTypeInterface);
     assertFalse(object instanceof MyNativeJsTypeInterfaceImpl);
-    assertTrue(object instanceof ElementLikeJsInterface);
-    assertTrue(object instanceof ElementLikeJsInterfaceImpl);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertTrue(object instanceof ElementLikeNativeInterfaceImpl);
     assertFalse(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsInterfaceWithPrototypeAndOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsClassWithPrototypeAndOnlyInstanceofReference);
+    assertTrue(object instanceof MyNativeJsTypeInterfaceAndOnlyInstanceofReference);
+    assertFalse(object instanceof AliasToMyNativeJsTypeWithOnlyInstanceofReference);
     assertFalse(object instanceof ConcreteJsType);
   }
 
@@ -259,17 +269,17 @@
     Object object = alwaysTrue() ? new MyNativeJsTypeInterfaceImpl() : new Object();
 
     assertTrue(object instanceof Object);
-    assertFalse(object instanceof HTMLAnotherElement);
+    assertFalse(object instanceof HTMLElementAnotherConcreteNativeJsType);
     assertFalse(object instanceof HTMLButtonElement);
-    assertFalse(object instanceof HTMLElement);
+    assertFalse(object instanceof HTMLElementConcreteNativeJsType);
     assertFalse(object instanceof Iterator);
     assertTrue(object instanceof MyNativeJsTypeInterface);
     assertTrue(object instanceof MyNativeJsTypeInterfaceImpl);
-    assertFalse(object instanceof ElementLikeJsInterface);
-    assertFalse(object instanceof ElementLikeJsInterfaceImpl);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertFalse(object instanceof ElementLikeNativeInterfaceImpl);
     assertFalse(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsInterfaceWithPrototypeAndOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsClassWithPrototypeAndOnlyInstanceofReference);
+    assertTrue(object instanceof MyNativeJsTypeInterfaceAndOnlyInstanceofReference);
+    assertFalse(object instanceof AliasToMyNativeJsTypeWithOnlyInstanceofReference);
     assertFalse(object instanceof ConcreteJsType);
   }
 
@@ -278,17 +288,17 @@
     Object object = alwaysTrue() ? new ConcreteJsType() : new Object();
 
     assertTrue(object instanceof Object);
-    assertFalse(object instanceof HTMLAnotherElement);
+    assertFalse(object instanceof HTMLElementAnotherConcreteNativeJsType);
     assertFalse(object instanceof HTMLButtonElement);
-    assertFalse(object instanceof HTMLElement);
+    assertFalse(object instanceof HTMLElementConcreteNativeJsType);
     assertFalse(object instanceof Iterator);
-    assertFalse(object instanceof MyNativeJsTypeInterface);
+    assertTrue(object instanceof MyNativeJsTypeInterface);
     assertFalse(object instanceof MyNativeJsTypeInterfaceImpl);
-    assertFalse(object instanceof ElementLikeJsInterface);
-    assertFalse(object instanceof ElementLikeJsInterfaceImpl);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertFalse(object instanceof ElementLikeNativeInterfaceImpl);
     assertFalse(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsInterfaceWithPrototypeAndOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsClassWithPrototypeAndOnlyInstanceofReference);
+    assertTrue(object instanceof MyNativeJsTypeInterfaceAndOnlyInstanceofReference);
+    assertFalse(object instanceof AliasToMyNativeJsTypeWithOnlyInstanceofReference);
     assertTrue(object instanceof ConcreteJsType);
   }
 
@@ -297,21 +307,21 @@
     Object object = alwaysTrue() ? new MyCustomHtmlButtonWithIterator() : new Object();
 
     assertTrue(object instanceof Object);
-    assertTrue(object instanceof HTMLAnotherElement);
+    assertTrue(object instanceof HTMLElementAnotherConcreteNativeJsType);
     assertTrue(object instanceof HTMLButtonElement);
-    assertTrue(object instanceof HTMLElement);
+    assertTrue(object instanceof HTMLElementConcreteNativeJsType);
     assertTrue(object instanceof Iterable);
-    assertFalse(object instanceof MyNativeJsTypeInterface);
+    assertTrue(object instanceof MyNativeJsTypeInterface);
     assertFalse(object instanceof MyNativeJsTypeInterfaceImpl);
-    assertFalse(object instanceof ElementLikeJsInterface);
-    assertFalse(object instanceof ElementLikeJsInterfaceImpl);
+    assertTrue(object instanceof ElementLikeNativeInterface);
+    assertFalse(object instanceof ElementLikeNativeInterfaceImpl);
     assertFalse(object instanceof MyJsInterfaceWithOnlyInstanceofReference);
-    assertFalse(object instanceof MyJsInterfaceWithPrototypeAndOnlyInstanceofReference);
-    assertTrue(object instanceof MyJsClassWithPrototypeAndOnlyInstanceofReference);
+    assertTrue(object instanceof MyNativeJsTypeInterfaceAndOnlyInstanceofReference);
+    assertFalse(object instanceof AliasToMyNativeJsTypeWithOnlyInstanceofReference);
     assertFalse(object instanceof ConcreteJsType);
   }
 
-  @JsType(prototype = "JsTypeTest_MyNativeJsType")
+  @JsType(isNative = true, namespace = GLOBAL, name = "JsTypeTest_MyNativeJsType")
   static class MyNativeJsType {
     @JsProperty
     public native int getY();
@@ -334,18 +344,18 @@
     assertTrue(myNativeJsTypeSubclass instanceof MyNativeJsTypeSubclass);
   }
 
-  @JsType(prototype = "testfoo.bar.MyNativeType")
-  interface MyNamespacedJsInterface {
+  @JsType(isNative = true, namespace = "testfoo.bar")
+  static class MyNamespacedNativeJsType {
   }
 
-  public void testInstanceOf_withNameSpace() {
+  public void _testInstanceOf_withNameSpace() {
     Object obj1 = createMyNamespacedJsInterface();
     Object obj2 = createMyWrongNamespacedJsInterface();
 
-    assertTrue(obj1 instanceof MyNamespacedJsInterface);
-    assertFalse(obj1 instanceof MyNativeJsTypeInterface);
+    assertTrue(obj1 instanceof MyNamespacedNativeJsType);
+    assertFalse(obj1 instanceof MyNativeJsType);
 
-    assertFalse(obj2 instanceof MyNamespacedJsInterface);
+    assertFalse(obj2 instanceof MyNamespacedNativeJsType);
   }
 
   public void testEnumeration() {
@@ -378,20 +388,20 @@
     return $doc.createElement("button");
   }-*/;
 
-  private static native Object createMyNativeJsTypeInterface() /*-{
-    return new $wnd.JsTypeTest_MyNativeJsTypeInterface();
+  private static native Object createMyNativeJsType() /*-{
+    return new $wnd.JsTypeTest_MyNativeJsType();
   }-*/;
 
   private static native Object createMyNamespacedJsInterface() /*-{
     $wnd.testfoo = {};
     $wnd.testfoo.bar = {};
-    $wnd.testfoo.bar.MyNativeType = function(){};
-    return new $wnd.testfoo.bar.MyNativeType();
+    $wnd.testfoo.bar.MyNamespacedNativeJsType = function(){};
+    return new $wnd.testfoo.bar.MyNamespacedNativeJsType();
   }-*/;
 
   private static native Object createMyWrongNamespacedJsInterface() /*-{
-    $wnd["testfoo.bar.MyNativeType"] = function(){};
-    return new $wnd['testfoo.bar.MyNativeType']();
+    $wnd["testfoo.bar.MyNamespacedNativeJsType"] = function(){};
+    return new $wnd['testfoo.bar.MyNamespacedNativeJsType']();
   }-*/;
 
   private static native boolean isUndefined(int value) /*-{
@@ -430,13 +440,13 @@
   static class SimpleJsTypeFieldClass implements SimpleJsTypeFieldInterface {
   }
 
-  @JsType
   static class SimpleJsTypeWithField {
+    @JsProperty
     public SimpleJsTypeFieldInterface someField;
   }
 
   public void testJsTypeField() {
-    new SimpleJsTypeFieldClass();
+    assertTrue(new SimpleJsTypeFieldClass() != new SimpleJsTypeFieldClass());
     SimpleJsTypeWithField holder = new SimpleJsTypeWithField();
     fillJsTypeField(holder);
     SimpleJsTypeFieldInterface someField = holder.someField;
@@ -447,7 +457,7 @@
     jstype.someField = {};
   }-*/;
 
-  @JsType
+  @JsType(isNative = true)
   interface InterfaceWithSingleJavaConcrete {
     int m();
   }
diff --git a/user/test/com/google/gwt/core/client/interop/MyClassExportsConstructor.java b/user/test/com/google/gwt/core/client/interop/MyClassExportsConstructor.java
index d7052af..9618dfc 100644
--- a/user/test/com/google/gwt/core/client/interop/MyClassExportsConstructor.java
+++ b/user/test/com/google/gwt/core/client/interop/MyClassExportsConstructor.java
@@ -15,15 +15,15 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsConstructor;
 
 /**
- * A test class that exhibits a variety of @JsExports on constructors.
+ * A test class that exports a constructor.
  */
 public class MyClassExportsConstructor {
   private int a;
 
-  @JsExport
+  @JsConstructor
   public MyClassExportsConstructor(int a) {
     this.a = a;
   }
diff --git a/user/test/com/google/gwt/core/client/interop/MyClassExportsMethod.java b/user/test/com/google/gwt/core/client/interop/MyClassExportsMethod.java
index 921b3aa..95e3989 100644
--- a/user/test/com/google/gwt/core/client/interop/MyClassExportsMethod.java
+++ b/user/test/com/google/gwt/core/client/interop/MyClassExportsMethod.java
@@ -15,13 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import static com.google.gwt.core.client.js.JsNamespace.GLOBAL;
+import static jsinterop.annotations.JsPackage.GLOBAL;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNamespace;
+import jsinterop.annotations.JsMethod;
 
 /**
- * A test class that exhibits a variety of @JsExports.
+ * A test class that exhibits a variety of @JsTypes.
  */
 public class MyClassExportsMethod {
   public static boolean calledFromCallMe1 = false;
@@ -30,30 +29,27 @@
   public static boolean calledFromCallMe4 = false;
   public static boolean calledFromCallMe5 = false;
 
-  @JsNamespace(GLOBAL)
-  @JsExport("exported")
+  @JsMethod(namespace = GLOBAL, name = "exported")
   public static void callMe1() {
     calledFromCallMe1 = true;
   }
 
-  @JsNamespace("exportNamespace")
-  @JsExport("exported")
+  @JsMethod(namespace = "exportNamespace", name = "exported")
   public static void callMe2(int i) {
     calledFromCallMe2 = true;
   }
 
-  @JsNamespace("exportNamespace")
-  @JsExport
+  @JsMethod(namespace = "exportNamespace")
   public static void callMe3(float f) {
     calledFromCallMe3 = true;
   }
 
-  @JsExport("exported")
+  @JsMethod(name = "exported")
   public static void callMe4(boolean f) {
     calledFromCallMe4 = true;
   }
 
-  @JsExport
+  @JsMethod
   public static void callMe5(byte f) {
     calledFromCallMe5 = true;
   }
@@ -83,21 +79,18 @@
   }
 
   // There should be no calls to this method from java.
-  @JsNamespace(GLOBAL)
-  @JsExport("callBar")
+  @JsMethod(namespace = GLOBAL)
   public static void callBar(A a) {
     a.bar();
   }
 
   // There should be a call to this method from java.
-  @JsNamespace(GLOBAL)
-  @JsExport("callFoo")
+  @JsMethod(namespace = GLOBAL)
   public static void callFoo(A a) {
     a.foo();
   }
 
-  @JsNamespace(GLOBAL)
-  @JsExport("newA")
+  @JsMethod(namespace = GLOBAL)
   public static A newA() {
     return new A();
   }
diff --git a/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithClinit.java b/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithClinit.java
index 99694d9..d378eab 100644
--- a/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithClinit.java
+++ b/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithClinit.java
@@ -17,7 +17,7 @@
 
 import static junit.framework.Assert.assertEquals;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsConstructor;
 
 class MyClassExportsMethodWithClinit {
 
@@ -30,7 +30,7 @@
     }
   }
 
-  @JsExport
+  @JsConstructor
   public MyClassExportsMethodWithClinit() {
     // ensure clinit() is called even when invoked from JS
     assertEquals(42, magicNumber);
diff --git a/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithoutReference.java b/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithoutReference.java
index 27ab623..a3a534f 100644
--- a/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithoutReference.java
+++ b/user/test/com/google/gwt/core/client/interop/MyClassExportsMethodWithoutReference.java
@@ -15,13 +15,13 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsMethod;
 
 /**
  * A test class exports a method but isn't referenced from any Java code.
  */
 public class MyClassExportsMethodWithoutReference {
-  @JsExport("onlyCalledFromJs")
+  @JsMethod(name = "onlyCalledFromJs")
   public static int callMe() {
     return 42;
   }
diff --git a/user/test/com/google/gwt/core/client/interop/MyClassWithEmptyNamespace.java b/user/test/com/google/gwt/core/client/interop/MyClassWithEmptyNamespace.java
index 77c5db2..560d787 100644
--- a/user/test/com/google/gwt/core/client/interop/MyClassWithEmptyNamespace.java
+++ b/user/test/com/google/gwt/core/client/interop/MyClassWithEmptyNamespace.java
@@ -15,17 +15,18 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNamespace;
+import jsinterop.annotations.JsConstructor;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
 
 /**
  * Class with empty namespace.
  */
-@JsNamespace("")
+@JsType(namespace = "")
 public class MyClassWithEmptyNamespace {
-  @JsExport
+  @JsProperty
   public static final int DAN = 82;
 
-  @JsExport
+  @JsConstructor
   public MyClassWithEmptyNamespace() { }
 }
diff --git a/user/test/com/google/gwt/core/client/interop/MyClassWithNamespace.java b/user/test/com/google/gwt/core/client/interop/MyClassWithNamespace.java
index ab4fa57..4ddc0f7 100644
--- a/user/test/com/google/gwt/core/client/interop/MyClassWithNamespace.java
+++ b/user/test/com/google/gwt/core/client/interop/MyClassWithNamespace.java
@@ -15,14 +15,14 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNamespace;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
 
 /**
  * Class with a namespace.
  */
-@JsNamespace("foobaz")
+@JsType(namespace = "foobaz")
 public class MyClassWithNamespace {
-  @JsExport
+  @JsProperty
   public static final int BAZ = 99;
 }
diff --git a/user/test/com/google/gwt/core/client/interop/MyClassWithNestedExportedClass.java b/user/test/com/google/gwt/core/client/interop/MyClassWithNestedExportedClass.java
index 6349a11..2c13781 100644
--- a/user/test/com/google/gwt/core/client/interop/MyClassWithNestedExportedClass.java
+++ b/user/test/com/google/gwt/core/client/interop/MyClassWithNestedExportedClass.java
@@ -15,8 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNamespace;
+import jsinterop.annotations.JsType;
 
 /**
  * Class with a nested exported class.
@@ -25,7 +24,7 @@
   /**
    * Exported nested class.
    */
-  @JsExport
+  @JsType
   public static class Inner {
     public static final int WOO = 99;
   }
@@ -33,8 +32,7 @@
   /**
    * Exported nested class with namespace.
    */
-  @JsNamespace("zoo")
-  @JsExport
+  @JsType(namespace = "zoo")
   public static class InnerWithNamespace {
     public static final int WOOZ = 999;
   }
@@ -42,7 +40,7 @@
   /**
    * Exported nested enum.
    */
-  @JsExport
+  @JsType
   public enum InnerEnum {
     AA, BB;
   }
diff --git a/user/test/com/google/gwt/core/client/interop/MyEnumWithJsType.java b/user/test/com/google/gwt/core/client/interop/MyEnumWithJsType.java
index 7cc67e8..6cce259 100644
--- a/user/test/com/google/gwt/core/client/interop/MyEnumWithJsType.java
+++ b/user/test/com/google/gwt/core/client/interop/MyEnumWithJsType.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
  * This enum is annotated as a @JsType.
diff --git a/user/test/com/google/gwt/core/client/interop/MyEnumWithSubclassGen.java b/user/test/com/google/gwt/core/client/interop/MyEnumWithSubclassGen.java
index dccda4d..36f5e9c 100644
--- a/user/test/com/google/gwt/core/client/interop/MyEnumWithSubclassGen.java
+++ b/user/test/com/google/gwt/core/client/interop/MyEnumWithSubclassGen.java
@@ -15,13 +15,11 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
- * This enum is annotated as @JsExport and has enumerations which cause subclass generation.
+ * This enum is annotated exported and has enumerations which cause subclass generation.
  */
-@JsExport
 @JsType
 public enum MyEnumWithSubclassGen {
 
diff --git a/user/test/com/google/gwt/core/client/interop/MyExportedClass.java b/user/test/com/google/gwt/core/client/interop/MyExportedClass.java
index 9c2d613..13e10f7 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedClass.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedClass.java
@@ -15,13 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
- * A test class that is annotated by @JsExport.
+ * A test class that is exported.
  */
-@JsExport
+@JsType
 public class MyExportedClass {
 
   public static final int EXPORTED_1 = 100;
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 f74c39f..66894a8 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithImplicitConstructor.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithImplicitConstructor.java
@@ -15,12 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsType;
 
 /**
- * A class which only has implicit default constructor and is annotated by "JsExport".
+ * A class which only has implicit default constructor and is exported.
  * Its default constructor is exported automatically.
  */
-@JsExport
+@JsType
 public class MyExportedClassWithImplicitConstructor {
 }
diff --git a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespace.java b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespace.java
index 16b9713..f29e5b4 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespace.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespace.java
@@ -15,14 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNamespace;
+import jsinterop.annotations.JsType;
 
 /**
  * Test namespace on a class.
  */
-@JsNamespace("foo")
-@JsExport
+@JsType(namespace = "foo")
 public class MyExportedClassWithNamespace {
   /**
    * Exported field.
diff --git a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespaceAndName.java b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespaceAndName.java
index 3d363be..40bc295 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespaceAndName.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNamespaceAndName.java
@@ -15,14 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNamespace;
+import jsinterop.annotations.JsType;
 
 /**
  * Test namespace on a class.
  */
-@JsNamespace("foo")
-@JsExport("boo")
+@JsType(namespace = "foo", name = "boo")
 public class MyExportedClassWithNamespaceAndName {
   /**
    * Exported field.
diff --git a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNestedExportedClass.java b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNestedExportedClass.java
index 5e77c60..626a073 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNestedExportedClass.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithNestedExportedClass.java
@@ -15,17 +15,17 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsType;
 
 /**
  * Exported class with a nested exported class.
  */
-@JsExport("Bloo")
+@JsType(name = "Bloo")
 public class MyExportedClassWithNestedExportedClass {
   /**
    * Exported nested class.
    */
-  @JsExport
+  @JsType
   public static class Inner {
     public static final int LOO = 99;
   }
diff --git a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithPackageNamespace.java b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithPackageNamespace.java
index 5841163..255afae 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedClassWithPackageNamespace.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedClassWithPackageNamespace.java
@@ -15,12 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsType;
 
 /**
  * An exported class.
  */
-@JsExport // Uses the namespace from the package
+@JsType // Uses the namespace from the package
 public class MyExportedClassWithPackageNamespace {
   /**
    * Exported field.
diff --git a/user/test/com/google/gwt/core/client/interop/MyExportedEnum.java b/user/test/com/google/gwt/core/client/interop/MyExportedEnum.java
index 9cffb76..e99cc7c 100644
--- a/user/test/com/google/gwt/core/client/interop/MyExportedEnum.java
+++ b/user/test/com/google/gwt/core/client/interop/MyExportedEnum.java
@@ -15,12 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsType;
 
 /**
- * This enum is annotated as @JsExport.
+ * This enum is annotated as @JsType.
  */
-@JsExport
+@JsType
 public enum MyExportedEnum {
   TEST1, TEST2;
 
@@ -30,8 +30,8 @@
 
   public static final int publicStaticFinalField = 1;
 
-  // explicitly marked @JsExport fields must be final
-  // but ones that are in a @JsExported class don't need to be final
+  // explicitly marked @JsProperty fields must be final
+  // but ones that are in an exported class doesn't need to be final
   public static int publicStaticField = 2;
 
   public final int publicFinalField = 3;
diff --git a/user/test/com/google/gwt/core/client/interop/MyJsClassWithPrototypeAndOnlyInstanceofReference.java b/user/test/com/google/gwt/core/client/interop/MyJsClassWithPrototypeAndOnlyInstanceofReference.java
deleted file mode 100644
index d4a013d..0000000
--- a/user/test/com/google/gwt/core/client/interop/MyJsClassWithPrototypeAndOnlyInstanceofReference.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.core.client.interop;
-
-import com.google.gwt.core.client.js.JsType;
-
-/**
- * A test class marked with JsType but isn't referenced from any Java code except instanceof.
- */
-@JsType(prototype = "HTMLButtonElement")
-public class MyJsClassWithPrototypeAndOnlyInstanceofReference {
-}
diff --git a/user/test/com/google/gwt/core/client/interop/MyJsFunctionIdentityInterface.java b/user/test/com/google/gwt/core/client/interop/MyJsFunctionIdentityInterface.java
index 47cb2a7..616ecdd 100644
--- a/user/test/com/google/gwt/core/client/interop/MyJsFunctionIdentityInterface.java
+++ b/user/test/com/google/gwt/core/client/interop/MyJsFunctionIdentityInterface.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsFunction;
+import jsinterop.annotations.JsFunction;
 
 /**
  * A JsFunction interface, which is used to test the SAM function that returns this.
diff --git a/user/test/com/google/gwt/core/client/interop/MyJsFunctionInterface.java b/user/test/com/google/gwt/core/client/interop/MyJsFunctionInterface.java
index 9259272..e1bc958 100644
--- a/user/test/com/google/gwt/core/client/interop/MyJsFunctionInterface.java
+++ b/user/test/com/google/gwt/core/client/interop/MyJsFunctionInterface.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsFunction;
+import jsinterop.annotations.JsFunction;
 
 /**
  * A functional interface annotated by JsFunction.
diff --git a/user/test/com/google/gwt/core/client/interop/MyJsFunctionWithOnlyInstanceofReference.java b/user/test/com/google/gwt/core/client/interop/MyJsFunctionWithOnlyInstanceofReference.java
index 4c5b951..7cf0369 100644
--- a/user/test/com/google/gwt/core/client/interop/MyJsFunctionWithOnlyInstanceofReference.java
+++ b/user/test/com/google/gwt/core/client/interop/MyJsFunctionWithOnlyInstanceofReference.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsFunction;
+import jsinterop.annotations.JsFunction;
 
 /**
  * A functional interface annotated by JsFunction that is only referenced by instanceof.
diff --git a/user/test/com/google/gwt/core/client/interop/MyJsInterfaceWithOnlyInstanceofReference.java b/user/test/com/google/gwt/core/client/interop/MyJsInterfaceWithOnlyInstanceofReference.java
index acf2863..60f838b 100644
--- a/user/test/com/google/gwt/core/client/interop/MyJsInterfaceWithOnlyInstanceofReference.java
+++ b/user/test/com/google/gwt/core/client/interop/MyJsInterfaceWithOnlyInstanceofReference.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
  * A test class marked with JsType but isn't referenced from any Java code except instanceof.
diff --git a/user/test/com/google/gwt/core/client/interop/MyJsTypeThatUsesLongType.java b/user/test/com/google/gwt/core/client/interop/MyJsTypeThatUsesLongType.java
index 374e40e..1b2ce5b 100644
--- a/user/test/com/google/gwt/core/client/interop/MyJsTypeThatUsesLongType.java
+++ b/user/test/com/google/gwt/core/client/interop/MyJsTypeThatUsesLongType.java
@@ -15,14 +15,12 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
  * A class with a method that takes and returns longs.
  */
 @JsType
-@JsExport
 public class MyJsTypeThatUsesLongType {
 
   public long addLong(long a, long b) {
diff --git a/user/test/com/google/gwt/core/client/interop/MyOtherJsFunctionInterface.java b/user/test/com/google/gwt/core/client/interop/MyOtherJsFunctionInterface.java
index 4a5f6ed..efdb9c8 100644
--- a/user/test/com/google/gwt/core/client/interop/MyOtherJsFunctionInterface.java
+++ b/user/test/com/google/gwt/core/client/interop/MyOtherJsFunctionInterface.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsFunction;
+import jsinterop.annotations.JsFunction;
 
 /**
  * A @JsFunction interface.
diff --git a/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticField.java b/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticField.java
index 4275644..c15c3e7 100644
--- a/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticField.java
+++ b/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticField.java
@@ -15,20 +15,20 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNoExport;
+import jsinterop.annotations.JsIgnore;
+import jsinterop.annotations.JsType;
 
 /**
  * Test access to static field from JS, ensuring clinit run.
  */
-@JsExport
+@JsType
 public class StaticInitializerStaticField {
   public static final Object EXPORTED_1 = new Object();
 
   // Not final
   public static Object EXPORTED_2 = new Object();
 
-  @JsNoExport
+  @JsIgnore
   public static final Object NOT_EXPORTED_1 = new Object();
 
   // Not static
@@ -46,7 +46,7 @@
   /**
    * Test interface that export a static field.
    */
-  @JsExport
+  @JsType
   public interface InterfaceWithField {
     Object STATIC = new Object();
   }
diff --git a/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticMethod.java b/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticMethod.java
index 6560684..b6fe3a8 100644
--- a/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticMethod.java
+++ b/user/test/com/google/gwt/core/client/interop/StaticInitializerStaticMethod.java
@@ -15,13 +15,13 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsNoExport;
+import jsinterop.annotations.JsIgnore;
+import jsinterop.annotations.JsType;
 
 /**
  * Test access to static field from JS through exported static method.
  */
-@JsExport
+@JsType
 public class StaticInitializerStaticMethod {
   private static StaticInitializerStaticMethod STATIC = new StaticInitializerStaticMethod();
 
@@ -29,7 +29,7 @@
     return STATIC;
   }
 
-  @JsNoExport
+  @JsIgnore
   public static StaticInitializerStaticMethod notExported_1() {
     return STATIC;
   }
diff --git a/user/test/com/google/gwt/core/client/interop/StaticInitializerVirtualMethod.java b/user/test/com/google/gwt/core/client/interop/StaticInitializerVirtualMethod.java
index 2cd3676..cf5ac6c 100644
--- a/user/test/com/google/gwt/core/client/interop/StaticInitializerVirtualMethod.java
+++ b/user/test/com/google/gwt/core/client/interop/StaticInitializerVirtualMethod.java
@@ -15,13 +15,11 @@
  */
 package com.google.gwt.core.client.interop;
 
-import com.google.gwt.core.client.js.JsExport;
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsType;
 
 /**
  * Test access to static field from JS through exported virtual method.
  */
-@JsExport
 @JsType
 public class StaticInitializerVirtualMethod {
   private static StaticInitializerVirtualMethod STATIC = new StaticInitializerVirtualMethod();
diff --git a/user/test/com/google/gwt/core/client/interop/package-info.java b/user/test/com/google/gwt/core/client/interop/package-info.java
index 19705dd..11e1959 100644
--- a/user/test/com/google/gwt/core/client/interop/package-info.java
+++ b/user/test/com/google/gwt/core/client/interop/package-info.java
@@ -13,6 +13,6 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-@com.google.gwt.core.client.js.JsNamespace("woo")
+@jsinterop.annotations.JsPackage(namespace = "woo")
 @com.google.gwt.util.PreventSpuriousRebuilds
 package com.google.gwt.core.client.interop;
diff --git a/user/test/com/google/gwt/core/client/interop/subpackage/MyNestedExportedClassSansPackageNamespace.java b/user/test/com/google/gwt/core/client/interop/subpackage/MyNestedExportedClassSansPackageNamespace.java
index 456192d..1ecd978 100644
--- a/user/test/com/google/gwt/core/client/interop/subpackage/MyNestedExportedClassSansPackageNamespace.java
+++ b/user/test/com/google/gwt/core/client/interop/subpackage/MyNestedExportedClassSansPackageNamespace.java
@@ -13,16 +13,13 @@
  */
 package com.google.gwt.core.client.interop.subpackage;
 
-import com.google.gwt.core.client.js.JsExport;
+import jsinterop.annotations.JsType;
 
 /**
  * An exported class that is also not subject to the package namespace specified in its parent
  * package.
  */
-@JsExport // Does *not* uses the namespace from the parent package
+@JsType // Does *not* uses the namespace from the parent package
 public class MyNestedExportedClassSansPackageNamespace {
-  /**
-   * Exported field.
-   */
   public final static int WOO = 1001;
 }
diff --git a/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java b/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
index 4d9743d..1891953 100644
--- a/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
+++ b/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
@@ -16,12 +16,13 @@
 package com.google.gwt.dev.jjs.optimized;
 
 import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.js.JsType;
 import com.google.gwt.junit.DoNotRunWith;
 import com.google.gwt.junit.Platform;
 
 import java.util.Random;
 
+import jsinterop.annotations.JsType;
+
 /**
  * Tests cast checks are optimized out when cast checking is disabled.
  */
@@ -30,7 +31,7 @@
 
   private static class TestObject { }
 
-  @JsType(prototype = "Test")
+  @JsType(isNative = true)
   private interface JsTypeTestInterface { }
 
   private interface DualJsoTestInterface { }
diff --git a/user/test/com/google/gwt/dev/jjs/optimized/OptimizationTestBase.java b/user/test/com/google/gwt/dev/jjs/optimized/OptimizationTestBase.java
index 5677c36..9465ae3 100644
--- a/user/test/com/google/gwt/dev/jjs/optimized/OptimizationTestBase.java
+++ b/user/test/com/google/gwt/dev/jjs/optimized/OptimizationTestBase.java
@@ -48,7 +48,7 @@
     for (char toBeEscaped : ".[]+".toCharArray()) {
       pattern = pattern.replace("" + toBeEscaped, "\\" + toBeEscaped);
     }
-    pattern = pattern.replace("<obf>", "\\w+");
+    pattern = pattern.replace("<obf>", "[\\w$_]+");
     return pattern + ";?";
   }
 }
diff --git a/user/test/com/google/gwt/dev/jjs/test/CompilerMiscRegressionTest.java b/user/test/com/google/gwt/dev/jjs/test/CompilerMiscRegressionTest.java
index a21dbc3..311abbd 100644
--- a/user/test/com/google/gwt/dev/jjs/test/CompilerMiscRegressionTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/CompilerMiscRegressionTest.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.dev.jjs.test;
 
-import com.google.gwt.core.client.js.JsType;
 import com.google.gwt.dev.jjs.test.overrides.package1.Caller;
 import com.google.gwt.dev.jjs.test.overrides.package1.ClassExposingM;
 import com.google.gwt.dev.jjs.test.overrides.package1.SomeParent;
@@ -36,6 +35,7 @@
 import java.util.Map;
 
 import javaemul.internal.annotations.DoNotInline;
+import jsinterop.annotations.JsType;
 
 /**
  * Tests Miscelaneous fixes.
diff --git a/user/test/com/google/gwt/uibinder/test/client/TestJsElementType.java b/user/test/com/google/gwt/uibinder/test/client/TestJsElementType.java
index c5728b3..3fca08c 100644
--- a/user/test/com/google/gwt/uibinder/test/client/TestJsElementType.java
+++ b/user/test/com/google/gwt/uibinder/test/client/TestJsElementType.java
@@ -15,13 +15,13 @@
  */
 package com.google.gwt.uibinder.test.client;
 
-import com.google.gwt.core.client.js.JsProperty;
-import com.google.gwt.core.client.js.JsType;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
 
 /**
  * Test class for checking UiBinder casting to a JsType like this one.
  */
-@JsType
+@JsType(isNative = true)
 public interface TestJsElementType {
   @JsProperty
   String getTagName();
