             let region = mapView.regionThatFits(value)
             
             _mapRegion = region
+            
             regroupArticlesIfNecessary(forVisibleRegion: region)
             showRedoSearchButtonIfNecessary(forVisibleRegion: region)
+            
+            
+            let mapViewRegion = mapView.region
+            guard mapViewRegion.center.longitude != region.center.longitude || mapViewRegion.center.latitude != region.center.latitude || mapViewRegion.span.longitudeDelta != region.span.longitudeDelta || mapViewRegion.span.latitudeDelta != region.span.latitudeDelta else {
+                selectVisibleKeyToSelectIfNecessary()
+                return
+            }
 
             mapView.setRegion(region, animated: true)
         }

            if (self.needsRegroup) {
                self.needsRegroup = false
                self.regroupArticlesIfNecessary(forVisibleRegion: self.mapRegion ?? self.mapView.region)
            } else {
                self.selectVisibleKeyToSelectIfNecessary()
            }
        }
    }

        listView.reloadData()
        currentGroupingPrecision = 0
        regroupArticlesIfNecessary(forVisibleRegion: mapRegion ?? mapView.region)
        if currentSearch?.region == nil { // this means the search was done in the curent map region and the map won't move
            selectVisibleKeyToSelectIfNecessary()
        }
    }
    
    @IBAction func redoSearch(_ sender: Any) {
