 
 			var token: RemovalToken?
 			observers.modify { (var observers) in
+				ReactiveCocoa.println("\(ObjectIdentifier(lock).hashValue) producer() modify()")
 				token = observers?.insert(observer)
 				return observers
 			}
 
+			ReactiveCocoa.println("\(ObjectIdentifier(lock).hashValue) producer() put()")
 			for event in events {
 				observer.put(event)
 			}

			if let liveObservers = oldObservers {
				lock.lock()

				if event.isTerminating {
					terminationEvent = event
				} else {


		let bufferingObserver = Signal<T, E>.Observer { event in
			let oldObservers = observers.modify { (var observers) in
				ReactiveCocoa.println("\(ObjectIdentifier(lock).hashValue) bufferingObserver() modify()")
				if event.isTerminating {
					return nil
				} else {
