 			if let strongSelf = self {
 				var token: RemovalToken?
 
-				dispatch_sync(strongSelf.queue) {
+				dispatch_barrier_sync(strongSelf.queue) {
 					token = strongSelf.sinks.insert(sink)
 					sink.put(.Next(Box(strongSelf._value)))
 				}
 
 				disposable.addDisposable {
 					if let strongSelf = self {
-						dispatch_async(strongSelf.queue) {
+						dispatch_barrier_async(strongSelf.queue) {
 							strongSelf.sinks.removeValueForToken(token!)
 						}
 					}

	}

	deinit {
		dispatch_sync(queue) {
			for sink in self.sinks {
				sink.put(.Completed)
			}

		}

		set(value) {
			dispatch_barrier_sync(queue) {
				self._value = value

				for sink in self.sinks {
