 			disposable += self.observe { event in
 				if case let .Next(value) = event {
 					var scheduleDate: NSDate!
-					state.modify { (var state) in
-						state.pendingValue = value
-
-						let proposedScheduleDate = state.previousDate?.dateByAddingTimeInterval(interval) ?? scheduler.currentDate
+					state.modify { state in
+						var mutableState = state
+						mutableState.pendingValue = value
+
+						let proposedScheduleDate = mutableState.previousDate?.dateByAddingTimeInterval(interval) ?? scheduler.currentDate
 						scheduleDate = proposedScheduleDate.laterDate(scheduler.currentDate)
 
-						return state
+						return mutableState
 					}
 
 					schedulerDisposable.innerDisposable = scheduler.scheduleAfter(scheduleDate) {
-						let previousState = state.modify { (var state) in
-							if state.pendingValue != nil {
-								state.pendingValue = nil
-								state.previousDate = scheduleDate
+						let previousState = state.modify { state in
+							var mutableState = state
+
+							if mutableState.pendingValue != nil {
+								mutableState.pendingValue = nil
+								mutableState.previousDate = scheduleDate
 							}
 
-							return state
+							return mutableState
 						}
 						
 						if let pendingValue = previousState.pendingValue {

			disposable += self.observe { event in
				switch event {
				case let .Next(value):
					state.modify { (var st) in
						st.latestValue = value
						return st
					}
				case let .Failed(error):
					observer.sendFailed(error)
				case .Completed:
					let oldState = state.modify { (var st) in
						st.signalCompleted = true
						return st
					}
					
					if oldState.samplerCompleted {


		var nextSignalProducer: SignalProducer<Value, Error>?

		queuedSignalProducers.modify { queue in
			// Active producers remain in the queue until completed. Since
			// dequeueing happens at completion of the active producer, the
			// first producer in the queue can be removed.
			var mutableQueue = queue
			if !mutableQueue.isEmpty { mutableQueue.removeAtIndex(0) }
			nextSignalProducer = mutableQueue.first
			return mutableQueue
		}

		return nextSignalProducer
