 		cancel()
 	}
 	
-	// Method must be called from *INSIDE* mutex (although, it must be *OUTSIDE* the tailObserver's mutex).
+	// This method is called when the key path between the source and the observed property changes. This will recursively create KeyValueObservers along the path.
+	//
+	// Mutex notes: Method must be called from *INSIDE* mutex (although, it must be *OUTSIDE* the tailObserver's mutex).
 	private func updateTailObserver(onValue: NSObject?, isInitial: Bool) {
 		tailObserver?.cancel()
 		tailObserver = nil

		cancel(.cancelled)
	}
	
	// Method is called *OUTSIDE* mutex
	private func cancel(_ reason: CallbackReason) {
		let cb = mutex.sync { () -> Callback? in
			guard let c = callback else { return nil }

		}
	}
	
	// This method is called from the `tailObserver` (representing a change in the key path, not the observed property)
	//
	// Mutex notes: Method is called *OUTSIDE* mutex since it is used as a callback function for the `tailObserver`
	private func tailCallback(_ change: [NSKeyValueChangeKey: Any], reason: CallbackReason) {
		switch reason {
		case .cancelled:
