diff --git a/examples/provider/file_config_store.cc b/examples/provider/file_config_store.cc
index 44f2c30..8e72792 100644
--- a/examples/provider/file_config_store.cc
+++ b/examples/provider/file_config_store.cc
@@ -38,9 +38,16 @@
   settings->model_id = "AAAAA";
   settings->pairing_modes = {PairingType::kEmbeddedCode};
   settings->embedded_code = "0000";
-  settings->client_id = "58855907228.apps.googleusercontent.com";
-  settings->client_secret = "eHSAREAHrIqPsHBxCE9zPPBi";
-  settings->api_key = "AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA";
+
+  // Keys owners:
+  //   avakulenko@google.com
+  //   gene@chromium.org
+  //   vitalybuka@chromium.org
+  settings->client_id =
+      "338428340000-vkb4p6h40c7kja1k3l70kke8t615cjit.apps.googleusercontent."
+      "com";
+  settings->client_secret = "LS_iPYo_WIOE0m2VnLdduhnx";
+  settings->api_key = "AIzaSyACK3oZtmIylUKXiTMqkZqfuRiCgQmQSAQ";
 
   settings->disable_security = disable_security_;
   return true;
diff --git a/src/config.cc b/src/config.cc
index 9a18bb0..52f5ea1 100644
--- a/src/config.cc
+++ b/src/config.cc
@@ -44,6 +44,9 @@
 
 }  // namespace config_keys
 
+const char kWeaveUrl[] = "https://www.googleapis.com/weave/v1/";
+const char kDeprecatedUrl[] = "https://www.googleapis.com/clouddevices/v1/";
+
 namespace {
 
 const int kCurrentConfigVersion = 1;
@@ -60,7 +63,7 @@
 Config::Settings CreateDefaultSettings() {
   Config::Settings result;
   result.oauth_url = "https://accounts.google.com/o/oauth2/";
-  result.service_url = "https://www.googleapis.com/clouddevices/v1/";
+  result.service_url = kWeaveUrl;
   result.local_anonymous_access_role = AuthScope::kViewer;
   result.pairing_modes.emplace(PairingType::kPinCode);
   result.device_id = base::GenerateGUID();
@@ -162,8 +165,11 @@
   if (dict->GetString(config_keys::kOAuthURL, &tmp))
     set_oauth_url(tmp);
 
-  if (dict->GetString(config_keys::kServiceURL, &tmp))
+  if (dict->GetString(config_keys::kServiceURL, &tmp)) {
+    if (tmp == kDeprecatedUrl)
+      tmp = kWeaveUrl;
     set_service_url(tmp);
+  }
 
   if (dict->GetString(config_keys::kName, &tmp))
     set_name(tmp);
diff --git a/src/config_unittest.cc b/src/config_unittest.cc
index fbfd25f..10ed07e 100644
--- a/src/config_unittest.cc
+++ b/src/config_unittest.cc
@@ -53,8 +53,7 @@
   EXPECT_EQ("", GetSettings().client_secret);
   EXPECT_EQ("", GetSettings().api_key);
   EXPECT_EQ("https://accounts.google.com/o/oauth2/", GetSettings().oauth_url);
-  EXPECT_EQ("https://www.googleapis.com/clouddevices/v1/",
-            GetSettings().service_url);
+  EXPECT_EQ("https://www.googleapis.com/weave/v1/", GetSettings().service_url);
   EXPECT_EQ("", GetSettings().oem_name);
   EXPECT_EQ("", GetSettings().model_name);
   EXPECT_EQ("", GetSettings().model_id);
diff --git a/src/privet/device_ui_kind.cc b/src/privet/device_ui_kind.cc
index 08b9312..ed7c5ff 100644
--- a/src/privet/device_ui_kind.cc
+++ b/src/privet/device_ui_kind.cc
@@ -20,6 +20,12 @@
     return "camera";
   if (kind == "AB")
     return "developmentBoard";
+  if (kind == "AH")
+    return "acHeating";
+  if (kind == "AI")
+    return "light";
+  if (kind == "AO")
+    return "lock";
   if (kind == "AE")
     return "printer";
   if (kind == "AF")
diff --git a/src/privet/wifi_ssid_generator.cc b/src/privet/wifi_ssid_generator.cc
index a049c20..697e5d8 100644
--- a/src/privet/wifi_ssid_generator.cc
+++ b/src/privet/wifi_ssid_generator.cc
@@ -52,6 +52,10 @@
 }
 
 std::string WifiSsidGenerator::GenerateFlags() const {
+  return GenerateFlagsInternal(false);
+}
+
+std::string WifiSsidGenerator::GenerateFlagsInternal(bool for_ssid) const {
   std::bitset<6> flags1;
   // Device needs WiFi configuration.
   flags1[0] = wifi_ && IsSetupNeeded(wifi_->GetConnectionState());
@@ -59,8 +63,9 @@
   flags1[1] = IsSetupNeeded(gcd_->GetConnectionState());
 
   std::bitset<6> flags2;
+
   // Device is discoverable over WiFi.
-  flags2[0] = true;
+  flags2[0] = for_ssid || (wifi_ && !wifi_->GetHostedSsid().empty());
 
   std::string result{2, base64chars[0]};
   result[0] = base64chars[flags1.to_ulong()];
@@ -77,7 +82,7 @@
 
   std::string result =
       base::StringPrintf(kSsidFormat, name.c_str(), idx.c_str(),
-                         model_id.c_str(), GenerateFlags().c_str());
+                         model_id.c_str(), GenerateFlagsInternal(true).c_str());
   CHECK_EQ(result[result.size() - 11], '.');
   return result;
 }
diff --git a/src/privet/wifi_ssid_generator.h b/src/privet/wifi_ssid_generator.h
index d720fb5..2b86f28 100644
--- a/src/privet/wifi_ssid_generator.h
+++ b/src/privet/wifi_ssid_generator.h
@@ -30,6 +30,7 @@
 
   // Sets object to use |n| instead of random number for SSID generation.
   void SetRandomForTests(int n);
+  std::string GenerateFlagsInternal(bool for_ssid) const;
 
   const CloudDelegate* gcd_{nullptr};
   const WifiDelegate* wifi_{nullptr};
diff --git a/src/privet/wifi_ssid_generator_unittest.cc b/src/privet/wifi_ssid_generator_unittest.cc
index 3bd561f..398e105 100644
--- a/src/privet/wifi_ssid_generator_unittest.cc
+++ b/src/privet/wifi_ssid_generator_unittest.cc
@@ -22,7 +22,26 @@
   WifiSsidGenerator ssid_generator_{&gcd_, &wifi_};
 };
 
-TEST_F(WifiSsidGeneratorTest, GenerateFlags) {
+TEST_F(WifiSsidGeneratorTest, GenerateFlagsNoHostedAp) {
+  EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2);
+
+  wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
+  gcd_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
+  EXPECT_EQ("DA", ssid_generator_.GenerateFlags());
+
+  wifi_.connection_state_ = ConnectionState{ConnectionState::kOnline};
+  EXPECT_EQ("CA", ssid_generator_.GenerateFlags());
+
+  gcd_.connection_state_ = ConnectionState{ConnectionState::kOffline};
+  EXPECT_EQ("AA", ssid_generator_.GenerateFlags());
+
+  wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
+  EXPECT_EQ("BA", ssid_generator_.GenerateFlags());
+}
+
+TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithHostedAp) {
+  EXPECT_CALL(wifi_, GetHostedSsid())
+      .WillRepeatedly(Return(ssid_generator_.GenerateSsid()));
   EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2);
 
   wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc
index fb00cc9..63d3348 100644
--- a/src/weave_unittest.cc
+++ b/src/weave_unittest.cc
@@ -344,19 +344,17 @@
   auto draft = CreateDictionaryValue(kDeviceResource);
   auto response = CreateDictionaryValue(kRegistrationResponse);
   response->Set("deviceDraft", draft->DeepCopy());
-  ExpectRequest(
-      HttpClient::Method::kPatch,
-      "https://www.googleapis.com/clouddevices/v1/registrationTickets/"
-      "TICKET_ID?key=TEST_API_KEY",
-      ValueToString(*response));
+  ExpectRequest(HttpClient::Method::kPatch,
+                "https://www.googleapis.com/weave/v1/registrationTickets/"
+                "TICKET_ID?key=TEST_API_KEY",
+                ValueToString(*response));
 
   response = CreateDictionaryValue(kRegistrationFinalResponse);
   response->Set("deviceDraft", draft->DeepCopy());
-  ExpectRequest(
-      HttpClient::Method::kPost,
-      "https://www.googleapis.com/clouddevices/v1/registrationTickets/"
-      "TICKET_ID/finalize?key=TEST_API_KEY",
-      ValueToString(*response));
+  ExpectRequest(HttpClient::Method::kPost,
+                "https://www.googleapis.com/weave/v1/registrationTickets/"
+                "TICKET_ID/finalize?key=TEST_API_KEY",
+                ValueToString(*response));
 
   ExpectRequest(HttpClient::Method::kPost,
                 "https://accounts.google.com/o/oauth2/token",
