diff --git a/examples/daemon/light/light.cc b/examples/daemon/light/light.cc
index 484b9e1..d54de93 100644
--- a/examples/daemon/light/light.cc
+++ b/examples/daemon/light/light.cc
@@ -19,12 +19,44 @@
 
     device->AddStateDefinitionsFromJson(R"({
       "onOff": {"state": ["on", "standby"]},
-      "brightness": {"brightness": "integer"}
+      "brightness": {"brightness": "integer"},
+      "colorXY": {
+        "colorSetting": {
+          "properties": {
+            "colorX": {"minimum": 0.0, "maximum": 1.0},
+            "colorY": {"minimum": 0.0, "maximum": 1.0}
+          }
+        },
+        "colorCapRed": {
+          "properties": {
+            "colorX": {"minimum": 0.0, "maximum": 1.0},
+            "colorY": {"minimum": 0.0, "maximum": 1.0}
+          }
+        },
+        "colorCapGreen": {
+          "properties": {
+            "colorX": {"minimum": 0.0, "maximum": 1.0},
+            "colorY": {"minimum": 0.0, "maximum": 1.0}
+          }
+        },
+        "colorCapBlue": {
+          "properties": {
+            "colorX": {"minimum": 0.0, "maximum": 1.0},
+            "colorY": {"minimum": 0.0, "maximum": 1.0}
+          }
+        }
+      }
     })");
 
     device->SetStatePropertiesFromJson(R"({
       "onOff":{"state": "standby"},
-      "brightness":{"brightness": 0}
+      "brightness":{"brightness": 0},
+      "colorXY": {
+        "colorSetting": {"colorX": 0, "colorY": 0},
+        "colorCapRed":  {"colorX": 0.674, "colorY": 0.322},
+        "colorCapGreen":{"colorX": 0.408, "colorY": 0.517},
+        "colorCapBlue": {"colorX": 0.168, "colorY": 0.041}
+      }
     })",
                                        nullptr);
 
@@ -46,6 +78,28 @@
              }
            }
         }
+      },
+      "_colorXY": {
+        "_setConfig": {
+          "minimalRole": "user",
+          "parameters": {
+            "_colorSetting": {
+              "type": "object",
+              "properties": {
+                "_colorX": {
+                  "type": "number",
+                  "minimum": 0,
+                  "maximum": 1
+                },
+                "_colorY": {
+                  "type": "number",
+                  "minimum": 0,
+                  "maximum": 1
+                }
+              }
+            }
+          }
+        }
       }
     })");
     device->AddCommandHandler("onOff.setConfig",
@@ -54,6 +108,9 @@
     device->AddCommandHandler("brightness.setConfig",
                               base::Bind(&LightHandler::OnBrightnessSetConfig,
                                          weak_ptr_factory_.GetWeakPtr()));
+    device->AddCommandHandler("_colorXY._setConfig",
+                              base::Bind(&LightHandler::OnColorXYSetConfig,
+                                         weak_ptr_factory_.GetWeakPtr()));
   }
 
  private:
@@ -105,11 +162,51 @@
     cmd->Abort(error.get(), nullptr);
   }
 
+  void OnColorXYSetConfig(const std::weak_ptr<weave::Command>& command) {
+    auto cmd = command.lock();
+    if (!cmd)
+      return;
+    LOG(INFO) << "received command: " << cmd->GetName();
+    auto params = cmd->GetParameters();
+    base::DictionaryValue* colorXY = nullptr;
+    if (params->GetDictionary("_colorSetting", &colorXY)) {
+      bool updateState = false;
+      double X = 0.0;
+      double Y = 0.0;
+      if (colorXY->GetDouble("_colorX", &X)) {
+        color_X_ = X;
+        updateState = true;
+      }
+
+      if (colorXY->GetDouble("_colorY", &Y)) {
+        color_Y_ = Y;
+        updateState = true;
+      }
+
+      if (updateState)
+        UpdateLightState();
+
+      cmd->Complete({}, nullptr);
+      return;
+    }
+
+    weave::ErrorPtr error;
+    weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+                        "Invalid parameters");
+    cmd->Abort(error.get(), nullptr);
+  }
+
   void UpdateLightState() {
     base::DictionaryValue state;
     state.SetString("onOff.state", light_status_ ? "on" : "standby");
     state.SetInteger("brightness.brightness", brightness_state_);
+
+    std::unique_ptr<base::DictionaryValue> colorXY(new base::DictionaryValue());
+    colorXY->SetDouble("colorX", color_X_);
+    colorXY->SetDouble("colorY", color_Y_);
+    state.Set("colorXY.colorSetting", colorXY.get());
     device_->SetStateProperties(state, nullptr);
+    colorXY.release();
   }
 
   weave::Device* device_{nullptr};
@@ -117,6 +214,8 @@
   // Simulate the state of the light.
   bool light_status_;
   int32_t brightness_state_;
+  double color_X_{0.0};
+  double color_Y_{0.0};
   base::WeakPtrFactory<LightHandler> weak_ptr_factory_{this};
 };
 
