diff --git a/src/com/android/launcher3/badge/BadgeInfo.java b/src/com/android/launcher3/badge/BadgeInfo.java
index 673c297..77355c7 100644
--- a/src/com/android/launcher3/badge/BadgeInfo.java
+++ b/src/com/android/launcher3/badge/BadgeInfo.java
@@ -19,8 +19,8 @@
 import com.android.launcher3.notification.NotificationInfo;
 import com.android.launcher3.util.PackageUserKey;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Contains data to be used in an icon badge.
@@ -33,17 +33,20 @@
      * The keys of the notifications that this badge represents. These keys can later be
      * used to retrieve {@link NotificationInfo}'s.
      */
-    private Set<String> mNotificationKeys;
+    private List<String> mNotificationKeys;
 
     public BadgeInfo(PackageUserKey packageUserKey) {
         mPackageUserKey = packageUserKey;
-        mNotificationKeys = new HashSet<>();
+        mNotificationKeys = new ArrayList<>();
     }
 
     /**
      * Returns whether the notification was added (false if it already existed).
      */
-    public boolean addNotificationKey(String notificationKey) {
+    public boolean addNotificationKeyIfNotExists(String notificationKey) {
+        if (mNotificationKeys.contains(notificationKey)) {
+            return false;
+        }
         return mNotificationKeys.add(notificationKey);
     }
 
@@ -54,7 +57,7 @@
         return mNotificationKeys.remove(notificationKey);
     }
 
-    public Set<String> getNotificationKeys() {
+    public List<String> getNotificationKeys() {
         return mNotificationKeys;
     }
 
diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java
index 13eaa9a..cd610bd 100644
--- a/src/com/android/launcher3/notification/NotificationFooterLayout.java
+++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java
@@ -40,7 +40,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * A {@link LinearLayout} that contains only icons of notifications.
@@ -190,7 +189,7 @@
         animation.start();
     }
 
-    public void trimNotifications(Set<String> notifications) {
+    public void trimNotifications(List<String> notifications) {
         if (!isAttachedToWindow() || mIconRow.getChildCount() == 0) {
             return;
         }
diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java
index f388382..b74cd4e 100644
--- a/src/com/android/launcher3/notification/NotificationItemView.java
+++ b/src/com/android/launcher3/notification/NotificationItemView.java
@@ -34,9 +34,8 @@
 import com.android.launcher3.graphics.IconPalette;
 import com.android.launcher3.popup.PopupItemView;
 
-import java.util.HashSet;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 import static com.android.launcher3.LauncherAnimUtils.animateViewHeight;
 
@@ -122,7 +121,7 @@
         mFooter.applyColors(iconPalette);
     }
 
-    public void trimNotifications(final Set<String> notificationKeys) {
+    public void trimNotifications(final List<String> notificationKeys) {
         boolean dismissedMainNotification = !notificationKeys.contains(
                 mMainView.getNotificationInfo().notificationKey);
         if (dismissedMainNotification && !mAnimatingNextIcon) {
@@ -137,7 +136,10 @@
                 public void onIconAnimationEnd(NotificationInfo newMainNotification) {
                     if (newMainNotification != null) {
                         mMainView.applyNotificationInfo(newMainNotification, mIconView, mIconPalette);
-                        Set<String> footerNotificationKeys = new HashSet<>(notificationKeys);
+                        // Remove the animated notification from the footer by calling trim
+                        // TODO: Remove the notification in NotificationFooterLayout directly
+                        // instead of relying on this hack.
+                        List<String> footerNotificationKeys = new ArrayList<>(notificationKeys);
                         footerNotificationKeys.remove(newMainNotification.notificationKey);
                         mFooter.trimNotifications(footerNotificationKeys);
                         mMainView.setVisibility(VISIBLE);
diff --git a/src/com/android/launcher3/popup/PopupDataProvider.java b/src/com/android/launcher3/popup/PopupDataProvider.java
index f6fdb76..c773079 100644
--- a/src/com/android/launcher3/popup/PopupDataProvider.java
+++ b/src/com/android/launcher3/popup/PopupDataProvider.java
@@ -33,7 +33,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * Provides data for the popup menu that appears after long-clicking on apps.
@@ -59,10 +58,10 @@
         BadgeInfo oldBadgeInfo = mPackageUserToBadgeInfos.get(postedPackageUserKey);
         if (oldBadgeInfo == null) {
             BadgeInfo newBadgeInfo = new BadgeInfo(postedPackageUserKey);
-            newBadgeInfo.addNotificationKey(notificationKey);
+            newBadgeInfo.addNotificationKeyIfNotExists(notificationKey);
             mPackageUserToBadgeInfos.put(postedPackageUserKey, newBadgeInfo);
             mLauncher.updateIconBadges(Collections.singleton(postedPackageUserKey));
-        } else if (oldBadgeInfo.addNotificationKey(notificationKey)) {
+        } else if (oldBadgeInfo.addNotificationKeyIfNotExists(notificationKey)) {
             mLauncher.updateIconBadges(Collections.singleton(postedPackageUserKey));
         }
     }
@@ -96,7 +95,7 @@
                 badgeInfo = new BadgeInfo(packageUserKey);
                 mPackageUserToBadgeInfos.put(packageUserKey, badgeInfo);
             }
-            badgeInfo.addNotificationKey(notification.getKey());
+            badgeInfo.addNotificationKeyIfNotExists(notification.getKey());
         }
 
         // Add and remove from updatedBadges so it contains the PackageUserKeys of updated badges.
@@ -151,7 +150,7 @@
     public String[] getNotificationKeysForItem(ItemInfo info) {
         BadgeInfo badgeInfo = mPackageUserToBadgeInfos.get(PackageUserKey.fromItemInfo(info));
         if (badgeInfo == null) { return new String[0]; }
-        Set<String> notificationKeys = badgeInfo.getNotificationKeys();
+        List<String> notificationKeys = badgeInfo.getNotificationKeys();
         return notificationKeys.toArray(new String[notificationKeys.size()]);
     }
 
