diff --git a/libweave/include/weave/command.h b/libweave/include/weave/command.h
index c09da32..1df24b8 100644
--- a/libweave/include/weave/command.h
+++ b/libweave/include/weave/command.h
@@ -12,32 +12,32 @@
 
 namespace weave {
 
-enum class CommandStatus {
-  kQueued,
-  kInProgress,
-  kPaused,
-  kError,
-  kDone,
-  kCancelled,
-  kAborted,
-  kExpired,
-};
-
-enum class CommandOrigin { kLocal, kCloud };
-
 class Command {
  public:
+  enum class State {
+    kQueued,
+    kInProgress,
+    kPaused,
+    kError,
+    kDone,
+    kCancelled,
+    kAborted,
+    kExpired,
+  };
+
+  enum class Origin { kLocal, kCloud };
+
   // Returns the full command ID.
   virtual const std::string& GetID() const = 0;
 
   // Returns the full name of the command.
   virtual const std::string& GetName() const = 0;
 
-  // Returns the command status.
-  virtual CommandStatus GetStatus() const = 0;
+  // Returns the command state.
+  virtual Command::State GetState() const = 0;
 
   // Returns the origin of the command.
-  virtual CommandOrigin GetOrigin() const = 0;
+  virtual Command::Origin GetOrigin() const = 0;
 
   // Returns the command parameters.
   virtual std::unique_ptr<base::DictionaryValue> GetParameters() const = 0;
diff --git a/libweave/include/weave/test/mock_command.h b/libweave/include/weave/test/mock_command.h
index c4324df..93fe1c2 100644
--- a/libweave/include/weave/test/mock_command.h
+++ b/libweave/include/weave/test/mock_command.h
@@ -23,8 +23,8 @@
   MOCK_CONST_METHOD0(GetID, const std::string&());
   MOCK_CONST_METHOD0(GetName, const std::string&());
   MOCK_CONST_METHOD0(GetCategory, const std::string&());
-  MOCK_CONST_METHOD0(GetStatus, CommandStatus());
-  MOCK_CONST_METHOD0(GetOrigin, CommandOrigin());
+  MOCK_CONST_METHOD0(GetState, Command::State());
+  MOCK_CONST_METHOD0(GetOrigin, Command::Origin());
   MOCK_CONST_METHOD0(MockGetParameters, const std::string&());
   MOCK_CONST_METHOD0(MockGetProgress, const std::string&());
   MOCK_CONST_METHOD0(MockGetResults, const std::string&());
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index 273162a..5d69b58 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -52,8 +52,8 @@
   auto command = cmd.lock();
   if (!command)
     return;
-  CHECK(command->GetStatus() == CommandStatus::kQueued)
-      << EnumToString(command->GetStatus());
+  CHECK(command->GetState() == Command::State::kQueued)
+      << EnumToString(command->GetState());
   command->SetProgress(base::DictionaryValue{}, nullptr);
 
   const auto& settings = device_info_->GetSettings();
@@ -98,8 +98,8 @@
   auto command = cmd.lock();
   if (!command)
     return;
-  CHECK(command->GetStatus() == CommandStatus::kQueued)
-      << EnumToString(command->GetStatus());
+  CHECK(command->GetState() == Command::State::kQueued)
+      << EnumToString(command->GetState());
   command->SetProgress(base::DictionaryValue{}, nullptr);
 
   const auto& settings = device_info_->GetSettings();
diff --git a/libweave/src/base_api_handler_unittest.cc b/libweave/src/base_api_handler_unittest.cc
index 8de1169..147fec1 100644
--- a/libweave/src/base_api_handler_unittest.cc
+++ b/libweave/src/base_api_handler_unittest.cc
@@ -64,15 +64,15 @@
   void AddCommand(const std::string& command) {
     auto command_instance = CommandInstance::FromJson(
         test::CreateDictionaryValue(command.c_str()).get(),
-        CommandOrigin::kLocal, command_manager_->GetCommandDictionary(),
+        Command::Origin::kLocal, command_manager_->GetCommandDictionary(),
         nullptr, nullptr);
     EXPECT_TRUE(!!command_instance);
 
     std::string id{base::IntToString(++command_id_)};
     command_instance->SetID(id);
     command_manager_->AddCommand(std::move(command_instance));
-    EXPECT_EQ(CommandStatus::kDone,
-              command_manager_->FindCommand(id)->GetStatus());
+    EXPECT_EQ(Command::State::kDone,
+              command_manager_->FindCommand(id)->GetState());
   }
 
   provider::test::MockConfigStore config_store_;
diff --git a/libweave/src/commands/cloud_command_proxy.cc b/libweave/src/commands/cloud_command_proxy.cc
index 9d7a9d1..3826378 100644
--- a/libweave/src/commands/cloud_command_proxy.cc
+++ b/libweave/src/commands/cloud_command_proxy.cc
@@ -49,10 +49,10 @@
   QueueCommandUpdate(std::move(patch));
 }
 
-void CloudCommandProxy::OnStatusChanged() {
+void CloudCommandProxy::OnStateChanged() {
   std::unique_ptr<base::DictionaryValue> patch{new base::DictionaryValue};
   patch->SetString(commands::attributes::kCommand_State,
-                   EnumToString(command_instance_->GetStatus()));
+                   EnumToString(command_instance_->GetState()));
   QueueCommandUpdate(std::move(patch));
 }
 
diff --git a/libweave/src/commands/cloud_command_proxy.h b/libweave/src/commands/cloud_command_proxy.h
index 12432df..86dc5d3 100644
--- a/libweave/src/commands/cloud_command_proxy.h
+++ b/libweave/src/commands/cloud_command_proxy.h
@@ -43,7 +43,7 @@
   void OnErrorChanged() override;
   void OnProgressChanged() override;
   void OnResultsChanged() override;
-  void OnStatusChanged() override;
+  void OnStateChanged() override;
 
  private:
   using UpdateID = StateChangeQueueInterface::UpdateID;
diff --git a/libweave/src/commands/cloud_command_proxy_unittest.cc b/libweave/src/commands/cloud_command_proxy_unittest.cc
index f91e26c..c5863b6 100644
--- a/libweave/src/commands/cloud_command_proxy_unittest.cc
+++ b/libweave/src/commands/cloud_command_proxy_unittest.cc
@@ -113,7 +113,7 @@
     CHECK(command_json.get());
 
     command_instance_ =
-        CommandInstance::FromJson(command_json.get(), CommandOrigin::kCloud,
+        CommandInstance::FromJson(command_json.get(), Command::Origin::kCloud,
                                   command_dictionary_, nullptr, nullptr);
     CHECK(command_instance_.get());
 
diff --git a/libweave/src/commands/command_instance.cc b/libweave/src/commands/command_instance.cc
index e15b1b7..ac56eac 100644
--- a/libweave/src/commands/command_instance.cc
+++ b/libweave/src/commands/command_instance.cc
@@ -22,20 +22,20 @@
 
 namespace {
 
-const EnumToStringMap<CommandStatus>::Map kMapStatus[] = {
-    {CommandStatus::kQueued, "queued"},
-    {CommandStatus::kInProgress, "inProgress"},
-    {CommandStatus::kPaused, "paused"},
-    {CommandStatus::kError, "error"},
-    {CommandStatus::kDone, "done"},
-    {CommandStatus::kCancelled, "cancelled"},
-    {CommandStatus::kAborted, "aborted"},
-    {CommandStatus::kExpired, "expired"},
+const EnumToStringMap<Command::State>::Map kMapStatus[] = {
+    {Command::State::kQueued, "queued"},
+    {Command::State::kInProgress, "inProgress"},
+    {Command::State::kPaused, "paused"},
+    {Command::State::kError, "error"},
+    {Command::State::kDone, "done"},
+    {Command::State::kCancelled, "cancelled"},
+    {Command::State::kAborted, "aborted"},
+    {Command::State::kExpired, "expired"},
 };
 
-const EnumToStringMap<CommandOrigin>::Map kMapOrigin[] = {
-    {CommandOrigin::kLocal, "local"},
-    {CommandOrigin::kCloud, "cloud"},
+const EnumToStringMap<Command::Origin>::Map kMapOrigin[] = {
+    {Command::Origin::kLocal, "local"},
+    {Command::Origin::kCloud, "cloud"},
 };
 
 bool ReportDestroyedError(ErrorPtr* error) {
@@ -46,8 +46,8 @@
 }
 
 bool ReportInvalidStateTransition(ErrorPtr* error,
-                                  CommandStatus from,
-                                  CommandStatus to) {
+                                  Command::State from,
+                                  Command::State to) {
   Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                      errors::commands::kInvalidState,
                      "State switch impossible: '%s' -> '%s'",
@@ -58,15 +58,15 @@
 }  // namespace
 
 template <>
-LIBWEAVE_EXPORT EnumToStringMap<CommandStatus>::EnumToStringMap()
+LIBWEAVE_EXPORT EnumToStringMap<Command::State>::EnumToStringMap()
     : EnumToStringMap(kMapStatus) {}
 
 template <>
-LIBWEAVE_EXPORT EnumToStringMap<CommandOrigin>::EnumToStringMap()
+LIBWEAVE_EXPORT EnumToStringMap<Command::Origin>::EnumToStringMap()
     : EnumToStringMap(kMapOrigin) {}
 
 CommandInstance::CommandInstance(const std::string& name,
-                                 CommandOrigin origin,
+                                 Command::Origin origin,
                                  const CommandDefinition* command_definition,
                                  const ValueMap& parameters)
     : name_{name},
@@ -88,11 +88,11 @@
   return name_;
 }
 
-CommandStatus CommandInstance::GetStatus() const {
-  return status_;
+Command::State CommandInstance::GetState() const {
+  return state_;
 }
 
-CommandOrigin CommandInstance::GetOrigin() const {
+Command::Origin CommandInstance::GetOrigin() const {
   return origin_;
 }
 
@@ -124,7 +124,7 @@
     return false;
 
   // Change status even if progress unchanged, e.g. 0% -> 0%.
-  if (!SetStatus(CommandStatus::kInProgress, error))
+  if (!SetStatus(State::kInProgress, error))
     return false;
 
   if (obj != progress_) {
@@ -151,7 +151,7 @@
     FOR_EACH_OBSERVER(Observer, observers_, OnResultsChanged());
   }
   // Change status even if result is unchanged.
-  bool result = SetStatus(CommandStatus::kDone, error);
+  bool result = SetStatus(State::kDone, error);
   RemoveFromQueue();
   // The command will be destroyed after that, so do not access any members.
   return result;
@@ -160,7 +160,7 @@
 bool CommandInstance::SetError(const Error* command_error, ErrorPtr* error) {
   error_ = command_error ? command_error->Clone() : nullptr;
   FOR_EACH_OBSERVER(Observer, observers_, OnErrorChanged());
-  return SetStatus(CommandStatus::kError, error);
+  return SetStatus(State::kError, error);
 }
 
 namespace {
@@ -207,7 +207,7 @@
 
 std::unique_ptr<CommandInstance> CommandInstance::FromJson(
     const base::Value* value,
-    CommandOrigin origin,
+    Command::Origin origin,
     const CommandDictionary& dictionary,
     std::string* command_id,
     ErrorPtr* error) {
@@ -274,7 +274,7 @@
             TypedValueToJson(progress_).release());
   json->Set(commands::attributes::kCommand_Results,
             TypedValueToJson(results_).release());
-  json->SetString(commands::attributes::kCommand_State, EnumToString(status_));
+  json->SetString(commands::attributes::kCommand_State, EnumToString(state_));
   if (error_) {
     json->Set(commands::attributes::kCommand_Error,
               ErrorInfoToJson(*error_).release());
@@ -292,44 +292,44 @@
 }
 
 bool CommandInstance::Pause(ErrorPtr* error) {
-  return SetStatus(CommandStatus::kPaused, error);
+  return SetStatus(State::kPaused, error);
 }
 
 bool CommandInstance::Abort(const Error* command_error, ErrorPtr* error) {
   error_ = command_error ? command_error->Clone() : nullptr;
   FOR_EACH_OBSERVER(Observer, observers_, OnErrorChanged());
-  bool result = SetStatus(CommandStatus::kAborted, error);
+  bool result = SetStatus(State::kAborted, error);
   RemoveFromQueue();
   // The command will be destroyed after that, so do not access any members.
   return result;
 }
 
 bool CommandInstance::Cancel(ErrorPtr* error) {
-  bool result = SetStatus(CommandStatus::kCancelled, error);
+  bool result = SetStatus(State::kCancelled, error);
   RemoveFromQueue();
   // The command will be destroyed after that, so do not access any members.
   return result;
 }
 
-bool CommandInstance::SetStatus(CommandStatus status, ErrorPtr* error) {
-  if (status == status_)
+bool CommandInstance::SetStatus(Command::State status, ErrorPtr* error) {
+  if (status == state_)
     return true;
-  if (status == CommandStatus::kQueued)
-    return ReportInvalidStateTransition(error, status_, status);
-  switch (status_) {
-    case CommandStatus::kDone:
-    case CommandStatus::kCancelled:
-    case CommandStatus::kAborted:
-    case CommandStatus::kExpired:
-      return ReportInvalidStateTransition(error, status_, status);
-    case CommandStatus::kQueued:
-    case CommandStatus::kInProgress:
-    case CommandStatus::kPaused:
-    case CommandStatus::kError:
+  if (status == State::kQueued)
+    return ReportInvalidStateTransition(error, state_, status);
+  switch (state_) {
+    case State::kDone:
+    case State::kCancelled:
+    case State::kAborted:
+    case State::kExpired:
+      return ReportInvalidStateTransition(error, state_, status);
+    case State::kQueued:
+    case State::kInProgress:
+    case State::kPaused:
+    case State::kError:
       break;
   }
-  status_ = status;
-  FOR_EACH_OBSERVER(Observer, observers_, OnStatusChanged());
+  state_ = status;
+  FOR_EACH_OBSERVER(Observer, observers_, OnStateChanged());
   return true;
 }
 
diff --git a/libweave/src/commands/command_instance.h b/libweave/src/commands/command_instance.h
index 843087c..5c8e80e 100644
--- a/libweave/src/commands/command_instance.h
+++ b/libweave/src/commands/command_instance.h
@@ -37,7 +37,7 @@
     virtual void OnErrorChanged() = 0;
     virtual void OnProgressChanged() = 0;
     virtual void OnResultsChanged() = 0;
-    virtual void OnStatusChanged() = 0;
+    virtual void OnStateChanged() = 0;
 
    protected:
     virtual ~Observer() = default;
@@ -47,7 +47,7 @@
   // be in format "<package_name>.<command_name>", a command |category| and
   // a list of parameters and their values specified in |parameters|.
   CommandInstance(const std::string& name,
-                  CommandOrigin origin,
+                  Command::Origin origin,
                   const CommandDefinition* command_definition,
                   const ValueMap& parameters);
   ~CommandInstance() override;
@@ -55,8 +55,8 @@
   // Command overrides.
   const std::string& GetID() const override;
   const std::string& GetName() const override;
-  CommandStatus GetStatus() const override;
-  CommandOrigin GetOrigin() const override;
+  Command::State GetState() const override;
+  Command::Origin GetOrigin() const override;
   std::unique_ptr<base::DictionaryValue> GetParameters() const override;
   std::unique_ptr<base::DictionaryValue> GetProgress() const override;
   std::unique_ptr<base::DictionaryValue> GetResults() const override;
@@ -85,7 +85,7 @@
   // This is used to report parse failures back to the server.
   static std::unique_ptr<CommandInstance> FromJson(
       const base::Value* value,
-      CommandOrigin origin,
+      Command::Origin origin,
       const CommandDictionary& dictionary,
       std::string* command_id,
       ErrorPtr* error);
@@ -110,7 +110,7 @@
  private:
   // Helper function to update the command status.
   // Used by Abort(), Cancel(), Done() methods.
-  bool SetStatus(CommandStatus status, ErrorPtr* error);
+  bool SetStatus(Command::State status, ErrorPtr* error);
   // Helper method that removes this command from the command queue.
   // Note that since the command queue owns the lifetime of the command instance
   // object, removing a command from the queue will also destroy it.
@@ -121,7 +121,7 @@
   // Full command name as "<package_name>.<command_name>".
   std::string name_;
   // The origin of the command, either "local" or "cloud".
-  CommandOrigin origin_ = CommandOrigin::kLocal;
+  Command::Origin origin_ = Command::Origin::kLocal;
   // Command definition.
   const CommandDefinition* command_definition_{nullptr};
   // Command parameters and their values.
@@ -130,8 +130,8 @@
   ValueMap progress_;
   // Command results.
   ValueMap results_;
-  // Current command status.
-  CommandStatus status_ = CommandStatus::kQueued;
+  // Current command state.
+  Command::State state_ = Command::State::kQueued;
   // Error encountered during execution of the command.
   ErrorPtr error_;
   // Command observers.
diff --git a/libweave/src/commands/command_instance_unittest.cc b/libweave/src/commands/command_instance_unittest.cc
index 7c2536b..f65353e 100644
--- a/libweave/src/commands/command_instance_unittest.cc
+++ b/libweave/src/commands/command_instance_unittest.cc
@@ -76,7 +76,7 @@
   params["phrase"] =
       str_prop.CreateValue(base::StringValue{"iPityDaFool"}, nullptr);
   params["volume"] = int_prop.CreateValue(base::FundamentalValue{5}, nullptr);
-  CommandInstance instance{"robot.speak", CommandOrigin::kCloud,
+  CommandInstance instance{"robot.speak", Command::Origin::kCloud,
                            dict_.FindCommand("robot.speak"), params};
 
   EXPECT_TRUE(
@@ -84,21 +84,21 @@
 
   EXPECT_EQ("", instance.GetID());
   EXPECT_EQ("robot.speak", instance.GetName());
-  EXPECT_EQ(CommandOrigin::kCloud, instance.GetOrigin());
+  EXPECT_EQ(Command::Origin::kCloud, instance.GetOrigin());
   EXPECT_JSON_EQ("{'phrase': 'iPityDaFool', 'volume': 5}",
                  *instance.GetParameters());
   EXPECT_JSON_EQ("{'foo': 239}", *instance.GetResults());
 
   CommandInstance instance2{"base.reboot",
-                            CommandOrigin::kLocal,
+                            Command::Origin::kLocal,
                             dict_.FindCommand("base.reboot"),
                             {}};
-  EXPECT_EQ(CommandOrigin::kLocal, instance2.GetOrigin());
+  EXPECT_EQ(Command::Origin::kLocal, instance2.GetOrigin());
 }
 
 TEST_F(CommandInstanceTest, SetID) {
   CommandInstance instance{"base.reboot",
-                           CommandOrigin::kLocal,
+                           Command::Origin::kLocal,
                            dict_.FindCommand("base.reboot"),
                            {}};
   instance.SetID("command_id");
@@ -116,7 +116,7 @@
     'results': {}
   })");
   std::string id;
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, &id, nullptr);
   EXPECT_EQ("abcd", id);
   EXPECT_EQ("abcd", instance->GetID());
@@ -127,7 +127,7 @@
 
 TEST_F(CommandInstanceTest, FromJson_ParamsOmitted) {
   auto json = CreateDictionaryValue("{'name': 'base.reboot'}");
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, nullptr);
   EXPECT_EQ("base.reboot", instance->GetName());
   EXPECT_JSON_EQ("{}", *instance->GetParameters());
@@ -136,7 +136,7 @@
 TEST_F(CommandInstanceTest, FromJson_NotObject) {
   auto json = CreateValue("'string'");
   ErrorPtr error;
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, &error);
   EXPECT_EQ(nullptr, instance.get());
   EXPECT_EQ("json_object_expected", error->GetCode());
@@ -145,7 +145,7 @@
 TEST_F(CommandInstanceTest, FromJson_NameMissing) {
   auto json = CreateDictionaryValue("{'param': 'value'}");
   ErrorPtr error;
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, &error);
   EXPECT_EQ(nullptr, instance.get());
   EXPECT_EQ("parameter_missing", error->GetCode());
@@ -154,7 +154,7 @@
 TEST_F(CommandInstanceTest, FromJson_UnknownCommand) {
   auto json = CreateDictionaryValue("{'name': 'robot.scream'}");
   ErrorPtr error;
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, &error);
   EXPECT_EQ(nullptr, instance.get());
   EXPECT_EQ("invalid_command_name", error->GetCode());
@@ -166,7 +166,7 @@
     'parameters': 'hello'
   })");
   ErrorPtr error;
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, &error);
   EXPECT_EQ(nullptr, instance.get());
   auto inner = error->GetInnerError();
@@ -183,7 +183,7 @@
     }
   })");
   ErrorPtr error;
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, &error);
   EXPECT_EQ(nullptr, instance.get());
   auto first = error->GetFirstError();
@@ -202,7 +202,7 @@
     },
     'results': {}
   })");
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, nullptr);
   EXPECT_TRUE(instance->SetProgress(*CreateDictionaryValue("{'progress': 15}"),
                                     nullptr));
@@ -230,7 +230,7 @@
     'name': 'base.reboot',
     'parameters': {}
   })");
-  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+  auto instance = CommandInstance::FromJson(json.get(), Command::Origin::kCloud,
                                             dict_, nullptr, nullptr);
   instance->SetID("testId");
 
diff --git a/libweave/src/commands/command_manager.cc b/libweave/src/commands/command_manager.cc
index 5933146..7d17707 100644
--- a/libweave/src/commands/command_manager.cc
+++ b/libweave/src/commands/command_manager.cc
@@ -114,8 +114,9 @@
                                 UserRole role,
                                 std::string* id,
                                 ErrorPtr* error) {
-  auto command_instance = CommandInstance::FromJson(
-      &command, CommandOrigin::kLocal, GetCommandDictionary(), nullptr, error);
+  auto command_instance =
+      CommandInstance::FromJson(&command, Command::Origin::kLocal,
+                                GetCommandDictionary(), nullptr, error);
   if (!command_instance)
     return false;
 
diff --git a/libweave/src/commands/command_queue.cc b/libweave/src/commands/command_queue.cc
index efdcfdc..23b8f05 100644
--- a/libweave/src/commands/command_queue.cc
+++ b/libweave/src/commands/command_queue.cc
@@ -32,7 +32,7 @@
         << "Commands specific handler are not allowed after default one";
 
     for (const auto& command : map_) {
-      if (command.second->GetStatus() == CommandStatus::kQueued &&
+      if (command.second->GetState() == Command::State::kQueued &&
           command.second->GetName() == command_name) {
         callback.Run(command.second);
       }
@@ -43,7 +43,7 @@
 
   } else {
     for (const auto& command : map_) {
-      if (command.second->GetStatus() == CommandStatus::kQueued &&
+      if (command.second->GetState() == Command::State::kQueued &&
           command_callbacks_.find(command.second->GetName()) ==
               command_callbacks_.end()) {
         callback.Run(command.second);
diff --git a/libweave/src/commands/command_queue_unittest.cc b/libweave/src/commands/command_queue_unittest.cc
index d119f74..1efea4e 100644
--- a/libweave/src/commands/command_queue_unittest.cc
+++ b/libweave/src/commands/command_queue_unittest.cc
@@ -24,7 +24,7 @@
       const std::string& name,
       const std::string& id) {
     std::unique_ptr<CommandInstance> cmd{new CommandInstance{
-        name, CommandOrigin::kLocal, &command_definition_, {}}};
+        name, Command::Origin::kLocal, &command_definition_, {}}};
     cmd->SetID(id);
     return cmd;
   }
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index 0e3d64f..e712130 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -860,7 +860,7 @@
                                                   ErrorPtr error) {
   base::DictionaryValue command_patch;
   command_patch.SetString(commands::attributes::kCommand_State,
-                          EnumToString(CommandStatus::kAborted));
+                          EnumToString(Command::State::kAborted));
   if (error) {
     command_patch.Set(commands::attributes::kCommand_Error,
                       ErrorInfoToJson(*error).release());
@@ -1080,8 +1080,8 @@
   std::string command_id;
   ErrorPtr error;
   auto command_instance = CommandInstance::FromJson(
-      &command, CommandOrigin::kCloud, command_manager_->GetCommandDictionary(),
-      &command_id, &error);
+      &command, Command::Origin::kCloud,
+      command_manager_->GetCommandDictionary(), &command_id, &error);
   if (!command_instance) {
     LOG(WARNING) << "Failed to parse a command instance: " << command;
     if (!command_id.empty())
