diff --git a/user/src/com/google/gwt/editor/rebind/model/ModelUtils.java b/user/src/com/google/gwt/editor/rebind/model/ModelUtils.java
index ae3c397..e9b5dac 100644
--- a/user/src/com/google/gwt/editor/rebind/model/ModelUtils.java
+++ b/user/src/com/google/gwt/editor/rebind/model/ModelUtils.java
@@ -59,7 +59,7 @@
       return (T) maybeParameterized.isRawType().getBaseType();
     }
     if (maybeParameterized.isWildcard() != null) {
-      return (T) maybeParameterized.isWildcard().getBaseType();
+      return ensureBaseType((T) maybeParameterized.isWildcard().getBaseType());
     }
     return maybeParameterized;
   }
diff --git a/user/src/com/google/web/bindery/autobean/gwt/rebind/AutoBeanFactoryGenerator.java b/user/src/com/google/web/bindery/autobean/gwt/rebind/AutoBeanFactoryGenerator.java
index 9fef5da..3505af2 100644
--- a/user/src/com/google/web/bindery/autobean/gwt/rebind/AutoBeanFactoryGenerator.java
+++ b/user/src/com/google/web/bindery/autobean/gwt/rebind/AutoBeanFactoryGenerator.java
@@ -481,6 +481,9 @@
     sw.indent();
     for (AutoBeanMethod method : type.getMethods()) {
       JMethod jmethod = method.getMethod();
+      if (jmethod.isStatic()) {
+        continue;
+      }
       String methodName = jmethod.getName();
       JParameter[] parameters = jmethod.getParameters();
       if (isObjectMethodImplementedByShim(jmethod)) {
@@ -508,9 +511,9 @@
            * The getter call will ensure that any non-value return type is
            * definitely wrapped by an AutoBean instance.
            */
-          sw.println("%s toReturn = %s.this.getWrapped().%s();", ModelUtils
-              .getQualifiedBaseSourceName(jmethod.getReturnType()), type.getSimpleSourceName(),
-              methodName);
+          String getValueType = ModelUtils.getQualifiedBaseSourceName(jmethod.getReturnType());
+          sw.println("%s toReturn = (%s) %s.this.getWrapped().%s();", getValueType, getValueType,
+              type.getSimpleSourceName(), methodName);
 
           // Non-value types might need to be wrapped
           writeReturnWrapper(sw, type, method);
@@ -539,10 +542,10 @@
             sw.println("%s.this.call(\"%s\", null%s %s);", type.getSimpleSourceName(), methodName,
                 arguments.length() > 0 ? "," : "", arguments);
           } else {
-            // Type toReturn = getWrapped().doFoo(params);
-            sw.println("%s toReturn = %s.this.getWrapped().%s(%s);", ModelUtils.ensureBaseType(
-                jmethod.getReturnType()).getQualifiedSourceName(), type.getSimpleSourceName(),
-                methodName, arguments);
+            // Type toReturn = (Type) getWrapped().doFoo(params);
+            String callValueType = ModelUtils.ensureBaseType(jmethod.getReturnType()).getQualifiedSourceName();
+            sw.println("%s toReturn = (%s) %s.this.getWrapped().%s(%s);", callValueType, callValueType,
+                type.getSimpleSourceName(), methodName, arguments);
             // Non-value types might need to be wrapped
             writeReturnWrapper(sw, type, method);
             // call("doFoo", toReturn, params);
diff --git a/user/src/com/google/web/bindery/autobean/gwt/rebind/model/AutoBeanFactoryModel.java b/user/src/com/google/web/bindery/autobean/gwt/rebind/model/AutoBeanFactoryModel.java
index 5981c2f..0701e3a 100644
--- a/user/src/com/google/web/bindery/autobean/gwt/rebind/model/AutoBeanFactoryModel.java
+++ b/user/src/com/google/web/bindery/autobean/gwt/rebind/model/AutoBeanFactoryModel.java
@@ -150,7 +150,7 @@
           continue;
         }
       } else {
-        poison("Unexpecetd parameters in method %s", method.getName());
+        poison("Unexpected parameters in method %s", method.getName());
         continue;
       }
 
