diff --git a/libweave/examples/ubuntu/avahi_client.h b/libweave/examples/ubuntu/avahi_client.h
index d3121a9..ed955ec 100644
--- a/libweave/examples/ubuntu/avahi_client.h
+++ b/libweave/examples/ubuntu/avahi_client.h
@@ -12,13 +12,13 @@
 #include <avahi-client/publish.h>
 #include <avahi-common/thread-watch.h>
 
-#include <weave/dns_service_discovery_provider.h>
+#include <weave/provider/dns_service_discovery.h>
 
 namespace weave {
 namespace examples {
 
-// Example of weave::DnsServiceDiscoveryProvider implemented with avahi.
-class AvahiClient : public DnsServiceDiscoveryProvider {
+// Example of provider::DnsServiceDiscovery implemented with avahi.
+class AvahiClient : public provider::DnsServiceDiscovery {
  public:
   AvahiClient();
 
diff --git a/libweave/examples/ubuntu/bluez_client.h b/libweave/examples/ubuntu/bluez_client.h
index 0915403..23e21ad 100644
--- a/libweave/examples/ubuntu/bluez_client.h
+++ b/libweave/examples/ubuntu/bluez_client.h
@@ -5,13 +5,13 @@
 #ifndef LIBWEAVE_EXAMPLES_UBUNTU_BLUEZ_CLIENT_H_
 #define LIBWEAVE_EXAMPLES_UBUNTU_BLUEZ_CLIENT_H_
 
-#include <weave/bluetooth.h>
+#include <weave/provider/bluetooth.h>
 
 namespace weave {
 namespace examples {
 
 // Example of weave::Bluetooth implemented with bluez.
-class BluetoothImpl : public Bluetooth {
+class BluetoothImpl : public provider::Bluetooth {
  public:
   BluetoothImpl();
 
diff --git a/libweave/examples/ubuntu/curl_http_client.cc b/libweave/examples/ubuntu/curl_http_client.cc
index 3ab3497..2be12d7 100644
--- a/libweave/examples/ubuntu/curl_http_client.cc
+++ b/libweave/examples/ubuntu/curl_http_client.cc
@@ -6,14 +6,14 @@
 
 #include <base/bind.h>
 #include <curl/curl.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 namespace weave {
 namespace examples {
 
 namespace {
 
-struct ResponseImpl : public HttpClient::Response {
+struct ResponseImpl : public provider::HttpClient::Response {
   int GetStatusCode() const { return status; }
   std::string GetContentType() const { return content_type; }
   const std::string& GetData() const { return data; }
@@ -31,15 +31,15 @@
 
 }  // namespace
 
-CurlHttpClient::CurlHttpClient(TaskRunner* task_runner)
+CurlHttpClient::CurlHttpClient(provider::TaskRunner* task_runner)
     : task_runner_{task_runner} {}
 
-std::unique_ptr<HttpClient::Response> CurlHttpClient::SendRequestAndBlock(
-    const std::string& method,
-    const std::string& url,
-    const Headers& headers,
-    const std::string& data,
-    ErrorPtr* error) {
+std::unique_ptr<provider::HttpClient::Response>
+CurlHttpClient::SendRequestAndBlock(const std::string& method,
+                                    const std::string& url,
+                                    const Headers& headers,
+                                    const std::string& data,
+                                    ErrorPtr* error) {
   std::unique_ptr<CURL, decltype(&curl_easy_cleanup)> curl{curl_easy_init(),
                                                            &curl_easy_cleanup};
   CHECK(curl);
diff --git a/libweave/examples/ubuntu/curl_http_client.h b/libweave/examples/ubuntu/curl_http_client.h
index 45e13dc..853b797 100644
--- a/libweave/examples/ubuntu/curl_http_client.h
+++ b/libweave/examples/ubuntu/curl_http_client.h
@@ -8,19 +8,21 @@
 #include <string>
 
 #include <base/memory/weak_ptr.h>
-#include <weave/http_client.h>
+#include <weave/provider/http_client.h>
 
 namespace weave {
 
+namespace provider {
 class TaskRunner;
+}
 
 namespace examples {
 
 // Basic implementation of weave::HttpClient using libcurl. Should be used in
 // production code as it's blocking and does not validate server certificates.
-class CurlHttpClient : public HttpClient {
+class CurlHttpClient : public provider::HttpClient {
  public:
-  explicit CurlHttpClient(TaskRunner* task_runner);
+  explicit CurlHttpClient(provider::TaskRunner* task_runner);
 
   std::unique_ptr<Response> SendRequestAndBlock(const std::string& method,
                                                 const std::string& url,
@@ -42,7 +44,7 @@
                         int id,
                         ErrorPtr error);
 
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   int request_id_ = 0;
 
   base::WeakPtrFactory<CurlHttpClient> weak_ptr_factory_{this};
diff --git a/libweave/examples/ubuntu/event_http_server.cc b/libweave/examples/ubuntu/event_http_server.cc
index 8e45648..fff49cd 100644
--- a/libweave/examples/ubuntu/event_http_server.cc
+++ b/libweave/examples/ubuntu/event_http_server.cc
@@ -32,7 +32,8 @@
 
 class MemoryReadStream : public Stream {
  public:
-  MemoryReadStream(const std::vector<uint8_t>& data, TaskRunner* task_runner)
+  MemoryReadStream(const std::vector<uint8_t>& data,
+                   provider::TaskRunner* task_runner)
       : data_{data}, task_runner_{task_runner} {}
 
   void Read(void* buffer,
@@ -58,7 +59,7 @@
 
  private:
   const std::vector<uint8_t>& data_;
-  TaskRunner* task_runner_;
+  provider::TaskRunner* task_runner_;
   size_t read_position_{0};
 };
 
@@ -66,7 +67,7 @@
 
 class HttpServerImpl::RequestImpl : public Request {
  public:
-  explicit RequestImpl(evhttp_request* req, TaskRunner* task_runner)
+  explicit RequestImpl(evhttp_request* req, provider::TaskRunner* task_runner)
       : path_{evhttp_request_uri(req)}, task_runner_{task_runner} {
     path_ = path_.substr(0, path_.find("?"));
     path_ = path_.substr(0, path_.find("#"));
@@ -97,7 +98,7 @@
   std::unique_ptr<evhttp_request, decltype(&evhttp_cancel_request)> req_{
       nullptr, &evhttp_cancel_request};
   std::string path_;
-  TaskRunner* task_runner_;
+  provider::TaskRunner* task_runner_;
 };
 
 HttpServerImpl::HttpServerImpl(EventTaskRunner* task_runner)
diff --git a/libweave/examples/ubuntu/event_http_server.h b/libweave/examples/ubuntu/event_http_server.h
index 52dd292..1005edc 100644
--- a/libweave/examples/ubuntu/event_http_server.h
+++ b/libweave/examples/ubuntu/event_http_server.h
@@ -14,7 +14,7 @@
 #include <vector>
 
 #include <base/memory/weak_ptr.h>
-#include <weave/http_server.h>
+#include <weave/provider/http_server.h>
 
 namespace weave {
 namespace examples {
@@ -22,7 +22,7 @@
 class EventTaskRunner;
 
 // HTTP/HTTPS server implemented with libevent.
-class HttpServerImpl : public HttpServer {
+class HttpServerImpl : public provider::HttpServer {
  public:
   class RequestImpl;
 
diff --git a/libweave/examples/ubuntu/event_task_runner.h b/libweave/examples/ubuntu/event_task_runner.h
index 726a621..3f04995 100644
--- a/libweave/examples/ubuntu/event_task_runner.h
+++ b/libweave/examples/ubuntu/event_task_runner.h
@@ -11,13 +11,13 @@
 
 #include <event2/event.h>
 
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 namespace weave {
 namespace examples {
 
 // Simple task runner implemented with libevent message loop.
-class EventTaskRunner : public TaskRunner {
+class EventTaskRunner : public provider::TaskRunner {
  public:
   void PostDelayedTask(const tracked_objects::Location& from_here,
                        const base::Closure& task,
diff --git a/libweave/examples/ubuntu/file_config_store.h b/libweave/examples/ubuntu/file_config_store.h
index f6e9b5f..e2bd1c1 100644
--- a/libweave/examples/ubuntu/file_config_store.h
+++ b/libweave/examples/ubuntu/file_config_store.h
@@ -9,12 +9,12 @@
 #include <string>
 #include <vector>
 
-#include <weave/config_store.h>
+#include <weave/provider/config_store.h>
 
 namespace weave {
 namespace examples {
 
-class FileConfigStore : public ConfigStore {
+class FileConfigStore : public provider::ConfigStore {
  public:
   bool LoadDefaults(Settings* settings) override;
   std::string LoadSettings() override;
diff --git a/libweave/examples/ubuntu/network_manager.cc b/libweave/examples/ubuntu/network_manager.cc
index fc033b5..4f94ef2 100644
--- a/libweave/examples/ubuntu/network_manager.cc
+++ b/libweave/examples/ubuntu/network_manager.cc
@@ -12,7 +12,7 @@
 #include <fstream>
 
 #include <base/bind.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/examples/ubuntu/ssl_stream.h"
 
@@ -21,6 +21,8 @@
 
 namespace {
 
+using provider::NetworkState;
+
 int ForkCmd(const std::string& path, const std::vector<std::string>& args) {
   int pid = fork();
   if (pid != 0)
@@ -38,7 +40,8 @@
 
 }  // namespace
 
-NetworkImpl::NetworkImpl(TaskRunner* task_runner, bool force_bootstrapping)
+NetworkImpl::NetworkImpl(provider::TaskRunner* task_runner,
+                         bool force_bootstrapping)
     : task_runner_{task_runner}, force_bootstrapping_{force_bootstrapping} {
   SSL_load_error_strings();
   SSL_library_init();
diff --git a/libweave/examples/ubuntu/network_manager.h b/libweave/examples/ubuntu/network_manager.h
index e59bc96..4df2a07 100644
--- a/libweave/examples/ubuntu/network_manager.h
+++ b/libweave/examples/ubuntu/network_manager.h
@@ -10,32 +10,35 @@
 
 #include <base/memory/weak_ptr.h>
 #include <base/time/time.h>
-#include <weave/network_provider.h>
-#include <weave/wifi_provider.h>
+#include <weave/provider/network.h>
+#include <weave/provider/wifi.h>
 
 namespace weave {
 
+namespace provider {
 class TaskRunner;
+}
 
 namespace examples {
 
 // Basic weave::Network implementation.
 // Production version of SSL socket needs secure server certificate check.
-class NetworkImpl : public NetworkProvider, public WifiProvider {
+class NetworkImpl : public provider::Network, public provider::Wifi {
  public:
-  explicit NetworkImpl(TaskRunner* task_runner, bool force_bootstrapping);
+  explicit NetworkImpl(provider::TaskRunner* task_runner,
+                       bool force_bootstrapping);
   ~NetworkImpl();
 
-  // NetworkProvider implementation.
+  // Network implementation.
   void AddConnectionChangedCallback(
       const ConnectionChangedCallback& callback) override;
-  NetworkState GetConnectionState() const override;
+  provider::NetworkState GetConnectionState() const override;
   void OpenSslSocket(const std::string& host,
                      uint16_t port,
                      const OpenSslSocketSuccessCallback& success_callback,
                      const ErrorCallback& error_callback) override;
 
-  // WifiProvider implementation.
+  // Wifi implementation.
   void Connect(const std::string& ssid,
                const std::string& passphrase,
                const SuccessCallback& success_callback,
@@ -56,9 +59,9 @@
 
   bool force_bootstrapping_{false};
   bool hostapd_started_{false};
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   std::vector<ConnectionChangedCallback> callbacks_;
-  NetworkState network_state_{NetworkState::kOffline};
+  provider::NetworkState network_state_{provider::NetworkState::kOffline};
 
   base::WeakPtrFactory<NetworkImpl> weak_ptr_factory_{this};
 };
diff --git a/libweave/examples/ubuntu/ssl_stream.cc b/libweave/examples/ubuntu/ssl_stream.cc
index a54578d..920648f 100644
--- a/libweave/examples/ubuntu/ssl_stream.cc
+++ b/libweave/examples/ubuntu/ssl_stream.cc
@@ -5,12 +5,13 @@
 #include "libweave/examples/ubuntu/ssl_stream.h"
 
 #include <base/bind.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 namespace weave {
 namespace examples {
 
-SSLStream::SSLStream(TaskRunner* task_runner) : task_runner_{task_runner} {}
+SSLStream::SSLStream(provider::TaskRunner* task_runner)
+    : task_runner_{task_runner} {}
 
 SSLStream::~SSLStream() {
   CancelPendingOperations();
diff --git a/libweave/examples/ubuntu/ssl_stream.h b/libweave/examples/ubuntu/ssl_stream.h
index 7343df9..ac0d76a 100644
--- a/libweave/examples/ubuntu/ssl_stream.h
+++ b/libweave/examples/ubuntu/ssl_stream.h
@@ -12,13 +12,15 @@
 
 namespace weave {
 
+namespace provider {
 class TaskRunner;
+}
 
 namespace examples {
 
 class SSLStream : public Stream {
  public:
-  explicit SSLStream(TaskRunner* task_runner);
+  explicit SSLStream(provider::TaskRunner* task_runner);
 
   ~SSLStream() override;
 
@@ -39,7 +41,7 @@
  private:
   void RunDelayedTask(const base::Closure& task);
 
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   std::unique_ptr<SSL_CTX, decltype(&SSL_CTX_free)> ctx_{nullptr, SSL_CTX_free};
   std::unique_ptr<SSL, decltype(&SSL_free)> ssl_{nullptr, SSL_free};
 
diff --git a/libweave/include/weave/bluetooth.h b/libweave/include/weave/bluetooth.h
deleted file mode 100644
index 69fdc5e..0000000
--- a/libweave/include/weave/bluetooth.h
+++ /dev/null
@@ -1,20 +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_BLUETOOTH_H_
-#define LIBWEAVE_INCLUDE_WEAVE_BLUETOOTH_H_
-
-namespace weave {
-
-class Bluetooth {
- public:
-  // TODO(rginda): Add bluetooth interface methods here.
-
- protected:
-  virtual ~Bluetooth() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_BLUETOOTH_H_
diff --git a/libweave/include/weave/config_store.h b/libweave/include/weave/config_store.h
deleted file mode 100644
index 8a5af58..0000000
--- a/libweave/include/weave/config_store.h
+++ /dev/null
@@ -1,72 +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_CONFIG_STORE_H_
-#define LIBWEAVE_INCLUDE_WEAVE_CONFIG_STORE_H_
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include <base/callback.h>
-#include <base/time/time.h>
-#include <weave/enum_to_string.h>
-#include <weave/privet.h>
-
-namespace weave {
-
-struct Settings {
-  std::string client_id;
-  std::string client_secret;
-  std::string api_key;
-  std::string oauth_url;
-  std::string service_url;
-  std::string name;
-  std::string description;
-  std::string location;
-  std::string local_anonymous_access_role;
-  bool local_discovery_enabled{true};
-  bool local_pairing_enabled{true};
-  std::string firmware_version;
-  std::string oem_name;
-  std::string model_name;
-  std::string model_id;
-  base::TimeDelta polling_period;
-  base::TimeDelta backup_polling_period;
-
-  bool wifi_auto_setup_enabled{true};
-  bool ble_setup_enabled{false};
-  std::set<PairingType> pairing_modes;
-  std::string embedded_code;
-
-  std::string device_id;
-  std::string refresh_token;
-  std::string robot_account;
-  std::string last_configured_ssid;
-};
-
-class ConfigStore {
- public:
-  virtual bool LoadDefaults(Settings* settings) = 0;
-  virtual std::string LoadSettings() = 0;
-  virtual void SaveSettings(const std::string& settings) = 0;
-  virtual void OnSettingsChanged(const Settings& settings) = 0;
-
-  virtual std::string LoadBaseCommandDefs() = 0;
-  virtual std::map<std::string, std::string> LoadCommandDefs() = 0;
-
-  virtual std::string LoadBaseStateDefs() = 0;
-  virtual std::string LoadBaseStateDefaults() = 0;
-
-  virtual std::map<std::string, std::string> LoadStateDefs() = 0;
-  virtual std::vector<std::string> LoadStateDefaults() = 0;
-
- protected:
-  virtual ~ConfigStore() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_CONFIG_STORE_H_
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index c6b70ea..6d1cd92 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -9,19 +9,19 @@
 #include <set>
 #include <string>
 
-#include <weave/bluetooth.h>
 #include <weave/cloud.h>
 #include <weave/commands.h>
-#include <weave/config_store.h>
-#include <weave/dns_service_discovery_provider.h>
 #include <weave/export.h>
-#include <weave/http_client.h>
-#include <weave/http_server.h>
-#include <weave/network_provider.h>
 #include <weave/privet.h>
+#include <weave/provider/bluetooth.h>
+#include <weave/provider/config_store.h>
+#include <weave/provider/dns_service_discovery.h>
+#include <weave/provider/http_client.h>
+#include <weave/provider/http_server.h>
+#include <weave/provider/network.h>
+#include <weave/provider/task_runner.h>
+#include <weave/provider/wifi.h>
 #include <weave/state.h>
-#include <weave/task_runner.h>
-#include <weave/wifi_provider.h>
 
 namespace weave {
 
@@ -38,14 +38,14 @@
   virtual ~Device() = default;
 
   virtual void Start(const Options& options,
-                     ConfigStore* config_store,
-                     TaskRunner* task_runner,
-                     HttpClient* http_client,
-                     NetworkProvider* network,
-                     DnsServiceDiscoveryProvider* dns_sd,
-                     HttpServer* http_server,
-                     WifiProvider* wifi,
-                     Bluetooth* bluetooth) = 0;
+                     provider::ConfigStore* config_store,
+                     provider::TaskRunner* task_runner,
+                     provider::HttpClient* http_client,
+                     provider::Network* network,
+                     provider::DnsServiceDiscovery* dns_sd,
+                     provider::HttpServer* http_server,
+                     provider::Wifi* wifi,
+                     provider::Bluetooth* bluetooth_provider) = 0;
 
   virtual Commands* GetCommands() = 0;
   virtual State* GetState() = 0;
diff --git a/libweave/include/weave/provider/bluetooth.h b/libweave/include/weave/provider/bluetooth.h
new file mode 100644
index 0000000..d87dcc0
--- /dev/null
+++ b/libweave/include/weave/provider/bluetooth.h
@@ -0,0 +1,23 @@
+// 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_PROVIDER_BLUETOOTH_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_BLUETOOTH_H_
+
+namespace weave {
+namespace provider {
+
+// Interface with methods to control bluetooth capability of the device.
+class Bluetooth {
+ public:
+  // TODO(rginda): Add bluetooth interface methods here.
+
+ protected:
+  virtual ~Bluetooth() = default;
+};
+
+}  // namespace provider
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_BLUETOOTH_H_
diff --git a/libweave/include/weave/provider/config_store.h b/libweave/include/weave/provider/config_store.h
new file mode 100644
index 0000000..85cae42
--- /dev/null
+++ b/libweave/include/weave/provider/config_store.h
@@ -0,0 +1,44 @@
+// 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_PROVIDER_CONFIG_STORE_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_CONFIG_STORE_H_
+
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include <base/callback.h>
+#include <base/time/time.h>
+#include <weave/enum_to_string.h>
+#include <weave/settings.h>
+
+namespace weave {
+namespace provider {
+
+class ConfigStore {
+ public:
+  virtual bool LoadDefaults(Settings* settings) = 0;
+  virtual std::string LoadSettings() = 0;
+  virtual void SaveSettings(const std::string& settings) = 0;
+  virtual void OnSettingsChanged(const Settings& settings) = 0;
+
+  virtual std::string LoadBaseCommandDefs() = 0;
+  virtual std::map<std::string, std::string> LoadCommandDefs() = 0;
+
+  virtual std::string LoadBaseStateDefs() = 0;
+  virtual std::string LoadBaseStateDefaults() = 0;
+
+  virtual std::map<std::string, std::string> LoadStateDefs() = 0;
+  virtual std::vector<std::string> LoadStateDefaults() = 0;
+
+ protected:
+  virtual ~ConfigStore() = default;
+};
+
+}  // namespace provider
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_CONFIG_STORE_H_
diff --git a/libweave/include/weave/dns_service_discovery_provider.h b/libweave/include/weave/provider/dns_service_discovery.h
similarity index 71%
rename from libweave/include/weave/dns_service_discovery_provider.h
rename to libweave/include/weave/provider/dns_service_discovery.h
index bdba69d..dfd94eb 100644
--- a/libweave/include/weave/dns_service_discovery_provider.h
+++ b/libweave/include/weave/provider/dns_service_discovery.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_DNS_SERVICE_DISCOVERY_PROVIDER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_DNS_SERVICE_DISCOVERY_PROVIDER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_DNS_SERVICE_DISCOVERY_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_DNS_SERVICE_DISCOVERY_H_
 
 #include <string>
 #include <vector>
@@ -11,8 +11,9 @@
 #include <base/callback.h>
 
 namespace weave {
+namespace provider {
 
-class DnsServiceDiscoveryProvider {
+class DnsServiceDiscovery {
  public:
   // Publishes new service using DNS-SD or updates existing one.
   virtual void PublishService(const std::string& service_type,
@@ -27,9 +28,10 @@
   virtual std::string GetId() const = 0;
 
  protected:
-  virtual ~DnsServiceDiscoveryProvider() = default;
+  virtual ~DnsServiceDiscovery() = default;
 };
 
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_DNS_SERVICE_DISCOVERY_PROVIDER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_DNS_SERVICE_DISCOVERY_H_
diff --git a/libweave/include/weave/http_client.h b/libweave/include/weave/provider/http_client.h
similarity index 87%
rename from libweave/include/weave/http_client.h
rename to libweave/include/weave/provider/http_client.h
index 6112271..9671f0d 100644
--- a/libweave/include/weave/http_client.h
+++ b/libweave/include/weave/provider/http_client.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_HTTP_CLIENT_H_
-#define LIBWEAVE_INCLUDE_WEAVE_HTTP_CLIENT_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_HTTP_CLIENT_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_HTTP_CLIENT_H_
 
 #include <string>
 #include <utility>
@@ -13,6 +13,7 @@
 #include <weave/error.h>
 
 namespace weave {
+namespace provider {
 
 class HttpClient {
  public:
@@ -49,6 +50,7 @@
   virtual ~HttpClient() = default;
 };
 
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_HTTP_CLIENT_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_HTTP_CLIENT_H_
diff --git a/libweave/include/weave/http_server.h b/libweave/include/weave/provider/http_server.h
similarity index 88%
rename from libweave/include/weave/http_server.h
rename to libweave/include/weave/provider/http_server.h
index 2716600..1d4ab1e 100644
--- a/libweave/include/weave/http_server.h
+++ b/libweave/include/weave/provider/http_server.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_HTTP_SERVER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_HTTP_SERVER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_HTTP_SERVER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_HTTP_SERVER_H_
 
 #include <string>
 #include <vector>
@@ -12,6 +12,7 @@
 #include <weave/stream.h>
 
 namespace weave {
+namespace provider {
 
 class HttpServer {
  public:
@@ -53,6 +54,7 @@
   virtual ~HttpServer() = default;
 };
 
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_HTTP_SERVER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_HTTP_SERVER_H_
diff --git a/libweave/include/weave/network_provider.h b/libweave/include/weave/provider/network.h
similarity index 84%
rename from libweave/include/weave/network_provider.h
rename to libweave/include/weave/provider/network.h
index ac1dcc8..bba60f0 100644
--- a/libweave/include/weave/network_provider.h
+++ b/libweave/include/weave/provider/network.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_NETWORK_PROVIDER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_NETWORK_PROVIDER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_NETWORK_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_NETWORK_H_
 
 #include <string>
 
@@ -12,6 +12,7 @@
 #include <weave/stream.h>
 
 namespace weave {
+namespace provider {
 
 enum class NetworkState {
   kOffline = 0,
@@ -22,7 +23,7 @@
 
 // Interface with methods to detect network connectivity and opening network
 // connections.
-class NetworkProvider {
+class Network {
  public:
   // Callback type for AddConnectionChangedCallback.
   using ConnectionChangedCallback = base::Closure;
@@ -48,9 +49,10 @@
       const ErrorCallback& error_callback) = 0;
 
  protected:
-  virtual ~NetworkProvider() = default;
+  virtual ~Network() = default;
 };
 
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_NETWORK_PROVIDER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_NETWORK_H_
diff --git a/libweave/include/weave/task_runner.h b/libweave/include/weave/provider/task_runner.h
similarity index 80%
rename from libweave/include/weave/task_runner.h
rename to libweave/include/weave/provider/task_runner.h
index 43b81b7..daabc7e 100644
--- a/libweave/include/weave/task_runner.h
+++ b/libweave/include/weave/provider/task_runner.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TASK_RUNNER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TASK_RUNNER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TASK_RUNNER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TASK_RUNNER_H_
 
 #include <string>
 #include <utility>
@@ -14,6 +14,7 @@
 #include <base/time/time.h>
 
 namespace weave {
+namespace provider {
 
 // Interface with methods to post tasks into platform-specific message loop of
 // the current thread.
@@ -30,6 +31,7 @@
   virtual ~TaskRunner() = default;
 };
 
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TASK_RUNNER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TASK_RUNNER_H_
diff --git a/libweave/include/weave/test/mock_bluetooth.h b/libweave/include/weave/provider/test/mock_bluetooth.h
similarity index 73%
rename from libweave/include/weave/test/mock_bluetooth.h
rename to libweave/include/weave/provider/test/mock_bluetooth.h
index d02e314..d572fa4 100644
--- a/libweave/include/weave/test/mock_bluetooth.h
+++ b/libweave/include/weave/provider/test/mock_bluetooth.h
@@ -14,12 +14,13 @@
  * limitations under the License.
  */
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_BLUETOOTH_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_BLUETOOTH_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_BLUETOOTH_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_BLUETOOTH_H_
 
-#include <weave/bluetooth.h>
+#include <weave/provider/bluetooth.h>
 
 namespace weave {
+namespace provider {
 namespace test {
 
 class MockBluetooth : public Bluetooth {
@@ -27,6 +28,7 @@
 };
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_BLUETOOTH_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_BLUETOOTH_H_
diff --git a/libweave/include/weave/test/mock_config_store.h b/libweave/include/weave/provider/test/mock_config_store.h
similarity index 81%
rename from libweave/include/weave/test/mock_config_store.h
rename to libweave/include/weave/provider/test/mock_config_store.h
index 357db6e..7bc0db7 100644
--- a/libweave/include/weave/test/mock_config_store.h
+++ b/libweave/include/weave/provider/test/mock_config_store.h
@@ -2,17 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_CONFIG_STORE_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_CONFIG_STORE_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_CONFIG_STORE_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_CONFIG_STORE_H_
 
 #include <map>
 #include <string>
 #include <vector>
 
 #include <gmock/gmock.h>
-#include <weave/config_store.h>
+#include <weave/provider/config_store.h>
 
 namespace weave {
+namespace provider {
 namespace test {
 
 class MockConfigStore : public ConfigStore {
@@ -42,6 +43,7 @@
 };
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_CONFIG_STORE_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_CONFIG_STORE_H_
diff --git a/libweave/include/weave/provider/test/mock_dns_service_discovery.h b/libweave/include/weave/provider/test/mock_dns_service_discovery.h
new file mode 100644
index 0000000..cfb070e
--- /dev/null
+++ b/libweave/include/weave/provider/test/mock_dns_service_discovery.h
@@ -0,0 +1,33 @@
+// 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_PROVIDER_TEST_MOCK_DNS_SERVICE_DISCOVERY_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_DNS_SERVICE_DISCOVERY_H_
+
+#include <weave/provider/dns_service_discovery.h>
+
+#include <string>
+#include <vector>
+
+#include <gmock/gmock.h>
+
+namespace weave {
+namespace provider {
+namespace test {
+
+class MockDnsServiceDiscovery : public DnsServiceDiscovery {
+ public:
+  MOCK_METHOD3(PublishService,
+               void(const std::string&,
+                    uint16_t,
+                    const std::vector<std::string>&));
+  MOCK_METHOD1(StopPublishing, void(const std::string&));
+  MOCK_CONST_METHOD0(GetId, std::string());
+};
+
+}  // namespace test
+}  // namespace provider
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_DNS_SERVICE_DISCOVERY_H_
diff --git a/libweave/include/weave/test/mock_http_client.h b/libweave/include/weave/provider/test/mock_http_client.h
similarity index 84%
rename from libweave/include/weave/test/mock_http_client.h
rename to libweave/include/weave/provider/test/mock_http_client.h
index f5c04ea..21af699 100644
--- a/libweave/include/weave/test/mock_http_client.h
+++ b/libweave/include/weave/provider/test/mock_http_client.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_HTTP_CLIENT_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_HTTP_CLIENT_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_HTTP_CLIENT_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_HTTP_CLIENT_H_
 
-#include <weave/http_client.h>
+#include <weave/provider/http_client.h>
 
 #include <memory>
 #include <string>
@@ -13,6 +13,7 @@
 #include <gmock/gmock.h>
 
 namespace weave {
+namespace provider {
 namespace test {
 
 class MockHttpClientResponse : public HttpClient::Response {
@@ -48,6 +49,7 @@
 };
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_HTTP_CLIENT_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_HTTP_CLIENT_H_
diff --git a/libweave/include/weave/test/mock_http_server.h b/libweave/include/weave/provider/test/mock_http_server.h
similarity index 71%
rename from libweave/include/weave/test/mock_http_server.h
rename to libweave/include/weave/provider/test/mock_http_server.h
index 9f8bbcc..3beb4ae 100644
--- a/libweave/include/weave/test/mock_http_server.h
+++ b/libweave/include/weave/provider/test/mock_http_server.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_HTTP_SERVER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_HTTP_SERVER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_HTTP_SERVER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_HTTP_SERVER_H_
 
-#include <weave/http_server.h>
+#include <weave/provider/http_server.h>
 
 #include <string>
 #include <vector>
@@ -13,6 +13,7 @@
 #include <base/callback.h>
 
 namespace weave {
+namespace provider {
 namespace test {
 
 class MockHttpServer : public HttpServer {
@@ -27,6 +28,7 @@
 };
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_HTTP_SERVER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_HTTP_SERVER_H_
diff --git a/libweave/include/weave/test/mock_network_provider.h b/libweave/include/weave/provider/test/mock_network.h
similarity index 68%
rename from libweave/include/weave/test/mock_network_provider.h
rename to libweave/include/weave/provider/test/mock_network.h
index c519f74..3da43be 100644
--- a/libweave/include/weave/test/mock_network_provider.h
+++ b/libweave/include/weave/provider/test/mock_network.h
@@ -2,19 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_NETWORK_PROVIDER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_NETWORK_PROVIDER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_NETWORK_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_NETWORK_H_
 
-#include <weave/network_provider.h>
+#include <weave/provider/network.h>
 
 #include <string>
 
 #include <gmock/gmock.h>
 
 namespace weave {
+namespace provider {
 namespace test {
 
-class MockNetworkProvider : public NetworkProvider {
+class MockNetwork : public Network {
  public:
   MOCK_METHOD1(AddConnectionChangedCallback,
                void(const ConnectionChangedCallback&));
@@ -27,6 +28,7 @@
 };
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_NETWORK_PROVIDER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_NETWORK_H_
diff --git a/libweave/include/weave/test/mock_task_runner.h b/libweave/include/weave/provider/test/mock_task_runner.h
similarity index 82%
rename from libweave/include/weave/test/mock_task_runner.h
rename to libweave/include/weave/provider/test/mock_task_runner.h
index 0aa3186..3c58614 100644
--- a/libweave/include/weave/test/mock_task_runner.h
+++ b/libweave/include/weave/provider/test/mock_task_runner.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_TASK_RUNNER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_TASK_RUNNER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_TASK_RUNNER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_TASK_RUNNER_H_
 
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 #include <algorithm>
 #include <queue>
@@ -16,6 +16,7 @@
 #include <gmock/gmock.h>
 
 namespace weave {
+namespace provider {
 namespace test {
 
 class MockTaskRunner : public TaskRunner {
@@ -58,6 +59,7 @@
 };
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_TASK_RUNNER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_TASK_RUNNER_H_
diff --git a/libweave/include/weave/test/mock_wifi_provider.h b/libweave/include/weave/provider/test/mock_wifi.h
similarity index 66%
rename from libweave/include/weave/test/mock_wifi_provider.h
rename to libweave/include/weave/provider/test/mock_wifi.h
index 408e0ad..6c53d9a 100644
--- a/libweave/include/weave/test/mock_wifi_provider.h
+++ b/libweave/include/weave/provider/test/mock_wifi.h
@@ -2,19 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_WIFI_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_WIFI_H_
 
-#include <weave/network_provider.h>
+#include <weave/provider/network.h>
 
 #include <string>
 
 #include <gmock/gmock.h>
 
 namespace weave {
+namespace provider {
 namespace test {
 
-class MockWifiProvider : public WifiProvider {
+class MockWifi : public Wifi {
  public:
   MOCK_METHOD4(Connect,
                void(const std::string&,
@@ -26,6 +27,7 @@
 };
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_TEST_MOCK_WIFI_H_
diff --git a/libweave/include/weave/wifi_provider.h b/libweave/include/weave/provider/wifi.h
similarity index 78%
rename from libweave/include/weave/wifi_provider.h
rename to libweave/include/weave/provider/wifi.h
index 4173796..51f370c 100644
--- a/libweave/include/weave/wifi_provider.h
+++ b/libweave/include/weave/provider/wifi.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_INCLUDE_WEAVE_WIFI_PROVIDER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_WIFI_PROVIDER_H_
+#ifndef LIBWEAVE_INCLUDE_WEAVE_PROVIDER_WIFI_H_
+#define LIBWEAVE_INCLUDE_WEAVE_PROVIDER_WIFI_H_
 
 #include <string>
 
@@ -11,9 +11,10 @@
 #include <weave/error.h>
 
 namespace weave {
+namespace provider {
 
 // Interface with methods to control WiFi capability of the device.
-class WifiProvider {
+class Wifi {
  public:
   // Connects to the given network with the given pass-phrase. Implementation
   // should post either of callbacks.
@@ -29,9 +30,10 @@
   virtual void StopAccessPoint() = 0;
 
  protected:
-  virtual ~WifiProvider() = default;
+  virtual ~Wifi() = default;
 };
 
+}  // namespace provider
 }  // namespace weave
 
-#endif  // LIBWEAVE_INCLUDE_WEAVE_WIFI_PROVIDER_H_
+#endif  // LIBWEAVE_INCLUDE_WEAVE_PROVIDER_WIFI_H_
diff --git a/libweave/include/weave/settings.h b/libweave/include/weave/settings.h
new file mode 100644
index 0000000..fa32b86
--- /dev/null
+++ b/libweave/include/weave/settings.h
@@ -0,0 +1,48 @@
+// 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_SETTINGS_H_
+#define LIBWEAVE_INCLUDE_WEAVE_SETTINGS_H_
+
+#include <set>
+#include <string>
+
+#include <base/time/time.h>
+#include <weave/privet.h>
+
+namespace weave {
+
+struct Settings {
+  std::string client_id;
+  std::string client_secret;
+  std::string api_key;
+  std::string oauth_url;
+  std::string service_url;
+  std::string name;
+  std::string description;
+  std::string location;
+  std::string local_anonymous_access_role;
+  bool local_discovery_enabled{true};
+  bool local_pairing_enabled{true};
+  std::string firmware_version;
+  std::string oem_name;
+  std::string model_name;
+  std::string model_id;
+  base::TimeDelta polling_period;
+  base::TimeDelta backup_polling_period;
+
+  bool wifi_auto_setup_enabled{true};
+  bool ble_setup_enabled{false};
+  std::set<PairingType> pairing_modes;
+  std::string embedded_code;
+
+  std::string device_id;
+  std::string refresh_token;
+  std::string robot_account;
+  std::string last_configured_ssid;
+};
+
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_SETTINGS_H_
diff --git a/libweave/include/weave/test/fake_stream.h b/libweave/include/weave/test/fake_stream.h
index 3c21571..8abb491 100644
--- a/libweave/include/weave/test/fake_stream.h
+++ b/libweave/include/weave/test/fake_stream.h
@@ -14,14 +14,16 @@
 
 namespace weave {
 
+namespace provider {
 class TaskRunner;
+}
 
 namespace test {
 
 class FakeStream : public Stream {
  public:
-  explicit FakeStream(TaskRunner* task_runner);
-  FakeStream(TaskRunner* task_runner, const std::string& read_data);
+  explicit FakeStream(provider::TaskRunner* task_runner);
+  FakeStream(provider::TaskRunner* task_runner, const std::string& read_data);
 
   void ExpectWritePacketString(base::TimeDelta, const std::string& data);
   void AddReadPacketString(base::TimeDelta, const std::string& data);
@@ -37,7 +39,7 @@
              const ErrorCallback& error_callback) override;
 
  private:
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   std::string write_data_;
   std::string read_data_;
 };
diff --git a/libweave/include/weave/test/mock_dns_service_discovery_provider.h b/libweave/include/weave/test/mock_dns_service_discovery_provider.h
deleted file mode 100644
index 6d187f8..0000000
--- a/libweave/include/weave/test/mock_dns_service_discovery_provider.h
+++ /dev/null
@@ -1,31 +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_TEST_MOCK_DNS_SERVICE_DISCOVERY_PROVIDER_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_DNS_SERVICE_DISCOVERY_PROVIDER_H_
-
-#include <weave/dns_service_discovery_provider.h>
-
-#include <string>
-#include <vector>
-
-#include <gmock/gmock.h>
-
-namespace weave {
-namespace test {
-
-class MockDnsServiceDiscovery : public DnsServiceDiscoveryProvider {
- public:
-  MOCK_METHOD3(PublishService,
-               void(const std::string&,
-                    uint16_t,
-                    const std::vector<std::string>&));
-  MOCK_METHOD1(StopPublishing, void(const std::string&));
-  MOCK_CONST_METHOD0(GetId, std::string());
-};
-
-}  // namespace test
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_DNS_SERVICE_DISCOVERY_PROVIDER_H_
diff --git a/libweave/src/base_api_handler_unittest.cc b/libweave/src/base_api_handler_unittest.cc
index 2e67822..52f9574 100644
--- a/libweave/src/base_api_handler_unittest.cc
+++ b/libweave/src/base_api_handler_unittest.cc
@@ -7,8 +7,8 @@
 #include <base/strings/string_number_conversions.h>
 #include <base/values.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_config_store.h>
-#include <weave/test/mock_http_client.h>
+#include <weave/provider/test/mock_config_store.h>
+#include <weave/provider/test/mock_http_client.h>
 
 #include "libweave/src/commands/command_manager.h"
 #include "libweave/src/commands/unittest_utils.h"
@@ -65,8 +65,8 @@
     std::unique_ptr<Config> config{new Config{&config_store_}};
     config->Load();
     dev_reg_.reset(new DeviceRegistrationInfo(command_manager_, state_manager_,
-                                              std::move(config), nullptr,
-                                              &http_client_, true, nullptr));
+                                              true, std::move(config), nullptr,
+                                              &http_client_, nullptr));
     handler_.reset(
         new BaseApiHandler{dev_reg_.get(), state_manager_, command_manager_});
   }
@@ -91,8 +91,8 @@
               command_manager_->FindCommand(id)->GetStatus());
   }
 
-  test::MockConfigStore config_store_;
-  StrictMock<test::MockHttpClient> http_client_;
+  provider::test::MockConfigStore config_store_;
+  StrictMock<provider::test::MockHttpClient> http_client_;
   std::unique_ptr<DeviceRegistrationInfo> dev_reg_;
   std::shared_ptr<CommandManager> command_manager_;
   testing::StrictMock<MockStateChangeQueueInterface> mock_state_change_queue_;
diff --git a/libweave/src/commands/cloud_command_proxy.cc b/libweave/src/commands/cloud_command_proxy.cc
index d38fa04..23517b5 100644
--- a/libweave/src/commands/cloud_command_proxy.cc
+++ b/libweave/src/commands/cloud_command_proxy.cc
@@ -6,7 +6,7 @@
 
 #include <base/bind.h>
 #include <weave/enum_to_string.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/src/commands/command_instance.h"
 #include "libweave/src/commands/prop_constraints.h"
@@ -20,7 +20,7 @@
     CloudCommandUpdateInterface* cloud_command_updater,
     StateChangeQueueInterface* state_change_queue,
     std::unique_ptr<BackoffEntry> backoff_entry,
-    TaskRunner* task_runner)
+    provider::TaskRunner* task_runner)
     : command_instance_{command_instance},
       cloud_command_updater_{cloud_command_updater},
       state_change_queue_{state_change_queue},
diff --git a/libweave/src/commands/cloud_command_proxy.h b/libweave/src/commands/cloud_command_proxy.h
index 2dcb697..5195294 100644
--- a/libweave/src/commands/cloud_command_proxy.h
+++ b/libweave/src/commands/cloud_command_proxy.h
@@ -22,7 +22,10 @@
 namespace weave {
 
 class CommandInstance;
+
+namespace provider {
 class TaskRunner;
+}
 
 // Command proxy which publishes command updates to the cloud.
 class CloudCommandProxy final : public Command::Observer {
@@ -31,7 +34,7 @@
                     CloudCommandUpdateInterface* cloud_command_updater,
                     StateChangeQueueInterface* state_change_queue,
                     std::unique_ptr<BackoffEntry> backoff_entry,
-                    TaskRunner* task_runner);
+                    provider::TaskRunner* task_runner);
   ~CloudCommandProxy() override = default;
 
   // CommandProxyInterface implementation/overloads.
@@ -70,7 +73,7 @@
   CommandInstance* command_instance_;
   CloudCommandUpdateInterface* cloud_command_updater_;
   StateChangeQueueInterface* state_change_queue_;
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
 
   // Backoff for SendCommandUpdate() method.
   std::unique_ptr<BackoffEntry> cloud_backoff_entry_;
diff --git a/libweave/src/commands/cloud_command_proxy_unittest.cc b/libweave/src/commands/cloud_command_proxy_unittest.cc
index fb881d1..3a3ce38 100644
--- a/libweave/src/commands/cloud_command_proxy_unittest.cc
+++ b/libweave/src/commands/cloud_command_proxy_unittest.cc
@@ -9,7 +9,7 @@
 
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_task_runner.h>
+#include <weave/provider/test/mock_task_runner.h>
 
 #include "libweave/src/commands/command_dictionary.h"
 #include "libweave/src/commands/command_instance.h"
@@ -136,7 +136,7 @@
   base::CallbackList<void(StateChangeQueueInterface::UpdateID)> callbacks_;
   testing::StrictMock<MockCloudCommandUpdateInterface> cloud_updater_;
   testing::StrictMock<MockStateChangeQueueInterface> state_change_queue_;
-  testing::StrictMock<test::MockTaskRunner> task_runner_;
+  testing::StrictMock<provider::test::MockTaskRunner> task_runner_;
   std::queue<base::Closure> task_queue_;
   CommandDictionary command_dictionary_;
   std::unique_ptr<CommandInstance> command_instance_;
diff --git a/libweave/src/commands/command_manager.cc b/libweave/src/commands/command_manager.cc
index efad250..8a3237e 100644
--- a/libweave/src/commands/command_manager.cc
+++ b/libweave/src/commands/command_manager.cc
@@ -5,9 +5,9 @@
 #include "libweave/src/commands/command_manager.h"
 
 #include <base/values.h>
-#include <weave/config_store.h>
 #include <weave/enum_to_string.h>
 #include <weave/error.h>
+#include <weave/provider/config_store.h>
 
 #include "libweave/src/commands/schema_constants.h"
 #include "libweave/src/utils.h"
@@ -59,7 +59,7 @@
   return LoadCommands(*dict, category, error);
 }
 
-void CommandManager::Startup(ConfigStore* config_store) {
+void CommandManager::Startup(provider::ConfigStore* config_store) {
   LOG(INFO) << "Initializing CommandManager.";
 
   // Load global standard GCD command dictionary.
diff --git a/libweave/src/commands/command_manager.h b/libweave/src/commands/command_manager.h
index e014fca..6db1ef4 100644
--- a/libweave/src/commands/command_manager.h
+++ b/libweave/src/commands/command_manager.h
@@ -20,7 +20,10 @@
 namespace weave {
 
 class CommandInstance;
+
+namespace provider {
 class ConfigStore;
+}
 
 // CommandManager class that will have a list of all the device command
 // schemas as well as the live command queue of pending command instances
@@ -78,7 +81,7 @@
   // Initializes the object and loads:
   //   1) the standard GCD command dictionary
   //   2) static vendor-provided command definitions
-  void Startup(weave::ConfigStore* config_store);
+  void Startup(weave::provider::ConfigStore* config_store);
 
   // Adds a new command to the command queue.
   void AddCommand(std::unique_ptr<CommandInstance> command_instance);
diff --git a/libweave/src/commands/command_manager_unittest.cc b/libweave/src/commands/command_manager_unittest.cc
index 2e7ce27..b97799d 100644
--- a/libweave/src/commands/command_manager_unittest.cc
+++ b/libweave/src/commands/command_manager_unittest.cc
@@ -8,7 +8,7 @@
 
 #include <base/json/json_writer.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_config_store.h>
+#include <weave/provider/test/mock_config_store.h>
 
 #include "libweave/src/bind_lambda.h"
 #include "libweave/src/commands/unittest_utils.h"
@@ -115,7 +115,7 @@
 
 TEST(CommandManager, ShouldLoadStandardAndTestDefinitions) {
   CommandManager manager;
-  test::MockConfigStore config_store;
+  provider::test::MockConfigStore config_store;
   EXPECT_CALL(config_store, LoadBaseCommandDefs())
       .WillOnce(Return(kTestBaseCommands));
   EXPECT_CALL(config_store, LoadCommandDefs())
diff --git a/libweave/src/config.cc b/libweave/src/config.cc
index 5783486..55b0c7b 100644
--- a/libweave/src/config.cc
+++ b/libweave/src/config.cc
@@ -70,10 +70,10 @@
 
 }  // namespace
 
-Config::Config(ConfigStore* config_store)
+Config::Config(provider::ConfigStore* config_store)
     : settings_{CreateDefaultSettings()}, config_store_{config_store} {
   if (config_store_) {
-    AddOnChangedCallback(base::Bind(&ConfigStore::OnSettingsChanged,
+    AddOnChangedCallback(base::Bind(&provider::ConfigStore::OnSettingsChanged,
                                     base::Unretained(config_store_)));
   }
 }
diff --git a/libweave/src/config.h b/libweave/src/config.h
index 2da5d0b..c25ff6e 100644
--- a/libweave/src/config.h
+++ b/libweave/src/config.h
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include <base/callback.h>
-#include <weave/config_store.h>
 #include <weave/error.h>
+#include <weave/provider/config_store.h>
 
 #include "libweave/src/privet/security_delegate.h"
 
@@ -25,7 +25,7 @@
   using OnChangedCallback = base::Callback<void(const Settings&)>;
   ~Config() = default;
 
-  explicit Config(ConfigStore* config_store);
+  explicit Config(provider::ConfigStore* config_store);
 
   void AddOnChangedCallback(const OnChangedCallback& callback);
   const Settings& GetSettings() const;
@@ -93,7 +93,7 @@
   void Save();
 
   Settings settings_;
-  ConfigStore* config_store_{nullptr};
+  provider::ConfigStore* config_store_{nullptr};
   std::vector<OnChangedCallback> on_changed_;
 
   DISALLOW_COPY_AND_ASSIGN(Config);
diff --git a/libweave/src/config_unittest.cc b/libweave/src/config_unittest.cc
index ec9b5a0..8968b50 100644
--- a/libweave/src/config_unittest.cc
+++ b/libweave/src/config_unittest.cc
@@ -9,7 +9,7 @@
 #include <base/bind.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_config_store.h>
+#include <weave/provider/test/mock_config_store.h>
 
 #include "libweave/src/commands/unittest_utils.h"
 
@@ -35,7 +35,7 @@
 
   MOCK_METHOD1(OnConfigChanged, void(const Settings&));
 
-  test::MockConfigStore config_store_;
+  provider::test::MockConfigStore config_store_;
   std::unique_ptr<Config> config_;
   const Config default_{nullptr};
 };
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 4e8479e..f8c4ef6 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -30,14 +30,14 @@
 DeviceManager::~DeviceManager() {}
 
 void DeviceManager::Start(const Options& options,
-                          ConfigStore* config_store,
-                          TaskRunner* task_runner,
-                          HttpClient* http_client,
-                          NetworkProvider* network,
-                          DnsServiceDiscoveryProvider* dns_sd,
-                          HttpServer* http_server,
-                          WifiProvider* wifi,
-                          Bluetooth* bluetooth) {
+                          provider::ConfigStore* config_store,
+                          provider::TaskRunner* task_runner,
+                          provider::HttpClient* http_client,
+                          provider::Network* network,
+                          provider::DnsServiceDiscovery* dns_sd,
+                          provider::HttpServer* http_server,
+                          provider::Wifi* wifi,
+                          provider::Bluetooth* bluetooth) {
   command_manager_ = std::make_shared<CommandManager>();
   command_manager_->Startup(config_store);
   state_change_queue_.reset(new StateChangeQueue(kMaxStateChangeQueueSize));
@@ -50,8 +50,8 @@
   // TODO(avakulenko): Figure out security implications of storing
   // device info state data unencrypted.
   device_info_.reset(new DeviceRegistrationInfo(
-      command_manager_, state_manager_, std::move(config), task_runner,
-      http_client, options.xmpp_enabled, network));
+      command_manager_, state_manager_, options.xmpp_enabled, std::move(config),
+      task_runner, http_client, network));
   base_api_handler_.reset(
       new BaseApiHandler{device_info_.get(), state_manager_, command_manager_});
 
@@ -87,12 +87,12 @@
 }
 
 void DeviceManager::StartPrivet(const Options& options,
-                                TaskRunner* task_runner,
-                                NetworkProvider* network,
-                                DnsServiceDiscoveryProvider* dns_sd,
-                                HttpServer* http_server,
-                                WifiProvider* wifi,
-                                Bluetooth* bluetooth) {
+                                provider::TaskRunner* task_runner,
+                                provider::Network* network,
+                                provider::DnsServiceDiscovery* dns_sd,
+                                provider::HttpServer* http_server,
+                                provider::Wifi* wifi,
+                                provider::Bluetooth* bluetooth) {
   privet_.reset(new privet::Manager{});
   privet_->Start(options, task_runner, network, dns_sd, http_server, wifi,
                  device_info_.get(), command_manager_.get(),
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 3441dde..9a603fd 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -27,14 +27,14 @@
   ~DeviceManager() override;
 
   void Start(const Options& options,
-             ConfigStore* config_store,
-             TaskRunner* task_runner,
-             HttpClient* http_client,
-             NetworkProvider* network,
-             DnsServiceDiscoveryProvider* dns_sd,
-             HttpServer* http_server,
-             WifiProvider* wifi,
-             Bluetooth* bluetooth) override;
+             provider::ConfigStore* config_store,
+             provider::TaskRunner* task_runner,
+             provider::HttpClient* http_client,
+             provider::Network* network,
+             provider::DnsServiceDiscovery* dns_sd,
+             provider::HttpServer* http_server,
+             provider::Wifi* wifi,
+             provider::Bluetooth* bluetooth) override;
 
   Commands* GetCommands() override;
   State* GetState() override;
@@ -45,12 +45,12 @@
 
  private:
   void StartPrivet(const Options& options,
-                   TaskRunner* task_runner,
-                   NetworkProvider* network,
-                   DnsServiceDiscoveryProvider* dns_sd,
-                   HttpServer* http_server,
-                   WifiProvider* wifi,
-                   Bluetooth* bluetooth);
+                   provider::TaskRunner* task_runner,
+                   provider::Network* network,
+                   provider::DnsServiceDiscovery* dns_sd,
+                   provider::HttpServer* http_server,
+                   provider::Wifi* wifi,
+                   provider::Bluetooth* bluetooth);
 
   void OnWiFiBootstrapStateChanged(weave::WifiSetupState state);
 
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index 91f522a..66fe25f 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -15,9 +15,9 @@
 #include <base/json/json_writer.h>
 #include <base/strings/string_number_conversions.h>
 #include <base/values.h>
-#include <weave/http_client.h>
-#include <weave/network_provider.h>
-#include <weave/task_runner.h>
+#include <weave/provider/http_client.h>
+#include <weave/provider/network.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/src/bind_lambda.h"
 #include "libweave/src/commands/cloud_command_proxy.h"
@@ -40,6 +40,8 @@
 
 namespace {
 
+using provider::HttpClient;
+
 inline void SetUnexpectedError(ErrorPtr* error) {
   Error::AddTo(error, FROM_HERE, kErrorDomainGCD, "unexpected_response",
                "Unexpected GCD error");
@@ -113,7 +115,8 @@
                 HttpClient* transport)
       : method_{method}, url_{url}, transport_{transport} {}
 
-  std::unique_ptr<HttpClient::Response> SendAndBlock(ErrorPtr* error) {
+  std::unique_ptr<provider::HttpClient::Response> SendAndBlock(
+      ErrorPtr* error) {
     return transport_->SendRequestAndBlock(method_, url_, GetFullHeaders(),
                                            data_, error);
   }
@@ -213,11 +216,11 @@
 DeviceRegistrationInfo::DeviceRegistrationInfo(
     const std::shared_ptr<CommandManager>& command_manager,
     const std::shared_ptr<StateManager>& state_manager,
-    std::unique_ptr<Config> config,
-    TaskRunner* task_runner,
-    HttpClient* http_client,
     bool notifications_enabled,
-    NetworkProvider* network)
+    std::unique_ptr<Config> config,
+    provider::TaskRunner* task_runner,
+    provider::HttpClient* http_client,
+    provider::Network* network)
     : http_client_{http_client},
       task_runner_{task_runner},
       command_manager_{command_manager},
diff --git a/libweave/src/device_registration_info.h b/libweave/src/device_registration_info.h
index 8db6a88..9cc1a51 100644
--- a/libweave/src/device_registration_info.h
+++ b/libweave/src/device_registration_info.h
@@ -17,7 +17,7 @@
 #include <base/time/time.h>
 #include <weave/error.h>
 #include <weave/cloud.h>
-#include <weave/http_client.h>
+#include <weave/provider/http_client.h>
 
 #include "libweave/src/backoff_entry.h"
 #include "libweave/src/commands/cloud_command_update_interface.h"
@@ -33,15 +33,14 @@
 class DictionaryValue;
 }  // namespace base
 
-namespace chromeos {
-class KeyValueStore;
-}  // namespace chromeos
-
 namespace weave {
 
-class NetworkProvider;
 class StateManager;
+
+namespace provider {
+class Network;
 class TaskRunner;
+}
 
 extern const char kErrorDomainOAuth2[];
 extern const char kErrorDomainGCD[];
@@ -58,11 +57,11 @@
 
   DeviceRegistrationInfo(const std::shared_ptr<CommandManager>& command_manager,
                          const std::shared_ptr<StateManager>& state_manager,
-                         std::unique_ptr<Config> config,
-                         TaskRunner* task_runner,
-                         HttpClient* http_client,
                          bool notifications_enabled,
-                         NetworkProvider* network);
+                         std::unique_ptr<Config> config,
+                         provider::TaskRunner* task_runner,
+                         provider::HttpClient* http_client,
+                         provider::Network* network);
 
   ~DeviceRegistrationInfo() override;
 
@@ -162,7 +161,7 @@
       const std::shared_ptr<base::Closure>& success_callback,
       const std::shared_ptr<CloudRequestErrorCallback>& error_callback,
       int id,
-      const HttpClient::Response& response);
+      const provider::HttpClient::Response& response);
   void OnRefreshAccessTokenError(
       const std::shared_ptr<base::Closure>& success_callback,
       const std::shared_ptr<CloudRequestErrorCallback>& error_callback,
@@ -172,7 +171,7 @@
   // Parse the OAuth response, and sets registration status to
   // kInvalidCredentials if our registration is no longer valid.
   std::unique_ptr<base::DictionaryValue> ParseOAuthResponse(
-      const HttpClient::Response& response,
+      const provider::HttpClient::Response& response,
       ErrorPtr* error);
 
   // This attempts to open a notification channel. The channel needs to be
@@ -202,7 +201,7 @@
   void OnCloudRequestSuccess(
       const std::shared_ptr<const CloudRequestData>& data,
       int request_id,
-      const HttpClient::Response& response);
+      const provider::HttpClient::Response& response);
   void OnCloudRequestError(const std::shared_ptr<const CloudRequestData>& data,
                            int request_id,
                            const Error* error);
@@ -297,9 +296,9 @@
   bool connected_to_cloud_{false};
 
   // HTTP transport used for communications.
-  HttpClient* http_client_{nullptr};
+  provider::HttpClient* http_client_{nullptr};
 
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   // Global command manager.
   std::shared_ptr<CommandManager> command_manager_;
   // Device state manager.
@@ -337,7 +336,7 @@
   NotificationChannel* current_notification_channel_{nullptr};
   bool notification_channel_starting_{false};
 
-  NetworkProvider* network_{nullptr};
+  provider::Network* network_{nullptr};
 
   // Tracks our current registration status.
   RegistrationStatus registration_status_{RegistrationStatus::kUnconfigured};
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index 8bbf987..f2fec8d 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -8,8 +8,8 @@
 #include <base/json/json_writer.h>
 #include <base/values.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_config_store.h>
-#include <weave/test/mock_http_client.h>
+#include <weave/provider/test/mock_config_store.h>
+#include <weave/provider/test/mock_http_client.h>
 
 #include "libweave/src/bind_lambda.h"
 #include "libweave/src/commands/command_manager.h"
@@ -34,8 +34,9 @@
 
 using test::CreateDictionaryValue;
 using test::CreateValue;
-using test::MockHttpClient;
-using test::MockHttpClientResponse;
+using provider::test::MockHttpClient;
+using provider::test::MockHttpClientResponse;
+using provider::HttpClient;
 
 namespace {
 
@@ -122,8 +123,8 @@
     std::unique_ptr<Config> config{new Config{&config_store_}};
     config_ = config.get();
     dev_reg_.reset(new DeviceRegistrationInfo{command_manager_, state_manager_,
-                                              std::move(config), nullptr,
-                                              &http_client_, true, nullptr});
+                                              true, std::move(config), nullptr,
+                                              &http_client_, nullptr});
 
     ReloadDefaults();
   }
@@ -181,7 +182,7 @@
     return dev_reg_->registration_status_;
   }
 
-  test::MockConfigStore config_store_;
+  provider::test::MockConfigStore config_store_;
   StrictMock<MockHttpClient> http_client_;
   base::DictionaryValue data_;
   Config* config_{nullptr};
diff --git a/libweave/src/notification/pull_channel.cc b/libweave/src/notification/pull_channel.cc
index 2342e7d..78bfdcf 100644
--- a/libweave/src/notification/pull_channel.cc
+++ b/libweave/src/notification/pull_channel.cc
@@ -6,13 +6,14 @@
 
 #include <base/bind.h>
 #include <base/location.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/src/notification/notification_delegate.h"
 
 namespace weave {
 
-PullChannel::PullChannel(base::TimeDelta pull_interval, TaskRunner* task_runner)
+PullChannel::PullChannel(base::TimeDelta pull_interval,
+                         provider::TaskRunner* task_runner)
     : pull_interval_{pull_interval}, task_runner_{task_runner} {}
 
 std::string PullChannel::GetName() const {
diff --git a/libweave/src/notification/pull_channel.h b/libweave/src/notification/pull_channel.h
index 7f1b789..ef40403 100644
--- a/libweave/src/notification/pull_channel.h
+++ b/libweave/src/notification/pull_channel.h
@@ -16,11 +16,13 @@
 
 namespace weave {
 
+namespace provider {
 class TaskRunner;
+}  // namespace
 
 class PullChannel : public NotificationChannel {
  public:
-  PullChannel(base::TimeDelta pull_interval, TaskRunner* task_runner);
+  PullChannel(base::TimeDelta pull_interval, provider::TaskRunner* task_runner);
   ~PullChannel() override = default;
 
   // Overrides from NotificationChannel.
@@ -37,7 +39,7 @@
   void RePost();
 
   base::TimeDelta pull_interval_;
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   NotificationDelegate* delegate_{nullptr};
 
   base::WeakPtrFactory<PullChannel> weak_ptr_factory_{this};
diff --git a/libweave/src/notification/xmpp_channel.cc b/libweave/src/notification/xmpp_channel.cc
index 4734549..ca717c2 100644
--- a/libweave/src/notification/xmpp_channel.cc
+++ b/libweave/src/notification/xmpp_channel.cc
@@ -7,8 +7,8 @@
 #include <string>
 
 #include <base/bind.h>
-#include <weave/network_provider.h>
-#include <weave/task_runner.h>
+#include <weave/provider/network.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/src/backoff_entry.h"
 #include "libweave/src/data_encoding.h"
@@ -91,8 +91,8 @@
 
 XmppChannel::XmppChannel(const std::string& account,
                          const std::string& access_token,
-                         TaskRunner* task_runner,
-                         NetworkProvider* network)
+                         provider::TaskRunner* task_runner,
+                         provider::Network* network)
     : account_{account},
       access_token_{access_token},
       network_{network},
diff --git a/libweave/src/notification/xmpp_channel.h b/libweave/src/notification/xmpp_channel.h
index 48ffd64..c6ab337 100644
--- a/libweave/src/notification/xmpp_channel.h
+++ b/libweave/src/notification/xmpp_channel.h
@@ -22,8 +22,10 @@
 
 namespace weave {
 
-class NetworkProvider;
+namespace provider {
+class Network;
 class TaskRunner;
+}
 
 // Simple interface to abstract XmppChannel's SendMessage() method.
 class XmppChannelInterface {
@@ -43,8 +45,8 @@
   // so you will need to reset the XmppClient every time this happens.
   XmppChannel(const std::string& account,
               const std::string& access_token,
-              TaskRunner* task_runner,
-              NetworkProvider* network);
+              provider::TaskRunner* task_runner,
+              provider::Network* network);
   ~XmppChannel() override = default;
 
   // Overrides from NotificationChannel.
@@ -131,7 +133,7 @@
   // OAuth access token for the account. Expires fairly frequently.
   std::string access_token_;
 
-  NetworkProvider* network_{nullptr};
+  provider::Network* network_{nullptr};
   std::unique_ptr<Stream> stream_;
 
   // Read buffer for incoming message packets.
@@ -146,7 +148,7 @@
 
   BackoffEntry backoff_entry_;
   NotificationDelegate* delegate_{nullptr};
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   XmppStreamParser stream_parser_{this};
   bool read_pending_{false};
   bool write_pending_{false};
diff --git a/libweave/src/notification/xmpp_channel_unittest.cc b/libweave/src/notification/xmpp_channel_unittest.cc
index a6992e9..beecd1d 100644
--- a/libweave/src/notification/xmpp_channel_unittest.cc
+++ b/libweave/src/notification/xmpp_channel_unittest.cc
@@ -8,9 +8,9 @@
 #include <queue>
 
 #include <gtest/gtest.h>
+#include <weave/provider/test/mock_network.h>
+#include <weave/provider/test/mock_task_runner.h>
 #include <weave/test/fake_stream.h>
-#include <weave/test/mock_network_provider.h>
-#include <weave/test/mock_task_runner.h>
 
 #include "libweave/src/bind_lambda.h"
 
@@ -82,14 +82,13 @@
 
 class FakeXmppChannel : public XmppChannel {
  public:
-  explicit FakeXmppChannel(TaskRunner* task_runner,
-                           weave::NetworkProvider* network)
+  explicit FakeXmppChannel(provider::TaskRunner* task_runner,
+                           provider::Network* network)
       : XmppChannel{kAccountName, kAccessToken, task_runner, network},
         stream_{new test::FakeStream{task_runner_}},
         fake_stream_{stream_.get()} {}
 
-  void Connect(
-      const base::Callback<void(std::unique_ptr<weave::Stream>)>& callback) {
+  void Connect(const base::Callback<void(std::unique_ptr<Stream>)>& callback) {
     callback.Run(std::move(stream_));
   }
 
@@ -111,9 +110,9 @@
   test::FakeStream* fake_stream_{nullptr};
 };
 
-class MockNetworkProvider : public weave::test::MockNetworkProvider {
+class MockNetwork : public provider::test::MockNetwork {
  public:
-  MockNetworkProvider() {
+  MockNetwork() {
     EXPECT_CALL(*this, AddConnectionChangedCallback(_))
         .WillRepeatedly(Return());
   }
@@ -145,8 +144,8 @@
     EXPECT_EQ(st, xmpp_client_.state());
   }
 
-  StrictMock<test::MockTaskRunner> task_runner_;
-  StrictMock<MockNetworkProvider> network_;
+  StrictMock<provider::test::MockTaskRunner> task_runner_;
+  StrictMock<MockNetwork> network_;
   FakeXmppChannel xmpp_client_{&task_runner_, &network_};
 };
 
diff --git a/libweave/src/notification/xmpp_iq_stanza_handler.cc b/libweave/src/notification/xmpp_iq_stanza_handler.cc
index 8803aae..0a0d87b 100644
--- a/libweave/src/notification/xmpp_iq_stanza_handler.cc
+++ b/libweave/src/notification/xmpp_iq_stanza_handler.cc
@@ -7,7 +7,7 @@
 #include <base/bind.h>
 #include <base/strings/string_number_conversions.h>
 #include <base/strings/stringprintf.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/src/notification/xml_node.h"
 #include "libweave/src/notification/xmpp_channel.h"
@@ -48,7 +48,7 @@
 }  // anonymous namespace
 
 IqStanzaHandler::IqStanzaHandler(XmppChannelInterface* xmpp_channel,
-                                 TaskRunner* task_runner)
+                                 provider::TaskRunner* task_runner)
     : xmpp_channel_{xmpp_channel}, task_runner_{task_runner} {}
 
 void IqStanzaHandler::SendRequest(const std::string& type,
diff --git a/libweave/src/notification/xmpp_iq_stanza_handler.h b/libweave/src/notification/xmpp_iq_stanza_handler.h
index b4edcac..1de633f 100644
--- a/libweave/src/notification/xmpp_iq_stanza_handler.h
+++ b/libweave/src/notification/xmpp_iq_stanza_handler.h
@@ -18,15 +18,19 @@
 
 namespace weave {
 
-class TaskRunner;
 class XmppChannelInterface;
 
+namespace provider {
+class TaskRunner;
+}
+
 class IqStanzaHandler {
  public:
   using ResponseCallback = base::Callback<void(std::unique_ptr<XmlNode>)>;
   using TimeoutCallback = base::Closure;
 
-  IqStanzaHandler(XmppChannelInterface* xmpp_channel, TaskRunner* task_runner);
+  IqStanzaHandler(XmppChannelInterface* xmpp_channel,
+                  provider::TaskRunner* task_runner);
 
   // Sends <iq> request to the server.
   // |type| is the IQ stanza type, one of "get", "set", "query".
@@ -66,7 +70,7 @@
   void OnTimeOut(RequestId id, const TimeoutCallback& timeout_callback);
 
   XmppChannelInterface* xmpp_channel_;
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   std::map<RequestId, ResponseCallback> requests_;
   RequestId last_request_id_{0};
 
diff --git a/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc b/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc
index 3880f34..27392b3 100644
--- a/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc
+++ b/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc
@@ -9,7 +9,7 @@
 
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_task_runner.h>
+#include <weave/provider/test/mock_task_runner.h>
 
 #include "libweave/src/bind_lambda.h"
 #include "libweave/src/notification/xml_node.h"
@@ -76,7 +76,7 @@
 class IqStanzaHandlerTest : public testing::Test {
  public:
   testing::StrictMock<MockXmppChannelInterface> mock_xmpp_channel_;
-  test::MockTaskRunner task_runner_;
+  provider::test::MockTaskRunner task_runner_;
   IqStanzaHandler iq_stanza_handler_{&mock_xmpp_channel_, &task_runner_};
   MockResponseReceiver receiver_;
 };
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 03e74c7..7d4a5f0 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -12,7 +12,7 @@
 #include <base/memory/weak_ptr.h>
 #include <base/values.h>
 #include <weave/error.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/src/backoff_entry.h"
 #include "libweave/src/commands/command_manager.h"
@@ -39,7 +39,7 @@
 
 class CloudDelegateImpl : public CloudDelegate {
  public:
-  CloudDelegateImpl(TaskRunner* task_runner,
+  CloudDelegateImpl(provider::TaskRunner* task_runner,
                     DeviceRegistrationInfo* device,
                     CommandManager* command_manager,
                     StateManager* state_manager)
@@ -340,7 +340,7 @@
     return false;
   }
 
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   DeviceRegistrationInfo* device_{nullptr};
   CommandManager* command_manager_{nullptr};
   StateManager* state_manager_{nullptr};
@@ -378,7 +378,7 @@
 
 // static
 std::unique_ptr<CloudDelegate> CloudDelegate::CreateDefault(
-    TaskRunner* task_runner,
+    provider::TaskRunner* task_runner,
     DeviceRegistrationInfo* device,
     CommandManager* command_manager,
     StateManager* state_manager) {
diff --git a/libweave/src/privet/cloud_delegate.h b/libweave/src/privet/cloud_delegate.h
index 0b72a44..8152f78 100644
--- a/libweave/src/privet/cloud_delegate.h
+++ b/libweave/src/privet/cloud_delegate.h
@@ -25,7 +25,10 @@
 class CommandManager;
 class DeviceRegistrationInfo;
 class StateManager;
+
+namespace provider {
 class TaskRunner;
+}
 
 namespace privet {
 
@@ -134,7 +137,7 @@
 
   // Create default instance.
   static std::unique_ptr<CloudDelegate> CreateDefault(
-      TaskRunner* task_runner,
+      provider::TaskRunner* task_runner,
       DeviceRegistrationInfo* device,
       CommandManager* command_manager,
       StateManager* state_manager);
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index cf25773..52a2657 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -15,7 +15,7 @@
 #include <base/scoped_observer.h>
 #include <base/strings/string_number_conversions.h>
 #include <base/values.h>
-#include <weave/network_provider.h>
+#include <weave/provider/network.h>
 
 #include "libweave/src/device_registration_info.h"
 #include "libweave/src/http_constants.h"
@@ -29,16 +29,22 @@
 namespace weave {
 namespace privet {
 
+using provider::TaskRunner;
+using provider::Network;
+using provider::DnsServiceDiscovery;
+using provider::HttpServer;
+using provider::Wifi;
+
 Manager::Manager() {}
 
 Manager::~Manager() {}
 
 void Manager::Start(const Device::Options& options,
                     TaskRunner* task_runner,
-                    NetworkProvider* network,
-                    DnsServiceDiscoveryProvider* dns_sd,
+                    Network* network,
+                    DnsServiceDiscovery* dns_sd,
                     HttpServer* http_server,
-                    WifiProvider* wifi,
+                    Wifi* wifi,
                     DeviceRegistrationInfo* device,
                     CommandManager* command_manager,
                     StateManager* state_manager) {
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h
index 7fc90a2..1c635da 100644
--- a/libweave/src/privet/privet_manager.h
+++ b/libweave/src/privet/privet_manager.h
@@ -29,8 +29,8 @@
 
 class CommandManager;
 class DeviceRegistrationInfo;
-class DnsServiceDiscoveryProvider;
-class NetworkProvider;
+class DnsServiceDiscovery;
+class Network;
 class StateManager;
 
 namespace privet {
@@ -48,11 +48,11 @@
   ~Manager() override;
 
   void Start(const weave::Device::Options& options,
-             TaskRunner* task_runner,
-             NetworkProvider* network,
-             DnsServiceDiscoveryProvider* dns_sd,
-             HttpServer* http_server,
-             WifiProvider* wifi,
+             provider::TaskRunner* task_runner,
+             provider::Network* network,
+             provider::DnsServiceDiscovery* dns_sd,
+             provider::HttpServer* http_server,
+             provider::Wifi* wifi,
              DeviceRegistrationInfo* device,
              CommandManager* command_manager,
              StateManager* state_manager);
@@ -70,20 +70,22 @@
   // CloudDelegate::Observer
   void OnDeviceInfoChanged() override;
 
-  void PrivetRequestHandler(const HttpServer::Request& request,
-                            const HttpServer::OnReplyCallback& callback);
+  void PrivetRequestHandler(
+      const provider::HttpServer::Request& request,
+      const provider::HttpServer::OnReplyCallback& callback);
 
-  void PrivetResponseHandler(const HttpServer::OnReplyCallback& callback,
-                             int status,
-                             const base::DictionaryValue& output);
+  void PrivetResponseHandler(
+      const provider::HttpServer::OnReplyCallback& callback,
+      int status,
+      const base::DictionaryValue& output);
 
-  void HelloWorldHandler(const HttpServer::Request& request,
-                         const HttpServer::OnReplyCallback& callback);
+  void HelloWorldHandler(const provider::HttpServer::Request& request,
+                         const provider::HttpServer::OnReplyCallback& callback);
 
   void OnChanged();
   void OnConnectivityChanged();
 
-  void OnHttpServerStatusChanged(const HttpServer& server);
+  void OnHttpServerStatusChanged(const provider::HttpServer& server);
 
   bool disable_security_{false};
   std::unique_ptr<CloudDelegate> cloud_;
diff --git a/libweave/src/privet/privet_types.cc b/libweave/src/privet/privet_types.cc
index 9c32bad..aebf63b 100644
--- a/libweave/src/privet/privet_types.cc
+++ b/libweave/src/privet/privet_types.cc
@@ -8,8 +8,8 @@
 
 #include <weave/enum_to_string.h>
 #include <weave/export.h>
-#include <weave/network_provider.h>
 #include <weave/privet.h>
+#include <weave/provider/network.h>
 
 namespace weave {
 
@@ -20,6 +20,7 @@
 using privet::CryptoType;
 using privet::SetupState;
 using privet::WifiType;
+using provider::NetworkState;
 
 const EnumToStringMap<PairingType>::Map kPairingTypeMap[] = {
     {PairingType::kPinCode, "pinCode"},
@@ -67,7 +68,7 @@
     {WifiSetupState::kConnecting, "connecting"},
 };
 
-const EnumToStringMap<NetworkState>::Map kNetworkStateMap[] = {
+const EnumToStringMap<provider::NetworkState>::Map kNetworkStateMap[] = {
     {NetworkState::kOffline, "offline"},
     {NetworkState::kFailure, "failure"},
     {NetworkState::kConnecting, "connecting"},
diff --git a/libweave/src/privet/publisher.cc b/libweave/src/privet/publisher.cc
index 6a5b8bb..5d6567b 100644
--- a/libweave/src/privet/publisher.cc
+++ b/libweave/src/privet/publisher.cc
@@ -6,8 +6,8 @@
 
 #include <map>
 
-#include <weave/dns_service_discovery_provider.h>
 #include <weave/error.h>
+#include <weave/provider/dns_service_discovery.h>
 
 #include "libweave/src/privet/cloud_delegate.h"
 #include "libweave/src/privet/device_delegate.h"
@@ -28,7 +28,7 @@
 Publisher::Publisher(const DeviceDelegate* device,
                      const CloudDelegate* cloud,
                      const WifiDelegate* wifi,
-                     DnsServiceDiscoveryProvider* dns_sd)
+                     provider::DnsServiceDiscovery* dns_sd)
     : dns_sd_{dns_sd}, device_{device}, cloud_{cloud}, wifi_{wifi} {
   CHECK(device_);
   CHECK(cloud_);
diff --git a/libweave/src/privet/publisher.h b/libweave/src/privet/publisher.h
index b73ea2e..d330992 100644
--- a/libweave/src/privet/publisher.h
+++ b/libweave/src/privet/publisher.h
@@ -14,7 +14,9 @@
 
 namespace weave {
 
-class DnsServiceDiscoveryProvider;
+namespace provider {
+class DnsServiceDiscovery;
+}
 
 namespace privet {
 
@@ -28,7 +30,7 @@
   Publisher(const DeviceDelegate* device,
             const CloudDelegate* cloud,
             const WifiDelegate* wifi,
-            DnsServiceDiscoveryProvider* dns_sd);
+            provider::DnsServiceDiscovery* dns_sd);
   ~Publisher() override;
 
   // IdentityDelegate implementation.
@@ -42,7 +44,7 @@
   void RemoveService();
 
   bool is_publishing_{false};
-  DnsServiceDiscoveryProvider* dns_sd_{nullptr};
+  provider::DnsServiceDiscovery* dns_sd_{nullptr};
 
   const DeviceDelegate* device_{nullptr};
   const CloudDelegate* cloud_{nullptr};
diff --git a/libweave/src/privet/security_manager.cc b/libweave/src/privet/security_manager.cc
index 588cbd3..1dfbab5 100644
--- a/libweave/src/privet/security_manager.cc
+++ b/libweave/src/privet/security_manager.cc
@@ -16,7 +16,7 @@
 #include <base/strings/string_number_conversions.h>
 #include <base/strings/stringprintf.h>
 #include <base/time/time.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 #include "libweave/external/crypto/p224_spake.h"
 #include "libweave/src/data_encoding.h"
@@ -121,7 +121,7 @@
 SecurityManager::SecurityManager(const std::set<PairingType>& pairing_modes,
                                  const std::string& embedded_code,
                                  bool disable_security,
-                                 TaskRunner* task_runner)
+                                 provider::TaskRunner* task_runner)
     : is_security_disabled_(disable_security),
       pairing_modes_(pairing_modes),
       embedded_code_(embedded_code),
diff --git a/libweave/src/privet/security_manager.h b/libweave/src/privet/security_manager.h
index 07f8c0c..8acbd1d 100644
--- a/libweave/src/privet/security_manager.h
+++ b/libweave/src/privet/security_manager.h
@@ -24,7 +24,9 @@
 
 namespace weave {
 
+namespace provider {
 class TaskRunner;
+}
 
 namespace privet {
 
@@ -50,7 +52,7 @@
   SecurityManager(const std::set<PairingType>& pairing_modes,
                   const std::string& embedded_code,
                   bool disable_security,
-                  TaskRunner* task_runner);
+                  provider::TaskRunner* task_runner);
   ~SecurityManager() override;
 
   // SecurityDelegate methods
@@ -94,7 +96,7 @@
   std::set<PairingType> pairing_modes_;
   std::string embedded_code_;
   // TODO(vitalybuka): Session cleanup can be done without posting tasks.
-  TaskRunner* task_runner_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
   std::map<std::string, std::unique_ptr<KeyExchanger>> pending_sessions_;
   std::map<std::string, std::unique_ptr<KeyExchanger>> confirmed_sessions_;
   mutable int pairing_attemts_{0};
diff --git a/libweave/src/privet/security_manager_unittest.cc b/libweave/src/privet/security_manager_unittest.cc
index b19b0ee..5c9fc2d 100644
--- a/libweave/src/privet/security_manager_unittest.cc
+++ b/libweave/src/privet/security_manager_unittest.cc
@@ -19,7 +19,7 @@
 #include <base/strings/string_util.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_task_runner.h>
+#include <weave/provider/test/mock_task_runner.h>
 
 #include "libweave/external/crypto/p224_spake.h"
 #include "libweave/src/data_encoding.h"
@@ -100,7 +100,7 @@
   }
 
   const base::Time time_ = base::Time::FromTimeT(1410000000);
-  test::MockTaskRunner task_runner_;
+  provider::test::MockTaskRunner task_runner_;
   SecurityManager security_{{PairingType::kEmbeddedCode},
                             "1234",
                             false,
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index dff6c9f..4756a66 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -7,9 +7,9 @@
 #include <base/logging.h>
 #include <base/memory/weak_ptr.h>
 #include <weave/enum_to_string.h>
-#include <weave/network_provider.h>
-#include <weave/task_runner.h>
-#include <weave/wifi_provider.h>
+#include <weave/provider/network.h>
+#include <weave/provider/task_runner.h>
+#include <weave/provider/wifi.h>
 
 #include "libweave/src/bind_lambda.h"
 #include "libweave/src/privet/constants.h"
@@ -17,13 +17,15 @@
 namespace weave {
 namespace privet {
 
+using provider::NetworkState;
+
 WifiBootstrapManager::WifiBootstrapManager(
     const std::string& last_configured_ssid,
     const std::string& test_privet_ssid,
     bool ble_setup_enabled,
-    TaskRunner* task_runner,
-    NetworkProvider* network,
-    WifiProvider* wifi,
+    provider::TaskRunner* task_runner,
+    provider::Network* network,
+    provider::Wifi* wifi,
     CloudDelegate* gcd)
     : task_runner_{task_runner},
       network_{network},
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index fbf6360..8174cac 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -22,9 +22,11 @@
 
 namespace weave {
 
-class NetworkProvider;
+namespace provider {
+class Network;
 class TaskRunner;
-class WifiProvider;
+class Wifi;
+}
 
 namespace privet {
 
@@ -40,9 +42,9 @@
   WifiBootstrapManager(const std::string& last_configured_ssid,
                        const std::string& test_privet_ssid,
                        bool wifi_setup_enabled,
-                       TaskRunner* task_runner,
-                       NetworkProvider* shill_client,
-                       WifiProvider* wifi,
+                       provider::TaskRunner* task_runner,
+                       provider::Network* shill_client,
+                       provider::Wifi* wifi,
                        CloudDelegate* gcd);
   ~WifiBootstrapManager() override = default;
   virtual void Init();
@@ -96,9 +98,9 @@
   // It is not persisted to disk.
   SetupState setup_state_{SetupState::kNone};
   ConnectionState connection_state_{ConnectionState::kDisabled};
-  TaskRunner* task_runner_{nullptr};
-  NetworkProvider* network_{nullptr};
-  WifiProvider* wifi_{nullptr};
+  provider::TaskRunner* task_runner_{nullptr};
+  provider::Network* network_{nullptr};
+  provider::Wifi* wifi_{nullptr};
   WifiSsidGenerator ssid_generator_;
   base::Time monitor_until_;
 
diff --git a/libweave/src/states/state_manager.cc b/libweave/src/states/state_manager.cc
index c277ab4..64a7db9 100644
--- a/libweave/src/states/state_manager.cc
+++ b/libweave/src/states/state_manager.cc
@@ -6,7 +6,7 @@
 
 #include <base/logging.h>
 #include <base/values.h>
-#include <weave/config_store.h>
+#include <weave/provider/config_store.h>
 
 #include "libweave/src/json_error_codes.h"
 #include "libweave/src/states/error_codes.h"
@@ -28,7 +28,7 @@
   callback.Run();  // Force to read current state.
 }
 
-void StateManager::Startup(ConfigStore* config_store) {
+void StateManager::Startup(provider::ConfigStore* config_store) {
   LOG(INFO) << "Initializing StateManager.";
 
   // Load standard device state definition.
diff --git a/libweave/src/states/state_manager.h b/libweave/src/states/state_manager.h
index 59c7716..8f6b237 100644
--- a/libweave/src/states/state_manager.h
+++ b/libweave/src/states/state_manager.h
@@ -27,7 +27,9 @@
 
 namespace weave {
 
+namespace provider {
 class ConfigStore;
+}
 
 // StateManager is the class that aggregates the device state fragments
 // provided by device daemons and makes the aggregate device state available
@@ -45,7 +47,7 @@
 
   // Initializes the state manager and load device state fragments.
   // Called by Buffet daemon at startup.
-  void Startup(ConfigStore* config_store);
+  void Startup(provider::ConfigStore* config_store);
 
   // Returns all the categories the state properties are registered from.
   // As with GCD command handling, the category normally represent a device
diff --git a/libweave/src/states/state_manager_unittest.cc b/libweave/src/states/state_manager_unittest.cc
index a7511cc..1ae60d7 100644
--- a/libweave/src/states/state_manager_unittest.cc
+++ b/libweave/src/states/state_manager_unittest.cc
@@ -11,7 +11,7 @@
 #include <base/values.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_config_store.h>
+#include <weave/provider/test/mock_config_store.h>
 
 #include "libweave/src/commands/schema_constants.h"
 #include "libweave/src/commands/unittest_utils.h"
@@ -138,7 +138,7 @@
 }
 
 TEST_F(StateManagerTest, Startup) {
-  test::MockConfigStore config_store;
+  provider::test::MockConfigStore config_store;
   StateManager manager(&mock_state_change_queue_);
 
   EXPECT_CALL(config_store, LoadBaseStateDefs())
diff --git a/libweave/src/test/fake_stream.cc b/libweave/src/test/fake_stream.cc
index 5adf462..786aa01 100644
--- a/libweave/src/test/fake_stream.cc
+++ b/libweave/src/test/fake_stream.cc
@@ -6,13 +6,15 @@
 
 #include <base/bind.h>
 #include <gtest/gtest.h>
-#include <weave/task_runner.h>
+#include <weave/provider/task_runner.h>
 
 namespace weave {
 namespace test {
 
-FakeStream::FakeStream(TaskRunner* task_runner) : task_runner_{task_runner} {}
-FakeStream::FakeStream(TaskRunner* task_runner, const std::string& read_data)
+FakeStream::FakeStream(provider::TaskRunner* task_runner)
+    : task_runner_{task_runner} {}
+FakeStream::FakeStream(provider::TaskRunner* task_runner,
+                       const std::string& read_data)
     : task_runner_{task_runner}, read_data_{read_data} {}
 
 void FakeStream::CancelPendingOperations() {}
diff --git a/libweave/src/test/mock_http_client.cc b/libweave/src/test/mock_http_client.cc
index 879f213..b17645c 100644
--- a/libweave/src/test/mock_http_client.cc
+++ b/libweave/src/test/mock_http_client.cc
@@ -2,12 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <weave/test/mock_http_client.h>
+#include <weave/provider/test/mock_http_client.h>
 
 #include <memory>
 #include <string>
 
 namespace weave {
+namespace provider {
 namespace test {
 
 std::unique_ptr<HttpClient::Response> MockHttpClient::SendRequestAndBlock(
@@ -38,4 +39,5 @@
 }
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
diff --git a/libweave/src/test/mock_task_runner.cc b/libweave/src/test/mock_task_runner.cc
index a78b4e1..78af5ad 100644
--- a/libweave/src/test/mock_task_runner.cc
+++ b/libweave/src/test/mock_task_runner.cc
@@ -2,13 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <weave/test/mock_task_runner.h>
+#include <weave/provider/test/mock_task_runner.h>
 
 using testing::_;
 using testing::Invoke;
 using testing::AnyNumber;
 
 namespace weave {
+namespace provider {
 namespace test {
 
 class MockTaskRunner::TestClock : public base::Clock {
@@ -60,4 +61,5 @@
 }
 
 }  // namespace test
+}  // namespace provider
 }  // namespace weave
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index f5d7818..e92c266 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -6,14 +6,14 @@
 
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
-#include <weave/test/mock_bluetooth.h>
-#include <weave/test/mock_config_store.h>
-#include <weave/test/mock_dns_service_discovery_provider.h>
-#include <weave/test/mock_http_client.h>
-#include <weave/test/mock_http_server.h>
-#include <weave/test/mock_network_provider.h>
-#include <weave/test/mock_task_runner.h>
-#include <weave/test/mock_wifi_provider.h>
+#include <weave/provider/test/mock_bluetooth.h>
+#include <weave/provider/test/mock_config_store.h>
+#include <weave/provider/test/mock_dns_service_discovery.h>
+#include <weave/provider/test/mock_http_client.h>
+#include <weave/provider/test/mock_http_server.h>
+#include <weave/provider/test/mock_network.h>
+#include <weave/provider/test/mock_task_runner.h>
+#include <weave/provider/test/mock_wifi.h>
 #include <weave/test/unittest_utils.h>
 
 #include "libweave/src/bind_lambda.h"
@@ -36,6 +36,8 @@
 
 using test::CreateDictionaryValue;
 using test::ValueToString;
+using provider::test::MockHttpClientResponse;
+using provider::NetworkState;
 
 const char kCategory[] = "powerd";
 
@@ -172,8 +174,8 @@
                      const std::string& json_response) {
     EXPECT_CALL(http_client_, MockSendRequest(method, url, _, _, _))
         .WillOnce(InvokeWithoutArgs([json_response]() {
-          test::MockHttpClientResponse* response =
-              new StrictMock<test::MockHttpClientResponse>;
+          provider::test::MockHttpClientResponse* response =
+              new StrictMock<provider::test::MockHttpClientResponse>;
           EXPECT_CALL(*response, GetStatusCode())
               .Times(AtLeast(1))
               .WillRepeatedly(Return(200));
@@ -224,7 +226,7 @@
   void InitNetwork() {
     EXPECT_CALL(network_, AddConnectionChangedCallback(_))
         .WillRepeatedly(Invoke(
-            [this](const NetworkProvider::ConnectionChangedCallback& cb) {
+            [this](const provider::Network::ConnectionChangedCallback& cb) {
               network_callbacks_.push_back(cb);
             }));
     EXPECT_CALL(network_, GetConnectionState())
@@ -264,13 +266,14 @@
     EXPECT_CALL(http_server_, GetHttpsCertificateFingerprint())
         .WillRepeatedly(ReturnRefOfCopy(std::vector<uint8_t>{1, 2, 3}));
     EXPECT_CALL(http_server_, AddRequestHandler(_, _))
-        .WillRepeatedly(Invoke([this](const std::string& path_prefix,
-                                      const HttpServer::OnRequestCallback& cb) {
-          http_server_request_cb_.push_back(cb);
-        }));
-    EXPECT_CALL(http_server_, AddOnStateChangedCallback(_))
         .WillRepeatedly(
-            Invoke([this](const HttpServer::OnStateChangedCallback& cb) {
+            Invoke([this](const std::string& path_prefix,
+                          const provider::HttpServer::OnRequestCallback& cb) {
+              http_server_request_cb_.push_back(cb);
+            }));
+    EXPECT_CALL(http_server_, AddOnStateChangedCallback(_))
+        .WillRepeatedly(Invoke(
+            [this](const provider::HttpServer::OnStateChangedCallback& cb) {
               http_server_changed_cb_.push_back(cb);
             }));
   }
@@ -307,26 +310,28 @@
     task_runner_.Run();
   }
 
-  void NotifyNetworkChanged(NetworkState state, base::TimeDelta delay) {
+  void NotifyNetworkChanged(provider::NetworkState state,
+                            base::TimeDelta delay) {
     EXPECT_CALL(network_, GetConnectionState()).WillRepeatedly(Return(state));
     for (const auto& cb : network_callbacks_) {
       task_runner_.PostDelayedTask(FROM_HERE, cb, delay);
     }
   }
 
-  std::vector<HttpServer::OnStateChangedCallback> http_server_changed_cb_;
-  std::vector<HttpServer::OnRequestCallback> http_server_request_cb_;
+  std::vector<provider::HttpServer::OnStateChangedCallback>
+      http_server_changed_cb_;
+  std::vector<provider::HttpServer::OnRequestCallback> http_server_request_cb_;
 
-  StrictMock<test::MockConfigStore> config_store_;
-  StrictMock<test::MockTaskRunner> task_runner_;
-  StrictMock<test::MockHttpClient> http_client_;
-  StrictMock<test::MockNetworkProvider> network_;
-  StrictMock<test::MockDnsServiceDiscovery> dns_sd_;
-  StrictMock<test::MockHttpServer> http_server_;
-  StrictMock<test::MockWifiProvider> wifi_;
-  StrictMock<test::MockBluetooth> bluetooth_;
+  StrictMock<provider::test::MockConfigStore> config_store_;
+  StrictMock<provider::test::MockTaskRunner> task_runner_;
+  StrictMock<provider::test::MockHttpClient> http_client_;
+  StrictMock<provider::test::MockNetwork> network_;
+  StrictMock<provider::test::MockDnsServiceDiscovery> dns_sd_;
+  StrictMock<provider::test::MockHttpServer> http_server_;
+  StrictMock<provider::test::MockWifi> wifi_;
+  StrictMock<provider::test::MockBluetooth> bluetooth_;
 
-  std::vector<NetworkProvider::ConnectionChangedCallback> network_callbacks_;
+  std::vector<provider::Network::ConnectionChangedCallback> network_callbacks_;
 
   weave::Cloud* cloud_{nullptr};
 
@@ -418,7 +423,7 @@
     InitDnsSd();
 
     EXPECT_CALL(network_, GetConnectionState())
-        .WillRepeatedly(Return(NetworkState::kConnected));
+        .WillRepeatedly(Return(provider::NetworkState::kConnected));
   }
 };
 
@@ -426,8 +431,8 @@
   StartDevice();
 
   // Short disconnect.
-  NotifyNetworkChanged(NetworkState::kOffline, {});
-  NotifyNetworkChanged(NetworkState::kConnected,
+  NotifyNetworkChanged(provider::NetworkState::kOffline, {});
+  NotifyNetworkChanged(provider::NetworkState::kConnected,
                        base::TimeDelta::FromSeconds(10));
   task_runner_.Run();
 
