 				for observer in liveObservers {
 					observer.put(event)
 				}
-
-				lock.unlock()
-			}
+			}
+			
+			lock.unlock()
 		}
 
 		return (producer, bufferingObserver)


			// If not disposed…
			if let liveObservers = oldObservers {
				lock.lock()

				ReactiveCocoa.println("\(ObjectIdentifier(lock).hashValue) bufferingObserver() put()")
				if event.isTerminating {
					terminationEvent = event

		}

		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 {
