diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 2a96ee2..b0b7f14 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -48,7 +48,7 @@
   opts.disable_security = false;
   opts.enable_ping = true;
   device->Start(opts, &config_store, &task_runner, &http_client, &network,
-                &mdns, &http_server, &bluetooth);
+                &mdns, &http_server, &network, &bluetooth);
 
   task_runner.Run();
 
diff --git a/libweave/examples/ubuntu/network_manager.h b/libweave/examples/ubuntu/network_manager.h
index 8abc80d..4855cfa 100644
--- a/libweave/examples/ubuntu/network_manager.h
+++ b/libweave/examples/ubuntu/network_manager.h
@@ -11,6 +11,7 @@
 #include <base/memory/weak_ptr.h>
 #include <base/time/time.h>
 #include <weave/network.h>
+#include <weave/wifi.h>
 
 namespace weave {
 
@@ -20,7 +21,7 @@
 
 // Basic weave::Network implementation.
 // Production version of SSL socket needs secure server certificate check.
-class NetworkImpl : public Network {
+class NetworkImpl : public Network, public Wifi {
  public:
   explicit NetworkImpl(TaskRunner* task_runner, bool force_bootstrapping);
   ~NetworkImpl();
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index c7ed3ae..e45d727 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -21,6 +21,7 @@
 #include <weave/privet.h>
 #include <weave/state.h>
 #include <weave/task_runner.h>
+#include <weave/wifi.h>
 
 namespace weave {
 
@@ -43,6 +44,7 @@
                      Network* network,
                      Mdns* mdns,
                      HttpServer* http_server,
+                     Wifi* wifi,
                      Bluetooth* bluetooth) = 0;
 
   virtual Commands* GetCommands() = 0;
diff --git a/libweave/include/weave/network.h b/libweave/include/weave/network.h
index 3ae70c0..1d4e07f 100644
--- a/libweave/include/weave/network.h
+++ b/libweave/include/weave/network.h
@@ -5,7 +5,6 @@
 #ifndef LIBWEAVE_INCLUDE_WEAVE_NETWORK_H_
 #define LIBWEAVE_INCLUDE_WEAVE_NETWORK_H_
 
-#include <map>
 #include <string>
 
 #include <base/callback.h>
@@ -31,22 +30,9 @@
   virtual void AddOnConnectionChangedCallback(
       const OnConnectionChangedCallback& listener) = 0;
 
-  // Implementation should attempt to connect to the given network with the
-  // given passphrase. This is accomplished by:
-  // Returns false on immediate failures with some descriptive codes in |error|.
-  virtual bool ConnectToService(const std::string& ssid,
-                                const std::string& passphrase,
-                                const base::Closure& on_success,
-                                ErrorPtr* error) = 0;
-
+  // Returns current Internet connectivity state
   virtual NetworkState GetConnectionState() const = 0;
 
-  // Starts WiFi access point for wifi setup.
-  virtual void EnableAccessPoint(const std::string& ssid) = 0;
-
-  // Stops WiFi access point.
-  virtual void DisableAccessPoint() = 0;
-
   // Opens bidirectional sockets and returns attached stream.
   virtual void OpenSslSocket(
       const std::string& host,
diff --git a/libweave/include/weave/test/mock_network.h b/libweave/include/weave/test/mock_network.h
index f188223..e2d0074 100644
--- a/libweave/include/weave/test/mock_network.h
+++ b/libweave/include/weave/test/mock_network.h
@@ -21,15 +21,7 @@
 
   MOCK_METHOD1(AddOnConnectionChangedCallback,
                void(const OnConnectionChangedCallback&));
-  MOCK_METHOD4(ConnectToService,
-               bool(const std::string&,
-                    const std::string&,
-                    const base::Closure&,
-                    ErrorPtr*));
   MOCK_CONST_METHOD0(GetConnectionState, NetworkState());
-  MOCK_METHOD1(EnableAccessPoint, void(const std::string&));
-  MOCK_METHOD0(DisableAccessPoint, void());
-
   MOCK_METHOD4(OpenSslSocket,
                void(const std::string&,
                     uint16_t,
diff --git a/libweave/include/weave/test/mock_wifi.h b/libweave/include/weave/test/mock_wifi.h
new file mode 100644
index 0000000..b32d1f2
--- /dev/null
+++ b/libweave/include/weave/test/mock_wifi.h
@@ -0,0 +1,34 @@
+// 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_WIFI_H_
+#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_H_
+
+#include <weave/network.h>
+
+#include <string>
+
+#include <gmock/gmock.h>
+
+namespace weave {
+namespace test {
+
+class MockWifi : public Wifi {
+ public:
+  MockWifi() {}
+  ~MockWifi() override = default;
+
+  MOCK_METHOD4(ConnectToService,
+               bool(const std::string&,
+                    const std::string&,
+                    const base::Closure&,
+                    ErrorPtr*));
+  MOCK_METHOD1(EnableAccessPoint, void(const std::string&));
+  MOCK_METHOD0(DisableAccessPoint, void());
+};
+
+}  // namespace test
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_H_
diff --git a/libweave/include/weave/wifi.h b/libweave/include/weave/wifi.h
new file mode 100644
index 0000000..95edbeb
--- /dev/null
+++ b/libweave/include/weave/wifi.h
@@ -0,0 +1,37 @@
+// 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_WIFI_H_
+#define LIBWEAVE_INCLUDE_WEAVE_WIFI_H_
+
+#include <string>
+
+#include <base/callback.h>
+#include <weave/error.h>
+
+namespace weave {
+
+class Wifi {
+ public:
+  // Implementation should attempt to connect to the given network with the
+  // given passphrase. Implementation should run either of callback.
+  // Callback should be posted.
+  virtual bool ConnectToService(const std::string& ssid,
+                                const std::string& passphrase,
+                                const base::Closure& success_callback,
+                                ErrorPtr* error) = 0;
+
+  // Starts WiFi access point for wifi setup.
+  virtual void EnableAccessPoint(const std::string& ssid) = 0;
+
+  // Stops WiFi access point.
+  virtual void DisableAccessPoint() = 0;
+
+ protected:
+  virtual ~Wifi() = default;
+};
+
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_WIFI_H_
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 1435aeb..111b87e 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -36,6 +36,7 @@
                           Network* network,
                           Mdns* mdns,
                           HttpServer* http_server,
+                          Wifi* wifi,
                           Bluetooth* bluetooth) {
   command_manager_ = std::make_shared<CommandManager>();
   command_manager_->Startup(config_store);
@@ -57,7 +58,8 @@
   device_info_->Start();
 
   if (!options.disable_privet) {
-    StartPrivet(options, task_runner, network, mdns, http_server, bluetooth);
+    StartPrivet(options, task_runner, network, mdns, http_server, wifi,
+                bluetooth);
   } else {
     CHECK(!http_server);
     CHECK(!mdns);
@@ -89,9 +91,10 @@
                                 Network* network,
                                 Mdns* mdns,
                                 HttpServer* http_server,
+                                Wifi* wifi,
                                 Bluetooth* bluetooth) {
   privet_.reset(new privet::Manager{});
-  privet_->Start(options, task_runner, network, mdns, http_server,
+  privet_->Start(options, task_runner, network, mdns, http_server, wifi,
                  device_info_.get(), command_manager_.get(),
                  state_manager_.get());
 
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 376f122..bc6f031 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -33,6 +33,7 @@
              Network* network,
              Mdns* mdns,
              HttpServer* http_server,
+             Wifi* wifi,
              Bluetooth* bluetooth) override;
 
   Commands* GetCommands() override;
@@ -48,6 +49,7 @@
                    Network* network,
                    Mdns* mdns,
                    HttpServer* http_server,
+                   Wifi* wifi,
                    Bluetooth* bluetooth);
 
   void OnWiFiBootstrapStateChanged(weave::WifiSetupState state);
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 2c581f7..4363d5a 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -40,6 +40,7 @@
                     Network* network,
                     Mdns* mdns,
                     HttpServer* http_server,
+                    Wifi* wifi,
                     DeviceRegistrationInfo* device,
                     CommandManager* command_manager,
                     StateManager* state_manager) {
@@ -55,11 +56,11 @@
   network->AddOnConnectionChangedCallback(
       base::Bind(&Manager::OnConnectivityChanged, base::Unretained(this)));
 
-  if (device->GetSettings().wifi_auto_setup_enabled) {
+  if (wifi && device->GetSettings().wifi_auto_setup_enabled) {
     VLOG(1) << "Enabling WiFi bootstrapping.";
     wifi_bootstrap_manager_.reset(new WifiBootstrapManager(
         device->GetSettings().last_configured_ssid, options.test_privet_ssid,
-        device->GetSettings().ble_setup_enabled, task_runner, network,
+        device->GetSettings().ble_setup_enabled, task_runner, network, wifi,
         cloud_.get()));
     wifi_bootstrap_manager_->Init();
   }
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h
index cc9ccc5..50f7416 100644
--- a/libweave/src/privet/privet_manager.h
+++ b/libweave/src/privet/privet_manager.h
@@ -52,6 +52,7 @@
              Network* network,
              Mdns* mdns,
              HttpServer* http_server,
+             Wifi* wifi,
              DeviceRegistrationInfo* device,
              CommandManager* command_manager,
              StateManager* state_manager);
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index dc5ef7f..b9766d9 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -9,6 +9,7 @@
 #include <weave/enum_to_string.h>
 #include <weave/network.h>
 #include <weave/task_runner.h>
+#include <weave/wifi.h>
 
 #include "libweave/src/bind_lambda.h"
 #include "libweave/src/privet/constants.h"
@@ -22,13 +23,18 @@
     bool ble_setup_enabled,
     TaskRunner* task_runner,
     Network* network,
+    Wifi* wifi,
     CloudDelegate* gcd)
     : task_runner_{task_runner},
       network_{network},
+      wifi_{wifi},
       ssid_generator_{gcd, this},
       last_configured_ssid_{last_configured_ssid},
       test_privet_ssid_{test_privet_ssid},
       ble_setup_enabled_{ble_setup_enabled} {
+  CHECK(network_);
+  CHECK(task_runner_);
+  CHECK(wifi_);
 }
 
 void WifiBootstrapManager::Init() {
@@ -74,13 +80,13 @@
   // TODO(vitalybuka): Add SSID probing.
   privet_ssid_ = GenerateSsid();
   CHECK(!privet_ssid_.empty());
-  network_->EnableAccessPoint(privet_ssid_);
+  wifi_->EnableAccessPoint(privet_ssid_);
   LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap start: not implemented.";
 }
 
 void WifiBootstrapManager::EndBootstrapping() {
   LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap stop: not implemented.";
-  network_->DisableAccessPoint();
+  wifi_->DisableAccessPoint();
   privet_ssid_.clear();
 }
 
@@ -93,10 +99,10 @@
       FROM_HERE, base::Bind(&WifiBootstrapManager::OnConnectTimeout,
                             tasks_weak_factory_.GetWeakPtr()),
       base::TimeDelta::FromMinutes(3));
-  network_->ConnectToService(ssid, passphrase,
-                             base::Bind(&WifiBootstrapManager::OnConnectSuccess,
-                                        tasks_weak_factory_.GetWeakPtr(), ssid),
-                             nullptr);
+  wifi_->ConnectToService(ssid, passphrase,
+                          base::Bind(&WifiBootstrapManager::OnConnectSuccess,
+                                     tasks_weak_factory_.GetWeakPtr(), ssid),
+                          nullptr);
 }
 
 void WifiBootstrapManager::EndConnecting() {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index 65436c2..340296c 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -24,6 +24,7 @@
 
 class Network;
 class TaskRunner;
+class Wifi;
 
 namespace privet {
 
@@ -41,6 +42,7 @@
                        bool wifi_setup_enabled,
                        TaskRunner* task_runner,
                        Network* shill_client,
+                       Wifi* wifi,
                        CloudDelegate* gcd);
   ~WifiBootstrapManager() override = default;
   virtual void Init();
@@ -96,6 +98,7 @@
   ConnectionState connection_state_{ConnectionState::kDisabled};
   TaskRunner* task_runner_{nullptr};
   Network* network_{nullptr};
+  Wifi* wifi_{nullptr};
   WifiSsidGenerator ssid_generator_;
   base::Time monitor_until_;
 
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index d6418c3..43a7282 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -13,6 +13,7 @@
 #include <weave/test/mock_mdns.h>
 #include <weave/test/mock_network.h>
 #include <weave/test/mock_task_runner.h>
+#include <weave/test/mock_wifi.h>
 #include <weave/test/unittest_utils.h>
 
 #include "libweave/src/bind_lambda.h"
@@ -282,7 +283,7 @@
   void InitDefaultExpectations() {
     InitConfigStore();
     InitNetwork();
-    EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+    EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
         .WillOnce(Return());
     InitHttpServer();
     InitMdns();
@@ -293,7 +294,7 @@
     options.xmpp_enabled = false;
 
     device_->Start(options, &config_store_, &task_runner_, &http_client_,
-                   &network_, &mdns_, &http_server_, &bluetooth_);
+                   &network_, &mdns_, &http_server_, &wifi_, &bluetooth_);
 
     cloud_ = device_->GetCloud();
     ASSERT_TRUE(cloud_);
@@ -327,6 +328,7 @@
   StrictMock<test::MockNetwork> network_;
   StrictMock<test::MockMdns> mdns_;
   StrictMock<test::MockHttpServer> http_server_;
+  StrictMock<test::MockWifi> wifi_;
   StrictMock<test::MockBluetooth> bluetooth_;
 
   std::vector<Network::OnConnectionChangedCallback> network_callbacks_;
@@ -348,7 +350,24 @@
 
   InitConfigStore();
   device_->Start(options, &config_store_, &task_runner_, &http_client_,
-                 &network_, nullptr, nullptr, nullptr);
+                 &network_, nullptr, nullptr, &wifi_, nullptr);
+}
+
+TEST_F(WeaveTest, StartNoWifi) {
+  InitConfigStore();
+  InitNetwork();
+  InitHttpServer();
+  InitMdns();
+  InitMdnsPublishing(false, "CB");
+
+  weave::Device::Options options;
+  device_->Start(options, &config_store_, &task_runner_, &http_client_,
+                 &network_, &mdns_, &http_server_, nullptr, &bluetooth_);
+
+  for (const auto& cb : http_server_changed_cb_)
+    cb.Run(http_server_);
+
+  task_runner_.Run();
 }
 
 class WeaveBasicTest : public WeaveTest {
@@ -420,7 +439,7 @@
   // Long disconnect.
   NotifyNetworkChanged(NetworkState::kOffline, {});
   auto offline_from = task_runner_.GetClock()->Now();
-  EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+  EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
       .WillOnce(InvokeWithoutArgs([this, offline_from]() {
         EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                   base::TimeDelta::FromMinutes(1));
@@ -442,7 +461,7 @@
   for (int i = 0; i < 5; ++i) {
     auto offline_from = task_runner_.GetClock()->Now();
     // Temporarily offline mode.
-    EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+    EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
         .WillOnce(InvokeWithoutArgs([this, &offline_from]() {
           EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                     base::TimeDelta::FromMinutes(1));
@@ -452,7 +471,7 @@
 
     // Try to reconnect again.
     offline_from = task_runner_.GetClock()->Now();
-    EXPECT_CALL(network_, DisableAccessPoint())
+    EXPECT_CALL(wifi_, DisableAccessPoint())
         .WillOnce(InvokeWithoutArgs([this, offline_from]() {
           EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                     base::TimeDelta::FromMinutes(5));
@@ -472,7 +491,7 @@
       .WillRepeatedly(Return(NetworkState::kOffline));
 
   auto offline_from = task_runner_.GetClock()->Now();
-  EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+  EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
       .WillOnce(InvokeWithoutArgs([this, &offline_from]() {
         EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                   base::TimeDelta::FromMinutes(1));
