diff --git a/v13/Android.mk b/v13/Android.mk
index c824716..2ba726f 100644
--- a/v13/Android.mk
+++ b/v13/Android.mk
@@ -17,13 +17,6 @@
 # Note: the source code is in java/, not src/, because this code is also part of
 # the framework library, and build/core/pathmap.mk expects a java/ subdirectory.
 
-# A helper sub-library that makes direct use of K APIs.
-include $(CLEAR_VARS)
-LOCAL_MODULE := android-support-v13-k
-LOCAL_SDK_VERSION := current
-LOCAL_SRC_FILES := $(call all-java-files-under, k)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
 # A helper sub-library that makes direct use of Ice Cream Sandwich APIs.
 include $(CLEAR_VARS)
 LOCAL_MODULE := android-support-v13-ics-mr1
@@ -46,8 +39,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, java)
 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4 \
         android-support-v13-ics \
-        android-support-v13-ics-mr1 \
-        android-support-v13-k
+        android-support-v13-ics-mr1
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 # Include this library in the build server's output directory
diff --git a/v13/java/android/support/v13/app/RemoteViewsCompat.java b/v13/java/android/support/v13/app/RemoteViewsCompat.java
deleted file mode 100644
index c8162ba..0000000
--- a/v13/java/android/support/v13/app/RemoteViewsCompat.java
+++ /dev/null
@@ -1,106 +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.v13.app;
-
-import android.appwidget.AppWidgetManager;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.widget.RemoteViews;
-
-import java.util.ArrayList;
-
-/**
- * This is a compatibility version of RemoteViews which simplifies the creation of basic collection
- * widgets (ie. widgets containing {@link ListView}, {@link GridView}, {@link StackView} or
- * {@link AdapterViewAnimator}). This class provides a compatibility version of the method
- * {@link RemoteViews#setRemoteAdapter(int, ArrayList)}, introduced in API level 18. For platform
- * versions supporting the new API, this class will act as a simple pass-through, and for prior
- * versions will emulate the new API's behavior.
- *
- * Be sure to include declare {@link RemoteViewsServiceCompat} in your manifest, as specified in
- * the doc for {@link RemoteViews#setRemoteAdapter(int, ArrayList)}.
- *
- */
-public class RemoteViewsCompat {
-
-    static final String EXTRA_VIEW_ID = "android.support.v13.app.EXTRA_VIEW_ID";
-
-    interface RemoteViewsCompatImpl {
-        void setRemoteAdapter(RemoteViews rv, Context ctx, int viewId, int widgetId,
-                ArrayList<RemoteViews> list);
-    }
-
-    static final RemoteViewsCompatImpl IMPL;
-    static {
-        // TODO: Replace 17 with 18 when the API level gets bumped
-        if (android.os.Build.VERSION.SDK_INT < 17) {
-            IMPL = new BaseRemoteViewsCompatImpl();
-        } else {
-            IMPL = new KRemoteViewsCompatImpl();
-        }
-    }
-
-    /**
-     * Compatibility version of {@link RemoteViews#setRemoteAdapter(int, ArrayList).
-     *
-     * When using this method, it is required that include {@link RemoteViewsServiceCompat}
-     * in your manifest:
-     *
-     * <code>
-     *      <service android:name="android.support.v13.app.RemoteViewsServiceCompat"
-     *          android:permission="android.permission.BIND_REMOTEVIEWS"
-     *          android:exported="false" />
-     * </code>
-     *
-     * @param rv The RemoteViews object.
-     * @param ctx Context.
-     * @param viewId The id of the AdapterView to which this list of RemoteViews will be applied.
-     * @param widgetId The app widget id.
-     * @param list The list of RemoteViews which will become the children of the AdapterView.
-     */
-    public static void setRemoteAdapter(RemoteViews rv, Context ctx, int viewId, int widgetId,
-            ArrayList<RemoteViews> list) {
-        IMPL.setRemoteAdapter(rv, ctx, viewId, widgetId, list);
-    }
-
-    static class BaseRemoteViewsCompatImpl implements RemoteViewsCompatImpl {
-        @Override
-        public void setRemoteAdapter(RemoteViews rv, Context ctx, int viewId, int widgetId,
-                ArrayList<RemoteViews> list) {
-
-            // We embed the widget id and view id into the intent so that it can be used
-            // as a unique key for the list of RemoteViews.
-            final Intent intent = new Intent(ctx, RemoteViewsServiceCompat.class);
-            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
-            intent.putExtra(EXTRA_VIEW_ID, viewId);
-            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
-
-            RemoteViewsListFactory.addOrUpdateListFactory(ctx, intent, widgetId, viewId, list);
-
-            rv.setRemoteAdapter(widgetId, viewId, intent);
-        }
-    }
-
-    static class KRemoteViewsCompatImpl implements RemoteViewsCompatImpl {
-        @Override
-        public void setRemoteAdapter(RemoteViews rv, Context ctx, int viewId, int widgetId,
-                ArrayList<RemoteViews> list) {
-            RemoteViewsCompatK.setRemoteAdapter(rv, viewId, widgetId, list);
-        }
-    }
-}
diff --git a/v13/java/android/support/v13/app/RemoteViewsListFactory.java b/v13/java/android/support/v13/app/RemoteViewsListFactory.java
deleted file mode 100644
index aeb35ed..0000000
--- a/v13/java/android/support/v13/app/RemoteViewsListFactory.java
+++ /dev/null
@@ -1,137 +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.v13.app;
-
-import android.appwidget.AppWidgetManager;
-import android.content.Context;
-import android.content.Intent;
-import android.widget.RemoteViews;
-import android.widget.RemoteViewsService.RemoteViewsFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-class RemoteViewsListFactory implements RemoteViewsFactory {
-
-    ArrayList<RemoteViews> mRemoteViewsList;
-    int mViewTypeCount;
-
-    private static final HashMap<Intent.FilterComparison, RemoteViewsListFactory> sFactories =
-            new HashMap<Intent.FilterComparison, RemoteViewsListFactory>();
-
-    public RemoteViewsListFactory(ArrayList<RemoteViews> list) {
-        setViewsList(list);
-
-    }
-
-    public void setViewsList(ArrayList<RemoteViews> list) {
-        mRemoteViewsList = list;
-        init();
-    }
-
-    private void init() {
-        if (mRemoteViewsList == null) return;
-
-        ArrayList<Integer> viewTypes = new ArrayList<Integer>();
-        for (RemoteViews rv : mRemoteViewsList) {
-            if (!viewTypes.contains(rv.getLayoutId())) {
-                viewTypes.add(rv.getLayoutId());
-            }
-        }
-        mViewTypeCount = viewTypes.size();
-    }
-
-    @Override
-    public void onCreate() {
-    }
-
-    @Override
-    public void onDataSetChanged() {
-        init();
-    }
-
-    @Override
-    public void onDestroy() {
-        Intent.FilterComparison key = null;
-        for (Intent.FilterComparison k : sFactories.keySet()) {
-            if (sFactories.get(k) == this) {
-                key = k;
-            }
-        }
-        if (key != null) {
-            sFactories.remove(key);
-        }
-    }
-
-    @Override
-    public int getCount() {
-        if (mRemoteViewsList != null) {
-            return mRemoteViewsList.size();
-        } else {
-            return 0;
-        }
-    }
-
-    @Override
-    public RemoteViews getViewAt(int position) {
-        if (position < getCount()) {
-            return mRemoteViewsList.get(position);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public RemoteViews getLoadingView() {
-        return null;
-    }
-
-    @Override
-    public int getViewTypeCount() {
-        return mViewTypeCount;
-    }
-
-    @Override
-    public long getItemId(int position) {
-        return position;
-    }
-
-    @Override
-    public boolean hasStableIds() {
-        return false;
-    }
-
-    public static RemoteViewsFactory getFactory(Intent intent) {
-        Intent.FilterComparison fc = new Intent.FilterComparison(intent);
-        return sFactories.get(fc);
-    }
-
-    public static void addOrUpdateListFactory(Context ctx, Intent intent, int widgetId, int viewId,
-            ArrayList<RemoteViews> list) {
-
-        Intent.FilterComparison fc = new Intent.FilterComparison(intent);
-        if (sFactories.containsKey(fc)) {
-            AppWidgetManager mgr = AppWidgetManager.getInstance(ctx);
-            RemoteViewsListFactory rvlf = sFactories.get(fc);
-            rvlf.setViewsList(list);
-            mgr.notifyAppWidgetViewDataChanged(widgetId, viewId);
-        } else {
-            RemoteViewsListFactory rvlf = new RemoteViewsListFactory(list);
-            sFactories.put(fc, rvlf);
-        }
-    }
-}
diff --git a/v13/java/android/support/v13/app/RemoteViewsServiceCompat.java b/v13/java/android/support/v13/app/RemoteViewsServiceCompat.java
deleted file mode 100644
index 405e40d..0000000
--- a/v13/java/android/support/v13/app/RemoteViewsServiceCompat.java
+++ /dev/null
@@ -1,33 +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.v13.app;
-
-import android.content.Intent;
-import android.widget.RemoteViewsService;
-
-/**
- * This is the service that provides the factory to be bound to the collection service. This class
- * needs to be declared in your manifest. For more details, refer to the docs for
- * {@link RemoteViewsCompat} for proper usage.
- */
-public class RemoteViewsServiceCompat extends RemoteViewsService {
-    @Override
-    public RemoteViewsFactory onGetViewFactory(Intent intent) {
-        RemoteViewsFactory rvf = RemoteViewsListFactory.getFactory(intent);
-        return rvf;
-    }
-}
diff --git a/v13/k/android/support/v13/app/RemoteViewsCompatK.java b/v13/k/android/support/v13/app/RemoteViewsCompatK.java
deleted file mode 100644
index 36ef266..0000000
--- a/v13/k/android/support/v13/app/RemoteViewsCompatK.java
+++ /dev/null
@@ -1,28 +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.v13.app;
-
-import android.widget.RemoteViews;
-
-import java.util.ArrayList;
-
-class RemoteViewsCompatK {
-    public static void setRemoteAdapter(RemoteViews rv, int viewId, int widgetId,
-            ArrayList<RemoteViews> list) {
-        rv.setRemoteAdapter(viewId,  list);
-    }
-}
