diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index c72b4d8..400bf44 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -35,6 +35,7 @@
         'manager.cc',
         'peerd_client.cc',
         'shill_client.cc',
+        'webserv_client.cc',
         '../libweave/src/base_api_handler.cc',
         '../libweave/src/buffet_config.cc',
         '../libweave/src/commands/cloud_command_proxy.cc',
@@ -67,7 +68,6 @@
         '../libweave/src/privet/privet_types.cc',
         '../libweave/src/privet/publisher.cc',
         '../libweave/src/privet/security_manager.cc',
-        '../libweave/src/privet/webserv_client.cc',
         '../libweave/src/privet/wifi_bootstrap_manager.cc',
         '../libweave/src/privet/wifi_ssid_generator.cc',
         '../libweave/src/registration_status.cc',
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 9df8caa..047c121 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -27,6 +27,7 @@
 #include "buffet/dbus_conversion.h"
 #include "buffet/peerd_client.h"
 #include "buffet/shill_client.h"
+#include "buffet/webserv_client.h"
 #include "weave/enum_to_string.h"
 
 using chromeos::dbus_utils::AsyncEventSequencer;
@@ -57,12 +58,15 @@
 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});
+  if (!options.disable_privet) {
+    peerd_client_.reset(new PeerdClient{dbus_object_.GetBus()});
+    web_serv_client_.reset(new WebServClient{dbus_object_.GetBus(), sequencer});
+  }
 
   device_ = weave::Device::Create();
-  device_->Start(options, peerd_client_.get(), shill_client_.get(),
-                 &dbus_object_, sequencer);
+  device_->Start(options, shill_client_.get(), peerd_client_.get(),
+                 web_serv_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 c0037e9..880d753 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -33,6 +33,7 @@
 class DBusCommandDispacher;
 class PeerdClient;
 class ShillClient;
+class WebServClient;
 
 template<typename... Types>
 using DBusMethodResponsePtr =
@@ -117,8 +118,9 @@
   org::chromium::Buffet::ManagerAdaptor dbus_adaptor_{this};
   chromeos::dbus_utils::DBusObject dbus_object_;
 
-  std::unique_ptr<PeerdClient> peerd_client_;
   std::unique_ptr<ShillClient> shill_client_;
+  std::unique_ptr<PeerdClient> peerd_client_;
+  std::unique_ptr<WebServClient> web_serv_client_;
   std::unique_ptr<weave::Device> device_;
   std::unique_ptr<DBusCommandDispacher> command_dispatcher_;
 
diff --git a/libweave/src/privet/webserv_client.cc b/buffet/webserv_client.cc
similarity index 92%
rename from libweave/src/privet/webserv_client.cc
rename to buffet/webserv_client.cc
index b8ba74d..2ae5910 100644
--- a/libweave/src/privet/webserv_client.cc
+++ b/buffet/webserv_client.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "libweave/src/privet/webserv_client.h"
-//
+#include "buffet/webserv_client.h"
+
 #include <memory>
 #include <string>
 
@@ -14,12 +14,11 @@
 
 #include "buffet/dbus_constants.h"
 
-namespace weave {
-namespace privet {
+namespace buffet {
 
 namespace {
 
-class RequestImpl : public HttpServer::Request {
+class RequestImpl : public weave::HttpServer::Request {
  public:
   explicit RequestImpl(std::unique_ptr<libwebserv::Request> request)
       : request_{std::move(request)} {}
@@ -46,9 +45,10 @@
   web_server_->Disconnect();
 }
 
-void WebServClient::AddOnStateChangedCallback(const base::Closure& callback) {
+void WebServClient::AddOnStateChangedCallback(
+    const OnStateChangedCallback& callback) {
   on_state_changed_callbacks_.push_back(callback);
-  callback.Run();
+  callback.Run(*this);
 }
 
 void WebServClient::AddRequestHandler(const std::string& path_prefix,
@@ -116,7 +116,7 @@
     certificate_ = protocol_handler->GetCertificateFingerprint();
   }
   for (const auto& cb : on_state_changed_callbacks_)
-    cb.Run();
+    cb.Run(*this);
 }
 
 void WebServClient::OnProtocolHandlerDisconnected(
@@ -129,8 +129,7 @@
     certificate_.clear();
   }
   for (const auto& cb : on_state_changed_callbacks_)
-    cb.Run();
+    cb.Run(*this);
 }
 
-}  // namespace privet
-}  // namespace weave
+}  // namespace buffet
diff --git a/libweave/src/privet/webserv_client.h b/buffet/webserv_client.h
similarity index 82%
rename from libweave/src/privet/webserv_client.h
rename to buffet/webserv_client.h
index 43eb859..cbfbf23 100644
--- a/libweave/src/privet/webserv_client.h
+++ b/buffet/webserv_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_WEBSERV_CLIENT_H_
-#define LIBWEAVE_SRC_PRIVET_WEBSERV_CLIENT_H_
+#ifndef BUFFET_WEBSERV_CLIENT_H_
+#define BUFFET_WEBSERV_CLIENT_H_
 
 #include <memory>
 #include <string>
@@ -30,18 +30,18 @@
 class Server;
 }
 
-namespace weave {
-namespace privet {
+namespace buffet {
 
 // Wrapper around libwebserv that implements HttpServer interface.
-class WebServClient : public HttpServer {
+class WebServClient : public weave::HttpServer {
  public:
   WebServClient(const scoped_refptr<dbus::Bus>& bus,
                 chromeos::dbus_utils::AsyncEventSequencer* sequencer);
   ~WebServClient() override;
 
   // HttpServer implementation.
-  void AddOnStateChangedCallback(const base::Closure& callback) override;
+  void AddOnStateChangedCallback(
+      const OnStateChangedCallback& callback) override;
   void AddRequestHandler(const std::string& path_prefix,
                          const OnRequestCallback& callback) override;
   uint16_t GetHttpPort() const override;
@@ -68,7 +68,7 @@
   uint16_t https_port_{0};
   chromeos::Blob certificate_;
 
-  std::vector<base::Closure> on_state_changed_callbacks_;
+  std::vector<OnStateChangedCallback> on_state_changed_callbacks_;
 
   std::unique_ptr<libwebserv::Server> web_server_;
 
@@ -76,7 +76,6 @@
   DISALLOW_COPY_AND_ASSIGN(WebServClient);
 };
 
-}  // namespace privet
-}  // namespace weave
+}  // namespace buffet
 
-#endif  // LIBWEAVE_SRC_PRIVET_WEBSERV_CLIENT_H_
+#endif  // BUFFET_WEBSERV_CLIENT_H_
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index e7d9d7d..019bc74 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -15,6 +15,7 @@
 #include "weave/cloud.h"
 #include "weave/commands.h"
 #include "weave/config.h"
+#include "weave/http_server.h"
 #include "weave/mdns.h"
 #include "weave/network.h"
 #include "weave/privet.h"
@@ -46,8 +47,9 @@
   virtual ~Device() = default;
 
   virtual void Start(const Options& options,
-                     Mdns* mdns,
                      Network* network,
+                     Mdns* mdns,
+                     HttpServer* http_server,
                      chromeos::dbus_utils::DBusObject* dbus_object,
                      chromeos::dbus_utils::AsyncEventSequencer* sequencer) = 0;
 
diff --git a/libweave/include/weave/http_server.h b/libweave/include/weave/http_server.h
index db30252..59e7542 100644
--- a/libweave/include/weave/http_server.h
+++ b/libweave/include/weave/http_server.h
@@ -26,6 +26,8 @@
     virtual ~Request() = default;
   };
 
+  using OnStateChangedCallback = base::Callback<void(const HttpServer& server)>;
+
   using OnReplyCallback = base::Callback<void(int status_code,
                                               const std::string& data,
                                               const std::string& mime_type)>;
@@ -35,7 +37,8 @@
                           const OnReplyCallback& callback)>;
 
   // Adds notification callback for server started/stopped serving requests.
-  virtual void AddOnStateChangedCallback(const base::Closure& callback) = 0;
+  virtual void AddOnStateChangedCallback(
+      const OnStateChangedCallback& callback) = 0;
 
   // Adds callback called on new http/https requests with the given path prefix.
   virtual void AddRequestHandler(const std::string& path_prefix,
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index cd79a02..28d3c97 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -31,15 +31,13 @@
 
 DeviceManager::DeviceManager() {}
 
-DeviceManager::~DeviceManager() {
-  if (privet_)
-    privet_->Shutdown();
-}
+DeviceManager::~DeviceManager() {}
 
 void DeviceManager::Start(
     const Options& options,
-    Mdns* mdns,
     Network* network,
+    Mdns* mdns,
+    HttpServer* http_server,
     chromeos::dbus_utils::DBusObject* dbus_object,
     chromeos::dbus_utils::AsyncEventSequencer* sequencer) {
   command_manager_ = std::make_shared<CommandManager>();
@@ -67,8 +65,12 @@
 
   device_info_->Start();
 
-  if (!options.disable_privet)
-    StartPrivet(options, mdns, network, dbus_object, sequencer);
+  if (!options.disable_privet) {
+    StartPrivet(options, network, mdns, http_server, dbus_object, sequencer);
+  } else {
+    CHECK(!http_server);
+    CHECK(!mdns);
+  }
 }
 
 Commands* DeviceManager::GetCommands() {
@@ -93,13 +95,15 @@
 
 void DeviceManager::StartPrivet(
     const Options& options,
-    Mdns* mdns,
     Network* network,
+    Mdns* mdns,
+    HttpServer* http_server,
     chromeos::dbus_utils::DBusObject* dbus_object,
     chromeos::dbus_utils::AsyncEventSequencer* sequencer) {
   privet_.reset(new privet::Manager{});
-  privet_->Start(options, dbus_object->GetBus(), network, device_info_.get(),
-                 command_manager_.get(), state_manager_.get(), mdns, sequencer);
+  privet_->Start(options, dbus_object->GetBus(), network, mdns, http_server,
+                 device_info_.get(), command_manager_.get(),
+                 state_manager_.get(), sequencer);
 
   privet_->AddOnWifiSetupChangedCallback(
       base::Bind(&DeviceManager::OnWiFiBootstrapStateChanged,
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 2e0f00a..6f22fac 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -34,8 +34,9 @@
   ~DeviceManager() override;
 
   void Start(const Options& options,
-             Mdns* mdns,
              Network* network,
+             Mdns* mdns,
+             HttpServer* http_server,
              chromeos::dbus_utils::DBusObject* dbus_object,
              chromeos::dbus_utils::AsyncEventSequencer* sequencer) override;
 
@@ -47,8 +48,9 @@
 
  private:
   void StartPrivet(const Options& options,
-                   Mdns* mdns,
                    Network* network,
+                   Mdns* mdns,
+                   HttpServer* http_server,
                    chromeos::dbus_utils::DBusObject* dbus_object,
                    chromeos::dbus_utils::AsyncEventSequencer* sequencer);
 
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 3e9f604..c49eec3 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -35,9 +35,7 @@
 #include "libweave/src/privet/device_delegate.h"
 #include "libweave/src/privet/privet_handler.h"
 #include "libweave/src/privet/publisher.h"
-#include "libweave/src/privet/webserv_client.h"
 #include "weave/network.h"
-#include "weave/http_server.h"
 
 namespace weave {
 namespace privet {
@@ -57,10 +55,11 @@
 void Manager::Start(const Device::Options& options,
                     const scoped_refptr<dbus::Bus>& bus,
                     Network* network,
+                    Mdns* mdns,
+                    HttpServer* http_server,
                     DeviceRegistrationInfo* device,
                     CommandManager* command_manager,
                     StateManager* state_manager,
-                    Mdns* mdns,
                     AsyncEventSequencer* sequencer) {
   disable_security_ = options.disable_security;
 
@@ -88,14 +87,13 @@
       new PrivetHandler(cloud_.get(), device_.get(), security_.get(),
                         wifi_bootstrap_manager_.get(), publisher_.get()));
 
-  web_server_.reset(new WebServClient{bus, sequencer});
-  web_server_->AddOnStateChangedCallback(base::Bind(
+  http_server->AddOnStateChangedCallback(base::Bind(
       &Manager::OnHttpServerStatusChanged, weak_ptr_factory_.GetWeakPtr()));
-  web_server_->AddRequestHandler("/privet/",
+  http_server->AddRequestHandler("/privet/",
                                  base::Bind(&Manager::PrivetRequestHandler,
                                             weak_ptr_factory_.GetWeakPtr()));
   if (options.enable_ping) {
-    web_server_->AddRequestHandler("/privet/ping",
+    http_server->AddRequestHandler("/privet/ping",
                                    base::Bind(&Manager::HelloWorldHandler,
                                               weak_ptr_factory_.GetWeakPtr()));
   }
@@ -121,10 +119,6 @@
   security_->RegisterPairingListeners(on_start, on_end);
 }
 
-void Manager::Shutdown() {
-  web_server_.reset();
-}
-
 void Manager::OnDeviceInfoChanged() {
   OnChanged();
 }
@@ -182,15 +176,14 @@
   OnChanged();
 }
 
-void Manager::OnHttpServerStatusChanged() {
-  if (device_->GetHttpEnpoint().first != web_server_->GetHttpPort()) {
-    device_->SetHttpPort(web_server_->GetHttpPort());
-    if (publisher_)
+void Manager::OnHttpServerStatusChanged(const HttpServer& server) {
+  if (device_->GetHttpEnpoint().first != server.GetHttpPort()) {
+    device_->SetHttpPort(server.GetHttpPort());
+    if (publisher_)  // Only HTTP port is published
       publisher_->Update();
   }
-  device_->SetHttpsPort(web_server_->GetHttpsPort());
-  security_->SetCertificateFingerprint(
-      web_server_->GetHttpsCertificateFingerprint());
+  device_->SetHttpsPort(server.GetHttpsPort());
+  security_->SetCertificateFingerprint(server.GetHttpsCertificateFingerprint());
 }
 
 }  // namespace privet
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h
index 29b803d..c6e6dd9 100644
--- a/libweave/src/privet/privet_manager.h
+++ b/libweave/src/privet/privet_manager.h
@@ -17,7 +17,6 @@
 #include "libweave/src/privet/security_manager.h"
 #include "libweave/src/privet/wifi_bootstrap_manager.h"
 #include "weave/device.h"
-#include "weave/http_server.h"
 
 namespace chromeos {
 namespace dbus_utils {
@@ -48,7 +47,6 @@
 class PrivetHandler;
 class Publisher;
 class SecurityManager;
-class WebServClient;
 
 class Manager : public Privet, public CloudDelegate::Observer {
  public:
@@ -58,10 +56,11 @@
   void Start(const weave::Device::Options& options,
              const scoped_refptr<dbus::Bus>& bus,
              Network* network,
+             Mdns* mdns,
+             HttpServer* http_server,
              DeviceRegistrationInfo* device,
              CommandManager* command_manager,
              StateManager* state_manager,
-             Mdns* mdns,
              chromeos::dbus_utils::AsyncEventSequencer* sequencer);
 
   std::string GetCurrentlyConnectedSsid() const;
@@ -73,8 +72,6 @@
       const OnPairingStartedCallback& on_start,
       const OnPairingEndedCallback& on_end) override;
 
-  void Shutdown();
-
  private:
   // CloudDelegate::Observer
   void OnDeviceInfoChanged() override;
@@ -92,7 +89,7 @@
   void OnChanged();
   void OnConnectivityChanged(bool online);
 
-  void OnHttpServerStatusChanged();
+  void OnHttpServerStatusChanged(const HttpServer& server);
 
   bool disable_security_{false};
   std::unique_ptr<CloudDelegate> cloud_;
@@ -102,8 +99,6 @@
   std::unique_ptr<Publisher> publisher_;
   std::unique_ptr<PrivetHandler> privet_handler_;
 
-  std::unique_ptr<WebServClient> web_server_;
-
   ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
 
   base::WeakPtrFactory<Manager> weak_ptr_factory_{this};
