 	/// Returns a Disposable which can be used to cancel the work associated
 	/// with the Signal, and prevent any future callbacks from being invoked.
 	public func start(next: T -> () = doNothing, error: NSError -> () = doNothing, completed: () -> () = doNothing) -> Disposable {
-		return start { signal, disposable in
-			signal.observe(next: next, error: error, completed: completed)
-			return
-		}
+		return start(Event.sink(next: next, error: error, completed: completed))
 	}
 
 	/// Lifts a Signal operator to operate upon SignalProducers instead.

	///
	/// Returns a Disposable which can be used to cancel the work associated
	/// with the Signal, and prevent any future events from being sent.
	public func start(setUp: (Signal<T>, CompositeDisposable) -> ()) -> Disposable {
		let (signal, observer) = Signal<T>.pipe()
		setUp(signal, signal.disposable)

		if !signal.disposable.disposed {
			startHandler(observer, signal.disposable)
		}

		return signal.disposable
	}

	/// Creates a Signal from the producer, then attaches the given sink to the

	/// with the Signal, and prevent any future events from being put into the
	/// sink.
	public func start<S: SinkType where S.Element == Event<T>>(sink: S) -> Disposable {
		var disposable: Disposable!

		start { signal, innerDisposable in
			signal.observe(sink)
			disposable = innerDisposable
		}

		return disposable
	}

	/// Creates a Signal from the producer, then adds exactly one observer to
