 	return Signal { observer in
 		let state = Atomic(ThrottleState<T>())
 		let flush: () -> Void = {
-			let (_, doSend: (() -> Void)?) = state.modify { state in
+			let (_, doSend: (() -> Void)?) = state.modify { (var state) in
 				if let value = state.pendingValue {
 					let now = scheduler.currentDate
-					return (ThrottleState(previousDate: now, pendingValue: nil, scheduleDisposable: nil), { sendNext(observer, value) })
+					state.pendingValue = nil
+					state.scheduleDisposable = nil
+					return (state, { sendNext(observer, value) })
 				} else {
 					return (state, nil)
 				}

				}
				
				let compositeDisposable = CompositeDisposable()
				newState.scheduleDisposable = ScopedDisposable(compositeDisposable)
				return (newState, (scheduleDate, compositeDisposable))
			}

			let disposableFromScheduler = scheduler.scheduleAfter(scheduleDate) {

			doSend?()
		}
		return signal.observe(next: { value in
			let (_, (scheduleDate: NSDate, compositeDisposable: CompositeDisposable)) = state.modify { ( var state) in
				
				let now = scheduler.currentDate
				let prev = state.previousDate
