diff --git a/user/src/com/google/gwt/event/shared/HandlerManager.java b/user/src/com/google/gwt/event/shared/HandlerManager.java
index 34a6713..4123dab 100644
--- a/user/src/com/google/gwt/event/shared/HandlerManager.java
+++ b/user/src/com/google/gwt/event/shared/HandlerManager.java
@@ -204,16 +204,6 @@
   }
 
   /**
-   * Are there handlers in this manager listening to the given event type?
-   * 
-   * @param type the event type
-   * @return are handlers listening on the given event type
-   */
-  public boolean isEventHandled(Type<?> type) {
-    return getHandlerCount(type) > 0;
-  }
-
-  /**
    * Removes the given handler from the specified event type. Normally,
    * applications should call {@link HandlerRegistration#removeHandler()}
    * instead.
diff --git a/user/src/com/google/gwt/event/shared/HasHandlers.java b/user/src/com/google/gwt/event/shared/HasHandlers.java
index 39be193..a87cf94 100644
--- a/user/src/com/google/gwt/event/shared/HasHandlers.java
+++ b/user/src/com/google/gwt/event/shared/HasHandlers.java
@@ -15,23 +15,12 @@
  */
 package com.google.gwt.event.shared;
 
-import com.google.gwt.event.shared.GwtEvent.Type;
 
 /**
  * An object that implements this interface has a collection of event handlers
  * associated with it.
  */
 public interface HasHandlers {
-
-  /**
-   * Determines whether the there are any handlers of the given type. This may
-   * be used to avoid creating events for which there are no handlers.
-   * 
-   * @param type the type of event to be queried
-   * @return <code>true</code> if there are any handlers for this event type
-   */
-  boolean isEventHandled(Type<?> type);
-
   /**
    * Fires the given event to all the appropriate handlers.
    * 
diff --git a/user/src/com/google/gwt/user/client/impl/HistoryImpl.java b/user/src/com/google/gwt/user/client/impl/HistoryImpl.java
index e25bbf9..b4a05d6 100644
--- a/user/src/com/google/gwt/user/client/impl/HistoryImpl.java
+++ b/user/src/com/google/gwt/user/client/impl/HistoryImpl.java
@@ -24,7 +24,6 @@
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.event.shared.HasHandlers;
-import com.google.gwt.event.shared.GwtEvent.Type;
 
 /**
  * Native implementation associated with
@@ -73,10 +72,6 @@
 
   public abstract boolean init();
 
-  public boolean isEventHandled(Type<?> type) {
-    return handlers.isEventHandled(type);
-  }
-
   public final void newItem(String historyToken, boolean issueEvent) {
     historyToken = (historyToken == null) ? "" : historyToken;
     if (!historyToken.equals(getToken())) {
diff --git a/user/src/com/google/gwt/user/client/ui/Widget.java b/user/src/com/google/gwt/user/client/ui/Widget.java
index e0f3676..2bcf44a 100644
--- a/user/src/com/google/gwt/user/client/ui/Widget.java
+++ b/user/src/com/google/gwt/user/client/ui/Widget.java
@@ -72,10 +72,6 @@
     return attached;
   }
 
-  public boolean isEventHandled(GwtEvent.Type<?> type) {
-    return handlerManager != null && handlerManager.isEventHandled(type);
-  }
-
   public void onBrowserEvent(Event event) {
     switch (DOM.eventGetType(event)) {
       case Event.ONMOUSEOVER:
diff --git a/user/test/com/google/gwt/event/shared/HandlerManagerTest.java b/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
index 480db2f..48bc156 100644
--- a/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
+++ b/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
@@ -32,7 +32,6 @@
     addHandlers(manager);
   }
 
-  @SuppressWarnings("deprecation")
   private void addHandlers(HandlerManager manager) {
     manager.addHandler(MouseDownEvent.getType(), mouse1);
     manager.addHandler(MouseDownEvent.getType(), mouse2);
@@ -281,12 +280,9 @@
         add(this);
       }
     };
-    HandlerRegistration reg0 = manager.addHandler(MouseDownEvent.getType(),
-        handler0);
-    HandlerRegistration reg1 = manager.addHandler(MouseDownEvent.getType(),
-        handler1);
-    HandlerRegistration reg2 = manager.addHandler(MouseDownEvent.getType(),
-        handler2);
+    manager.addHandler(MouseDownEvent.getType(), handler0);
+    manager.addHandler(MouseDownEvent.getType(), handler1);
+    manager.addHandler(MouseDownEvent.getType(), handler2);
 
     // Fire the event
     reset();
diff --git a/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java b/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java
index ca2c335..9c68c69 100644
--- a/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java
+++ b/user/test/com/google/gwt/user/datepicker/client/DateChangeEventTest.java
@@ -21,7 +21,6 @@
 import com.google.gwt.event.shared.GwtEvent;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.event.shared.GwtEvent.Type;
 import com.google.gwt.user.client.ui.DateValueChangeTester;
 import com.google.gwt.user.client.ui.HasValue;
 
@@ -55,10 +54,6 @@
       return value;
     }
 
-    public boolean isEventHandled(Type<?> type) {
-      return handlers.isEventHandled(type);
-    }
-
     public void setValue(Date value) {
       setValue(value, false);
     }
