diff --git a/libweave/include/weave/command.h b/libweave/include/weave/command.h
index eb4914f..b8bbbd7 100644
--- a/libweave/include/weave/command.h
+++ b/libweave/include/weave/command.h
@@ -67,9 +67,6 @@
   // Marks the command as completed successfully.
   virtual void Done() = 0;
 
-  // Returns JSON representation of the command.
-  virtual std::unique_ptr<base::DictionaryValue> ToJson() const = 0;
-
  protected:
   virtual ~Command() = default;
 };
diff --git a/libweave/include/weave/test/mock_command.h b/libweave/include/weave/test/mock_command.h
index b856140..07fe4b3 100644
--- a/libweave/include/weave/test/mock_command.h
+++ b/libweave/include/weave/test/mock_command.h
@@ -30,15 +30,13 @@
   MOCK_CONST_METHOD0(MockGetResults, const std::string&());
   MOCK_METHOD2(SetProgress, bool(const base::DictionaryValue&, ErrorPtr*));
   MOCK_METHOD2(SetResults, bool(const base::DictionaryValue&, ErrorPtr*));
-  MOCK_METHOD0(Abort, void());
+  MOCK_METHOD1(Abort, void(const Error*));
   MOCK_METHOD0(Cancel, void());
   MOCK_METHOD0(Done, void());
-  MOCK_CONST_METHOD0(MockToJson, const std::string&());
 
   std::unique_ptr<base::DictionaryValue> GetParameters() const override;
   std::unique_ptr<base::DictionaryValue> GetProgress() const override;
   std::unique_ptr<base::DictionaryValue> GetResults() const override;
-  std::unique_ptr<base::DictionaryValue> ToJson() const override;
 };
 
 }  // namespace test
diff --git a/libweave/src/commands/command_instance.h b/libweave/src/commands/command_instance.h
index c2a79a8..0bc3c0f 100644
--- a/libweave/src/commands/command_instance.h
+++ b/libweave/src/commands/command_instance.h
@@ -52,7 +52,6 @@
   ~CommandInstance() override;
 
   // Command overrides.
-  std::unique_ptr<base::DictionaryValue> ToJson() const override;
   const std::string& GetID() const override;
   const std::string& GetName() const override;
   CommandStatus GetStatus() const override;
@@ -88,6 +87,8 @@
       std::string* command_id,
       ErrorPtr* error);
 
+  std::unique_ptr<base::DictionaryValue> ToJson() const;
+
   // Sets the command ID (normally done by CommandQueue when the command
   // instance is added to it).
   void SetID(const std::string& id) { id_ = id; }
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 309876a..f7a803e 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -31,7 +31,8 @@
 
 const int kMaxDeviceRegistrationTimeMinutes = 5;
 
-Command* ReturnNotFound(const std::string& command_id, ErrorPtr* error) {
+CommandInstance* ReturnNotFound(const std::string& command_id,
+                                ErrorPtr* error) {
   Error::AddToPrintf(error, FROM_HERE, errors::kDomain, errors::kNotFound,
                      "Command not found, ID='%s'", command_id.c_str());
   return nullptr;
@@ -300,9 +301,9 @@
         backoff_entry_.GetTimeUntilRelease());
   }
 
-  Command* GetCommandInternal(const std::string& command_id,
-                              const UserInfo& user_info,
-                              ErrorPtr* error) const {
+  CommandInstance* GetCommandInternal(const std::string& command_id,
+                                      const UserInfo& user_info,
+                                      ErrorPtr* error) const {
     if (user_info.scope() != AuthScope::kOwner) {
       auto it = command_owners_.find(command_id);
       if (it == command_owners_.end())
diff --git a/libweave/src/test/mock_command.cc b/libweave/src/test/mock_command.cc
index 43b528b..98136f2 100644
--- a/libweave/src/test/mock_command.cc
+++ b/libweave/src/test/mock_command.cc
@@ -26,9 +26,5 @@
   return CreateDictionaryValue(MockGetResults());
 }
 
-std::unique_ptr<base::DictionaryValue> MockCommand::ToJson() const {
-  return CreateDictionaryValue(MockToJson());
-}
-
 }  // namespace test
 }  // namespace weave
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 458a620..594103e 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -14,6 +14,7 @@
 #include <weave/provider/test/mock_http_server.h>
 #include <weave/provider/test/mock_network.h>
 #include <weave/provider/test/mock_wifi.h>
+#include <weave/test/mock_command.h>
 #include <weave/test/mock_device.h>
 #include <weave/test/unittest_utils.h>
 
@@ -263,10 +264,11 @@
   std::unique_ptr<weave::Device> device_;
 };
 
-TEST_F(WeaveTest, MockDevice) {
+TEST_F(WeaveTest, Mocks) {
   // Test checks if mock implements entire interface and mock can be
   // instantiated.
   test::MockDevice device;
+  test::MockCommand command;
 }
 
 TEST_F(WeaveTest, StartMinimal) {
