diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 28611f5..4c4d251 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -141,8 +141,8 @@
     if (!cmd)
       return;
     LOG(INFO) << "received command: " << cmd->GetName();
-    int32_t led_index;
-    bool cmd_value;
+    int32_t led_index = 0;
+    bool cmd_value = false;
     if (cmd->GetParameters()->GetInteger("_led", &led_index) &&
         cmd->GetParameters()->GetBoolean("_on", &cmd_value)) {
       // Display this command in terminal
@@ -159,7 +159,10 @@
       }
       return cmd->Done();
     }
-    cmd->Abort();
+    weave::ErrorPtr error;
+    weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+                        "Invalid parameters");
+    cmd->Abort(error.get());
   }
 
   void OnFlasherToggleCommand(const std::weak_ptr<weave::Command>& command) {
@@ -167,7 +170,7 @@
     if (!cmd)
       return;
     LOG(INFO) << "received command: " << cmd->GetName();
-    int32_t led_index;
+    int32_t led_index = 0;
     if (cmd->GetParameters()->GetInteger("_led", &led_index)) {
       LOG(INFO) << cmd->GetName() << " _led: " << led_index;
       led_index--;
@@ -176,7 +179,10 @@
       UpdateLedState();
       return cmd->Done();
     }
-    cmd->Abort();
+    weave::ErrorPtr error;
+    weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value",
+                        "Invalid parameters");
+    cmd->Abort(error.get());
   }
 
   void OnUnhandledCommand(const std::weak_ptr<weave::Command>& command) {
diff --git a/libweave/include/weave/command.h b/libweave/include/weave/command.h
index 6c399e1..eb4914f 100644
--- a/libweave/include/weave/command.h
+++ b/libweave/include/weave/command.h
@@ -59,7 +59,7 @@
                           ErrorPtr* error) = 0;
 
   // Aborts command execution.
-  virtual void Abort() = 0;
+  virtual void Abort(const Error* error) = 0;
 
   // Cancels command execution.
   virtual void Cancel() = 0;
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index dad443f..9e457e8 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -7,6 +7,7 @@
 #include <base/bind.h>
 #include <weave/device.h>
 
+#include "src/commands/schema_constants.h"
 #include "src/device_registration_info.h"
 
 namespace weave {
@@ -68,7 +69,12 @@
 
   AuthScope auth_scope{AuthScope::kNone};
   if (!StringToEnum(anonymous_access_role, &auth_scope)) {
-    return command->Abort();
+    ErrorPtr error;
+    Error::AddToPrintf(&error, FROM_HERE, errors::commands::kDomain,
+                       errors::commands::kInvalidPropValue,
+                       "Invalid localAnonymousAccessMaxRole value '%s'",
+                       anonymous_access_role.c_str());
+    return command->Abort(error.get());
   }
 
   device_info_->UpdateBaseConfig(auth_scope, discovery_enabled,
diff --git a/libweave/src/commands/command_instance.cc b/libweave/src/commands/command_instance.cc
index 305a255..45c376d 100644
--- a/libweave/src/commands/command_instance.cc
+++ b/libweave/src/commands/command_instance.cc
@@ -16,6 +16,7 @@
 #include "src/commands/schema_constants.h"
 #include "src/commands/schema_utils.h"
 #include "src/json_error_codes.h"
+#include "src/utils.h"
 
 namespace weave {
 
@@ -250,6 +251,10 @@
   json->Set(commands::attributes::kCommand_Results,
             TypedValueToJson(results_).release());
   json->SetString(commands::attributes::kCommand_State, EnumToString(status_));
+  if (error_) {
+    json->Set(commands::attributes::kCommand_Error,
+              ErrorInfoToJson(*error_).release());
+  }
 
   return json;
 }
@@ -262,7 +267,9 @@
   observers_.RemoveObserver(observer);
 }
 
-void CommandInstance::Abort() {
+void CommandInstance::Abort(const Error* error) {
+  if (error)
+    error_ = error->Clone();
   SetStatus(CommandStatus::kAborted);
   RemoveFromQueue();
   // The command will be destroyed after that, so do not access any members.
diff --git a/libweave/src/commands/command_instance.h b/libweave/src/commands/command_instance.h
index 20e1daa..c2a79a8 100644
--- a/libweave/src/commands/command_instance.h
+++ b/libweave/src/commands/command_instance.h
@@ -64,7 +64,7 @@
                    ErrorPtr* error) override;
   bool SetResults(const base::DictionaryValue& results,
                   ErrorPtr* error) override;
-  void Abort() override;
+  void Abort(const Error* error) override;
   void Cancel() override;
   void Done() override;
 
@@ -128,6 +128,8 @@
   ValueMap results_;
   // Current command status.
   CommandStatus status_ = CommandStatus::kQueued;
+  // Error encountered during execution of the command.
+  ErrorPtr error_;
   // Command observers.
   base::ObserverList<Observer> observers_;
   // Pointer to the command queue this command instance is added to.
diff --git a/libweave/src/commands/command_instance_unittest.cc b/libweave/src/commands/command_instance_unittest.cc
index 865ba6e..f783ca7 100644
--- a/libweave/src/commands/command_instance_unittest.cc
+++ b/libweave/src/commands/command_instance_unittest.cc
@@ -212,11 +212,16 @@
   EXPECT_TRUE(instance->SetResults(*CreateDictionaryValue("{'testResult': 17}"),
                                    nullptr));
 
+  ErrorPtr error;
+  Error::AddTo(&error, FROM_HERE, "DOMAIN", "CODE", "MESSAGE");
+  instance->Abort(error.get());
+
   json->MergeDictionary(CreateDictionaryValue(R"({
     'id': 'testId',
     'progress': {'progress': 15},
-    'state': 'inProgress',
-    'results': {'testResult': 17}
+    'state': 'aborted',
+    'results': {'testResult': 17},
+    'error': {'code': 'CODE', 'message': 'MESSAGE'}
   })").get());
 
   auto converted = instance->ToJson();
diff --git a/libweave/src/commands/schema_constants.cc b/libweave/src/commands/schema_constants.cc
index 02999f7..f53423f 100644
--- a/libweave/src/commands/schema_constants.cc
+++ b/libweave/src/commands/schema_constants.cc
@@ -57,6 +57,7 @@
 const char kCommand_Progress[] = "progress";
 const char kCommand_Results[] = "results";
 const char kCommand_State[] = "state";
+const char kCommand_Error[] = "error";
 
 const char kCommand_Role[] = "minimalRole";
 const char kCommand_Role_Manager[] = "manager";
@@ -64,9 +65,6 @@
 const char kCommand_Role_User[] = "user";
 const char kCommand_Role_Viewer[] = "viewer";
 
-const char kCommand_ErrorCode[] = "error.code";
-const char kCommand_ErrorMessage[] = "error.message";
-
 const char kCommand_Visibility[] = "visibility";
 const char kCommand_Visibility_None[] = "none";
 const char kCommand_Visibility_Local[] = "local";
diff --git a/libweave/src/commands/schema_constants.h b/libweave/src/commands/schema_constants.h
index 9eb8051..6dded05 100644
--- a/libweave/src/commands/schema_constants.h
+++ b/libweave/src/commands/schema_constants.h
@@ -60,6 +60,7 @@
 extern const char kCommand_Progress[];
 extern const char kCommand_Results[];
 extern const char kCommand_State[];
+extern const char kCommand_Error[];
 
 extern const char kCommand_Role[];
 extern const char kCommand_Role_Manager[];
@@ -67,9 +68,6 @@
 extern const char kCommand_Role_User[];
 extern const char kCommand_Role_Viewer[];
 
-extern const char kCommand_ErrorCode[];
-extern const char kCommand_ErrorMessage[];
-
 extern const char kCommand_Visibility[];
 extern const char kCommand_Visibility_None[];
 extern const char kCommand_Visibility_Local[];
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index e9e267a..c83b7b6 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -862,16 +862,8 @@
   command_patch.SetString(commands::attributes::kCommand_State,
                           EnumToString(CommandStatus::kAborted));
   if (error) {
-    command_patch.SetString(commands::attributes::kCommand_ErrorCode,
-                            Join(":", error->GetDomain(), error->GetCode()));
-    std::vector<std::string> messages;
-    const Error* current_error = error.get();
-    while (current_error) {
-      messages.push_back(current_error->GetMessage());
-      current_error = current_error->GetInnerError();
-    }
-    command_patch.SetString(commands::attributes::kCommand_ErrorMessage,
-                            Join(";", messages));
+    command_patch.Set(commands::attributes::kCommand_Error,
+                      ErrorInfoToJson(*error).release());
   }
   UpdateCommand(command_id, command_patch, base::Bind(&base::DoNothing),
                 base::Bind(&base::DoNothing));
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 9475cfe..a7bfee1 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -23,6 +23,7 @@
 #include "src/privet/security_delegate.h"
 #include "src/privet/wifi_delegate.h"
 #include "src/string_utils.h"
+#include "src/utils.h"
 
 namespace weave {
 namespace privet {
@@ -90,8 +91,6 @@
 
 const char kAuthorizationHeaderPrefix[] = "Privet";
 
-const char kErrorCodeKey[] = "code";
-const char kErrorMessageKey[] = "message";
 const char kErrorDebugInfoKey[] = "debugInfo";
 
 const char kSetupStartSsidKey[] = "ssid";
@@ -156,13 +155,6 @@
   return SplitAtFirst(auth_header, " ", true).second;
 }
 
-std::unique_ptr<base::DictionaryValue> ErrorInfoToJson(const Error& error) {
-  std::unique_ptr<base::DictionaryValue> output{new base::DictionaryValue};
-  output->SetString(kErrorMessageKey, error.GetMessage());
-  output->SetString(kErrorCodeKey, error.GetCode());
-  return output;
-}
-
 // Creates JSON similar to GCD server error format.
 std::unique_ptr<base::DictionaryValue> ErrorToJson(const Error& error) {
   std::unique_ptr<base::DictionaryValue> output{ErrorInfoToJson(error)};
diff --git a/libweave/src/utils.cc b/libweave/src/utils.cc
index 6827db5..20debea 100644
--- a/libweave/src/utils.cc
+++ b/libweave/src/utils.cc
@@ -23,6 +23,9 @@
 
 const size_t kMaxStrLen = 1700;  // Log messages are limited to 2000 chars.
 
+const char kErrorCodeKey[] = "code";
+const char kErrorMessageKey[] = "message";
+
 }  // anonymous namespace
 
 namespace errors {
@@ -62,4 +65,11 @@
   return result;
 }
 
+std::unique_ptr<base::DictionaryValue> ErrorInfoToJson(const Error& error) {
+  std::unique_ptr<base::DictionaryValue> output{new base::DictionaryValue};
+  output->SetString(kErrorMessageKey, error.GetMessage());
+  output->SetString(kErrorCodeKey, error.GetCode());
+  return output;
+}
+
 }  // namespace weave
diff --git a/libweave/src/utils.h b/libweave/src/utils.h
index 29ea138..11f9483 100644
--- a/libweave/src/utils.h
+++ b/libweave/src/utils.h
@@ -30,6 +30,8 @@
     const std::string& json_string,
     ErrorPtr* error);
 
+std::unique_ptr<base::DictionaryValue> ErrorInfoToJson(const Error& error);
+
 }  // namespace weave
 
 #endif  // LIBWEAVE_SRC_UTILS_H_
