         }
     }
     
+    var _mapRegion: MKCoordinateRegion?
+    
     var mapRegion: MKCoordinateRegion? {
-        didSet {
-            guard let region = mapRegion else {
+        set {
+            guard let value = newValue else {
+                _mapRegion = nil
                 return
             }
             
-            let regionThatFits = mapView.regionThatFits(region)
-            regroupArticlesIfNecessary(forVisibleRegion: regionThatFits)
-            showRedoSearchButtonIfNecessary(forVisibleRegion: regionThatFits)
-            localCompleter.region = regionThatFits
+            let region = mapView.regionThatFits(value)
+            
+            _mapRegion = region
+            regroupArticlesIfNecessary(forVisibleRegion: region)
+            showRedoSearchButtonIfNecessary(forVisibleRegion: region)
+            localCompleter.region = region
             
             UIView.animate(withDuration: animationDuration, animations: {
-                self.mapView.region = regionThatFits
+                self.mapView.region = region
             }) { (finished) in
                 
             }
+        }
+        
+        get {
+            return _mapRegion
         }
     }
     

            return
        }
        let region = MKCoordinateRegionMakeWithDistance(location.coordinate, 5000, 5000)
        
        mapRegion = region
        currentSearch = PlaceSearch(type: .top, sortStyle: WMFLocationSearchSortStyleNone, string: nil, region: region, localizedDescription: localizedStringForKeyFallingBackOnEnglish("places-search-top-articles-nearby"), searchCompletion: nil)
    }
    
    func locationManager(_ controller: WMFLocationManager, didReceiveError error: Error) {

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