diff --git a/libweave/src/commands/command_manager.cc b/libweave/src/commands/command_manager.cc
index 70e804b..746d9ad 100644
--- a/libweave/src/commands/command_manager.cc
+++ b/libweave/src/commands/command_manager.cc
@@ -15,7 +15,7 @@
 
 namespace {
 
-const char kBaseCommandDefs[] = R"({
+const char kStandardCommandDefs[] = R"({
   "base": {
     "updateBaseConfiguration": {
       "minimalRole": "manager",
@@ -63,22 +63,22 @@
   return dictionary_;
 }
 
-bool CommandManager::LoadBaseCommands(const base::DictionaryValue& dict,
-                                      ErrorPtr* error) {
-  return base_dictionary_.LoadCommands(dict, nullptr, error);
+bool CommandManager::LoadStandardCommands(const base::DictionaryValue& dict,
+                                          ErrorPtr* error) {
+  return standard_dictionary_.LoadCommands(dict, nullptr, error);
 }
 
-bool CommandManager::LoadBaseCommands(const std::string& json,
-                                      ErrorPtr* error) {
+bool CommandManager::LoadStandardCommands(const std::string& json,
+                                          ErrorPtr* error) {
   std::unique_ptr<const base::DictionaryValue> dict = LoadJsonDict(json, error);
   if (!dict)
     return false;
-  return LoadBaseCommands(*dict, error);
+  return LoadStandardCommands(*dict, error);
 }
 
 bool CommandManager::LoadCommands(const base::DictionaryValue& dict,
                                   ErrorPtr* error) {
-  bool result = dictionary_.LoadCommands(dict, &base_dictionary_, error);
+  bool result = dictionary_.LoadCommands(dict, &standard_dictionary_, error);
   for (const auto& cb : on_command_changed_)
     cb.Run();
   return result;
@@ -96,7 +96,7 @@
   LOG(INFO) << "Initializing CommandManager.";
 
   // Load global standard GCD command dictionary.
-  CHECK(LoadBaseCommands(kBaseCommandDefs, nullptr));
+  CHECK(LoadStandardCommands(kStandardCommandDefs, nullptr));
 }
 
 void CommandManager::AddCommand(
diff --git a/libweave/src/commands/command_manager.h b/libweave/src/commands/command_manager.h
index e2b212e..ee8aa69 100644
--- a/libweave/src/commands/command_manager.h
+++ b/libweave/src/commands/command_manager.h
@@ -44,18 +44,18 @@
   // Returns the command definitions for the device.
   const CommandDictionary& GetCommandDictionary() const;
 
-  // Loads base/standard GCD command definitions.
+  // Loads standard GCD command definitions.
   // |dict| is the full JSON schema of standard GCD commands. These commands
   // are not necessarily supported by a particular device but rather
   // all the standard commands defined by GCD standard for all known/supported
   // device kinds.
   // On success, returns true. Otherwise, |error| contains additional
   // error information.
-  bool LoadBaseCommands(const base::DictionaryValue& dict, ErrorPtr* error);
+  bool LoadStandardCommands(const base::DictionaryValue& dict, ErrorPtr* error);
 
   // Same as the overload above, but takes a path to a json file to read
   // the base command definitions from.
-  bool LoadBaseCommands(const std::string& json, ErrorPtr* error);
+  bool LoadStandardCommands(const std::string& json, ErrorPtr* error);
 
   // Loads device command schema.
   bool LoadCommands(const base::DictionaryValue& dict,
@@ -84,8 +84,8 @@
                   ErrorPtr* error);
 
  private:
-  CommandDictionary base_dictionary_;  // Base/std command definitions/schemas.
-  CommandDictionary dictionary_;       // Command definitions/schemas.
+  CommandDictionary standard_dictionary_;  // Standard command definitions.
+  CommandDictionary dictionary_;           // Registered definitions.
   CommandQueue command_queue_;
   std::vector<base::Callback<void()>> on_command_changed_;
   uint32_t next_command_id_{0};
diff --git a/libweave/src/commands/command_manager_unittest.cc b/libweave/src/commands/command_manager_unittest.cc
index aacf30c..ff8c5d8 100644
--- a/libweave/src/commands/command_manager_unittest.cc
+++ b/libweave/src/commands/command_manager_unittest.cc
@@ -63,10 +63,10 @@
   EXPECT_TRUE(manager.GetCommandDictionary().IsEmpty());
 }
 
-TEST(CommandManager, LoadBaseCommandsJSON) {
+TEST(CommandManager, LoadStandardCommandsJSON) {
   CommandManager manager;
   auto json = CreateDictionaryValue(kTestBaseCommands);
-  EXPECT_TRUE(manager.LoadBaseCommands(*json, nullptr));
+  EXPECT_TRUE(manager.LoadStandardCommands(*json, nullptr));
 }
 
 TEST(CommandManager, LoadCommandsDict) {
@@ -90,7 +90,7 @@
       }
     }
   })");
-  manager.LoadBaseCommands(*json, nullptr);
+  manager.LoadStandardCommands(*json, nullptr);
 
   // Load device-supported commands.
   auto json_str = R"({
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index a885b7b..a07ea40 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -364,7 +364,7 @@
       }
     }
   })");
-  EXPECT_TRUE(command_manager_->LoadBaseCommands(*json_base, nullptr));
+  EXPECT_TRUE(command_manager_->LoadStandardCommands(*json_base, nullptr));
   auto json_cmds = CreateDictionaryValue(R"({
     'base': {
       'reboot': {
diff --git a/libweave/src/states/state_manager.cc b/libweave/src/states/state_manager.cc
index f629aa1..52a92a6 100644
--- a/libweave/src/states/state_manager.cc
+++ b/libweave/src/states/state_manager.cc
@@ -17,7 +17,7 @@
 
 namespace {
 
-const char kBaseStateDefs[] = R"({
+const char kStandardStateDefs[] = R"({
   "base": {
     "firmwareVersion": "string",
     "localDiscoveryEnabled": "boolean",
@@ -31,7 +31,7 @@
   }
 })";
 
-const char kBaseStateDefaults[] = R"({
+const char kStandardStateDefaults[] = R"({
   "base": {
     "firmwareVersion": "unknown",
     "localDiscoveryEnabled": false,
@@ -57,10 +57,10 @@
   LOG(INFO) << "Initializing StateManager.";
 
   // Load standard device state definition.
-  CHECK(LoadBaseStateDefinition(kBaseStateDefs, nullptr));
+  CHECK(LoadStandardStateDefinition(kStandardStateDefs, nullptr));
 
   // Load standard device state defaults.
-  CHECK(SetPropertiesFromJson(kBaseStateDefaults, nullptr));
+  CHECK(SetPropertiesFromJson(kStandardStateDefaults, nullptr));
 
   for (const auto& cb : on_changed_)
     cb.Run();
@@ -189,8 +189,8 @@
   return true;
 }
 
-bool StateManager::LoadBaseStateDefinition(const std::string& json,
-                                           ErrorPtr* error) {
+bool StateManager::LoadStandardStateDefinition(const std::string& json,
+                                               ErrorPtr* error) {
   std::unique_ptr<const base::DictionaryValue> dict = LoadJsonDict(json, error);
   if (!dict)
     return false;
diff --git a/libweave/src/states/state_manager.h b/libweave/src/states/state_manager.h
index 2e2e002..b714c51 100644
--- a/libweave/src/states/state_manager.h
+++ b/libweave/src/states/state_manager.h
@@ -76,7 +76,7 @@
   // Loads the base device state fragment JSON. This state fragment
   // defines the standard state properties from the 'base' package as defined
   // by GCD specification.
-  bool LoadBaseStateDefinition(const std::string& json, ErrorPtr* error);
+  bool LoadStandardStateDefinition(const std::string& json, ErrorPtr* error);
 
   // Finds a package by its name. Returns nullptr if not found.
   StatePackage* FindPackage(const std::string& package_name);
