diff --git a/openzwavemqtt/models/command_class.py b/openzwavemqtt/models/command_class.py
index 0b702fd..fac4637 100644
--- a/openzwavemqtt/models/command_class.py
+++ b/openzwavemqtt/models/command_class.py
@@ -15,6 +15,8 @@ class OZWCommandClass(OZWNodeChildBase):
     EVENT_CHANGED = EVENT_COMMAND_CLASS_CHANGED
     EVENT_REMOVED = EVENT_COMMAND_CLASS_REMOVED
 
+    PLURAL_NAME = "commandclasses"
+
     @property
     def instance(self) -> int:
         """Return Instance."""
diff --git a/openzwavemqtt/models/instance.py b/openzwavemqtt/models/instance.py
index e404484..a6c7a35 100644
--- a/openzwavemqtt/models/instance.py
+++ b/openzwavemqtt/models/instance.py
@@ -49,14 +49,13 @@ class OZWInstance(ZWaveBase):
             "statistics": OZWInstanceStatistics,
         }
 
-    def send_message(self, topic, payload=""):
-        instance_id = self.id
+    def send_command(self, command: str, payload: str = ""):
         topic_prefix = self.options.topic_prefix
-        full_topic = f"{topic_prefix}{instance_id}/command/{topic}/"
-        self.options.sent_message(full_topic, payload)
+        full_topic = f"{topic_prefix}{self.id}/command/{command}/"
+        self.options.send_command(full_topic, payload)
 
     def add_node(self, secure=False):
-        self.send_message("addnode", {"secure": secure})
+        self.send_command("addnode", {"secure": secure})
 
     def cancel_controller_command(self):
-        self.send_message("cancelcontrollercommand")
+        self.send_command("cancelcontrollercommand")
diff --git a/openzwavemqtt/models/node.py b/openzwavemqtt/models/node.py
index 2831349..3ade28b 100644
--- a/openzwavemqtt/models/node.py
+++ b/openzwavemqtt/models/node.py
@@ -199,6 +199,17 @@ class OZWNode(ZWaveBase):
         """Return Neighbors."""
         return self.data.get("Neighbors")
 
+    @property
+    def values(self):
+        """Return list of OZWValue child items."""
+        _values = []
+        for instance in self.collections["instance"]:
+            for cc in instance.collections["commandclass"]:
+                for value in cc.collections["value"]:
+                    _values.append(value)
+
+        return _values
+
     def create_collections(self):
         """Create collections that Node supports."""
         return {
diff --git a/openzwavemqtt/options.py b/openzwavemqtt/options.py
index f8e8e03..041d147 100644
--- a/openzwavemqtt/options.py
+++ b/openzwavemqtt/options.py
@@ -5,10 +5,10 @@ from typing import Callable
 class OZWOptions:
     def __init__(
         self,
-        sent_message: Callable[[str, dict], None],
+        send_message: Callable[[str, dict], None],
         topic_prefix: str = "OpenZWave/",
     ):
-        self.sent_message = sent_message
+        self.send_message = send_message
         self.topic_prefix = topic_prefix
         self.listeners = {}
 

Rename option `sent_message` to `send_message`
It is a typo 🤦‍♂ 
diff --git a/test/models/test_value.py b/test/models/test_value.py
index 478074e..e6e53d9 100644
--- a/test/models/test_value.py
+++ b/test/models/test_value.py
@@ -23,6 +23,9 @@ def test_value_events(mgr):
     assert events[0].value == "yo"
     assert events[0].parent.id == "4"
 
+    # Test OZWNode.values shortcut
+    assert mgr.get_instance("1").get_node("2").values[0].id == "3"
+
     # Listen for value changed
     mgr.options.listen(EVENT_VALUE_CHANGED, events.append)
     mgr.mock_receive_json(
@@ -34,10 +37,7 @@ def test_value_events(mgr):
 
     # Show how to use collection helpers
     assert (
-        mgr.get_instance("1")
-        .get_node("2")
-        .get_instance("1")
-        .get_commandclass("4")
+        list(mgr.get_instance("1").get_node("2").get_instance("1").commandclasses())[0]
         .get_value("3")
         .value
         == "yo2"

pip install -e .[test]
parse_log_pytest
pytest
pytest
pip install -U pip pip install -U pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
exceptiongroup==1.2.2
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.4.4
-e git+https://github.com/cgarwood/python-openzwave-mqtt.git@aa4ba281c9750e9cdd4e07afcaf18dbc741b6a78#egg=python_openzwave_mqtt
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: python-openzwave-mqtt
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - exceptiongroup==1.2.2
      - pip==24.0
      - pytest==7.4.4
prefix: /opt/conda/envs/python-openzwave-mqtt

test/models/test_value.py::test_value_events
openzwavemqtt/models/command_class.py openzwavemqtt/options.py openzwavemqtt/models/node.py openzwavemqtt/models/instance.py
openzwavemqtt/models/command_class.py openzwavemqtt/options.py openzwavemqtt/models/node.py openzwavemqtt/models/instance.py