diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index cce7994..1db4228 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -65,22 +65,12 @@
 
   ~CloudDelegateImpl() override = default;
 
-  bool GetModelId(std::string* id, ErrorPtr* error) const override {
-    if (device_->GetConfig().model_id().size() != 5) {
-      Error::AddToPrintf(error, FROM_HERE, errors::kDomain,
-                         errors::kInvalidState, "Model ID is invalid: %s",
-                         device_->GetConfig().model_id().c_str());
-      return false;
-    }
-    *id = device_->GetConfig().model_id();
-    return true;
+  std::string GetModelId() const override {
+    CHECK_EQ(5, device_->GetConfig().model_id().size());
+    return device_->GetConfig().model_id();
   }
 
-  // TODO(vitalybuka): Remove error.
-  bool GetName(std::string* name, ErrorPtr* error) const override {
-    *name = device_->GetConfig().name();
-    return true;
-  }
+  std::string GetName() const override { return device_->GetConfig().name(); }
 
   std::string GetDescription() const override {
     return device_->GetConfig().description();
diff --git a/libweave/src/privet/cloud_delegate.h b/libweave/src/privet/cloud_delegate.h
index 5f79a6d..eb87e67 100644
--- a/libweave/src/privet/cloud_delegate.h
+++ b/libweave/src/privet/cloud_delegate.h
@@ -49,10 +49,10 @@
   };
 
   // Returns the model ID of the device.
-  virtual bool GetModelId(std::string* id, ErrorPtr* error) const = 0;
+  virtual std::string GetModelId() const = 0;
 
   // Returns the name of device.
-  virtual bool GetName(std::string* name, ErrorPtr* error) const = 0;
+  virtual std::string GetName() const = 0;
 
   // Returns the description of the device.
   virtual std::string GetDescription() const = 0;
diff --git a/libweave/src/privet/mock_delegates.h b/libweave/src/privet/mock_delegates.h
index 94686c3..552640e 100644
--- a/libweave/src/privet/mock_delegates.h
+++ b/libweave/src/privet/mock_delegates.h
@@ -139,8 +139,8 @@
 
 class MockCloudDelegate : public CloudDelegate {
  public:
-  MOCK_CONST_METHOD2(GetModelId, bool(std::string*, ErrorPtr*));
-  MOCK_CONST_METHOD2(GetName, bool(std::string*, ErrorPtr*));
+  MOCK_CONST_METHOD0(GetModelId, std::string());
+  MOCK_CONST_METHOD0(GetName, std::string());
   MOCK_CONST_METHOD0(GetDescription, std::string());
   MOCK_CONST_METHOD0(GetLocation, std::string());
   MOCK_METHOD5(UpdateDeviceInfo,
@@ -180,10 +180,8 @@
                     const ErrorCallback&));
 
   MockCloudDelegate() {
-    EXPECT_CALL(*this, GetModelId(_, _))
-        .WillRepeatedly(DoAll(SetArgPointee<0>("ABMID"), Return(true)));
-    EXPECT_CALL(*this, GetName(_, _))
-        .WillRepeatedly(DoAll(SetArgPointee<0>("TestDevice"), Return(true)));
+    EXPECT_CALL(*this, GetModelId()).WillRepeatedly(Return("ABMID"));
+    EXPECT_CALL(*this, GetName()).WillRepeatedly(Return("TestDevice"));
     EXPECT_CALL(*this, GetDescription()).WillRepeatedly(Return(""));
     EXPECT_CALL(*this, GetLocation()).WillRepeatedly(Return(""));
     EXPECT_CALL(*this, UpdateDeviceInfo(_, _, _, _, _))
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 97a8d6a..0e1b2e0 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -476,14 +476,8 @@
                                const RequestCallback& callback) {
   base::DictionaryValue output;
 
-  ErrorPtr error;
-
-  std::string name;
-  std::string model_id;
-  if (!cloud_->GetName(&name, &error) ||
-      !cloud_->GetModelId(&model_id, &error)) {
-    return ReturnError(*error, callback);
-  }
+  std::string name = cloud_->GetName();
+  std::string model_id = cloud_->GetModelId();
 
   output.SetString(kInfoVersionKey, kInfoVersionValue);
   output.SetString(kInfoIdKey, identity_->GetId());
@@ -660,10 +654,7 @@
 void PrivetHandler::HandleSetupStart(const base::DictionaryValue& input,
                                      const UserInfo& user_info,
                                      const RequestCallback& callback) {
-  std::string name;
-  ErrorPtr error;
-  if (!cloud_->GetName(&name, &error))
-    return ReturnError(*error, callback);
+  std::string name{cloud_->GetName()};
   input.GetString(kNameKey, &name);
 
   std::string description{cloud_->GetDescription()};
@@ -680,12 +671,14 @@
   const base::DictionaryValue* wifi = nullptr;
   if (input.GetDictionary(kWifiKey, &wifi)) {
     if (!wifi_ || wifi_->GetTypes().empty()) {
+      ErrorPtr error;
       Error::AddTo(&error, FROM_HERE, errors::kDomain,
                    errors::kSetupUnavailable, "WiFi setup unavailible");
       return ReturnError(*error, callback);
     }
     wifi->GetString(kSetupStartSsidKey, &ssid);
     if (ssid.empty()) {
+      ErrorPtr error;
       Error::AddToPrintf(&error, FROM_HERE, errors::kDomain,
                          errors::kInvalidParams, kInvalidParamValueFormat,
                          kSetupStartSsidKey, "");
@@ -698,6 +691,7 @@
   if (input.GetDictionary(kGcdKey, &registration)) {
     registration->GetString(kSetupStartTicketIdKey, &ticket);
     if (ticket.empty()) {
+      ErrorPtr error;
       Error::AddToPrintf(&error, FROM_HERE, errors::kDomain,
                          errors::kInvalidParams, kInvalidParamValueFormat,
                          kSetupStartTicketIdKey, "");
diff --git a/libweave/src/privet/publisher.cc b/libweave/src/privet/publisher.cc
index e4accb1..a2595f5 100644
--- a/libweave/src/privet/publisher.cc
+++ b/libweave/src/privet/publisher.cc
@@ -50,12 +50,8 @@
 }
 
 void Publisher::ExposeService() {
-  std::string name;
-  std::string model_id;
-  if (!cloud_->GetName(&name, nullptr) ||
-      !cloud_->GetModelId(&model_id, nullptr)) {
-    return;
-  }
+  std::string name{cloud_->GetName()};
+  std::string model_id{cloud_->GetModelId()};
   DCHECK_EQ(model_id.size(), 5U);
 
   VLOG(1) << "Starting peerd advertising.";
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 6dd044d..9948301 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -29,14 +29,9 @@
       last_configured_ssid_{last_configured_ssid},
       test_privet_ssid_{test_privet_ssid},
       ble_setup_enabled_{ble_setup_enabled} {
-  cloud_observer_.Add(gcd);
 }
 
 void WifiBootstrapManager::Init() {
-  CHECK(!is_initialized_);
-  std::string ssid = GenerateSsid();
-  if (ssid.empty())
-    return;  // Delay initialization until ssid_generator_ is ready.
   UpdateConnectionState();
   network_->AddOnConnectionChangedCallback(
       base::Bind(&WifiBootstrapManager::OnConnectivityChange,
@@ -46,7 +41,6 @@
   } else {
     StartMonitoring();
   }
-  is_initialized_ = true;
 }
 
 void WifiBootstrapManager::RegisterStateListener(
@@ -210,12 +204,6 @@
   return {WifiType::kWifi24};
 }
 
-void WifiBootstrapManager::OnDeviceInfoChanged() {
-  // Initialization was delayed until dependencies are ready.
-  if (!is_initialized_)
-    Init();
-}
-
 void WifiBootstrapManager::OnConnectSuccess(const std::string& ssid) {
   VLOG(1) << "Wifi was connected successfully";
   last_configured_ssid_ = ssid;
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index c0052a0..f32340d 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -13,8 +13,9 @@
 #include <base/macros.h>
 #include <base/memory/weak_ptr.h>
 #include <base/scoped_observer.h>
+#include <base/time/time.h>
+#include <weave/privet.h>
 
-#include "libweave/src/privet/cloud_delegate.h"
 #include "libweave/src/privet/privet_types.h"
 #include "libweave/src/privet/wifi_delegate.h"
 #include "libweave/src/privet/wifi_ssid_generator.h"
@@ -22,14 +23,14 @@
 namespace weave {
 
 class Network;
+class TaskRunner;
 
 namespace privet {
 
 class CloudDelegate;
 class DeviceDelegate;
 
-class WifiBootstrapManager : public WifiDelegate,
-                             public CloudDelegate::Observer {
+class WifiBootstrapManager : public WifiDelegate {
  public:
   using State = WifiSetupState;
 
@@ -55,9 +56,6 @@
   std::string GetHostedSsid() const override;
   std::set<WifiType> GetTypes() const override;
 
-  // Overrides from CloudDelegate::Observer.
-  void OnDeviceInfoChanged() override;
-
  private:
   // These Start* tasks:
   //   1) Do state appropriate work for entering the indicated state.
@@ -91,8 +89,6 @@
   void OnMonitorTimeout();
   void UpdateConnectionState();
 
-  // Initialization could be delayed if ssid_generator_ is not ready.
-  bool is_initialized_{false};
   State state_{State::kDisabled};
   // Setup state is the temporal state of the most recent bootstrapping attempt.
   // It is not persisted to disk.
@@ -110,8 +106,6 @@
   std::string privet_ssid_;
   bool ble_setup_enabled_{false};
 
-  ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
-
   // Helps to reset irrelevant tasks switching state.
   base::WeakPtrFactory<WifiBootstrapManager> tasks_weak_factory_{this};
 
diff --git a/libweave/src/privet/wifi_ssid_generator.cc b/libweave/src/privet/wifi_ssid_generator.cc
index c1b7ff0..280fcb9 100644
--- a/libweave/src/privet/wifi_ssid_generator.cc
+++ b/libweave/src/privet/wifi_ssid_generator.cc
@@ -69,13 +69,9 @@
 }
 
 std::string WifiSsidGenerator::GenerateSsid() const {
-  std::string name;
-  std::string model_id;
-  if (!gcd_ || !gcd_->GetName(&name, nullptr) ||
-      !gcd_->GetModelId(&model_id, nullptr)) {
-    return std::string();
-  }
-  std::string idx{base::IntToString(get_random_.Run())};
+  std::string name = gcd_->GetName();
+  std::string model_id = gcd_->GetModelId();
+  std::string idx = base::IntToString(get_random_.Run());
   name = name.substr(0, kDeviceNameSize - idx.size() - 1);
   CHECK_EQ(5u, model_id.size());
 
diff --git a/libweave/src/privet/wifi_ssid_generator_unittest.cc b/libweave/src/privet/wifi_ssid_generator_unittest.cc
index b30398b..eb7b94e 100644
--- a/libweave/src/privet/wifi_ssid_generator_unittest.cc
+++ b/libweave/src/privet/wifi_ssid_generator_unittest.cc
@@ -53,17 +53,9 @@
 
 TEST_F(WifiSsidGeneratorTest, GenerateSsidLongName) {
   SetRandomForTests(99);
-  EXPECT_CALL(gcd_, GetName(_, _))
-      .WillRepeatedly(
-          DoAll(SetArgPointee<0>("Very Long Device Name"), Return(true)));
+  EXPECT_CALL(gcd_, GetName()).WillRepeatedly(Return("Very Long Device Name"));
   EXPECT_EQ("Very Long Device  99.ABMIDABprv", ssid_generator_.GenerateSsid());
 }
 
-TEST_F(WifiSsidGeneratorTest, GenerateSsidNoName) {
-  SetRandomForTests(99);
-  EXPECT_CALL(gcd_, GetName(_, _)).WillRepeatedly(Return(false));
-  EXPECT_EQ("", ssid_generator_.GenerateSsid());
-}
-
 }  // namespace privet
 }  // namespace weave
