         }
     }
     
-    // MARK - object lifecycle
+    // MARK: - private ivars
+
+    private var expirationTimer: Timer?
+    
+    // MARK: - object lifecycle
     
     override init() {
         self.expired = false
+        self.expiration = PositionOneShotRequestTimeOut
         super.init()
     }
     


// MARK: - PositionLocationRequest

internal typealias TimeOutCompletionHandler = () -> ()

internal class PositionLocationRequest: NSObject {

    var desiredAccuracy: Double!
    var expired: Bool
    var timeOutHandler: TimeOutCompletionHandler?
    var completionHandler: OneShotCompletionHandler?

    private var expirationTimer: Timer?

    var expiration: TimeInterval! {
        didSet {
            if let timer = self.expirationTimer {
                self.expired = false

        self.completionHandler = nil
    }

    // MARK: - functions

    internal func cancelRequest() {
        self.expired = true
        self.expirationTimer?.invalidate()
        self.timeOutHandler = nil
        self.expirationTimer = nil
    }

    // MARK: - NSTimer
    
    internal func handleTimerFired(_ timer: Timer) {
        DispatchQueue.main.async(execute: {
            self.expired = true
            self.expirationTimer?.invalidate()
