diff --git a/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java b/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
deleted file mode 100644
index 910d3ec..0000000
--- a/compat/ics/android/support/v4/view/AccessibilityDelegateCompatIcs.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.support.v4.view;
-
-import android.support.annotation.RequiresApi;
-import android.view.View;
-import android.view.View.AccessibilityDelegate;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
-
-/**
- * ICS specific AccessibilityDelegate API implementation.
- */
-
-@RequiresApi(14)
-class AccessibilityDelegateCompatIcs {
-
-    interface AccessibilityDelegateBridge {
-        boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event);
-        void onInitializeAccessibilityEvent(View host, AccessibilityEvent event);
-        void onInitializeAccessibilityNodeInfo(View host, Object info);
-        void onPopulateAccessibilityEvent(View host, AccessibilityEvent event);
-        boolean onRequestSendAccessibilityEvent(ViewGroup host, View child,
-            AccessibilityEvent event);
-        void sendAccessibilityEvent(View host, int eventType);
-        void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event);
-    }
-
-    public static AccessibilityDelegate newAccessibilityDelegateBridge(
-            final AccessibilityDelegateBridge bridge) {
-        return new AccessibilityDelegate() {
-            @Override
-            public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
-                return bridge.dispatchPopulateAccessibilityEvent(host, event);
-            }
-
-            @Override
-            public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
-                bridge.onInitializeAccessibilityEvent(host, event);
-            }
-
-            @Override
-            public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
-                bridge.onInitializeAccessibilityNodeInfo(host, info);
-            }
-
-            @Override
-            public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
-                bridge.onPopulateAccessibilityEvent(host, event);
-            }
-
-            @Override
-            public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child,
-                    AccessibilityEvent event) {
-                return bridge.onRequestSendAccessibilityEvent(host, child, event);
-            }
-
-            @Override
-            public void sendAccessibilityEvent(View host, int eventType) {
-                bridge.sendAccessibilityEvent(host, eventType);
-            }
-
-            @Override
-            public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) {
-                bridge.sendAccessibilityEventUnchecked(host, event);
-            }
-        };
-    }
-}
diff --git a/compat/java/android/support/v4/view/AccessibilityDelegateCompat.java b/compat/java/android/support/v4/view/AccessibilityDelegateCompat.java
index 2a42357..efedf0e 100644
--- a/compat/java/android/support/v4/view/AccessibilityDelegateCompat.java
+++ b/compat/java/android/support/v4/view/AccessibilityDelegateCompat.java
@@ -26,6 +26,7 @@
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeProvider;
 
 /**
  * Helper for accessing {@link AccessibilityDelegate} introduced after
@@ -45,20 +46,10 @@
  */
 public class AccessibilityDelegateCompat {
 
-    interface AccessibilityDelegateImpl {
-        AccessibilityDelegate newAccessibilityDelegateBridge(AccessibilityDelegateCompat listener);
-        AccessibilityNodeProviderCompat getAccessibilityNodeProvider(AccessibilityDelegate delegate,
-                View host);
-        boolean performAccessibilityAction(AccessibilityDelegate delegate, View host, int action,
-                Bundle args);
-    }
-
-    static class AccessibilityDelegateBaseImpl implements AccessibilityDelegateImpl {
-        @Override
+    static class AccessibilityDelegateBaseImpl {
         public AccessibilityDelegate newAccessibilityDelegateBridge(
                 final AccessibilityDelegateCompat compat) {
-            return AccessibilityDelegateCompatIcs.newAccessibilityDelegateBridge(
-                    new AccessibilityDelegateCompatIcs.AccessibilityDelegateBridge() {
+            return new AccessibilityDelegate() {
                 @Override
                 public boolean dispatchPopulateAccessibilityEvent(View host,
                         AccessibilityEvent event) {
@@ -71,7 +62,8 @@
                 }
 
                 @Override
-                public void onInitializeAccessibilityNodeInfo(View host, Object info) {
+                public void onInitializeAccessibilityNodeInfo(
+                        View host, AccessibilityNodeInfo info) {
                     compat.onInitializeAccessibilityNodeInfo(host,
                             new AccessibilityNodeInfoCompat(info));
                 }
@@ -96,17 +88,15 @@
                 public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) {
                     compat.sendAccessibilityEventUnchecked(host, event);
                 }
-            });
+            };
         }
 
-        @Override
         public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(
                 AccessibilityDelegate delegate, View host) {
             // Do nothing. Added in API 16.
             return null;
         }
 
-        @Override
         public boolean performAccessibilityAction(AccessibilityDelegate delegate, View host,
                 int action, Bundle args) {
             // Do nothing. Added in API 16.
@@ -119,9 +109,7 @@
         @Override
         public AccessibilityDelegate newAccessibilityDelegateBridge(
                 final AccessibilityDelegateCompat compat) {
-            return AccessibilityDelegateCompatJellyBean.newAccessibilityDelegateBridge(
-                    new AccessibilityDelegateCompatJellyBean
-                            .AccessibilityDelegateBridgeJellyBean() {
+            return new AccessibilityDelegate()  {
                 @Override
                 public boolean dispatchPopulateAccessibilityEvent(View host,
                         AccessibilityEvent event) {
@@ -134,7 +122,8 @@
                 }
 
                 @Override
-                public void onInitializeAccessibilityNodeInfo(View host, Object info) {
+                public void onInitializeAccessibilityNodeInfo(
+                        View host, AccessibilityNodeInfo info) {
                     compat.onInitializeAccessibilityNodeInfo(host,
                             new AccessibilityNodeInfoCompat(info));
                 }
@@ -161,24 +150,24 @@
                 }
 
                 @Override
-                public Object getAccessibilityNodeProvider(View host) {
+                public AccessibilityNodeProvider getAccessibilityNodeProvider(View host) {
                     AccessibilityNodeProviderCompat provider =
                         compat.getAccessibilityNodeProvider(host);
-                    return (provider != null) ? provider.getProvider() : null;
+                    return (provider != null)
+                            ? (AccessibilityNodeProvider) provider.getProvider() : null;
                 }
 
                 @Override
                 public boolean performAccessibilityAction(View host, int action, Bundle args) {
                     return compat.performAccessibilityAction(host, action, args);
                 }
-            });
+            };
         }
 
         @Override
         public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(
                 AccessibilityDelegate delegate, View host) {
-            Object provider = AccessibilityDelegateCompatJellyBean.getAccessibilityNodeProvider(
-                    delegate, host);
+            Object provider = delegate.getAccessibilityNodeProvider(host);
             if (provider != null) {
                 return new AccessibilityNodeProviderCompat(provider);
             }
@@ -188,12 +177,11 @@
         @Override
         public boolean performAccessibilityAction(AccessibilityDelegate delegate, View host,
                 int action, Bundle args) {
-            return AccessibilityDelegateCompatJellyBean.performAccessibilityAction(delegate,
-                    host, action, args);
+            return delegate.performAccessibilityAction(host, action, args);
         }
     }
 
-    private static final AccessibilityDelegateImpl IMPL;
+    private static final AccessibilityDelegateBaseImpl IMPL;
     private static final AccessibilityDelegate DEFAULT_DELEGATE;
 
     static {
diff --git a/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java b/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
deleted file mode 100644
index e26d0b3..0000000
--- a/compat/jellybean/android/support/v4/view/AccessibilityDelegateCompatJellyBean.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2012 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 android.support.v4.view;
-
-import android.os.Bundle;
-import android.support.annotation.RequiresApi;
-import android.view.View;
-import android.view.View.AccessibilityDelegate;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.view.accessibility.AccessibilityNodeProvider;
-
-/**
- * JellyBean specific AccessibilityDelegate API implementation.
- */
-
-@RequiresApi(16)
-class AccessibilityDelegateCompatJellyBean {
-
-    interface AccessibilityDelegateBridgeJellyBean {
-        boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event);
-        void onInitializeAccessibilityEvent(View host, AccessibilityEvent event);
-        void onInitializeAccessibilityNodeInfo(View host, Object info);
-        void onPopulateAccessibilityEvent(View host, AccessibilityEvent event);
-        boolean onRequestSendAccessibilityEvent(ViewGroup host, View child,
-                AccessibilityEvent event);
-        void sendAccessibilityEvent(View host, int eventType);
-        void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event);
-        Object getAccessibilityNodeProvider(View host);
-        boolean performAccessibilityAction(View host, int action, Bundle args);
-    }
-
-    public static AccessibilityDelegate newAccessibilityDelegateBridge(
-            final AccessibilityDelegateBridgeJellyBean bridge) {
-        return new AccessibilityDelegate() {
-
-            @Override
-            public boolean dispatchPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
-                return bridge.dispatchPopulateAccessibilityEvent(host, event);
-            }
-
-            @Override
-            public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
-                bridge.onInitializeAccessibilityEvent(host, event);
-            }
-
-            @Override
-            public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
-                bridge.onInitializeAccessibilityNodeInfo(host, info);
-            }
-
-            @Override
-            public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
-                bridge.onPopulateAccessibilityEvent(host, event);
-            }
-
-            @Override
-            public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child,
-                    AccessibilityEvent event) {
-                return bridge.onRequestSendAccessibilityEvent(host, child, event);
-            }
-
-            @Override
-            public void sendAccessibilityEvent(View host, int eventType) {
-                bridge.sendAccessibilityEvent(host, eventType);
-            }
-
-            @Override
-            public void sendAccessibilityEventUnchecked(View host, AccessibilityEvent event) {
-                bridge.sendAccessibilityEventUnchecked(host, event);
-            }
-
-            @Override
-            public AccessibilityNodeProvider getAccessibilityNodeProvider(View host) {
-                return (AccessibilityNodeProvider) bridge.getAccessibilityNodeProvider(host);
-            }
-
-            @Override
-            public boolean performAccessibilityAction(View host, int action, Bundle args) {
-                return bridge.performAccessibilityAction(host, action, args);
-            }
-        };
-    }
-
-    public static Object getAccessibilityNodeProvider(AccessibilityDelegate delegate,
-            View host) {
-        return delegate.getAccessibilityNodeProvider(host);
-    }
-
-    public static boolean performAccessibilityAction(AccessibilityDelegate delegate, View host,
-            int action, Bundle args) {
-        return delegate.performAccessibilityAction(host, action, args);
-    }
-}
