       }
    }
 }
+
+private extension SignalProducerType {
+   final func retainWhileWorking(object: AnyObject) -> SignalProducer<Self.Value, Self.Error> {
+      var retainedObject: AnyObject? = object
+      return self.on(terminated: {
+         retainedObject = nil
+      })
+   }
+}


            let videosParts =
               self.loadParts(request.videoParts.filter { $0 != request.part },
                              items: page.items,
                              type: Video.self)

            let channelParts =
               self.loadParts(request.channelParts.filter { $0 != request.part },
                              items: page.items,
                              type: Channel.self)

            return combineLatest(videosParts, channelParts)
               .map { videosById, channelsById -> Page<SearchItem> in

   }

   public func videos(request: Videos) -> SignalProducer<Page<Video>, NSError> {
      return self.page(request).retainWhileWorking(self.manager)
   }

   public func channels(request: Channels) -> SignalProducer<Page<Channel>, NSError> {
      return self.page(request).retainWhileWorking(self.manager)
   }

   public func search(request: Search) -> SignalProducer<Page<SearchItem>, NSError> {
