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

				for observer in liveObservers {
					observer.put(event)
				}

				lock.unlock()
			}
		}

		return (producer, bufferingObserver)


			// If not disposed…
			if let liveObservers = oldObservers {
				ReactiveCocoa.println("\(ObjectIdentifier(lock).hashValue) bufferingObserver() put()")
				if event.isTerminating {
					terminationEvent = event
