         saveButton.tag = tag
         saveButton.addTarget(self, action: #selector(saveButtonPressed(sender:)), for: .touchUpInside)
         saveButton.saveButtonDelegate = self
+        
         var saveButtons = visibleSaveButtons[tag] ?? []
         saveButtons.insert(saveButton)
         visibleSaveButtons[tag] = saveButtons
+        
+        var saveButtonTags = visibleSaveButtonTagsByDatabaseKey[databaseKey] ?? []
+        saveButtonTags.insert(tag)
+        visibleSaveButtonTagsByDatabaseKey[databaseKey] = saveButtonTags
+        
         visibleArticleKeys[tag] = key
         visibleUserInfo[tag] = userInfo
     }
     
     public func didEndDisplaying(saveButton: SaveButton, for article: WMFArticle) {
-        guard let key = article.inMemoryKey else {
+        guard let key = article.inMemoryKey, let databaseKey = article.key else {
             return
         }
         let tag = key.hash

    fileprivate var updatedArticle: WMFArticle?
    
    @objc func articleUpdated(notification: Notification) {
        guard let article = notification.object as? WMFArticle, let key = article.inMemoryKey, let saveButtons = visibleSaveButtons[key.hash] else {
            return
        }
        for saveButton in saveButtons {
            saveButton.saveButtonState = article.savedDate == nil ? .longSave : .longSaved
        }
        updatedArticle = article
        notifyDelegateArticleSavedStateChanged()

            visibleUserInfo.removeValue(forKey: tag)
        } else {
            visibleSaveButtons[tag] = saveButtons
        }
        
        var saveButtonTags = visibleSaveButtonTagsByDatabaseKey[databaseKey] ?? []
        saveButtonTags.remove(tag)
        if saveButtonTags.isEmpty {
            visibleSaveButtonTagsByDatabaseKey.removeValue(forKey: databaseKey)
        } else {
            visibleSaveButtonTagsByDatabaseKey[databaseKey] = saveButtonTags
        }
    }
    
