         let widthRatio = visibleWidth/searchWidth
         let heightRatio = visibleHeight/searchHeight
         let ratio = min(widthRatio, heightRatio)
-        redoSearchButton.isHidden = !(ratio > 1.33 || ratio < 0.67 || distance/searchRegionMinDimension > 0.33)
-        DDLogDebug("redoSearchButton.isHidden = \(redoSearchButton.isHidden)")
-        
-        // it's a little smelly to piggy-back this logic inside the redo rearch button logic, but another attempts
-        // added more code or duplicated the visible area calculation
-        resetSavedPlacesCountIfNecessary()
+        
+        return (ratio > 1.33 || ratio < 0.67 || distance/searchRegionMinDimension > 0.33)
+    }
+
+    func updateViewIfMapMovedSignificantly(forVisibleRegion visibleRegion: MKCoordinateRegion) {
+        guard let searchRegion = currentSearchRegion else {
+            redoSearchButton.isHidden = true
+            return
+        }
+        
+        let movedSignificantly = isDistanceSignificant(betweenRegion: searchRegion, andRegion: visibleRegion)
+        DDLogDebug("movedSignificantly=\(movedSignificantly)")
+        
+        // Update Redo Search Button
+        redoSearchButton.isHidden = !(movedSignificantly)
+        
+        // Clear count for Top Places
+        if (movedSignificantly) {
+            _displayCountForTopPlaces = nil
+        }
     }
     
     func performSearch(_ search: PlaceSearch) {

            })
        }
    }
    
    func resetSavedPlacesCountIfNecessary() {
        if (!redoSearchButton.isHidden) {
            _displayCountForTopPlaces = nil
        }
    }
    
    @IBAction func redoSearch(_ sender: Any) {
        guard let search = currentSearch else {

        }
        regroupArticlesIfNecessary(forVisibleRegion: mapView.region)

        updateViewIfMapMovedSignificantly(forVisibleRegion: mapView.region)
        
        isMovingToRegion = false
        
