     
     private var updateDistanceThreshold :Double!
     private var updateTimeintervalThreshold :Double!
+    private var desiredLocationAccuracy :CLLocationAccuracy!
     private var initWithLastKnownLocation = true
     
     private var googleAPIKey :String?
     private var googleAPIResultType :String?
+    
+    private let operations = NSOperationQueue()
 
     // Initialize longitude and latitude with last know location
     public lazy var latitude:Double = {

import CoreLocation
import AddressBook

public enum LocationUpdateStatus :String {
    case OK         = "OK"
    case ERROR      = "ERROR"
    case DISTANCE   = "Change in distance too little"
    case TIME       = "Time since last too little"
}

public enum ReverseGeoCodingType {
    case GOOGLE
    case APPLE
}

public typealias DidEnterRegion = (region :CLRegion?, error :NSError?) -> Void
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 LocationAuthorizationChanged = (manager :CLLocationManager, status :CLAuthorizationStatus) -> Void

            case .GOOGLE:
                self.reverseGeocodeGoogle()
            }
        }
    }
    
    private func reverseGeocodeApple() {
