diff --git a/src/com/android/launcher3/CommonAppTypeParser.java b/src/com/android/launcher3/CommonAppTypeParser.java
deleted file mode 100644
index c2bd883..0000000
--- a/src/com/android/launcher3/CommonAppTypeParser.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2008 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.android.launcher3;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.XmlResourceParser;
-import android.database.sqlite.SQLiteDatabase;
-import android.util.Log;
-
-import com.android.launcher3.AutoInstallsLayout.LayoutParserCallback;
-import com.android.launcher3.LauncherSettings.Favorites;
-import com.android.launcher3.util.Thunk;
-
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-
-/**
- * A class that parses content values corresponding to some common app types.
- */
-public class CommonAppTypeParser implements LayoutParserCallback {
-    private static final String TAG = "CommonAppTypeParser";
-
-    // Including TARGET_NONE
-    public static final int SUPPORTED_TYPE_COUNT = 7;
-
-    private static final int RESTORE_FLAG_BIT_SHIFT = 4;
-
-    public static final int TARGET_PHONE = 1;
-    public static final int TARGET_MESSENGER = 2;
-    public static final int TARGET_EMAIL = 3;
-    public static final int TARGET_BROWSER = 4;
-    public static final int TARGET_GALLERY = 5;
-    public static final int TARGET_CAMERA = 6;
-
-    private final long mItemId;
-    @Thunk final int mResId;
-    @Thunk final Context mContext;
-
-    ContentValues parsedValues;
-    Intent parsedIntent;
-    String parsedTitle;
-
-    public CommonAppTypeParser(long itemId, int itemType, Context context) {
-        mItemId = itemId;
-        mContext = context;
-        mResId = getResourceForItemType(itemType);
-    }
-
-    @Override
-    public long generateNewItemId() {
-        return mItemId;
-    }
-
-    @Override
-    public long insertAndCheck(SQLiteDatabase db, ContentValues values) {
-        parsedValues = values;
-
-        // Remove unwanted values
-        values.put(Favorites.ICON_PACKAGE, (String) null);
-        values.put(Favorites.ICON_RESOURCE, (String) null);
-        values.put(Favorites.ICON, (byte[]) null);
-        return 1;
-    }
-
-    /**
-     * Tries to find a suitable app to the provided app type.
-     */
-    public boolean findDefaultApp() {
-        if (mResId == 0) {
-            return false;
-        }
-
-        parsedIntent = null;
-        parsedValues = null;
-        new MyLayoutParser().parseValues();
-        return (parsedValues != null) && (parsedIntent != null);
-    }
-
-    private class MyLayoutParser extends DefaultLayoutParser {
-
-        public MyLayoutParser() {
-            super(CommonAppTypeParser.this.mContext, null, CommonAppTypeParser.this,
-                    CommonAppTypeParser.this.mContext.getResources(), mResId, TAG_RESOLVE);
-        }
-
-        @Override
-        protected long addShortcut(String title, Intent intent, int type) {
-            if (type == Favorites.ITEM_TYPE_APPLICATION) {
-                parsedIntent = intent;
-                parsedTitle = title;
-            }
-            return super.addShortcut(title, intent, type);
-        }
-
-        public void parseValues() {
-            XmlResourceParser parser = mSourceRes.getXml(mLayoutId);
-            try {
-                beginDocument(parser, mRootTag);
-                new ResolveParser().parseAndAdd(parser);
-            } catch (IOException | XmlPullParserException e) {
-                Log.e(TAG, "Unable to parse default app info", e);
-            }
-            parser.close();
-        }
-    }
-
-    public static int getResourceForItemType(int type) {
-        switch (type) {
-            case TARGET_PHONE:
-                return R.xml.app_target_phone;
-
-            case TARGET_MESSENGER:
-                return R.xml.app_target_messenger;
-
-            case TARGET_EMAIL:
-                return R.xml.app_target_email;
-
-            case TARGET_BROWSER:
-                return R.xml.app_target_browser;
-
-            case TARGET_GALLERY:
-                return R.xml.app_target_gallery;
-
-            case TARGET_CAMERA:
-                return R.xml.app_target_camera;
-
-            default:
-                return 0;
-        }
-    }
-
-    public static int encodeItemTypeToFlag(int itemType) {
-        return itemType << RESTORE_FLAG_BIT_SHIFT;
-    }
-
-    public static int decodeItemTypeFromFlag(int flag) {
-        return (flag & ShortcutInfo.FLAG_RESTORED_APP_TYPE) >> RESTORE_FLAG_BIT_SHIFT;
-    }
-
-}
diff --git a/src/com/android/launcher3/DefaultLayoutParser.java b/src/com/android/launcher3/DefaultLayoutParser.java
index ef28d1e..05911ab 100644
--- a/src/com/android/launcher3/DefaultLayoutParser.java
+++ b/src/com/android/launcher3/DefaultLayoutParser.java
@@ -54,11 +54,6 @@
         super(context, appWidgetHost, callback, sourceRes, layoutId, TAG_FAVORITES);
     }
 
-    public DefaultLayoutParser(Context context, AppWidgetHost appWidgetHost,
-            LayoutParserCallback callback, Resources sourceRes, int layoutId, String rootTag) {
-        super(context, appWidgetHost, callback, sourceRes, layoutId, rootTag);
-    }
-
     @Override
     protected HashMap<String, TagParser> getFolderElementsMap() {
         return getFolderElementsMap(mSourceRes);
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 58a7495..daa910f 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -1338,7 +1338,6 @@
                                 user = allUsers.get(serialNumber);
                                 int promiseType = c.getInt(restoredIndex);
                                 int disabledState = 0;
-                                boolean itemReplaced = false;
                                 targetPackage = null;
                                 if (user == null) {
                                     // User has been deleted remove the item.
@@ -1406,25 +1405,6 @@
                                                 values.put(LauncherSettings.Favorites.RESTORED,
                                                         promiseType);
                                                 updateItem(id, values);
-                                            } else if ((promiseType & ShortcutInfo.FLAG_RESTORED_APP_TYPE) != 0) {
-                                                // This is a common app. Try to replace this.
-                                                int appType = CommonAppTypeParser.decodeItemTypeFromFlag(promiseType);
-                                                CommonAppTypeParser parser = new CommonAppTypeParser(id, appType, context);
-                                                if (parser.findDefaultApp()) {
-                                                    // Default app found. Replace it.
-                                                    intent = parser.parsedIntent;
-                                                    cn = intent.getComponent();
-                                                    ContentValues values = parser.parsedValues;
-                                                    values.put(LauncherSettings.Favorites.RESTORED, 0);
-                                                    updateItem(id, values);
-                                                    restored = false;
-                                                    itemReplaced = true;
-
-                                                } else {
-                                                    FileLog.d(TAG, "Unrestored package removed: " + cn);
-                                                    itemsToRemove.add(id);
-                                                    continue;
-                                                }
                                             } else {
                                                 FileLog.d(TAG, "Unrestored package removed: " + cn);
                                                 itemsToRemove.add(id);
@@ -1464,16 +1444,7 @@
                                 boolean useLowResIcon = container >= 0 &&
                                         c.getInt(rankIndex) >= FolderIcon.NUM_ITEMS_IN_PREVIEW;
 
-                                if (itemReplaced) {
-                                    if (user.equals(Process.myUserHandle())) {
-                                        info = getAppShortcutInfo(intent, user, null,
-                                                cursorIconInfo, false, useLowResIcon);
-                                    } else {
-                                        // Don't replace items for other profiles.
-                                        itemsToRemove.add(id);
-                                        continue;
-                                    }
-                                } else if (restored) {
+                                if (restored) {
                                     if (user.equals(Process.myUserHandle())) {
                                         info = getRestoredItemInfo(c, intent,
                                                 promiseType, itemType, cursorIconInfo);
diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java
index 05fb1ed..7f9bc2ba 100644
--- a/src/com/android/launcher3/ShortcutInfo.java
+++ b/src/com/android/launcher3/ShortcutInfo.java
@@ -68,6 +68,7 @@
      * Indicates if it represents a common type mentioned in {@link CommonAppTypeParser}.
      * Upto 15 different types supported.
      */
+    @Deprecated
     public static final int FLAG_RESTORED_APP_TYPE = 0B0011110000;
 
     /**
