diff --git a/src/main/java/com/google/gwtexpui/user/User.gwt.xml b/src/main/java/com/google/gwtexpui/user/User.gwt.xml
index 4ebdca4..c681d89 100644
--- a/src/main/java/com/google/gwtexpui/user/User.gwt.xml
+++ b/src/main/java/com/google/gwtexpui/user/User.gwt.xml
@@ -24,11 +24,4 @@
       <when-property-is name="user.agent" value="gecko1_8"/>
     </any>
   </replace-with>
-
-  <replace-with class="com.google.gwtexpui.user.client.FocusPanelFactorySafari">
-    <when-type-is class="com.google.gwtexpui.user.client.FocusPanelFactory" />
-    <any>
-      <when-property-is name="user.agent" value="safari"/>
-    </any>
-  </replace-with>
 </module>
diff --git a/src/main/java/com/google/gwtexpui/user/client/FocusPanelFactory.java b/src/main/java/com/google/gwtexpui/user/client/FocusPanelFactory.java
deleted file mode 100644
index 37df7a0..0000000
--- a/src/main/java/com/google/gwtexpui/user/client/FocusPanelFactory.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gwtexpui.user.client;
-
-import com.google.gwt.user.client.ui.FocusPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-class FocusPanelFactory {
-  FocusPanel wrapFocusPanel(final Widget child) {
-    return new FocusPanel(child);
-  }
-}
diff --git a/src/main/java/com/google/gwtexpui/user/client/FocusPanelFactorySafari.java b/src/main/java/com/google/gwtexpui/user/client/FocusPanelFactorySafari.java
deleted file mode 100644
index 7b77426..0000000
--- a/src/main/java/com/google/gwtexpui/user/client/FocusPanelFactorySafari.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gwtexpui.user.client;
-
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.FocusPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-class FocusPanelFactorySafari extends FocusPanelFactory {
-  @Override
-  FocusPanel wrapFocusPanel(final Widget child) {
-    if ((DOM.getEventsSunk(child.getElement()) & (Event.ONDBLCLICK | Event.ONCLICK)) != 0) {
-      return null;
-    }
-    return new FocusPanel(child);
-  }
-}
diff --git a/src/main/java/com/google/gwtexpui/user/client/UserAgent.java b/src/main/java/com/google/gwtexpui/user/client/UserAgent.java
index dbe432c..02ba9ae 100644
--- a/src/main/java/com/google/gwtexpui/user/client/UserAgent.java
+++ b/src/main/java/com/google/gwtexpui/user/client/UserAgent.java
@@ -16,8 +16,6 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.FocusPanel;
-import com.google.gwt.user.client.ui.Widget;
 
 /**
  * User agent feature tests we don't create permutations for.
@@ -78,21 +76,6 @@
   private static native void bustOutOfIFrame(String newloc)
   /*-{ top.location.href = newloc }-*/;
 
-  private static final FocusPanelFactory focusFactory =
-      GWT.create(FocusPanelFactory.class);
-
-  /**
-   * @return a FocusPanel containing the supplied <code>child</code>;
-   *         <code>null</code> if the browser can't support it. Some browsers
-   *         (e.g. WebKit based ones) can't correctly wrap a table that sinks
-   *         click events; the events are delivered incorrectly and the table
-   *         doesn't get the click where the user actually clicked (it arrives
-   *         on another row).
-   */
-  public static FocusPanel wrapFocusPanel(final Widget child) {
-    return focusFactory.wrapFocusPanel(child);
-  }
-
   private UserAgent() {
   }
 }
