     queue immediately. An `upon` call is always executed asynchronously.
     
     :param: queue A dispatch queue for executing the given function on.
-    :param: function A function that uses the determined value.
-    */
-    public func upon(queue: dispatch_queue_t = genericQueue, function: Value -> ()) {
+    :param: body A function that uses the determined value.
+    */
+    public func upon(queue: dispatch_queue_t = genericQueue, body: Value -> ()) {
         _ = upon(options: DISPATCH_BLOCK_INHERIT_QOS_CLASS) { value in
             dispatch_async(queue) {
-                function(value)
+                body(value)
             }
         }
     }

            let storage = storageRef.takeUnretainedValue()

            let value = storage.value
            function(value)
        }
        dispatch_block_notify(onFilled, accessQueue, block)
        return block

        onFilled()
    }

    private func upon(options inFlags: dispatch_block_flags_t, body: Value -> Void) -> dispatch_block_t {
        let flags = dispatch_block_flags_t(inFlags.rawValue | DISPATCH_BLOCK_ASSIGN_CURRENT.rawValue)
        let block = dispatch_block_create(flags) {
            let storagePtr = dispatch_get_specific(&DeferredStorageKey)
