diff --git a/tools/api-checker/config/gwt25_26userApi.conf b/tools/api-checker/config/gwt25_26userApi.conf
index 4528771..ce95c2e 100644
--- a/tools/api-checker/config/gwt25_26userApi.conf
+++ b/tools/api-checker/config/gwt25_26userApi.conf
@@ -150,3 +150,7 @@
 
 # Removed deprecated benchmark infra
 com.google.gwt.benchmarks.client MISSING
+
+# Split BaseListenerWrapper
+com.google.gwt.user.client.BaseListenerWrapper::getSource(Lcom/google/gwt/event/shared/GwtEvent;) MISSING
+com.google.gwt.user.client.BaseListenerWrapper::setSource(Lcom/google/gwt/user/client/ui/Widget;) MISSING
diff --git a/user/src/com/google/gwt/user/client/BaseListenerWrapper.java b/user/src/com/google/gwt/user/client/BaseListenerWrapper.java
index 059e3f5..a7032cf 100644
--- a/user/src/com/google/gwt/user/client/BaseListenerWrapper.java
+++ b/user/src/com/google/gwt/user/client/BaseListenerWrapper.java
@@ -20,14 +20,9 @@
 import com.google.gwt.event.logical.shared.CloseHandler;
 import com.google.gwt.event.logical.shared.ResizeEvent;
 import com.google.gwt.event.logical.shared.ResizeHandler;
-import com.google.gwt.event.logical.shared.ValueChangeEvent;
-import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.event.shared.EventHandler;
-import com.google.gwt.event.shared.GwtEvent;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.GwtEvent.Type;
-import com.google.gwt.user.client.Event.NativePreviewEvent;
-import com.google.gwt.user.client.ui.Widget;
 
 /**
  * Legacy listener support hierarchy root.
@@ -39,57 +34,11 @@
  * code in one place, for easy deletion when Listener methods are deleted.
  * 
  * @param <T> listener type to be wrapped
- * @deprecated will be removed in GWT 2.0 with the handler listeners themselves
+ * @deprecated will be removed in GWT 2.7 with the handler listeners themselves
  */
 @Deprecated
 public abstract class BaseListenerWrapper<T> implements EventHandler {
 
-  static class NativePreview extends BaseListenerWrapper<EventPreview>
-      implements Event.NativePreviewHandler {
-    @Deprecated
-    public static void add(EventPreview listener) {
-      Event.addNativePreviewHandler(new NativePreview(listener));
-    }
-
-    public static void remove(EventPreview listener) {
-      baseRemove(Event.handlers, listener, NativePreviewEvent.getType());
-    }
-
-    private NativePreview(EventPreview listener) {
-      super(listener);
-    }
-
-    public void onPreviewNativeEvent(NativePreviewEvent event) {
-      // The legacy EventHandler should only fire if it is on the top of the
-      // stack (ie. the last one added).
-      if (event.isFirstHandler()) {
-        if (!listener.onEventPreview(Event.as(event.getNativeEvent()))) {
-          event.cancel();
-        }
-      }
-    }
-  }
-
-  static class WrapHistory extends BaseListenerWrapper<HistoryListener>
-      implements ValueChangeHandler<String> {
-    @Deprecated
-    public static void add(HistoryListener listener) {
-      History.addValueChangeHandler(new WrapHistory(listener));
-    }
-
-    public static void remove(HandlerManager manager, HistoryListener listener) {
-      baseRemove(manager, listener, ValueChangeEvent.getType());
-    }
-
-    private WrapHistory(HistoryListener listener) {
-      super(listener);
-    }
-
-    public void onValueChange(ValueChangeEvent<String> event) {
-      listener.onHistoryChanged(event.getValue());
-    }
-  }
-
   static class WrapWindowClose extends BaseListenerWrapper<WindowCloseListener>
       implements Window.ClosingHandler, CloseHandler<Window> {
     @Deprecated
@@ -196,8 +145,6 @@
    */
   final T listener;
 
-  private Widget source;
-
   /**
    * Creates a new listener wrapper.
    * 
@@ -208,16 +155,6 @@
   }
 
   /**
-   * Sets the widget source to pass to the listeners. Source defaults to
-   * event.getSource() if this method is not used.
-   * 
-   * @param source the source to provide as the listener's source
-   */
-  public void setSource(Widget source) {
-    this.source = source;
-  }
-
-  /**
    * Gets the listener being wrapped.
    * 
    * @return the wrapped listener
@@ -225,19 +162,4 @@
   protected T getListener() {
     return listener;
   }
-
-  /**
-   * Gets the widget source to pass to the listeners. Source defaults to
-   * event.getSource() if not specified by {@link #setSource(Widget)}.
-   * 
-   * @param event the event
-   * @return source the source to provide as the listener's source
-   */
-  protected Widget getSource(GwtEvent<?> event) {
-    if (source == null) {
-      return (Widget) event.getSource();
-    } else {
-      return source;
-    }
-  }
 }
diff --git a/user/src/com/google/gwt/user/client/DOM.java b/user/src/com/google/gwt/user/client/DOM.java
index 80be485..807cd90 100644
--- a/user/src/com/google/gwt/user/client/DOM.java
+++ b/user/src/com/google/gwt/user/client/DOM.java
@@ -20,6 +20,7 @@
 import com.google.gwt.dom.client.ImageElement;
 import com.google.gwt.dom.client.OptionElement;
 import com.google.gwt.dom.client.SelectElement;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
 import com.google.gwt.user.client.impl.DOMImpl;
 import com.google.gwt.user.client.ui.PotentialElement;
 
@@ -30,6 +31,33 @@
  * {@link com.google.gwt.user.client.Event events}.
  */
 public class DOM {
+
+  private static class NativePreview extends BaseListenerWrapper<EventPreview>
+      implements Event.NativePreviewHandler {
+    @Deprecated
+    public static void add(EventPreview listener) {
+      Event.addNativePreviewHandler(new NativePreview(listener));
+    }
+
+    public static void remove(EventPreview listener) {
+      baseRemove(Event.handlers, listener, NativePreviewEvent.getType());
+    }
+
+    private NativePreview(EventPreview listener) {
+      super(listener);
+    }
+
+    public void onPreviewNativeEvent(NativePreviewEvent event) {
+      // The legacy EventHandler should only fire if it is on the top of the
+      // stack (ie. the last one added).
+      if (event.isFirstHandler()) {
+        if (!listener.onEventPreview(Event.as(event.getNativeEvent()))) {
+          event.cancel();
+        }
+      }
+    }
+  }
+
   // The current event being fired
   private static Event currentEvent = null;
   static final DOMImpl impl = GWT.create(DOMImpl.class);
@@ -48,7 +76,7 @@
    */
   @Deprecated
   public static void addEventPreview(EventPreview preview) {
-    BaseListenerWrapper.NativePreview.add(preview);
+    NativePreview.add(preview);
   }
 
   /**
@@ -1044,7 +1072,7 @@
    */
   @Deprecated
   public static void removeEventPreview(EventPreview preview) {
-    BaseListenerWrapper.NativePreview.remove(preview);
+    NativePreview.remove(preview);
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/client/History.java b/user/src/com/google/gwt/user/client/History.java
index c8f9030..285ffee 100644
--- a/user/src/com/google/gwt/user/client/History.java
+++ b/user/src/com/google/gwt/user/client/History.java
@@ -18,7 +18,9 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.impl.Disposable;
 import com.google.gwt.core.client.impl.Impl;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.impl.HistoryImpl;
 
@@ -58,6 +60,26 @@
  */
 public class History {
 
+  private static class WrapHistory extends BaseListenerWrapper<HistoryListener>
+      implements ValueChangeHandler<String> {
+    @Deprecated
+    public static void add(HistoryListener listener) {
+      addValueChangeHandler(new WrapHistory(listener));
+    }
+
+    public static void remove(HandlerManager manager, HistoryListener listener) {
+      baseRemove(manager, listener, ValueChangeEvent.getType());
+    }
+
+    private WrapHistory(HistoryListener listener) {
+      super(listener);
+    }
+
+    public void onValueChange(ValueChangeEvent<String> event) {
+      listener.onHistoryChanged(event.getValue());
+    }
+  }
+
   private static HistoryImpl impl;
 
   static {
@@ -91,7 +113,7 @@
   @Deprecated
   public static void addHistoryListener(HistoryListener listener) {
     if (impl != null) {
-      BaseListenerWrapper.WrapHistory.add(listener);
+      WrapHistory.add(listener);
     }
   }
 
@@ -215,7 +237,7 @@
   @Deprecated
   public static void removeHistoryListener(HistoryListener listener) {
     if (impl != null) {
-      BaseListenerWrapper.WrapHistory.remove(impl.getHandlers(), listener);
+      WrapHistory.remove(impl.getHandlers(), listener);
     }
   }
 }
diff --git a/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java b/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
index 9b4a1b4..732b1d7 100644
--- a/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
+++ b/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
@@ -77,6 +77,7 @@
 import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.GwtEvent;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.GwtEvent.Type;
 import com.google.gwt.user.client.BaseListenerWrapper;
@@ -91,7 +92,7 @@
  * 
  * 
  * @param <T> listener type
- * @deprecated will be removed in GWT 2.0 with the handler listeners themselves
+ * @deprecated will be removed in GWT 2.7 with the handler listeners themselves
  */
 @Deprecated
 public abstract class ListenerWrapper<T> extends BaseListenerWrapper<T> {
@@ -811,8 +812,34 @@
     }
   }
 
+  private Widget source;
+
   protected ListenerWrapper(T listener) {
     super(listener);
   }
 
+  /**
+   * Sets the widget source to pass to the listeners. Source defaults to
+   * event.getSource() if this method is not used.
+   *
+   * @param source the source to provide as the listener's source
+   */
+  public void setSource(Widget source) {
+    this.source = source;
+  }
+
+  /**
+   * Gets the widget source to pass to the listeners. Source defaults to
+   * event.getSource() if not specified by {@link #setSource(Widget)}.
+   *
+   * @param event the event
+   * @return source the source to provide as the listener's source
+   */
+  protected Widget getSource(GwtEvent<?> event) {
+    if (source == null) {
+      return (Widget) event.getSource();
+    } else {
+      return source;
+    }
+  }
 }
