diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 12a00d7..a116178 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -62,11 +62,11 @@
       "_ledflasher": {"_leds": {"items": "boolean"}}
     })");
 
-    device->SetStateFromJson(R"({
+    device->SetStatePropertiesFromJson(R"({
       "_greeter": {"_greetings_counter": 0},
-    "_ledflasher":{"_leds": [false, false, false]}
+      "_ledflasher":{"_leds": [false, false, false]}
     })",
-                             nullptr);
+                                       nullptr);
 
     device->AddCommandHandler("_greeter._greet",
                               base::Bind(&CommandHandler::OnGreetCommand,
@@ -99,8 +99,7 @@
     LOG(INFO) << cmd->GetName() << " command finished: " << result;
 
     base::DictionaryValue state;
-    state.SetIntegerWithoutPathExpansion("_greeter._greetings_counter",
-                                         ++counter_);
+    state.SetInteger("_greeter._greetings_counter", ++counter_);
     device_->SetStateProperties(state, nullptr);
 
     LOG(INFO) << "New state: " << *device_->GetState();
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index eacd959..289cedb 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -81,11 +81,17 @@
   virtual void AddStateDefinitionsFromJson(const std::string& json) = 0;
   virtual void AddStateDefinitions(const base::DictionaryValue& dict) = 0;
 
-  // Updates multiple properties of the state.
+  // Sets value of multiple properties of the state.
   // It's recommended to call this to initialize state defined by
   // AddStateDefinitions.
-  virtual bool SetStateFromJson(const std::string& json, ErrorPtr* error) = 0;
-  virtual bool SetState(const base::DictionaryValue& dict, ErrorPtr* error) = 0;
+  // Example:
+  //   device->SetStatePropertiesFromJson("{'base':{'firmwareVersion':'123'}}")
+  // Method completely replaces properties included |json| or |dict|.
+  // Properties of the state not included |json| or |dict| will stay unchanged.
+  virtual bool SetStatePropertiesFromJson(const std::string& json,
+                                          ErrorPtr* error) = 0;
+  virtual bool SetStateProperties(const base::DictionaryValue& dict,
+                                  ErrorPtr* error) = 0;
 
   // Returns value of the single property.
   // |name| is full property name, including package name. e.g. "base.network".
@@ -98,10 +104,6 @@
                                 const base::Value& value,
                                 ErrorPtr* error) = 0;
 
-  // Updates a multiple property values.
-  virtual bool SetStateProperties(const base::DictionaryValue& property_set,
-                                  ErrorPtr* error) = 0;
-
   // Returns aggregated state properties across all registered packages.
   virtual std::unique_ptr<base::DictionaryValue> GetState() const = 0;
 
diff --git a/libweave/include/weave/test/mock_device.h b/libweave/include/weave/test/mock_device.h
index 98fc6c2..310d5b4 100644
--- a/libweave/include/weave/test/mock_device.h
+++ b/libweave/include/weave/test/mock_device.h
@@ -31,17 +31,15 @@
   MOCK_METHOD1(AddStateChangedCallback, void(const base::Closure& callback));
   MOCK_METHOD1(AddStateDefinitionsFromJson, void(const std::string&));
   MOCK_METHOD1(AddStateDefinitions, void(const base::DictionaryValue&));
-  MOCK_METHOD2(SetStateFromJson, bool(const std::string&, ErrorPtr*));
-  MOCK_METHOD2(SetState, bool(const base::DictionaryValue&, ErrorPtr*));
+  MOCK_METHOD2(SetStatePropertiesFromJson, bool(const std::string&, ErrorPtr*));
+  MOCK_METHOD2(SetStateProperties,
+               bool(const base::DictionaryValue&, ErrorPtr*));
   MOCK_CONST_METHOD1(MockGetStateProperty,
                      base::Value*(const std::string& name));
   MOCK_METHOD3(SetStateProperty,
                bool(const std::string& name,
                     const base::Value& value,
                     ErrorPtr* error));
-  MOCK_METHOD2(SetStateProperties,
-               bool(const base::DictionaryValue& property_set,
-                    ErrorPtr* error));
   MOCK_CONST_METHOD0(MockGetState, base::DictionaryValue*());
   MOCK_CONST_METHOD0(GetGcdState, GcdState());
   MOCK_METHOD1(AddGcdStateChangedCallback,
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index 8b6bf05..1a0a58d 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -26,8 +26,7 @@
 
   const auto& settings = device_info_->GetSettings();
   base::DictionaryValue state;
-  state.SetStringWithoutPathExpansion(kBaseStateFirmwareVersion,
-                                      settings.firmware_version);
+  state.SetString(kBaseStateFirmwareVersion, settings.firmware_version);
   CHECK(device_->SetStateProperties(state, nullptr));
 
   device->AddCommandDefinitionsFromJson(R"({
@@ -76,13 +75,11 @@
 
 void BaseApiHandler::OnConfigChanged(const Settings& settings) {
   base::DictionaryValue state;
-  state.SetStringWithoutPathExpansion(
-      kBaseStateAnonymousAccessRole,
-      EnumToString(settings.local_anonymous_access_role));
-  state.SetBooleanWithoutPathExpansion(kBaseStateDiscoveryEnabled,
-                                       settings.local_discovery_enabled);
-  state.SetBooleanWithoutPathExpansion(kBaseStatePairingEnabled,
-                                       settings.local_pairing_enabled);
+  state.SetString(kBaseStateAnonymousAccessRole,
+                  EnumToString(settings.local_anonymous_access_role));
+  state.SetBoolean(kBaseStateDiscoveryEnabled,
+                   settings.local_discovery_enabled);
+  state.SetBoolean(kBaseStatePairingEnabled, settings.local_pairing_enabled);
   device_->SetStateProperties(state, nullptr);
 }
 
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 0f81a2e..25d8d40 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -120,26 +120,21 @@
 }
 
 void DeviceManager::AddStateDefinitionsFromJson(const std::string& json) {
-  CHECK(state_manager_->LoadStateDefinition(json, nullptr));
+  CHECK(state_manager_->LoadStateDefinitionFromJson(json, nullptr));
 }
 
 void DeviceManager::AddStateDefinitions(const base::DictionaryValue& dict) {
   CHECK(state_manager_->LoadStateDefinition(dict, nullptr));
 }
 
-bool DeviceManager::SetStateFromJson(const std::string& json, ErrorPtr* error) {
-  return state_manager_->LoadStateDefaults(json, error);
+bool DeviceManager::SetStatePropertiesFromJson(const std::string& json,
+                                               ErrorPtr* error) {
+  return state_manager_->SetPropertiesFromJson(json, error);
 }
 
-bool DeviceManager::SetState(const base::DictionaryValue& dict,
-                             ErrorPtr* error) {
-  return state_manager_->LoadStateDefaults(dict, error);
-}
-
-bool DeviceManager::SetStateProperties(
-    const base::DictionaryValue& property_set,
-    ErrorPtr* error) {
-  return state_manager_->SetProperties(property_set, error);
+bool DeviceManager::SetStateProperties(const base::DictionaryValue& dict,
+                                       ErrorPtr* error) {
+  return state_manager_->SetProperties(dict, error);
 }
 
 std::unique_ptr<base::Value> DeviceManager::GetStateProperty(
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 7161dc5..8c85a1b 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -48,9 +48,9 @@
   void AddStateChangedCallback(const base::Closure& callback) override;
   void AddStateDefinitionsFromJson(const std::string& json) override;
   void AddStateDefinitions(const base::DictionaryValue& dict) override;
-  bool SetStateFromJson(const std::string& json, ErrorPtr* error) override;
-  bool SetState(const base::DictionaryValue& dict, ErrorPtr* error) override;
-  bool SetStateProperties(const base::DictionaryValue& property_set,
+  bool SetStatePropertiesFromJson(const std::string& json,
+                                  ErrorPtr* error) override;
+  bool SetStateProperties(const base::DictionaryValue& dict,
                           ErrorPtr* error) override;
   std::unique_ptr<base::Value> GetStateProperty(
       const std::string& name) const override;
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 47ee8f7..9475cfe 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -182,7 +182,7 @@
 }
 
 template <class T>
-void SetState(const T& state, base::DictionaryValue* parent) {
+void SetStateProperties(const T& state, base::DictionaryValue* parent) {
   if (!state.error()) {
     parent->SetString(kStatusKey, EnumToString(state.status()));
     return;
@@ -330,7 +330,7 @@
     DCHECK(!state.IsStatusEqual(ConnectionState::kOnline));
     result->SetString(kInfoWifiHostedSsidKey, hosted_ssid);
   }
-  SetState(state, result.get());
+  SetStateProperties(state, result.get());
   return result;
 }
 
@@ -338,7 +338,7 @@
     const CloudDelegate& cloud) {
   std::unique_ptr<base::DictionaryValue> gcd(new base::DictionaryValue());
   gcd->SetString(kInfoIdKey, cloud.GetCloudId());
-  SetState(cloud.GetConnectionState(), gcd.get());
+  SetStateProperties(cloud.GetConnectionState(), gcd.get());
   return gcd;
 }
 
@@ -718,7 +718,7 @@
   if (!state.IsStatusEqual(SetupState::kNone)) {
     base::DictionaryValue* gcd = new base::DictionaryValue;
     output.Set(kGcdKey, gcd);
-    SetState(state, gcd);
+    SetStateProperties(state, gcd);
     if (state.IsStatusEqual(SetupState::kSuccess))
       gcd->SetString(kInfoIdKey, cloud_->GetCloudId());
   }
@@ -728,7 +728,7 @@
     if (!state.IsStatusEqual(SetupState::kNone)) {
       base::DictionaryValue* wifi = new base::DictionaryValue;
       output.Set(kWifiKey, wifi);
-      SetState(state, wifi);
+      SetStateProperties(state, wifi);
       if (state.IsStatusEqual(SetupState::kSuccess))
         wifi->SetString(kInfoWifiSsidKey, wifi_->GetCurrentlyConnectedSsid());
     }
diff --git a/libweave/src/states/state_manager.cc b/libweave/src/states/state_manager.cc
index b0dd802..c579818 100644
--- a/libweave/src/states/state_manager.cc
+++ b/libweave/src/states/state_manager.cc
@@ -60,7 +60,7 @@
   CHECK(LoadBaseStateDefinition(kBaseStateDefs, nullptr));
 
   // Load standard device state defaults.
-  CHECK(LoadStateDefaults(kBaseStateDefaults, nullptr));
+  CHECK(SetPropertiesFromJson(kBaseStateDefaults, nullptr));
 
   for (const auto& cb : on_changed_)
     cb.Run();
@@ -76,23 +76,6 @@
   return dict;
 }
 
-bool StateManager::SetProperties(const base::DictionaryValue& property_set,
-                                 ErrorPtr* error) {
-  base::Time timestamp = base::Time::Now();
-  bool all_success = true;
-  for (base::DictionaryValue::Iterator it(property_set); !it.IsAtEnd();
-       it.Advance()) {
-    if (!SetPropertyValue(it.key(), it.value(), timestamp, error)) {
-      // Remember that an error occurred but keep going and update the rest of
-      // the properties if possible.
-      all_success = false;
-    }
-  }
-  for (const auto& cb : on_changed_)
-    cb.Run();
-  return all_success;
-}
-
 bool StateManager::SetProperty(const std::string& name,
                                const base::Value& value,
                                ErrorPtr* error) {
@@ -192,8 +175,8 @@
   return true;
 }
 
-bool StateManager::LoadStateDefinition(const std::string& json,
-                                       ErrorPtr* error) {
+bool StateManager::LoadStateDefinitionFromJson(const std::string& json,
+                                               ErrorPtr* error) {
   std::unique_ptr<const base::DictionaryValue> dict = LoadJsonDict(json, error);
   if (!dict)
     return false;
@@ -220,8 +203,8 @@
   return true;
 }
 
-bool StateManager::LoadStateDefaults(const base::DictionaryValue& dict,
-                                     ErrorPtr* error) {
+bool StateManager::SetProperties(const base::DictionaryValue& dict,
+                                 ErrorPtr* error) {
   base::Time timestamp = base::Time::Now();
   bool all_success = true;
   for (base::DictionaryValue::Iterator iter(dict); !iter.IsAtEnd();
@@ -257,11 +240,12 @@
   return all_success;
 }
 
-bool StateManager::LoadStateDefaults(const std::string& json, ErrorPtr* error) {
+bool StateManager::SetPropertiesFromJson(const std::string& json,
+                                         ErrorPtr* error) {
   std::unique_ptr<const base::DictionaryValue> dict = LoadJsonDict(json, error);
   if (!dict)
     return false;
-  if (!LoadStateDefaults(*dict, error)) {
+  if (!SetProperties(*dict, error)) {
     Error::AddToPrintf(error, FROM_HERE, errors::kErrorDomain,
                        errors::kSchemaError, "Failed to load defaults: '%s'",
                        json.c_str());
diff --git a/libweave/src/states/state_manager.h b/libweave/src/states/state_manager.h
index 72f9ddd..ce85e95 100644
--- a/libweave/src/states/state_manager.h
+++ b/libweave/src/states/state_manager.h
@@ -36,11 +36,9 @@
 
   void AddChangedCallback(const base::Closure& callback);
   bool LoadStateDefinition(const base::DictionaryValue& dict, ErrorPtr* error);
-  bool LoadStateDefinition(const std::string& json, ErrorPtr* error);
-  bool LoadStateDefaults(const base::DictionaryValue& dict, ErrorPtr* error);
-  bool LoadStateDefaults(const std::string& json, ErrorPtr* error);
-  bool SetProperties(const base::DictionaryValue& property_set,
-                     ErrorPtr* error);
+  bool LoadStateDefinitionFromJson(const std::string& json, ErrorPtr* error);
+  bool SetProperties(const base::DictionaryValue& dict, ErrorPtr* error);
+  bool SetPropertiesFromJson(const std::string& json, ErrorPtr* error);
   std::unique_ptr<base::Value> GetProperty(const std::string& name) const;
   bool SetProperty(const std::string& name,
                    const base::Value& value,
diff --git a/libweave/src/states/state_manager_unittest.cc b/libweave/src/states/state_manager_unittest.cc
index 3273a16..3496ec6 100644
--- a/libweave/src/states/state_manager_unittest.cc
+++ b/libweave/src/states/state_manager_unittest.cc
@@ -69,7 +69,7 @@
         base::Bind(&StateManagerTest::OnStateChanged, base::Unretained(this)));
 
     LoadStateDefinition(GetTestSchema().get(), nullptr);
-    ASSERT_TRUE(mgr_->LoadStateDefaults(*GetTestValues().get(), nullptr));
+    ASSERT_TRUE(mgr_->SetProperties(*GetTestValues().get(), nullptr));
   }
   void TearDown() override { mgr_.reset(); }
 
@@ -136,10 +136,10 @@
   StateManager manager(&mock_state_change_queue_);
 
   manager.Startup();
-  ASSERT_TRUE(manager.LoadStateDefinition(
+  ASSERT_TRUE(manager.LoadStateDefinitionFromJson(
       R"({"power": {"battery_level":"integer"}})", nullptr));
-  ASSERT_TRUE(
-      manager.LoadStateDefaults(R"({"power": {"battery_level":44}})", nullptr));
+  ASSERT_TRUE(manager.SetPropertiesFromJson(
+      R"({"power": {"battery_level":44}})", nullptr));
 
   auto expected = R"({
     'base': {
@@ -238,7 +238,7 @@
 
   EXPECT_CALL(*this, OnStateChanged()).Times(1);
   ASSERT_TRUE(mgr_->SetProperties(
-      *CreateDictionaryValue("{'base.manufacturer': 'No Name'}"), nullptr));
+      *CreateDictionaryValue("{'base':{'manufacturer':'No Name'}}"), nullptr));
 
   auto expected = R"({
     'base': {
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 1b926f6..458a620 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -229,7 +229,7 @@
 
     device_->AddCommandDefinitionsFromJson(kCommandDefs);
     device_->AddStateDefinitionsFromJson(kStateDefs);
-    device_->SetStateFromJson(kStateDefaults, nullptr);
+    device_->SetStatePropertiesFromJson(kStateDefaults, nullptr);
 
     for (const auto& cb : http_server_changed_cb_)
       cb.Run(http_server_);
