   (-on-error [_ error] "Subscription error notification hook.")
   (-on-end [_] "Subscription termination notification hook."))
 
-(defprotocol ICancellable
-  (-cancel [_] "dispose resources."))
-
-(defn cancel!
+(defprotocol IDisposable
+  (-dispose [_] "dispose resources."))
+
+(defn dispose!
   "Dispose resources acquired by the subscription."
   [v]
-  (-cancel v))
+  (-dispose v))
+
+;; Alias
+(def unsub! dispose!)
+(def cancel! dispose!)
 
 (defn- wrap-disposable
   [disposable]
   (specify! disposable
-    ICancellable
-    (-cancel [this]
+    IFn
+    (-invoke ([this] (-dispose this)))
+    IDisposable
+    (-dispose [this]
       (.unsubscribe this))))
 
 (defn subscribe-with

  or array/iterable into one observable sequence.

  In other languages is called: flatMap or mergeMap."
  ([ob] (merge-map identity ob))
  ([f ob] (pipe ob (.flatMap rxop #(f %)))))

;; Aliases
(def fmap merge-map)

  "Projects each element of an observable sequence to an observable
  sequence and concatenates the resulting observable sequences or
  Promises or array/iterable into one observable sequence."
  [f ob]
  (pipe ob (.concatMap rxop #(f %))))

(defn mapcat-indexed
  [f ob]
  (pipe ob (.concatMap rxop #(f %2 %1))))

(defn merge-all
  ([ob] (pipe ob (.mergeAll rxop)))
  ([^number concurrency ob]
   (pipe ob (.mergeAll rxop concurrency))))

(defn concat-all
  [ob]
  (pipe ob (.concatAll rxop)))

(defn skip
  "Bypasses a specified number of elements in an
