     
     public func updateLocation(completionHandler :LocationCompletionHandler) {
         
-        self.locationCompletionHandler = completionHandler
+        self.locationCompletionHandlers.append(completionHandler)
         self.handleLocationStatus(CLLocationManager.authorizationStatus())
     }
     

        let currentLocation = CLLocation(latitude: self.latitude, longitude: self.longitude)
        let lastUpdate = NSUserDefaults.standardUserDefaults().objectForKey(kLastLocationUpdate) as? NSDate
        
        guard let completionHandler = locationCompletionHandler else {
            return
        }
        
        let longitude = location?.coordinate.longitude, latitude = location?.coordinate.latitude
        
        // Check for distance since last measurement
        guard currentLocation.distanceFromLocation(location!) > updateDistanceThreshold else {
            return completionHandler(latitude: latitude!, longitude: longitude!, status: .DISTANCE, error: nil)
        }
        
        // Check for time since last measurement
        guard lastUpdate == nil || fabs((lastUpdate?.timeIntervalSinceNow)!) > updateTimeintervalThreshold else {
            return completionHandler(latitude: latitude!, longitude: longitude!, status: .TIME, error: nil)
        }
        
        NSNotificationCenter.defaultCenter().postNotificationName(kLocationUpdated, object: nil)
        
        self.longitude = longitude!
        self.latitude = latitude!
        
        NSUserDefaults.standardUserDefaults().setObject(NSDate(), forKey: kLastLocationUpdate)
        NSUserDefaults.standardUserDefaults().setDouble(self.latitude, forKey: kLastLocationLatitude)
        NSUserDefaults.standardUserDefaults().setDouble(self.longitude, forKey: kLastLocationLongitude)
        
        completionHandler(latitude: self.latitude, longitude: self.longitude, status: .OK, error: nil)
    }
 
    public func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        
        guard let completionHandler = locationCompletionHandler else {
            return
        }
        
        manager.stopUpdatingLocation()
        
        completionHandler(latitude: latitude, longitude: longitude, status: .ERROR, error: error)
    }
    
    public func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {

public typealias LocationCompletionHandler = (latitude:Double, longitude:Double, status:LocationUpdateStatus, error:NSError?) -> Void
public typealias ReverseGeocodeCompletionHandler = (country :String?, state :String?, city :String?, reverseGecodeInfo:AnyObject?, placemark:CLPlacemark?, error:NSError?) -> Void

public typealias LocationCollected = (location :CLLocation, error :NSError?) -> Void

public class LocationManager: NSObject, CLLocationManagerDelegate {
    
    enum GoogleAPIStatus :String {
