diff --git a/Implab/IPromise.cs b/Implab/IPromise.cs
--- a/Implab/IPromise.cs
+++ b/Implab/IPromise.cs
@@ -18,7 +18,7 @@ namespace Implab {
         Type PromiseType { get; }
 
         /// 
-        /// Обещание является выполненым, либо успешно, либо с ошибкой.
+        /// Обещание является выполненым, либо успешно, либо с ошибкой, либо отменено.
         /// 
         bool IsResolved { get; }
 
diff --git a/Implab/Promise.cs b/Implab/Promise.cs
--- a/Implab/Promise.cs
+++ b/Implab/Promise.cs
@@ -73,9 +73,9 @@ namespace Implab {
                         var res = errorHandler(err);
                         if (medium != null)
                             medium.Resolve(res);
-                    } catch (TransientPromiseException err2) {
+                        /*} catch (TransientPromiseException err2) {
                         if (medium != null)
-                            medium.Reject(err2.InnerException);
+                            medium.Reject(err2.InnerException);*/
                     } catch (Exception err2) {
                         if (medium != null)
                             medium.Reject(err2);
@@ -203,7 +203,7 @@ namespace Implab {
         /// Данное обещание уже выполнено
         public void Reject(Exception error) {
             if (BeginTransit()) {
-                m_error = error;
+                m_error = error is TransientPromiseException ? error.InnerException : error;
                 CompleteTransit(REJECTED_STATE);
                 OnStateChanged();
             } else {