         } else {
             placeView?.alpha = 0
             dispatchOnMainQueue({
+                self.countOfAnimatingAnnotations += 1
                 UIView.animate(withDuration: self.animationDuration, delay: 0, options: .allowUserInteraction, animations: {
                     placeView?.alpha = 1
-                }, completion: nil)
+                }, completion: { (done) in
+                    self.countOfAnimatingAnnotations -= 1
+                })
             })
         }
         

        }
        return false
    }
    
    func _selectVisibleKeyToSelectIfNecessary() {
        guard !isMovingToRegion, let keyToSelect = articleKeyToSelect else {
            return
        }
        guard selectVisibleArticle(articleKey: keyToSelect) else {
            return
        }
        articleKeyToSelect = nil
    }
    
    func selectVisibleKeyToSelectIfNecessary() {
        let selector = #selector(_selectVisibleKeyToSelectIfNecessary)
        NSObject.cancelPreviousPerformRequests(withTarget: self, selector: selector, object: nil)
        self.perform(selector, with: nil, afterDelay: 0.3)
    }
    
    func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {

        }
        let articlesPerSquarePixel = CGFloat(visibleArticleCount) / mapView.bounds.width * mapView.bounds.height
        let shouldShowAllImages = visibleGroupCount == 0 && visibleArticleCount > 0 && articlesPerSquarePixel < 40
        set(shouldShowAllImages: shouldShowAllImages)
    }
    
    func set(shouldShowAllImages: Bool) {
        if shouldShowAllImages != showingAllImages {
            for annotation in mapView.annotations {
                guard let view = mapView.view(for: annotation) as? ArticlePlaceView else {
