diff --git a/libweaved/service.cc b/libweaved/service.cc
index 83a404d..037c037 100644
--- a/libweaved/service.cc
+++ b/libweaved/service.cc
@@ -18,6 +18,7 @@
 
 #include <base/bind.h>
 #include <base/memory/weak_ptr.h>
+#include <base/strings/stringprintf.h>
 #include <binderwrapper/binder_wrapper.h>
 #include <brillo/message_loops/message_loop.h>
 
@@ -163,13 +164,15 @@
                     const std::vector<std::string>& traits,
                     brillo::ErrorPtr* error) override;
   void AddCommandHandler(const std::string& component,
+                         const std::string& trait_name,
                          const std::string& command_name,
                          const CommandHandlerCallback& callback) override;
   bool SetStateProperties(const std::string& component,
                           const brillo::VariantDictionary& dict,
                           brillo::ErrorPtr* error) override;
   bool SetStateProperty(const std::string& component,
-                        const std::string& name,
+                        const std::string& trait_name,
+                        const std::string& property_name,
                         const brillo::Any& value,
                         brillo::ErrorPtr* error) override;
 
@@ -276,20 +279,24 @@
 }
 
 void ServiceImpl::AddCommandHandler(const std::string& component,
+                                    const std::string& trait_name,
                                     const std::string& command_name,
                                     const CommandHandlerCallback& callback) {
   CHECK(!component.empty() && !command_name.empty());
   CHECK(weave_service_.get());
 
+  std::string full_command_name =
+      base::StringPrintf("%s.%s", trait_name.c_str(), command_name.c_str());
+
   CommandHandlerEntry entry;
   entry.component = component;
-  entry.command_name = command_name;
+  entry.command_name = full_command_name;
   entry.callback = callback;
   command_handlers_.push_back(std::move(entry));
 
   auto status = weave_service_->registerCommandHandler(
       android::String16{component.c_str()},
-      android::String16{command_name.c_str()});
+      android::String16{full_command_name.c_str()});
   CHECK(status.isOk());
 }
 
@@ -307,9 +314,12 @@
 }
 
 bool ServiceImpl::SetStateProperty(const std::string& component,
-                                   const std::string& name,
+                                   const std::string& trait_name,
+                                   const std::string& property_name,
                                    const brillo::Any& value,
                                    brillo::ErrorPtr* error) {
+  std::string name =
+      base::StringPrintf("%s.%s", trait_name.c_str(), property_name.c_str());
   return SetStateProperties(component, brillo::VariantDictionary{{name, value}},
                             error);
 }
diff --git a/libweaved/service.h b/libweaved/service.h
index 7ae6824..415b230 100644
--- a/libweaved/service.h
+++ b/libweaved/service.h
@@ -54,10 +54,11 @@
                             brillo::ErrorPtr* error) = 0;
 
   // Sets handler for new commands added to the queue for a given |component|.
-  // |command_name| is the full name of the command to handle, including the
-  // name of the trait, e.g. "base.reboot".
+  // |command_name| is the name of the command to handle (e.g. "reboot").
+  // |trait_name| is the name of a trait the command belongs to (e.g. "base").
   // Each command can have no more than one handler.
   virtual void AddCommandHandler(const std::string& component,
+                                 const std::string& trait_name,
                                  const std::string& command_name,
                                  const CommandHandlerCallback& callback) = 0;
 
@@ -68,9 +69,12 @@
                                   brillo::ErrorPtr* error) = 0;
 
   // Sets value of the single property.
-  // |name| is full property name, including trait name. e.g. "base.network".
+  // |component| is a path to the component to set the property value to.
+  // |trait_name| is the name of the trait this property is part of.
+  // |property_name| is the property name.
   virtual bool SetStateProperty(const std::string& component,
-                                const std::string& name,
+                                const std::string& trait_name,
+                                const std::string& property_name,
                                 const brillo::Any& value,
                                 brillo::ErrorPtr* error) = 0;
 
