diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 11c3fac..cdeae8b 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -113,8 +113,7 @@
 
   if (!registration_ticket.empty()) {
     weave::ErrorPtr error;
-    auto device_id =
-        device->GetCloud()->RegisterDevice(registration_ticket, &error);
+    auto device_id = device->Register(registration_ticket, &error);
     if (error != nullptr) {
       LOG(ERROR) << "Fail to register device: " << error->GetMessage();
     } else {
diff --git a/libweave/include/weave/cloud.h b/libweave/include/weave/cloud.h
deleted file mode 100644
index 3cf1318..0000000
--- a/libweave/include/weave/cloud.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIBWEAVE_INCLUDE_WEAVE_CLOUD_H_
-#define LIBWEAVE_INCLUDE_WEAVE_CLOUD_H_
-
-#include <string>
-
-#include <base/callback.h>
-#include <base/values.h>
-#include <weave/error.h>
-#include <weave/settings.h>
-
-namespace weave {
-
-// See the DBus interface XML file for complete descriptions of these states.
-enum class RegistrationStatus {
-  kUnconfigured,        // We have no credentials.
-  kConnecting,          // We have credentials but not yet connected.
-  kConnected,           // We're registered and connected to the cloud.
-  kInvalidCredentials,  // Our registration has been revoked.
-};
-
-class Cloud {
- public:
-  using OnRegistrationChangedCallback =
-      base::Callback<void(RegistrationStatus satus)>;
-
-  // Sets callback which is called when registration state is changed.
-  virtual void AddOnRegistrationChangedCallback(
-      const OnRegistrationChangedCallback& callback) = 0;
-
-  // Registers the device.
-  // Returns a device ID on success.
-  virtual std::string RegisterDevice(const std::string& ticket_id,
-                                     ErrorPtr* error) = 0;
-
- protected:
-  virtual ~Cloud() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_CLOUD_H_
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 5517d10..260790f 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -9,7 +9,6 @@
 #include <set>
 #include <string>
 
-#include <weave/cloud.h>
 #include <weave/commands.h>
 #include <weave/export.h>
 #include <weave/provider/bluetooth.h>
@@ -24,6 +23,14 @@
 
 namespace weave {
 
+// States of Gcd connection.
+enum class GcdState {
+  kUnconfigured,        // We have no credentials.
+  kConnecting,          // We have credentials but not yet connected.
+  kConnected,           // We're registered and connected to the cloud.
+  kInvalidCredentials,  // Our registration has been revoked.
+};
+
 class Device {
  public:
   virtual ~Device() = default;
@@ -49,7 +56,20 @@
 
   virtual Commands* GetCommands() = 0;
   virtual State* GetState() = 0;
-  virtual Cloud* GetCloud() = 0;
+
+  // Returns current state of GCD connection.
+  virtual GcdState GetGcdState() const = 0;
+
+  // Callback type for GcdStatusCallback.
+  using GcdStateChangedCallback = base::Callback<void(GcdState state)>;
+  // Sets callback which is called when state of server connection changed.
+  virtual void AddGcdStateChangedCallback(
+      const GcdStateChangedCallback& callback) = 0;
+
+  // Registers the device. Returns a device ID on success.
+  // This is testing method and should not be used by applications.
+  virtual std::string Register(const std::string& ticket_id,
+                               ErrorPtr* error) = 0;
 
   // Handler should display pin code to the user.
   using PairingBeginCallback =
diff --git a/libweave/include/weave/stream.h b/libweave/include/weave/stream.h
index f36e113..9d4d6fd 100644
--- a/libweave/include/weave/stream.h
+++ b/libweave/include/weave/stream.h
@@ -17,7 +17,7 @@
  public:
   virtual ~InputStream() = default;
 
-  // Callbacks types for Read.
+  // Callback type for Read.
   using ReadSuccessCallback = base::Callback<void(size_t size)>;
 
   // Implementation should return immediately and post either success_callback
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index cec5e16..5a8e630 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -84,10 +84,6 @@
   return device_info_->GetMutableConfig();
 }
 
-Cloud* DeviceManager::GetCloud() {
-  return device_info_.get();
-}
-
 void DeviceManager::StartPrivet(provider::TaskRunner* task_runner,
                                 provider::Network* network,
                                 provider::DnsServiceDiscovery* dns_sd,
@@ -100,6 +96,20 @@
                  state_manager_.get());
 }
 
+GcdState DeviceManager::GetGcdState() const {
+  return device_info_->GetGcdState();
+}
+
+void DeviceManager::AddGcdStateChangedCallback(
+    const GcdStateChangedCallback& callback) {
+  device_info_->AddGcdStateChangedCallback(callback);
+}
+
+std::string DeviceManager::Register(const std::string& ticket_id,
+                                    ErrorPtr* error) {
+  return device_info_->RegisterDevice(ticket_id, error);
+}
+
 void DeviceManager::AddPairingChangedCallbacks(
     const PairingBeginCallback& begin_callback,
     const PairingEndCallback& end_callback) {
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 6f68054..787a7be 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -40,7 +40,13 @@
       const SettingsChangedCallback& callback) override;
   Commands* GetCommands() override;
   State* GetState() override;
-  Cloud* GetCloud() override;
+  std::string RegisterDevice(const std::string& ticket_id,
+                             ErrorPtr* error) override;
+
+  GcdState GetGcdState() const override;
+  void AddGcdStateChangedCallback(
+      const GcdStateChangedCallback& callback) override;
+
   void AddPairingChangedCallbacks(
       const PairingBeginCallback& begin_callback,
       const PairingEndCallback& end_callback) override;
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index 1e5566a..610871f 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -284,7 +284,7 @@
 
 void DeviceRegistrationInfo::ScheduleCloudConnection(
     const base::TimeDelta& delay) {
-  SetRegistrationStatus(RegistrationStatus::kConnecting);
+  SetGcdState(GcdState::kConnecting);
   if (!task_runner_)
     return;  // Assume we're in test
   task_runner_->PostDelayedTask(
@@ -322,7 +322,7 @@
     }
     if (error_code == "invalid_grant") {
       LOG(INFO) << "The device's registration has been revoked.";
-      SetRegistrationStatus(RegistrationStatus::kInvalidCredentials);
+      SetGcdState(GcdState::kInvalidCredentials);
     }
     // I have never actually seen an error_description returned.
     if (!resp->GetString("error_description", &error_message)) {
@@ -470,10 +470,10 @@
   primary_notification_channel_->Start(this);
 }
 
-void DeviceRegistrationInfo::AddOnRegistrationChangedCallback(
-    const OnRegistrationChangedCallback& callback) {
-  on_registration_changed_.push_back(callback);
-  callback.Run(registration_status_);
+void DeviceRegistrationInfo::AddGcdStateChangedCallback(
+    const Device::GcdStateChangedCallback& callback) {
+  gcd_state_changed_callbacks_.push_back(callback);
+  callback.Run(gcd_state_);
 }
 
 std::unique_ptr<base::DictionaryValue>
@@ -730,7 +730,7 @@
   }
 
   cloud_backoff_entry_->InformOfRequest(true);
-  SetRegistrationStatus(RegistrationStatus::kConnected);
+  SetGcdState(GcdState::kConnected);
   data->success_callback.Run(*json_resp);
 }
 
@@ -745,7 +745,7 @@
 void DeviceRegistrationInfo::RetryCloudRequest(
     const std::shared_ptr<const CloudRequestData>& data) {
   // TODO(avakulenko): Tie connecting/connected status to XMPP channel instead.
-  SetRegistrationStatus(RegistrationStatus::kConnecting);
+  SetGcdState(GcdState::kConnecting);
   cloud_backoff_entry_->InformOfRequest(false);
   SendCloudRequest(data);
 }
@@ -1176,13 +1176,12 @@
   device_state_update_pending_ = false;
 }
 
-void DeviceRegistrationInfo::SetRegistrationStatus(
-    RegistrationStatus new_status) {
-  VLOG_IF(1, new_status != registration_status_)
-      << "Changing registration status to " << static_cast<int>(new_status);
-  registration_status_ = new_status;
-  for (const auto& cb : on_registration_changed_)
-    cb.Run(registration_status_);
+void DeviceRegistrationInfo::SetGcdState(GcdState new_state) {
+  VLOG_IF(1, new_state != gcd_state_) << "Changing registration status to "
+                                      << EnumToString(new_state);
+  gcd_state_ = new_state;
+  for (const auto& cb : gcd_state_changed_callbacks_)
+    cb.Run(gcd_state_);
 }
 
 void DeviceRegistrationInfo::OnCommandDefsChanged() {
@@ -1297,7 +1296,7 @@
     pull_channel_.reset();
   }
   notification_channel_starting_ = false;
-  SetRegistrationStatus(RegistrationStatus::kInvalidCredentials);
+  SetGcdState(GcdState::kInvalidCredentials);
 }
 
 }  // namespace weave
diff --git a/libweave/src/device_registration_info.h b/libweave/src/device_registration_info.h
index 38b324b..c797102 100644
--- a/libweave/src/device_registration_info.h
+++ b/libweave/src/device_registration_info.h
@@ -15,8 +15,8 @@
 #include <base/macros.h>
 #include <base/memory/weak_ptr.h>
 #include <base/time/time.h>
+#include <weave/device.h>
 #include <weave/error.h>
-#include <weave/cloud.h>
 #include <weave/provider/http_client.h>
 
 #include "src/backoff_entry.h"
@@ -47,8 +47,7 @@
 extern const char kErrorDomainGCDServer[];
 
 // The DeviceRegistrationInfo class represents device registration information.
-class DeviceRegistrationInfo : public Cloud,
-                               public NotificationDelegate,
+class DeviceRegistrationInfo : public NotificationDelegate,
                                public CloudCommandUpdateInterface {
  public:
   using CloudRequestCallback =
@@ -63,11 +62,9 @@
 
   ~DeviceRegistrationInfo() override;
 
-  // Cloud overrides.
-  void AddOnRegistrationChangedCallback(
-      const OnRegistrationChangedCallback& callback) override;
-  std::string RegisterDevice(const std::string& ticket_id,
-                             ErrorPtr* error) override;
+  void AddGcdStateChangedCallback(
+      const Device::GcdStateChangedCallback& callback);
+  std::string RegisterDevice(const std::string& ticket_id, ErrorPtr* error);
 
   void UpdateDeviceInfo(const std::string& name,
                         const std::string& description,
@@ -128,6 +125,8 @@
   const Config::Settings& GetSettings() const { return config_->GetSettings(); }
   Config* GetMutableConfig() { return config_.get(); }
 
+  GcdState GetGcdState() const { return gcd_state_; }
+
  private:
   friend class DeviceRegistrationInfoTest;
 
@@ -261,7 +260,7 @@
   // for all supported commands and current device state.
   std::unique_ptr<base::DictionaryValue> BuildDeviceResource(ErrorPtr* error);
 
-  void SetRegistrationStatus(RegistrationStatus new_status);
+  void SetGcdState(GcdState new_state);
   void SetDeviceId(const std::string& cloud_id);
 
   // Callback called when command definitions are changed to re-publish new CDD.
@@ -330,10 +329,10 @@
 
   provider::Network* network_{nullptr};
 
-  // Tracks our current registration status.
-  RegistrationStatus registration_status_{RegistrationStatus::kUnconfigured};
+  // Tracks our GCD state.
+  GcdState gcd_state_{GcdState::kUnconfigured};
 
-  std::vector<OnRegistrationChangedCallback> on_registration_changed_;
+  std::vector<Device::GcdStateChangedCallback> gcd_state_changed_callbacks_;
 
   base::WeakPtrFactory<DeviceRegistrationInfo> weak_factory_{this};
   DISALLOW_COPY_AND_ASSIGN(DeviceRegistrationInfo);
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index e17ecbe..34ea31a 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -180,9 +180,7 @@
 
   void SetAccessToken() { dev_reg_->access_token_ = test_data::kAccessToken; }
 
-  RegistrationStatus GetRegistrationStatus() const {
-    return dev_reg_->registration_status_;
-  }
+  GcdState GetGcdState() const { return dev_reg_->GetGcdState(); }
 
   provider::test::MockConfigStore config_store_;
   StrictMock<MockHttpClient> http_client_;
@@ -256,7 +254,7 @@
 
 TEST_F(DeviceRegistrationInfoTest, CheckAuthenticationFailure) {
   ReloadSettings();
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 
   EXPECT_CALL(http_client_,
               MockSendRequest(http::kPost, dev_reg_->GetOAuthURL("token"),
@@ -277,12 +275,12 @@
   ErrorPtr error;
   EXPECT_FALSE(RefreshAccessToken(&error));
   EXPECT_TRUE(error->HasError(kErrorDomainOAuth2, "unable_to_authenticate"));
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 }
 
 TEST_F(DeviceRegistrationInfoTest, CheckDeregistration) {
   ReloadSettings();
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 
   EXPECT_CALL(http_client_,
               MockSendRequest(http::kPost, dev_reg_->GetOAuthURL("token"),
@@ -303,7 +301,7 @@
   ErrorPtr error;
   EXPECT_FALSE(RefreshAccessToken(&error));
   EXPECT_TRUE(error->HasError(kErrorDomainOAuth2, "invalid_grant"));
-  EXPECT_EQ(RegistrationStatus::kInvalidCredentials, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kInvalidCredentials, GetGcdState());
 }
 
 TEST_F(DeviceRegistrationInfoTest, GetDeviceInfo) {
@@ -486,7 +484,7 @@
       dev_reg_->RegisterDevice(test_data::kClaimTicketId, nullptr);
 
   EXPECT_EQ(test_data::kDeviceId, cloud_id);
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 
   // Validate the device info saved to storage...
   EXPECT_EQ(test_data::kDeviceId, dev_reg_->GetSettings().cloud_id);
@@ -498,10 +496,10 @@
 TEST_F(DeviceRegistrationInfoTest, OOBRegistrationStatus) {
   // After we've been initialized, we should be either offline or
   // unregistered, depending on whether or not we've found credentials.
-  EXPECT_EQ(RegistrationStatus::kUnconfigured, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kUnconfigured, GetGcdState());
   // Put some credentials into our state, make sure we call that offline.
   ReloadSettings();
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 }
 
 TEST_F(DeviceRegistrationInfoTest, UpdateCommand) {
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 217a4ed..2a60de0 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -49,7 +49,7 @@
         state_manager_{state_manager} {
     device_->GetMutableConfig()->AddOnChangedCallback(base::Bind(
         &CloudDelegateImpl::OnConfigChanged, weak_factory_.GetWeakPtr()));
-    device_->AddOnRegistrationChangedCallback(base::Bind(
+    device_->AddGcdStateChangedCallback(base::Bind(
         &CloudDelegateImpl::OnRegistrationChanged, weak_factory_.GetWeakPtr()));
 
     command_manager_->AddOnCommandDefChanged(base::Bind(
@@ -234,13 +234,13 @@
 
   void OnConfigChanged(const Settings&) { NotifyOnDeviceInfoChanged(); }
 
-  void OnRegistrationChanged(RegistrationStatus status) {
-    if (status == RegistrationStatus::kUnconfigured) {
+  void OnRegistrationChanged(GcdState status) {
+    if (status == GcdState::kUnconfigured) {
       connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
-    } else if (status == RegistrationStatus::kConnecting) {
+    } else if (status == GcdState::kConnecting) {
       // TODO(vitalybuka): Find conditions for kOffline.
       connection_state_ = ConnectionState{ConnectionState::kConnecting};
-    } else if (status == RegistrationStatus::kConnected) {
+    } else if (status == GcdState::kConnected) {
       connection_state_ = ConnectionState{ConnectionState::kOnline};
     } else {
       ErrorPtr error;
diff --git a/libweave/src/registration_status.cc b/libweave/src/registration_status.cc
index 35f93c4..167eb0f 100644
--- a/libweave/src/registration_status.cc
+++ b/libweave/src/registration_status.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <weave/cloud.h>
+#include <weave/device.h>
 #include <weave/enum_to_string.h>
 #include <weave/export.h>
 
@@ -10,17 +10,17 @@
 
 namespace {
 
-const EnumToStringMap<RegistrationStatus>::Map kMap[] = {
-    {RegistrationStatus::kUnconfigured, "unconfigured"},
-    {RegistrationStatus::kConnecting, "connecting"},
-    {RegistrationStatus::kConnected, "connected"},
-    {RegistrationStatus::kInvalidCredentials, "invalid_credentials"},
+const EnumToStringMap<GcdState>::Map kMap[] = {
+    {GcdState::kUnconfigured, "unconfigured"},
+    {GcdState::kConnecting, "connecting"},
+    {GcdState::kConnected, "connected"},
+    {GcdState::kInvalidCredentials, "invalid_credentials"},
 };
 
 }  // namespace
 
 template <>
-LIBWEAVE_EXPORT EnumToStringMap<RegistrationStatus>::EnumToStringMap()
+LIBWEAVE_EXPORT EnumToStringMap<GcdState>::EnumToStringMap()
     : EnumToStringMap(kMap) {}
 
 }  // namespace weave
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 8250d8c..e211392 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -238,9 +238,6 @@
     device_->Start(&config_store_, &task_runner_, &http_client_, &network_,
                    &dns_sd_, &http_server_, &wifi_, &bluetooth_);
 
-    cloud_ = device_->GetCloud();
-    ASSERT_TRUE(cloud_);
-
     for (const auto& cb : http_server_changed_cb_)
       cb.Run(http_server_);
 
@@ -270,8 +267,6 @@
 
   std::vector<provider::Network::ConnectionChangedCallback> network_callbacks_;
 
-  weave::Cloud* cloud_{nullptr};
-
   std::unique_ptr<weave::Device> device_;
 };
 
@@ -341,7 +336,7 @@
 
   InitDnsSdPublishing(true, "DB");
 
-  EXPECT_EQ("CLOUD_ID", cloud_->RegisterDevice("TICKET_ID", nullptr));
+  EXPECT_EQ("CLOUD_ID", device_->RegisterDevice("TICKET_ID", nullptr));
 }
 
 class WeaveWiFiSetupTest : public WeaveTest {
