diff --git a/libweave/src/config.cc b/libweave/src/config.cc
index 4f59497..b1b3e30 100644
--- a/libweave/src/config.cc
+++ b/libweave/src/config.cc
@@ -22,6 +22,8 @@
 
 namespace config_keys {
 
+const char kVersion[] = "version";
+
 const char kClientId[] = "client_id";
 const char kClientSecret[] = "client_secret";
 const char kApiKey[] = "api_key";
@@ -44,6 +46,17 @@
 
 namespace {
 
+const int kCurrentConfigVersion = 1;
+
+void MigrateFromV0(base::DictionaryValue* dict) {
+  std::string cloud_id;
+  if (dict->GetString(config_keys::kCloudId, &cloud_id) && !cloud_id.empty())
+    return;
+  scoped_ptr<base::Value> tmp;
+  if (dict->Remove(config_keys::kDeviceId, &tmp))
+    dict->Set(config_keys::kCloudId, std::move(tmp));
+}
+
 Config::Settings CreateDefaultSettings() {
   Config::Settings result;
   result.oauth_url = "https://accounts.google.com/o/oauth2/";
@@ -115,12 +128,25 @@
     return;
 
   auto value = base::JSONReader::Read(json_string);
-  const base::DictionaryValue* dict = nullptr;
+  base::DictionaryValue* dict = nullptr;
   if (!value || !value->GetAsDictionary(&dict)) {
     LOG(ERROR) << "Failed to parse settings.";
     return;
   }
 
+  int loaded_version = 0;
+  dict->GetInteger(config_keys::kVersion, &loaded_version);
+
+  if (loaded_version != kCurrentConfigVersion) {
+    LOG(INFO) << "State version mismatch. expected: " << kCurrentConfigVersion
+              << ", loaded: " << loaded_version;
+    save_ = true;
+  }
+
+  if (loaded_version == 0) {
+    MigrateFromV0(dict);
+  }
+
   std::string tmp;
   bool tmp_bool{false};
 
@@ -184,6 +210,8 @@
     return;
 
   base::DictionaryValue dict;
+  dict.SetInteger(config_keys::kVersion, kCurrentConfigVersion);
+
   dict.SetString(config_keys::kClientId, settings_.client_id);
   dict.SetString(config_keys::kClientSecret, settings_.client_secret);
   dict.SetString(config_keys::kApiKey, settings_.api_key);
diff --git a/libweave/src/config_unittest.cc b/libweave/src/config_unittest.cc
index f65f203..3078b1d 100644
--- a/libweave/src/config_unittest.cc
+++ b/libweave/src/config_unittest.cc
@@ -79,8 +79,35 @@
   EXPECT_EQ("", GetSettings().secret);
 }
 
+TEST_F(ConfigTest, LoadStateV0) {
+  EXPECT_CALL(config_store_, LoadSettings())
+      .WillOnce(Return(R"({
+    "device_id": "state_device_id"
+  })"));
+
+  EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
+  config_.Load();
+
+  EXPECT_EQ("state_device_id", GetSettings().cloud_id);
+  EXPECT_FALSE(GetSettings().device_id.empty());
+  EXPECT_NE(GetSettings().cloud_id, GetSettings().device_id);
+
+  EXPECT_CALL(config_store_, LoadSettings())
+      .WillOnce(Return(R"({
+    "device_id": "state_device_id",
+    "cloud_id": "state_cloud_id"
+  })"));
+
+  EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
+  config_.Load();
+
+  EXPECT_EQ("state_cloud_id", GetSettings().cloud_id);
+  EXPECT_EQ("state_device_id", GetSettings().device_id);
+}
+
 TEST_F(ConfigTest, LoadState) {
   auto state = R"({
+    "version": 1,
     "api_key": "state_api_key",
     "client_id": "state_client_id",
     "client_secret": "state_client_secret",
@@ -205,6 +232,7 @@
   EXPECT_CALL(config_store_, SaveSettings(_))
       .WillOnce(Invoke([](const std::string& json) {
         auto expected = R"({
+          'version': 1,
           'api_key': 'set_api_key',
           'client_id': 'set_client_id',
           'client_secret': 'set_client_secret',
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 74e8c41..c61bc69 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -195,6 +195,7 @@
     }
 
     EXPECT_CALL(dns_sd_, PublishService("_privet._tcp", 11, MatchTxt(txt)))
+        .Times(AtMost(1))
         .WillOnce(Return());
   }
 
