diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index 3c59e0a..fde6d30 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -33,6 +33,7 @@
         'dbus_constants.cc',
         'manager.cc',
         'peerd_client.cc',
+        'shill_client.cc',
         '../libweave/src/base_api_handler.cc',
         '../libweave/src/buffet_config.cc',
         '../libweave/src/commands/cloud_command_proxy.cc',
@@ -66,7 +67,6 @@
         '../libweave/src/privet/privet_types.cc',
         '../libweave/src/privet/publisher.cc',
         '../libweave/src/privet/security_manager.cc',
-        '../libweave/src/privet/shill_client.cc',
         '../libweave/src/privet/privet_types.cc',
         '../libweave/src/privet/wifi_bootstrap_manager.cc',
         '../libweave/src/privet/wifi_ssid_generator.cc',
diff --git a/buffet/main.cc b/buffet/main.cc
index 0d1dff9..276e030 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -24,19 +24,24 @@
 
 class Daemon final : public DBusServiceDaemon {
  public:
-  explicit Daemon(const weave::Device::Options& options)
-      : DBusServiceDaemon(kServiceName, kRootServicePath), options_{options} {}
+  Daemon(const weave::Device::Options& options,
+         const std::set<std::string>& device_whitelist)
+      : DBusServiceDaemon(kServiceName, kRootServicePath),
+        options_{options},
+        device_whitelist_{device_whitelist} {}
 
  protected:
   void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override {
     manager_.reset(new buffet::Manager(object_manager_->AsWeakPtr()));
-    manager_->Start(options_, sequencer);
+    manager_->Start(options_, device_whitelist_, sequencer);
   }
 
   void OnShutdown(int* return_code) override { manager_->Stop(); }
 
  private:
   weave::Device::Options options_;
+  std::set<std::string> device_whitelist_;
+
   std::unique_ptr<buffet::Manager> manager_;
   DISALLOW_COPY_AND_ASSIGN(Daemon);
 };
@@ -91,13 +96,12 @@
   options.definitions_path = base::FilePath{"/etc/buffet"};
   options.test_definitions_path = base::FilePath{FLAGS_test_definitions_path};
   options.xmpp_enabled = FLAGS_enable_xmpp;
-  options.device_whitelist.insert(device_whitelist.begin(),
-                                  device_whitelist.end());
   options.disable_privet = FLAGS_disable_privet;
   options.disable_security = FLAGS_disable_security;
   options.enable_ping = FLAGS_enable_ping;
   options.test_privet_ssid = FLAGS_test_privet_ssid;
 
-  buffet::Daemon daemon{options};
+  buffet::Daemon daemon{options, std::set<std::string>{device_whitelist.begin(),
+                                                       device_whitelist.end()}};
   return daemon.Run();
 }
diff --git a/buffet/manager.cc b/buffet/manager.cc
index f6b27a3..9df8caa 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -26,6 +26,7 @@
 #include "buffet/dbus_command_dispatcher.h"
 #include "buffet/dbus_conversion.h"
 #include "buffet/peerd_client.h"
+#include "buffet/shill_client.h"
 #include "weave/enum_to_string.h"
 
 using chromeos::dbus_utils::AsyncEventSequencer;
@@ -54,11 +55,14 @@
 }
 
 void Manager::Start(const weave::Device::Options& options,
+                    const std::set<std::string>& device_whitelist,
                     AsyncEventSequencer* sequencer) {
   peerd_client_.reset(new PeerdClient{dbus_object_.GetBus()});
+  shill_client_.reset(new ShillClient{dbus_object_.GetBus(), device_whitelist});
 
   device_ = weave::Device::Create();
-  device_->Start(options, peerd_client_.get(), &dbus_object_, sequencer);
+  device_->Start(options, peerd_client_.get(), shill_client_.get(),
+                 &dbus_object_, sequencer);
 
   command_dispatcher_.reset(new DBusCommandDispacher{
       dbus_object_.GetObjectManager(), device_->GetCommands()});
diff --git a/buffet/manager.h b/buffet/manager.h
index e9fcad9..c0037e9 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -30,9 +30,9 @@
 
 namespace buffet {
 
-class PeerdClient;
-
 class DBusCommandDispacher;
+class PeerdClient;
+class ShillClient;
 
 template<typename... Types>
 using DBusMethodResponsePtr =
@@ -53,6 +53,7 @@
   ~Manager();
 
   void Start(const weave::Device::Options& options,
+             const std::set<std::string>& device_whitelist,
              chromeos::dbus_utils::AsyncEventSequencer* sequencer);
 
   void Stop();
@@ -117,6 +118,7 @@
   chromeos::dbus_utils::DBusObject dbus_object_;
 
   std::unique_ptr<PeerdClient> peerd_client_;
+  std::unique_ptr<ShillClient> shill_client_;
   std::unique_ptr<weave::Device> device_;
   std::unique_ptr<DBusCommandDispacher> command_dispatcher_;
 
diff --git a/buffet/peerd_client.h b/buffet/peerd_client.h
index e24cd32..89322cd 100644
--- a/buffet/peerd_client.h
+++ b/buffet/peerd_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 BUFFET_PRIVET_PEERD_CLIENT_H_
-#define BUFFET_PRIVET_PEERD_CLIENT_H_
+#ifndef BUFFET_PEERD_CLIENT_H_
+#define BUFFET_PEERD_CLIENT_H_
 
 #include <map>
 #include <memory>
@@ -68,4 +68,4 @@
 
 }  // namespace buffet
 
-#endif  // BUFFET_PRIVET_PEERD_CLIENT_H_
+#endif  // BUFFET_PEERD_CLIENT_H_
diff --git a/libweave/src/privet/shill_client.cc b/buffet/shill_client.cc
similarity index 93%
rename from libweave/src/privet/shill_client.cc
rename to buffet/shill_client.cc
index 9c81064..1efc52d 100644
--- a/libweave/src/privet/shill_client.cc
+++ b/buffet/shill_client.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "libweave/src/privet/shill_client.h"
+#include "buffet/shill_client.h"
 
 #include <set>
 
@@ -25,13 +25,11 @@
 using std::string;
 using std::vector;
 
-namespace weave {
-namespace privet {
+namespace buffet {
 
 namespace {
 
-void IgnoreDetachEvent() {
-}
+void IgnoreDetachEvent() {}
 
 bool GetStateForService(ServiceProxy* service, string* state) {
   CHECK(service) << "|service| was nullptr in GetStateForService()";
@@ -54,31 +52,31 @@
   return true;
 }
 
-NetworkState ShillNetworkStateToNetworkState(const string& state) {
+weave::NetworkState ShillServiceStateToNetworkState(const string& state) {
   // TODO(wiley) What does "unconfigured" mean in a world with multiple sets
   //             of WiFi credentials?
   // TODO(wiley) Detect disabled devices, update state appropriately.
   if ((state.compare(shill::kStateReady) == 0) ||
       (state.compare(shill::kStatePortal) == 0) ||
       (state.compare(shill::kStateOnline) == 0)) {
-    return NetworkState::kConnected;
+    return weave::NetworkState::kConnected;
   }
   if ((state.compare(shill::kStateAssociation) == 0) ||
       (state.compare(shill::kStateConfiguration) == 0)) {
-    return NetworkState::kConnecting;
+    return weave::NetworkState::kConnecting;
   }
   if ((state.compare(shill::kStateFailure) == 0) ||
       (state.compare(shill::kStateActivationFailure) == 0)) {
     // TODO(wiley) Get error information off the service object.
-    return NetworkState::kFailure;
+    return weave::NetworkState::kFailure;
   }
   if ((state.compare(shill::kStateIdle) == 0) ||
       (state.compare(shill::kStateOffline) == 0) ||
       (state.compare(shill::kStateDisconnect) == 0)) {
-    return NetworkState::kOffline;
+    return weave::NetworkState::kOffline;
   }
   LOG(WARNING) << "Unknown state found: '" << state << "'";
-  return NetworkState::kOffline;
+  return weave::NetworkState::kOffline;
 }
 
 }  // namespace
@@ -103,7 +101,7 @@
   VLOG(2) << "ShillClient::Init();";
   CleanupConnectingService(false);
   devices_.clear();
-  connectivity_state_ = NetworkState::kOffline;
+  connectivity_state_ = weave::NetworkState::kOffline;
   VariantDictionary properties;
   if (!manager_proxy_.GetProperties(&properties, nullptr)) {
     LOG(ERROR) << "Unable to get properties from Manager, waiting for "
@@ -146,7 +144,7 @@
   return true;
 }
 
-NetworkState ShillClient::GetConnectionState() const {
+weave::NetworkState ShillClient::GetConnectionState() const {
   return connectivity_state_;
 }
 
@@ -178,7 +176,7 @@
   if (new_owner.empty()) {
     CleanupConnectingService(false);
     devices_.clear();
-    connectivity_state_ = NetworkState::kOffline;
+    connectivity_state_ = weave::NetworkState::kOffline;
   } else {
     Init();  // New service owner means shill reset!
   }
@@ -297,7 +295,7 @@
       return;  // Spurious update?
     }
     device_state.selected_service.reset();
-    device_state.service_state = NetworkState::kOffline;
+    device_state.service_state = weave::NetworkState::kOffline;
     removed_old_service = true;
   }
   std::shared_ptr<ServiceProxy> new_service;
@@ -312,7 +310,7 @@
     // happened long in the past for the connecting service.
     string state;
     if (GetStateForService(new_service.get(), &state)) {
-      device_state.service_state = ShillNetworkStateToNetworkState(state);
+      device_state.service_state = ShillServiceStateToNetworkState(state);
     } else {
       LOG(WARNING) << "Failed to read properties from existing service "
                       "on selection.";
@@ -397,7 +395,8 @@
     const string& state) {
   if (!connecting_service_ ||
       connecting_service_->GetObjectPath() != service_path ||
-      ShillNetworkStateToNetworkState(state) != NetworkState::kConnected) {
+      ShillServiceStateToNetworkState(state) !=
+          weave::NetworkState::kConnected) {
     return;
   }
   connecting_service_reset_pending_ = true;
@@ -432,7 +431,7 @@
     if (kv.second.selected_service &&
         kv.second.selected_service->GetObjectPath() == service_path) {
       VLOG(3) << "Updated cached connection state for selected service.";
-      kv.second.service_state = ShillNetworkStateToNetworkState(state);
+      kv.second.service_state = ShillServiceStateToNetworkState(state);
       UpdateConnectivityState();
       return;
     }
@@ -442,7 +441,7 @@
 void ShillClient::UpdateConnectivityState() {
   // Update the connectivity state of the device by picking the
   // state of the currently most connected selected service.
-  NetworkState new_connectivity_state{NetworkState::kOffline};
+  weave::NetworkState new_connectivity_state{weave::NetworkState::kOffline};
   for (const auto& kv : devices_) {
     if (kv.second.service_state > new_connectivity_state) {
       new_connectivity_state = kv.second.service_state;
@@ -459,9 +458,10 @@
   // underway.  Therefore, call our callbacks later, when we're in a good
   // state.
   base::MessageLoop::current()->PostTask(
-      FROM_HERE, base::Bind(&ShillClient::NotifyConnectivityListeners,
-                            weak_factory_.GetWeakPtr(),
-                            GetConnectionState() == NetworkState::kConnected));
+      FROM_HERE,
+      base::Bind(&ShillClient::NotifyConnectivityListeners,
+                 weak_factory_.GetWeakPtr(),
+                 GetConnectionState() == weave::NetworkState::kConnected));
 }
 
 void ShillClient::NotifyConnectivityListeners(bool am_online) {
@@ -484,5 +484,4 @@
   connecting_service_reset_pending_ = false;
 }
 
-}  // namespace privet
-}  // namespace weave
+}  // namespace buffet
diff --git a/libweave/src/privet/shill_client.h b/buffet/shill_client.h
similarity index 91%
rename from libweave/src/privet/shill_client.h
rename to buffet/shill_client.h
index 7d9069f..06c1be5 100644
--- a/libweave/src/privet/shill_client.h
+++ b/buffet/shill_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_SRC_PRIVET_SHILL_CLIENT_H_
-#define LIBWEAVE_SRC_PRIVET_SHILL_CLIENT_H_
+#ifndef BUFFET_SHILL_CLIENT_H_
+#define BUFFET_SHILL_CLIENT_H_
 
 #include <map>
 #include <set>
@@ -20,10 +20,9 @@
 #include "shill/dbus-proxies.h"
 #include "weave/network.h"
 
-namespace weave {
-namespace privet {
+namespace buffet {
 
-class ShillClient final : public Network {
+class ShillClient final : public weave::Network {
  public:
   ShillClient(const scoped_refptr<dbus::Bus>& bus,
               const std::set<std::string>& device_whitelist);
@@ -38,7 +37,7 @@
                         const std::string& passphrase,
                         const base::Closure& on_success,
                         chromeos::ErrorPtr* error) override;
-  NetworkState GetConnectionState() const override;
+  weave::NetworkState GetConnectionState() const override;
 
  private:
   struct DeviceState {
@@ -48,7 +47,7 @@
     // service (for instance, in the period between configuring a WiFi service
     // with credentials, and when Connect() is called.)
     std::shared_ptr<org::chromium::flimflam::ServiceProxy> selected_service;
-    NetworkState service_state{NetworkState::kOffline};
+    weave::NetworkState service_state{weave::NetworkState::kOffline};
   };
 
   bool IsMonitoredDevice(org::chromium::flimflam::DeviceProxy* device);
@@ -104,14 +103,13 @@
 
   // State for tracking our online connectivity.
   std::map<dbus::ObjectPath, DeviceState> devices_;
-  NetworkState connectivity_state_{NetworkState::kOffline};
+  weave::NetworkState connectivity_state_{weave::NetworkState::kOffline};
 
   base::WeakPtrFactory<ShillClient> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ShillClient);
 };
 
-}  // namespace privet
-}  // namespace weave
+}  // namespace buffet
 
-#endif  // LIBWEAVE_SRC_PRIVET_SHILL_CLIENT_H_
+#endif  // BUFFET_SHILL_CLIENT_H_
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index c730280..e7d9d7d 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -16,6 +16,7 @@
 #include "weave/commands.h"
 #include "weave/config.h"
 #include "weave/mdns.h"
+#include "weave/network.h"
 #include "weave/privet.h"
 #include "weave/state.h"
 
@@ -36,7 +37,6 @@
     base::FilePath definitions_path;
     base::FilePath test_definitions_path;
     bool xmpp_enabled = true;
-    std::set<std::string> device_whitelist;
     bool disable_privet = false;
     bool disable_security = false;
     bool enable_ping = false;
@@ -47,6 +47,7 @@
 
   virtual void Start(const Options& options,
                      Mdns* mdns,
+                     Network* network,
                      chromeos::dbus_utils::DBusObject* dbus_object,
                      chromeos::dbus_utils::AsyncEventSequencer* sequencer) = 0;
 
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 8cab8c3..bc83a04 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -15,7 +15,6 @@
 #include "libweave/src/commands/command_manager.h"
 #include "libweave/src/device_registration_info.h"
 #include "libweave/src/privet/privet_manager.h"
-#include "libweave/src/privet/shill_client.h"
 #include "libweave/src/states/state_change_queue.h"
 #include "libweave/src/states/state_manager.h"
 
@@ -40,6 +39,7 @@
 void DeviceManager::Start(
     const Options& options,
     Mdns* mdns,
+    Network* network,
     chromeos::dbus_utils::DBusObject* dbus_object,
     chromeos::dbus_utils::AsyncEventSequencer* sequencer) {
   command_manager_ = std::make_shared<CommandManager>();
@@ -56,22 +56,19 @@
   std::unique_ptr<BuffetConfig> config{new BuffetConfig{options.state_path}};
   config->Load(options.config_path);
 
-  shill_client_.reset(
-      new privet::ShillClient(dbus_object->GetBus(), options.device_whitelist));
-
   // 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), transport,
       base::MessageLoop::current()->task_runner(), options.xmpp_enabled,
-      shill_client_.get()));
+      network));
   base_api_handler_.reset(new BaseApiHandler{device_info_->AsWeakPtr(),
                                              state_manager_, command_manager_});
 
   device_info_->Start();
 
   if (!options.disable_privet)
-    StartPrivet(options, mdns, dbus_object, sequencer);
+    StartPrivet(options, mdns, network, dbus_object, sequencer);
 }
 
 Commands* DeviceManager::GetCommands() {
@@ -97,12 +94,12 @@
 void DeviceManager::StartPrivet(
     const Options& options,
     Mdns* mdns,
+    Network* network,
     chromeos::dbus_utils::DBusObject* dbus_object,
     chromeos::dbus_utils::AsyncEventSequencer* sequencer) {
   privet_.reset(new privet::Manager{});
-  privet_->Start(options, dbus_object->GetBus(), shill_client_.get(),
-                 device_info_.get(), command_manager_.get(),
-                 state_manager_.get(), mdns, sequencer);
+  privet_->Start(options, dbus_object->GetBus(), network, device_info_.get(),
+                 command_manager_.get(), state_manager_.get(), mdns, sequencer);
 
   privet_->AddOnWifiSetupChangedCallback(
       base::Bind(&DeviceManager::OnWiFiBootstrapStateChanged,
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 68b7614..2e0f00a 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -25,7 +25,6 @@
 class StateManager;
 
 namespace privet {
-class ShillClient;
 class Manager;
 }  // namespace privet
 
@@ -36,6 +35,7 @@
 
   void Start(const Options& options,
              Mdns* mdns,
+             Network* network,
              chromeos::dbus_utils::DBusObject* dbus_object,
              chromeos::dbus_utils::AsyncEventSequencer* sequencer) override;
 
@@ -48,6 +48,7 @@
  private:
   void StartPrivet(const Options& options,
                    Mdns* mdns,
+                   Network* network,
                    chromeos::dbus_utils::DBusObject* dbus_object,
                    chromeos::dbus_utils::AsyncEventSequencer* sequencer);
 
@@ -58,7 +59,6 @@
   std::shared_ptr<StateManager> state_manager_;
   std::unique_ptr<DeviceRegistrationInfo> device_info_;
   std::unique_ptr<BaseApiHandler> base_api_handler_;
-  std::unique_ptr<privet::ShillClient> shill_client_;
   std::unique_ptr<privet::Manager> privet_;
 
   base::WeakPtrFactory<DeviceManager> weak_ptr_factory_{this};
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index 85d77ef..1eddc21 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -28,9 +28,9 @@
 #include "libweave/src/commands/command_manager.h"
 #include "libweave/src/commands/schema_constants.h"
 #include "libweave/src/notification/xmpp_channel.h"
-#include "libweave/src/privet/shill_client.h"
 #include "libweave/src/states/state_manager.h"
 #include "libweave/src/utils.h"
+#include "weave/network.h"
 
 namespace weave {
 
@@ -114,14 +114,14 @@
     const std::shared_ptr<chromeos::http::Transport>& transport,
     const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
     bool notifications_enabled,
-    privet::ShillClient* shill_client)
+    weave::Network* network)
     : transport_{transport},
       task_runner_{task_runner},
       command_manager_{command_manager},
       state_manager_{state_manager},
       config_{std::move(config)},
       notifications_enabled_{notifications_enabled},
-      shill_client_{shill_client} {
+      network_{network} {
   cloud_backoff_policy_.reset(new chromeos::BackoffEntry::Policy{});
   cloud_backoff_policy_->num_errors_to_ignore = 0;
   cloud_backoff_policy_->initial_delay_ms = 1000;
@@ -374,7 +374,7 @@
 
   notification_channel_starting_ = true;
   primary_notification_channel_.reset(new XmppChannel{
-      config_->robot_account(), access_token_, task_runner_, shill_client_});
+      config_->robot_account(), access_token_, task_runner_, network_});
   primary_notification_channel_->Start(this);
 }
 
diff --git a/libweave/src/device_registration_info.h b/libweave/src/device_registration_info.h
index 27289bd..9ea8e9d 100644
--- a/libweave/src/device_registration_info.h
+++ b/libweave/src/device_registration_info.h
@@ -45,10 +45,7 @@
 namespace weave {
 
 class StateManager;
-
-namespace privet {
-class ShillClient;
-}
+class Network;
 
 extern const char kErrorDomainOAuth2[];
 extern const char kErrorDomainGCD[];
@@ -71,7 +68,7 @@
       const std::shared_ptr<chromeos::http::Transport>& transport,
       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
       bool notifications_enabled,
-      privet::ShillClient* shill_client);
+      weave::Network* network);
 
   ~DeviceRegistrationInfo() override;
 
@@ -341,7 +338,7 @@
   NotificationChannel* current_notification_channel_{nullptr};
   bool notification_channel_starting_{false};
 
-  privet::ShillClient* shill_client_{nullptr};
+  weave::Network* network_{nullptr};
 
   // Tracks our current registration status.
   RegistrationStatus registration_status_{RegistrationStatus::kUnconfigured};
diff --git a/libweave/src/notification/xmpp_channel.cc b/libweave/src/notification/xmpp_channel.cc
index 77debd8..76abb7e 100644
--- a/libweave/src/notification/xmpp_channel.cc
+++ b/libweave/src/notification/xmpp_channel.cc
@@ -15,7 +15,6 @@
 #include "libweave/src/notification/notification_delegate.h"
 #include "libweave/src/notification/notification_parser.h"
 #include "libweave/src/notification/xml_node.h"
-#include "libweave/src/privet/shill_client.h"
 #include "libweave/src/utils.h"
 #include "weave/network.h"
 
diff --git a/libweave/src/notification/xmpp_channel.h b/libweave/src/notification/xmpp_channel.h
index 57f86ab..66f7c78 100644
--- a/libweave/src/notification/xmpp_channel.h
+++ b/libweave/src/notification/xmpp_channel.h
@@ -25,10 +25,6 @@
 
 class Network;
 
-namespace privet {
-class ShillClient;
-}
-
 // Simple interface to abstract XmppChannel's SendMessage() method.
 class XmppChannelInterface {
  public:
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 4eeaa94..841e903 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -284,10 +284,9 @@
       return;
   }
   chromeos::ErrorPtr error;
-  chromeos::Error::AddToPrintf(&error, FROM_HERE, errors::kDomain,
-                               errors::kInvalidState,
-                               "Unknown state returned from ShillClient: %s",
-                               EnumToString(service_state).c_str());
+  chromeos::Error::AddToPrintf(
+      &error, FROM_HERE, errors::kDomain, errors::kInvalidState,
+      "Unknown network state: %s", EnumToString(service_state).c_str());
   connection_state_ = ConnectionState{std::move(error)};
 }
 
