     @discardableResult public func finally<X>(block: @escaping () -> X) -> Promise<X> {
         tryStartInitialPromise()
         startPromiseIfNeeded()
-        return registerFinally(block: block)
-    }
-
-    @discardableResult public func registerFinally<X>(block: @escaping () -> X) -> Promise<X> {
         let p = Promise<X>()
         switch state {
         case .fulfilled:

    @discardableResult public func progress(block: @escaping (Float) -> Void) -> Promise<Void> {
        tryStartInitialPromise()
        startPromiseIfNeeded()
        return registerProgress(block)
    }
    
    public func registerProgress(_ block: @escaping (Float) -> Void) -> Promise<Void> {
        let p = Promise<Void>()
        switch state {
        case .fulfilled:

    @discardableResult public func onError(_ block: @escaping (Error) -> Void) -> Promise<Void> {
        tryStartInitialPromise()
        startPromiseIfNeeded()
        let p = Promise<Void>()
        switch state {
        case .fulfilled:
