diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JRealClassType.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JRealClassType.java
index 13329a8..955146f 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JRealClassType.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JRealClassType.java
@@ -294,7 +294,13 @@
    *         <code>false</code> otherwise
    */
   public boolean isDefaultInstantiable() {
-    if (isInterface() != null) {
+    if (isInterface() != null || isAbstract()) {
+      return false;
+    }
+    if (isMemberType() && !isStatic()) {
+      return false;
+    }
+    if (isLocalType()) {
       return false;
     }
     if (getConstructors().length == 0) {
diff --git a/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java b/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java
index 19a2d59..b4ed8af 100644
--- a/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java
+++ b/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java
@@ -43,6 +43,11 @@
 
   private static final String GWT_RUNNER_NAME = GWTRunner.class.getName();
 
+  private static String getPackagePrefix(JClassType classType) {
+    String name = classType.getPackage().getName();
+    return (name.length() == 0) ? name : (name + '.');
+  }
+
   /**
    * Create a new type that satisfies the rebind request.
    */
@@ -81,7 +86,7 @@
 
     // Get the stub class name, and see if its source file exists.
     //
-    String generatedClass = requestedClass.getSimpleSourceName() + "Impl";
+    String generatedClass = requestedClass.getName().replace('.', '_') + "Impl";
     String packageName = requestedClass.getPackage().getName();
     String qualifiedStubClassName = packageName + "." + generatedClass;
 
@@ -89,7 +94,7 @@
         generatedClass, GWT_RUNNER_NAME);
 
     if (sourceWriter != null) {
-      JClassType[] allTestTypes = getAllTestTypes(context.getTypeOracle());
+      JClassType[] allTestTypes = getAllPossibleTestTypes(context.getTypeOracle());
       Set<String> testClasses = getTestTypesForModule(logger, moduleName,
           allTestTypes);
       writeCreateNewTestCaseMethod(testClasses, sourceWriter);
@@ -99,7 +104,7 @@
     return qualifiedStubClassName;
   }
 
-  private JClassType[] getAllTestTypes(TypeOracle typeOracle) {
+  private JClassType[] getAllPossibleTestTypes(TypeOracle typeOracle) {
     JClassType gwtTestType = typeOracle.findType(GWTTestCase.class.getName());
     if (gwtTestType != null) {
       return gwtTestType.getSubtypes();
@@ -133,7 +138,8 @@
         continue;
       }
 
-      String className = classType.getQualifiedSourceName();
+      String className = getPackagePrefix(classType)
+          + classType.getName().replace('.', '$');
 
       try {
         Class<?> testClass = Class.forName(className);
@@ -150,7 +156,7 @@
             e);
         continue;
       }
-      testClasses.add(className);
+      testClasses.add(classType.getQualifiedSourceName());
     }
     return testClasses;
   }
