diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index ef5f4e6..7220e85 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -52,9 +52,9 @@
       base::DictionaryValue state;
       state.SetIntegerWithoutPathExpansion("_greeter._greetings_counter",
                                            ++counter_);
-      device_->GetState()->SetProperties(state, nullptr);
+      device_->SetStateProperties(state, nullptr);
 
-      LOG(INFO) << "New state: " << *device_->GetState()->GetState();
+      LOG(INFO) << "New state: " << *device_->GetState();
 
       cmd->Done();
     } else {
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 57895b2..03e3984 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -19,7 +19,6 @@
 #include <weave/provider/network.h>
 #include <weave/provider/task_runner.h>
 #include <weave/provider/wifi.h>
-#include <weave/state.h>
 
 namespace weave {
 
@@ -46,7 +45,27 @@
       const SettingsChangedCallback& callback) = 0;
 
   virtual Commands* GetCommands() = 0;
-  virtual State* GetState() = 0;
+
+  // Sets callback which is called when stat is changed.
+  virtual void AddStateChangedCallback(const base::Closure& callback) = 0;
+
+  // Returns value of the single property.
+  // |name| is full property name, including package name. e.g. "base.network".
+  virtual std::unique_ptr<base::Value> GetStateProperty(
+      const std::string& name) const = 0;
+
+  // Sets value of the single property.
+  // |name| is full property name, including package name. e.g. "base.network".
+  virtual bool SetStateProperty(const std::string& name,
+                                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;
 
   // Returns current state of GCD connection.
   virtual GcdState GetGcdState() const = 0;
diff --git a/libweave/include/weave/state.h b/libweave/include/weave/state.h
deleted file mode 100644
index 1b68343..0000000
--- a/libweave/include/weave/state.h
+++ /dev/null
@@ -1,42 +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_STATE_H_
-#define LIBWEAVE_INCLUDE_WEAVE_STATE_H_
-
-#include <base/callback.h>
-#include <base/values.h>
-
-namespace weave {
-
-class State {
- public:
-  // Sets callback which is called when stat is changed.
-  virtual void AddStateChangedCallback(const base::Closure& callback) = 0;
-
-  // Returns value of the single property.
-  // |name| is full property name, including package name. e.g. "base.network".
-  virtual std::unique_ptr<base::Value> GetStateProperty(
-      const std::string& name) = 0;
-
-  // Sets value of the single property.
-  // |name| is full property name, including package name. e.g. "base.network".
-  virtual bool SetStateProperty(const std::string& name,
-                                const base::Value& value,
-                                ErrorPtr* error) = 0;
-
-  // Updates multiple property values.
-  virtual bool SetProperties(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;
-
- protected:
-  virtual ~State() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_STATE_H_
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index f5fecf5..79ef5d1 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -72,10 +72,6 @@
   return command_manager_.get();
 }
 
-State* DeviceManager::GetState() {
-  return state_manager_.get();
-}
-
 Config* DeviceManager::GetConfig() {
   return device_info_->GetMutableConfig();
 }
@@ -101,6 +97,31 @@
   device_info_->AddGcdStateChangedCallback(callback);
 }
 
+void DeviceManager::AddStateChangedCallback(const base::Closure& callback) {
+  state_manager_->AddChangedCallback(callback);
+}
+
+bool DeviceManager::SetStateProperties(
+    const base::DictionaryValue& property_set,
+    ErrorPtr* error) {
+  return state_manager_->SetProperties(property_set, error);
+}
+
+std::unique_ptr<base::Value> DeviceManager::GetStateProperty(
+    const std::string& name) const {
+  return state_manager_->GetProperty(name);
+}
+
+bool DeviceManager::SetStateProperty(const std::string& name,
+                                     const base::Value& value,
+                                     ErrorPtr* error) {
+  return state_manager_->SetProperty(name, value, error);
+}
+
+std::unique_ptr<base::DictionaryValue> DeviceManager::GetState() const {
+  return state_manager_->GetState();
+}
+
 std::string DeviceManager::Register(const std::string& ticket_id,
                                     ErrorPtr* error) {
   return device_info_->RegisterDevice(ticket_id, error);
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index d96ee9b..fbf2871 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -38,7 +38,17 @@
   void AddSettingsChangedCallback(
       const SettingsChangedCallback& callback) override;
   Commands* GetCommands() override;
-  State* GetState() override;
+
+  void AddStateChangedCallback(const base::Closure& callback) override;
+  bool SetStateProperties(const base::DictionaryValue& property_set,
+                          ErrorPtr* error) override;
+  std::unique_ptr<base::Value> GetStateProperty(
+      const std::string& name) const override;
+  bool SetStateProperty(const std::string& name,
+                        const base::Value& value,
+                        ErrorPtr* error) override;
+  std::unique_ptr<base::DictionaryValue> GetState() const override;
+
   std::string Register(const std::string& ticket_id, ErrorPtr* error) override;
 
   GcdState GetGcdState() const override;
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index f3484ba..1f0b73f 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -243,7 +243,7 @@
   command_manager_->AddOnCommandDefChanged(
       base::Bind(&DeviceRegistrationInfo::OnCommandDefsChanged,
                  weak_factory_.GetWeakPtr()));
-  state_manager_->AddStateChangedCallback(base::Bind(
+  state_manager_->AddChangedCallback(base::Bind(
       &DeviceRegistrationInfo::OnStateChanged, weak_factory_.GetWeakPtr()));
 }
 
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 09836b6..57c8fa1 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -59,7 +59,7 @@
     command_manager_->AddOnCommandRemovedCallback(base::Bind(
         &CloudDelegateImpl::OnCommandRemoved, weak_factory_.GetWeakPtr()));
 
-    state_manager_->AddStateChangedCallback(base::Bind(
+    state_manager_->AddChangedCallback(base::Bind(
         &CloudDelegateImpl::OnStateChanged, weak_factory_.GetWeakPtr()));
   }
 
diff --git a/libweave/src/states/state_manager.cc b/libweave/src/states/state_manager.cc
index b5da1c7..7fd9715 100644
--- a/libweave/src/states/state_manager.cc
+++ b/libweave/src/states/state_manager.cc
@@ -49,7 +49,7 @@
 
 StateManager::~StateManager() {}
 
-void StateManager::AddStateChangedCallback(const base::Closure& callback) {
+void StateManager::AddChangedCallback(const base::Closure& callback) {
   on_changed_.push_back(callback);
   callback.Run();  // Force to read current state.
 }
@@ -102,21 +102,24 @@
   return all_success;
 }
 
-bool StateManager::SetStateProperty(const std::string& name,
-                                    const base::Value& value,
-                                    ErrorPtr* error) {
-  return SetPropertyValue(name, value, base::Time::Now(), error);
+bool StateManager::SetProperty(const std::string& name,
+                               const base::Value& value,
+                               ErrorPtr* error) {
+  bool result = SetPropertyValue(name, value, base::Time::Now(), error);
+  for (const auto& cb : on_changed_)
+    cb.Run();
+  return result;
 }
 
-std::unique_ptr<base::Value> StateManager::GetStateProperty(
-    const std::string& name) {
+std::unique_ptr<base::Value> StateManager::GetProperty(
+    const std::string& name) const {
   auto parts = SplitAtFirst(name, ".", true);
   const std::string& package_name = parts.first;
   const std::string& property_name = parts.second;
   if (package_name.empty() || property_name.empty())
     return nullptr;
 
-  StatePackage* package = FindPackage(package_name);
+  const StatePackage* package = FindPackage(package_name);
   if (!package)
     return nullptr;
 
@@ -289,6 +292,12 @@
   return (it != packages_.end()) ? it->second.get() : nullptr;
 }
 
+const StatePackage* StateManager::FindPackage(
+    const std::string& package_name) const {
+  auto it = packages_.find(package_name);
+  return (it != packages_.end()) ? it->second.get() : nullptr;
+}
+
 StatePackage* StateManager::FindOrCreatePackage(
     const std::string& package_name) {
   StatePackage* package = FindPackage(package_name);
diff --git a/libweave/src/states/state_manager.h b/libweave/src/states/state_manager.h
index 56dde95..1513781 100644
--- a/libweave/src/states/state_manager.h
+++ b/libweave/src/states/state_manager.h
@@ -15,7 +15,6 @@
 #include <base/callback.h>
 #include <base/macros.h>
 #include <weave/error.h>
-#include <weave/state.h>
 
 #include "src/states/state_change_queue_interface.h"
 #include "src/states/state_package.h"
@@ -34,21 +33,19 @@
 // StateManager is the class that aggregates the device state fragments
 // provided by device daemons and makes the aggregate device state available
 // to the GCD cloud server and local clients.
-class StateManager final : public State {
+class StateManager final {
  public:
   explicit StateManager(StateChangeQueueInterface* state_change_queue);
-  ~StateManager() override;
+  ~StateManager();
 
-  // State overrides.
-  void AddStateChangedCallback(const base::Closure& callback) override;
+  void AddChangedCallback(const base::Closure& callback);
   bool SetProperties(const base::DictionaryValue& property_set,
-                     ErrorPtr* error) override;
-  std::unique_ptr<base::Value> GetStateProperty(
-      const std::string& name) override;
-  bool SetStateProperty(const std::string& name,
-                        const base::Value& value,
-                        ErrorPtr* error) override;
-  std::unique_ptr<base::DictionaryValue> GetState() const override;
+                     ErrorPtr* error);
+  std::unique_ptr<base::Value> GetProperty(const std::string& name) const;
+  bool SetProperty(const std::string& name,
+                   const base::Value& value,
+                   ErrorPtr* error);
+  std::unique_ptr<base::DictionaryValue> GetState() const;
 
   // Initializes the state manager and load device state fragments.
   // Called by Buffet daemon at startup.
@@ -108,6 +105,7 @@
 
   // Finds a package by its name. Returns nullptr if not found.
   StatePackage* FindPackage(const std::string& package_name);
+  const StatePackage* FindPackage(const std::string& package_name) const;
   // Finds a package by its name. If none exists, one will be created.
   StatePackage* FindOrCreatePackage(const std::string& package_name);
 
diff --git a/libweave/src/states/state_manager_unittest.cc b/libweave/src/states/state_manager_unittest.cc
index 184dc35..421fe2f 100644
--- a/libweave/src/states/state_manager_unittest.cc
+++ b/libweave/src/states/state_manager_unittest.cc
@@ -65,7 +65,7 @@
     mgr_.reset(new StateManager(&mock_state_change_queue_));
 
     EXPECT_CALL(*this, OnStateChanged()).Times(1);
-    mgr_->AddStateChangedCallback(
+    mgr_->AddChangedCallback(
         base::Bind(&StateManagerTest::OnStateChanged, base::Unretained(this)));
 
     LoadStateDefinition(GetTestSchema().get(), "default", nullptr);
@@ -263,10 +263,10 @@
 }
 
 TEST_F(StateManagerTest, GetProperty) {
-  EXPECT_JSON_EQ("'Test Model'", *mgr_->GetStateProperty("base.serialNumber"));
-  EXPECT_JSON_EQ("''", *mgr_->GetStateProperty("device.state_property"));
-  EXPECT_EQ(nullptr, mgr_->GetStateProperty("device.unknown"));
-  EXPECT_EQ(nullptr, mgr_->GetStateProperty("unknown.state_property"));
+  EXPECT_JSON_EQ("'Test Model'", *mgr_->GetProperty("base.serialNumber"));
+  EXPECT_JSON_EQ("''", *mgr_->GetProperty("device.state_property"));
+  EXPECT_EQ(nullptr, mgr_->GetProperty("device.unknown"));
+  EXPECT_EQ(nullptr, mgr_->GetProperty("unknown.state_property"));
 }
 
 }  // namespace weave
