     chainSignal(nextSignal)
     
     return nextSignal
-  }
-  
-  //Sends combined value when any of signals fires and both signals have last passed value
-  
-  public func combineNoNull<U>(otherSignal: Signal<U>) -> Signal<(T, U)> {
-    return combineLatest(otherSignal).filter { $0 != nil && $1 != nil }.map { ($0!, $1!) }
   }
   
   //Sends combined value every time when both signals fire at least once

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

    return (signalA, signalB)
  }
  
  //Skips n first values
  
  public func skipFirst(n: Int) -> Pipe<T> {
    let nextSignal = Pipe<T>()
    
    var count = 0
    
    subscribeNext { [weak nextSignal] in
      if count >= n {
        nextSignal?.sendNext($0)
