diff --git a/src/com/android/launcher3/AlphabeticalAppsList.java b/src/com/android/launcher3/AlphabeticalAppsList.java
index 8d1db63..2ee5a62 100644
--- a/src/com/android/launcher3/AlphabeticalAppsList.java
+++ b/src/com/android/launcher3/AlphabeticalAppsList.java
@@ -239,17 +239,9 @@
         for (AppInfo info : apps) {
             int removeIndex = findAppByComponent(mApps, info);
             if (removeIndex != -1) {
-                int sectionedIndex = mSectionedFilteredApps.indexOf(info);
-                int numAppsInSection = numAppsInSection(info);
                 mApps.remove(removeIndex);
                 onAppsUpdated();
-                if (numAppsInSection == 1) {
-                    // Remove the section and the icon
-                    mAdapter.notifyItemRemoved(sectionedIndex - 1);
-                    mAdapter.notifyItemRemoved(sectionedIndex - 1);
-                } else {
-                    mAdapter.notifyItemRemoved(sectionedIndex);
-                }
+                mAdapter.notifyDataSetChanged();
             }
         }
     }
@@ -278,35 +270,11 @@
         if (index < 0) {
             mApps.add(-(index + 1), info);
             onAppsUpdated();
-
-            int sectionedIndex = mSectionedFilteredApps.indexOf(info);
-            int numAppsInSection = numAppsInSection(info);
-            if (numAppsInSection == 1) {
-                // New section added along with icon
-                mAdapter.notifyItemInserted(sectionedIndex - 1);
-                mAdapter.notifyItemInserted(sectionedIndex - 1);
-            } else {
-                mAdapter.notifyItemInserted(sectionedIndex);
-            }
+            mAdapter.notifyDataSetChanged();
         }
     }
 
     /**
-     * Returns the number of apps in the section that the given info is in.
-     */
-    private int numAppsInSection(AppInfo info) {
-        int appIndex = mFilteredApps.indexOf(info);
-        int appCount = 0;
-        for (SectionInfo section : mSections) {
-            if (appCount + section.numAppsInSection > appIndex) {
-                return section.numAppsInSection;
-            }
-            appCount += section.numAppsInSection;
-        }
-        return 1;
-    }
-
-    /**
      * Updates internals when the set of apps are updated.
      */
     private void onAppsUpdated() {
