     
     func mapView(_ mapView: MKMapView, regionDidChangeAnimated: Bool) {
         
-        
-        if !mapViewLoaded {
-            
-            populateStoreAnnotations()
-            
-            mapViewLoaded = true
-            
-        } else {
-            
-    
-            self.mapView.removeAnnotations(self.mapView.annotations)
-            
-            self.storesInMapView.removeAll()
-
-            dragToGetStores()
-            
-            mapViewLoaded = true
-            
-        }
-        
-    }
-    
-    func dragToGetStores() {
-        
-        let latitudeSpan = mapView.centerCoordinate.latitude + (mapView.region.span.latitudeDelta / 2)
-        let longitudeSpan = mapView.centerCoordinate.longitude //+ mapView.region.span.longitudeDelta
-        
-        let cornerCoordinate = CLLocation(latitude: latitudeSpan, longitude: longitudeSpan)
-        
-        let mapViewDistance = DistanceCalculation.getDistance(userLocation: mapView.centerCoordinate, storeLocation: cornerCoordinate.coordinate)
-        
-        let roundedNumber = (round(mapViewDistance * 100)/100)
-        
-        UIApplication.shared.isNetworkActivityIndicatorVisible = true
-        
-        print("mapView center coordinate is : \(mapView.centerCoordinate) AND rounded number is : \(roundedNumber)")
-        
-        SearchStores.searchForStoresLocations(near: mapView.centerCoordinate, with: roundedNumber) { stores in
-            
-            self.storesInMapView = stores
-            
-            self.populateStoreAnnotations()
-            
-            UIApplication.shared.isNetworkActivityIndicatorVisible = false
-            
-        }
-        
-    }
-    
-}
-
-
+        let center = mapView.centerCoordinate
+        
+        LOG.debug("User dragged Map Screen to: \(center)")
+        
+        self.loadStoresInMapView(at: center)
+    }
+    
+}
+
+
+fileprivate extension MKMapView {
+    
+    func isVisible(annotation: MKAnnotation) -> Bool {
+        
+        let annotationPoint = MKMapPointForCoordinate(annotation.coordinate)
+        return MKMapRectContainsPoint(self.visibleMapRect, annotationPoint)
+    }
+    
+    func removeNonVisibleAnnotations() {
+        
+        self.annotations
+            .filter({ !isVisible(annotation: $0)})
+            .forEach({ self.removeAnnotation($0) })
+    }
+}
+

        
    }
    
    private func prepareMapView() {
        
        mapView.delegate = self

        return operationQueue
    }()
    
    fileprivate let main = OperationQueue.main
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        prepareMapView()
        loadStores()
        
        AromaClient.beginMessage(withTitle: "User Entered Map View")
            .addBody("Users location is: \(UserLocation.instance.currentCoordinate)")
            .withPriority(.medium)
            .send()
        
    }
    
    override func didReceiveMemoryWarning() {
