diff --git a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
index a2fd077..ecce7e6 100644
--- a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
+++ b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
@@ -223,9 +223,8 @@
     writer.newline();
     // Create the anonymous class extending the raw type to avoid errors under the new JDT
     // if the type has a wildcard.
-    writer.write("final %1$s %2$s = (%1$s) new %3$s() {",
-        handlerType.getParameterizedQualifiedSourceName(), handlerVarName,
-        handlerType.getQualifiedSourceName());
+    writer.write("final %1$s %2$s = new %1$s() {",
+        handlerType.getQualifiedSourceName(), handlerVarName);
     writer.indent();
     writer.write("public void %1$s(%2$s event) {", methods[0].getName(),
         // Use the event raw type to match the signature as we are using implementing the raw type
@@ -303,7 +302,10 @@
           continue;
         }
 
-        JType methodParam = parameters[0].getType();
+        JClassType methodParam = parameters[0].getType().isClassOrInterface();
+        if (methodParam == null) {
+          continue;
+        }
 
         if (handlerType.equals(methodParam)) {
 
@@ -330,16 +332,12 @@
          * This is done as an alternative handler method to preserve the
          * original logic.
          */
-        JParameterizedType ptype = handlerType.isParameterized();
-        if (ptype != null) {
-          // Alt 1: TableHandler<String> => TableHandler
-          if (methodParam.equals(ptype.getRawType())) {
-            alternativeHandlerMethod = method;
-          }
-
+        if (handlerType.isAssignableFrom(methodParam)) {
+          // Alt 1: TableHandler<String> => TableHandler or TableHandler<?> => TableHandler<String>
+          alternativeHandlerMethod = method;
+        } else if (handlerType.isParameterized() != null && objectType.isGenericType() != null) {
           // Alt 2: TableHandler<String> => TableHandler<T>
-          if (objectType.isGenericType() != null
-              && methodParam.getErasedType().equals(ptype.getRawType())) {
+          if (methodParam.getErasedType().equals(handlerType.isParameterized().getErasedType())) {
             // Unfortunately this is overly lenient but it was always like this
             alternativeHandlerMethod2 = method;
           }
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
index 84f1d77..e389f98 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
@@ -52,6 +52,7 @@
 import com.google.gwt.user.client.ui.HasHTML;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.IntegerBox;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.MenuBar;
@@ -201,6 +202,7 @@
   @UiField(provided = true) @SuppressWarnings("rawtypes")
   Renderer doubleRenderer = DoubleRenderer.instance();
   @UiField ValueLabel<Double> myValueLabel;
+  @UiField IntegerBox myIntegerBox;
   @UiField DoubleBox myDoubleBox;
   @SuppressWarnings("rawtypes")
   @UiField ValueChangeWidget<List> myValueChangeWidget;
@@ -219,6 +221,9 @@
     this.doubleValueChangeEvent = event;
   }
 
+  @UiHandler({"myIntegerBox", "myDoubleBox"})
+  void onWildcardValueChange_Multi(ValueChangeEvent<?> event) { /* EMPTY */}
+
   @UiHandler("myValueChangeWidget")
   void onWildcardValueChange(ValueChangeEvent<?> event) { /* EMPTY */}
 
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
index 5eea996..8ef7529 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
@@ -691,6 +691,7 @@
 
   <gwt3:google.gwt.user.client.ui.ValueLabel ui:field='myValueLabel' renderer='{doubleRenderer}' />
 
+  <gwt:IntegerBox ui:field='myIntegerBox'  />
   <gwt:DoubleBox ui:field='myDoubleBox'  />
   <demo:ValueChangeWidget ui:field='myValueChangeWidget' />
   <demo:ValueChangeWidget ui:field='myValueChangeWidget_raw' />
