     return (signalA, signalB)
   }
   
-  //Skips n first values 
-  
-  public func skipFirst(n: Int) -> Signal<T> {
-    let nextSignal: Signal<T>
-    
-    if self is Observable<T> {
-      nextSignal = Observable<T>()
-    } else {
-      nextSignal = Pipe<T>()
-    }
-   
+  //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)

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

  
  public func map<U>(handler: T -> U) -> Signal<U> {
    var nextSignal: Signal<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)
