     /// - Returns: The handle of the node that used to follow the removed node in the original tree, or nil if 
     ///   `handle` was at the rightmost position.
     /// - Complexity: O(log(count))
-    public mutating func removeAndReturnSuccessor(handle: Handle) -> Handle? {
+    public mutating func removeAndReturnSuccessor(handle: Handle) -> (Handle?, Payload) {
         return _remove(handle, successor: successor(handle))
     }
 

        return Config.compare(key, to: self[handle].head, reducedPrefix: reduction)
    }


    public mutating func insert(key: Key, payload: Payload) -> Handle {
        func insertionSlotOf(key: Key) -> Slot {

    /// - Note: You need to discard your existing handles into the tree after you call this method.
    /// - SeeAlso: `removeAndReturnSuccessor`
    /// - Complexity: O(log(count))
    public mutating func remove(handle: Handle) -> Payload {
        return _remove(handle, successor: nil).1
    }

    /// Remove a node, keeping track of its successor.
    /// - Returns: The handle of `successor` after the removal.
    private mutating func _remove(handle: Handle, successor: Handle?) -> (Handle?, Payload) {
        assert(handle != successor)
        // Fixme: Removing from a red-black tree is one ugly algorithm.
        let node = self[handle]
