   
   public func map<U>(handler: T -> U) -> Signal<U> {
     var nextSignal: Signal<U>!
-    if self is Observable { nextSignal = Observable<U>() }
+    if let observableSelf = self as? Observable<T> {
+      nextSignal = Observable<U>(handler(observableSelf.value))
+    }
     else { nextSignal = Pipe<U>() }
     subscribeNext { [weak nextSignal] in nextSignal?.sendNext(handler($0)) }.putInto(nextSignal.pool)
     chainSignal(nextSignal)

  public func combineLatest<U>(otherSignal: Signal<U>) -> Signal<(T?, U?)> {
    let persistentSelf = observable()
    let persistentOther = otherSignal.observable()
    
    let nextSignal = Observable<(T?, U?)>()
    

  
  //Adds a condition for sending next value, doesn't change passed value type
  
  public func filter(handler: T -> Bool) -> Pipe<T> {
    let nextSignal = Pipe<T>()
    subscribeNext { [weak nextSignal] in
      if handler($0) { nextSignal?.sendNext($0) }
      }.putInto(nextSignal.pool)
