 
 		self.client = client
 		clientObserver = client.addObserver { [unowned self] (lights) in
-			self.setLightsByApplyingFilterWithLights(lights)
-		}
-
-		setLightsByApplyingFilterWithLights(client.lights)
+			self.updateLights(lights)
+		}
+
+		updateLights(client.lights)
 	}
 
 	deinit {
 		client.removeObserver(clientObserver)
 	}
+
+	// MARK: Observers
 
 	public func addObserver(stateDidUpdateHandler: LightTargetObserver.StateDidUpdate) -> LightTargetObserver {
 		let observer = LightTargetObserver(stateDidUpdateHandler: stateDidUpdateHandler)

			return light
		}
	}

	private func dirtyCheck() {
		var dirty = false

	public func toLights() -> [Light] {
		return lights
	}

	// MARK: Lighting Operations

	public func setPower(power: Bool, duration: Float = LightTarget.defaultDuration, completionHandler: ((results: [Result], error: NSError?) -> Void)? = nil) {
		let newPower = power
		let oldPower = self.power
		client.updateLights(lights.map({ $0.lightWithPower(newPower) }))
		client.session.setLightsPower(selector.toQueryStringValue(), power: newPower, duration: duration) { [unowned self] (request, response, results, error) in
			var newLights = self.lightsByDeterminingConnectivityWithResults(self.lights, results: results)
			if error != nil {
				newLights = newLights.map({ $0.lightWithPower(oldPower) })
			}
