     }
     #endif
     
-    func removeObservers(prefixID: String = #file) {
-        let prefixID = prefixID + "."
-    
-        didUpdateLocations.remove(where: { $0.id.hasPrefix(prefixID) })
-        didChangeAuthorization.remove(where: { $0.id.hasPrefix(prefixID) })
-        
-        #if os(iOS)
-        didUpdateHeading.remove(where: { $0.id.hasPrefix(prefixID) })
+    func removeObservers(with prefix: String) {
+        let prefix = prefix + "."
+    
+        didUpdateLocations.remove(where: { $0.id.hasPrefix(prefix) })
+        didChangeAuthorization.remove(where: { $0.id.hasPrefix(prefix) })
+        
+        #if os(iOS)
+        didUpdateHeading.remove(where: { $0.id.hasPrefix(prefix) })
         #endif
     }
 

    func addObserver(_ observer: Observer<AuthorizationHandler>)
    func removeObserver(_ observer: Observer<LocationHandler>)
    func removeObserver(_ observer: Observer<AuthorizationHandler>)
    func removeObservers(prefixID: String)
    
    #if os(iOS)
    typealias HeadingHandler = (CLHeading) -> Void
    var heading: CLHeading? { get }
    var didUpdateHeading: SynchronizedArray<Observer<HeadingHandler>> { get set }
    func startUpdatingHeading()
    func stopUpdatingHeading()
    func addObserver(_ observer: Observer<HeadingHandler>)
    func removeObserver(_ observer: Observer<HeadingHandler>)
    #endif
}

public class LocationManager: NSObject, LocationManagerType, CLLocationManagerDelegate {

    fileprivate var didChangeAuthorization = SynchronizedArray<Observer<AuthorizationHandler>>()
    
    #if os(iOS)
    fileprivate var didUpdateHeading = SynchronizedArray<Observer<HeadingHandler>>()
    #endif
    
    deinit {
