       if until > now, case .Value = result
       {
         dispatch_after(until, queue, self.createBlock(qos, block: {
-          do { try self.setResult(result) }
+          do { try self.determine(result) }
           catch { /* an error here seems means `self` was canceled before the delay ended */ }
         }))
       }
       else
       {
-        do { try self.setResult(result) }
+        do { try self.determine(result) }
         catch { /* an error here seems means `self` was canceled before `result` was ready */ }
       }
     }

      case .Value(let value):
        transform(value).notify(queue, qos: qos) {
          transformed in
          do { try self.setResult(transformed) }
          catch { /* an error here means `self` was canceled before `transform()` completed */ }
        }

      case .Error(let error):
        do { try self.setResult(Result(error: error)) }
        catch { /* an error here seems irrelevant */ }
      }
    }

      if self.isDetermined { return }
      self.beginExecution()
      let transformed = result.map(transform)
      do { try self.determine(transformed) }
      catch { /* an error here means `self` was canceled before `transform()` completed */ }
    }
  }
