 		observers = []
 	}
 
+	private func notifyObservers() {
+		for observer in observers {
+			observer.stateDidUpdateHandler()
+		}
+	}
+
+	// MARK: Slicing
+
 	public func toLightTargets() -> [LightTarget] {
 		return lights.map { (light) in return self.client.lightTargetWithSelector(Selector(type: .ID, value: light.id)) }
 	}

		let oldColor = self.color
		client.updateLights(lights.map({ $0.lightWithColor(newColor, andBrightness: newBrightness) }))
		client.session.setLightsColor(selector.toQueryStringValue(), color: newColor.toQueryStringValue(newBrightness), duration: duration, powerOn: powerOn) { [unowned self] (request, response, results, error) in
			var newLights = self.lights(self.lights, byDeterminingConnectivityWithResults: results)
			if error != nil {
				newLights = newLights.map({ $0.lightWithColor(oldColor, andBrightness: oldBrightness) })
			}


		self.client = client
		clientObserver = client.addObserver { [unowned self] (lights) in
			self.updateLights(lights)
		}

		updateLights(client.lights)
	}

	deinit {
		client.removeObserver(clientObserver)
	}

	// MARK: Observers

	public func addObserver(stateDidUpdateHandler: LightTargetObserver.StateDidUpdate) -> LightTargetObserver {
		let observer = LightTargetObserver(stateDidUpdateHandler: stateDidUpdateHandler)
