diff --git a/libweave/examples/ubuntu/network_manager.cc b/libweave/examples/ubuntu/network_manager.cc
index f86f12b..c14dac5 100644
--- a/libweave/examples/ubuntu/network_manager.cc
+++ b/libweave/examples/ubuntu/network_manager.cc
@@ -50,9 +50,9 @@
   StopAccessPoint();
 }
 
-void NetworkImpl::AddOnConnectionChangedCallback(
-    const OnConnectionChangedCallback& listener) {
-  callbacks_.push_back(listener);
+void NetworkImpl::AddConnectionChangedCallback(
+    const ConnectionChangedCallback& callback) {
+  callbacks_.push_back(callback);
 }
 
 void NetworkImpl::TryToConnect(
@@ -206,8 +206,8 @@
 void NetworkImpl::OpenSslSocket(
     const std::string& host,
     uint16_t port,
-    const base::Callback<void(std::unique_ptr<Stream>)>& success_callback,
-    const base::Callback<void(const Error*)>& error_callback) {
+    const OpenSslSocketSuccessCallback& success_callback,
+    const ErrorCallback& error_callback) {
   // Connect to SSL port instead of upgrading to TLS.
   std::unique_ptr<SSLStream> tls_stream{new SSLStream{task_runner_}};
 
diff --git a/libweave/examples/ubuntu/network_manager.h b/libweave/examples/ubuntu/network_manager.h
index f56e391..10b413a 100644
--- a/libweave/examples/ubuntu/network_manager.h
+++ b/libweave/examples/ubuntu/network_manager.h
@@ -10,7 +10,7 @@
 
 #include <base/memory/weak_ptr.h>
 #include <base/time/time.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
 #include <weave/wifi_provider.h>
 
 namespace weave {
@@ -21,22 +21,21 @@
 
 // Basic weave::Network implementation.
 // Production version of SSL socket needs secure server certificate check.
-class NetworkImpl : public Network, public WifiProvider {
+class NetworkImpl : public NetworkProvider, public WifiProvider {
  public:
   explicit NetworkImpl(TaskRunner* task_runner, bool force_bootstrapping);
   ~NetworkImpl();
 
-  // Network implementation
-  void AddOnConnectionChangedCallback(
-      const OnConnectionChangedCallback& listener) override;
+  // NetworkProvider implementation.
+  void AddConnectionChangedCallback(
+      const ConnectionChangedCallback& callback) override;
   NetworkState GetConnectionState() const override;
-  void OpenSslSocket(
-      const std::string& host,
-      uint16_t port,
-      const base::Callback<void(std::unique_ptr<Stream>)>& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override;
+  void OpenSslSocket(const std::string& host,
+                     uint16_t port,
+                     const OpenSslSocketSuccessCallback& success_callback,
+                     const ErrorCallback& error_callback) override;
 
-  // Wifi implementation
+  // WifiProvider implementation.
   void Connect(const std::string& ssid,
                const std::string& passphrase,
                const SuccessCallback& success_callback,
@@ -58,7 +57,7 @@
   bool force_bootstrapping_{false};
   bool hostapd_started_{false};
   TaskRunner* task_runner_{nullptr};
-  std::vector<OnConnectionChangedCallback> callbacks_;
+  std::vector<ConnectionChangedCallback> callbacks_;
   NetworkState network_state_{NetworkState::kOffline};
 
   base::WeakPtrFactory<NetworkImpl> weak_ptr_factory_{this};
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 0d01910..bf49609 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -17,7 +17,7 @@
 #include <weave/http_client.h>
 #include <weave/http_server.h>
 #include <weave/mdns.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
 #include <weave/privet.h>
 #include <weave/state.h>
 #include <weave/task_runner.h>
@@ -41,7 +41,7 @@
                      ConfigStore* config_store,
                      TaskRunner* task_runner,
                      HttpClient* http_client,
-                     Network* network,
+                     NetworkProvider* network,
                      Mdns* mdns,
                      HttpServer* http_server,
                      WifiProvider* wifi,
diff --git a/libweave/include/weave/network.h b/libweave/include/weave/network.h
deleted file mode 100644
index 1d4e07f..0000000
--- a/libweave/include/weave/network.h
+++ /dev/null
@@ -1,49 +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_NETWORK_H_
-#define LIBWEAVE_INCLUDE_WEAVE_NETWORK_H_
-
-#include <string>
-
-#include <base/callback.h>
-#include <weave/error.h>
-#include <weave/stream.h>
-
-namespace weave {
-
-enum class NetworkState {
-  kOffline = 0,
-  kFailure,
-  kConnecting,
-  kConnected,
-};
-
-class Network {
- public:
-  // A callback that interested parties can register to be notified of
-  // connectivity changes. Changes may include but not limited: interface
-  // up or down, new IP is assigned, cable is disconnected.
-  using OnConnectionChangedCallback = base::Callback<void()>;
-
-  virtual void AddOnConnectionChangedCallback(
-      const OnConnectionChangedCallback& listener) = 0;
-
-  // Returns current Internet connectivity state
-  virtual NetworkState GetConnectionState() const = 0;
-
-  // Opens bidirectional sockets and returns attached stream.
-  virtual void OpenSslSocket(
-      const std::string& host,
-      uint16_t port,
-      const base::Callback<void(std::unique_ptr<Stream>)>& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) = 0;
-
- protected:
-  virtual ~Network() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_NETWORK_H_
diff --git a/libweave/include/weave/network_provider.h b/libweave/include/weave/network_provider.h
new file mode 100644
index 0000000..ac1dcc8
--- /dev/null
+++ b/libweave/include/weave/network_provider.h
@@ -0,0 +1,56 @@
+// 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_NETWORK_PROVIDER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_NETWORK_PROVIDER_H_
+
+#include <string>
+
+#include <base/callback.h>
+#include <weave/error.h>
+#include <weave/stream.h>
+
+namespace weave {
+
+enum class NetworkState {
+  kOffline = 0,
+  kFailure,
+  kConnecting,
+  kConnected,
+};
+
+// Interface with methods to detect network connectivity and opening network
+// connections.
+class NetworkProvider {
+ public:
+  // Callback type for AddConnectionChangedCallback.
+  using ConnectionChangedCallback = base::Closure;
+
+  // Callback type for OpenSslSocket.
+  using OpenSslSocketSuccessCallback =
+      base::Callback<void(std::unique_ptr<Stream> stream)>;
+
+  // Subscribes to notification about changes in network connectivity. Changes
+  // may include but not limited: interface up or down, new IP was assigned,
+  // cable is disconnected.
+  virtual void AddConnectionChangedCallback(
+      const ConnectionChangedCallback& callback) = 0;
+
+  // Returns current Internet connectivity state
+  virtual NetworkState GetConnectionState() const = 0;
+
+  // Opens bidirectional sockets and returns attached stream.
+  virtual void OpenSslSocket(
+      const std::string& host,
+      uint16_t port,
+      const OpenSslSocketSuccessCallback& success_callback,
+      const ErrorCallback& error_callback) = 0;
+
+ protected:
+  virtual ~NetworkProvider() = default;
+};
+
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_NETWORK_PROVIDER_H_
diff --git a/libweave/include/weave/test/mock_network.h b/libweave/include/weave/test/mock_network.h
deleted file mode 100644
index e2d0074..0000000
--- a/libweave/include/weave/test/mock_network.h
+++ /dev/null
@@ -1,35 +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_NETWORK_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_NETWORK_H_
-
-#include <weave/network.h>
-
-#include <string>
-
-#include <gmock/gmock.h>
-
-namespace weave {
-namespace test {
-
-class MockNetwork : public Network {
- public:
-  MockNetwork() {}
-  ~MockNetwork() override = default;
-
-  MOCK_METHOD1(AddOnConnectionChangedCallback,
-               void(const OnConnectionChangedCallback&));
-  MOCK_CONST_METHOD0(GetConnectionState, NetworkState());
-  MOCK_METHOD4(OpenSslSocket,
-               void(const std::string&,
-                    uint16_t,
-                    const base::Callback<void(std::unique_ptr<Stream>)>&,
-                    const base::Callback<void(const Error*)>&));
-};
-
-}  // namespace test
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_NETWORK_H_
diff --git a/libweave/include/weave/test/mock_network_provider.h b/libweave/include/weave/test/mock_network_provider.h
new file mode 100644
index 0000000..c519f74
--- /dev/null
+++ b/libweave/include/weave/test/mock_network_provider.h
@@ -0,0 +1,32 @@
+// 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_NETWORK_PROVIDER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_NETWORK_PROVIDER_H_
+
+#include <weave/network_provider.h>
+
+#include <string>
+
+#include <gmock/gmock.h>
+
+namespace weave {
+namespace test {
+
+class MockNetworkProvider : public NetworkProvider {
+ public:
+  MOCK_METHOD1(AddConnectionChangedCallback,
+               void(const ConnectionChangedCallback&));
+  MOCK_CONST_METHOD0(GetConnectionState, NetworkState());
+  MOCK_METHOD4(OpenSslSocket,
+               void(const std::string&,
+                    uint16_t,
+                    const OpenSslSocketSuccessCallback&,
+                    const ErrorCallback&));
+};
+
+}  // namespace test
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_NETWORK_PROVIDER_H_
diff --git a/libweave/include/weave/test/mock_wifi_provider.h b/libweave/include/weave/test/mock_wifi_provider.h
index 33d4cc4..1bea0ed 100644
--- a/libweave/include/weave/test/mock_wifi_provider.h
+++ b/libweave/include/weave/test/mock_wifi_provider.h
@@ -5,7 +5,7 @@
 #ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
 #define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
 
-#include <weave/network.h>
+#include <weave/network_provider.h>
 
 #include <string>
 
@@ -16,9 +16,6 @@
 
 class MockWifiProvider : public WifiProvider {
  public:
-  MockWifiProvider() {}
-  ~MockWifiProvider() override = default;
-
   MOCK_METHOD4(Connect,
                void(const std::string&,
                     const std::string&,
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 15c5e49..50bfcbe 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -33,7 +33,7 @@
                           ConfigStore* config_store,
                           TaskRunner* task_runner,
                           HttpClient* http_client,
-                          Network* network,
+                          NetworkProvider* network,
                           Mdns* mdns,
                           HttpServer* http_server,
                           WifiProvider* wifi,
@@ -88,7 +88,7 @@
 
 void DeviceManager::StartPrivet(const Options& options,
                                 TaskRunner* task_runner,
-                                Network* network,
+                                NetworkProvider* network,
                                 Mdns* mdns,
                                 HttpServer* http_server,
                                 WifiProvider* wifi,
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index de0cfa5..00f2b5c 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -30,7 +30,7 @@
              ConfigStore* config_store,
              TaskRunner* task_runner,
              HttpClient* http_client,
-             Network* network,
+             NetworkProvider* network,
              Mdns* mdns,
              HttpServer* http_server,
              WifiProvider* wifi,
@@ -46,7 +46,7 @@
  private:
   void StartPrivet(const Options& options,
                    TaskRunner* task_runner,
-                   Network* network,
+                   NetworkProvider* network,
                    Mdns* mdns,
                    HttpServer* http_server,
                    WifiProvider* wifi,
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index bb1dffb..91f522a 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -16,7 +16,7 @@
 #include <base/strings/string_number_conversions.h>
 #include <base/values.h>
 #include <weave/http_client.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
 #include <weave/task_runner.h>
 
 #include "libweave/src/bind_lambda.h"
@@ -217,7 +217,7 @@
     TaskRunner* task_runner,
     HttpClient* http_client,
     bool notifications_enabled,
-    Network* network)
+    NetworkProvider* 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 3b2cdb7..8db6a88 100644
--- a/libweave/src/device_registration_info.h
+++ b/libweave/src/device_registration_info.h
@@ -39,7 +39,7 @@
 
 namespace weave {
 
-class Network;
+class NetworkProvider;
 class StateManager;
 class TaskRunner;
 
@@ -62,7 +62,7 @@
                          TaskRunner* task_runner,
                          HttpClient* http_client,
                          bool notifications_enabled,
-                         weave::Network* network);
+                         NetworkProvider* network);
 
   ~DeviceRegistrationInfo() override;
 
@@ -337,7 +337,7 @@
   NotificationChannel* current_notification_channel_{nullptr};
   bool notification_channel_starting_{false};
 
-  weave::Network* network_{nullptr};
+  NetworkProvider* 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 124c7b6..4734549 100644
--- a/libweave/src/notification/xmpp_channel.cc
+++ b/libweave/src/notification/xmpp_channel.cc
@@ -7,7 +7,7 @@
 #include <string>
 
 #include <base/bind.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
 #include <weave/task_runner.h>
 
 #include "libweave/src/backoff_entry.h"
@@ -92,7 +92,7 @@
 XmppChannel::XmppChannel(const std::string& account,
                          const std::string& access_token,
                          TaskRunner* task_runner,
-                         Network* network)
+                         NetworkProvider* network)
     : account_{account},
       access_token_{access_token},
       network_{network},
@@ -101,7 +101,7 @@
       iq_stanza_handler_{new IqStanzaHandler{this, task_runner}} {
   read_socket_data_.resize(4096);
   if (network) {
-    network->AddOnConnectionChangedCallback(base::Bind(
+    network->AddConnectionChangedCallback(base::Bind(
         &XmppChannel::OnConnectivityChanged, weak_ptr_factory_.GetWeakPtr()));
   }
 }
diff --git a/libweave/src/notification/xmpp_channel.h b/libweave/src/notification/xmpp_channel.h
index d1664f6..48ffd64 100644
--- a/libweave/src/notification/xmpp_channel.h
+++ b/libweave/src/notification/xmpp_channel.h
@@ -22,7 +22,7 @@
 
 namespace weave {
 
-class Network;
+class NetworkProvider;
 class TaskRunner;
 
 // Simple interface to abstract XmppChannel's SendMessage() method.
@@ -44,7 +44,7 @@
   XmppChannel(const std::string& account,
               const std::string& access_token,
               TaskRunner* task_runner,
-              Network* network);
+              NetworkProvider* network);
   ~XmppChannel() override = default;
 
   // Overrides from NotificationChannel.
@@ -131,7 +131,7 @@
   // OAuth access token for the account. Expires fairly frequently.
   std::string access_token_;
 
-  Network* network_{nullptr};
+  NetworkProvider* network_{nullptr};
   std::unique_ptr<Stream> stream_;
 
   // Read buffer for incoming message packets.
diff --git a/libweave/src/notification/xmpp_channel_unittest.cc b/libweave/src/notification/xmpp_channel_unittest.cc
index 4d8ab76..da555e0 100644
--- a/libweave/src/notification/xmpp_channel_unittest.cc
+++ b/libweave/src/notification/xmpp_channel_unittest.cc
@@ -8,7 +8,7 @@
 #include <queue>
 
 #include <gtest/gtest.h>
-#include <weave/test/mock_network.h>
+#include <weave/test/mock_network_provider.h>
 #include <weave/test/mock_task_runner.h>
 
 #include "libweave/src/bind_lambda.h"
@@ -133,7 +133,8 @@
 
 class FakeXmppChannel : public XmppChannel {
  public:
-  explicit FakeXmppChannel(TaskRunner* task_runner, weave::Network* network)
+  explicit FakeXmppChannel(TaskRunner* task_runner,
+                           weave::NetworkProvider* network)
       : XmppChannel{kAccountName, kAccessToken, task_runner, network},
         stream_{new FakeStream{task_runner_}},
         fake_stream_{stream_.get()} {}
@@ -161,10 +162,10 @@
   FakeStream* fake_stream_{nullptr};
 };
 
-class MockNetwork : public weave::test::MockNetwork {
+class MockNetworkProvider : public weave::test::MockNetworkProvider {
  public:
-  MockNetwork() {
-    EXPECT_CALL(*this, AddOnConnectionChangedCallback(_))
+  MockNetworkProvider() {
+    EXPECT_CALL(*this, AddConnectionChangedCallback(_))
         .WillRepeatedly(Return());
   }
 };
@@ -196,7 +197,7 @@
   }
 
   StrictMock<test::MockTaskRunner> task_runner_;
-  StrictMock<MockNetwork> network_;
+  StrictMock<MockNetworkProvider> network_;
   FakeXmppChannel xmpp_client_{&task_runner_, &network_};
 };
 
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 1bc7caf..cbf3bd3 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.h>
+#include <weave/network_provider.h>
 
 #include "libweave/src/device_registration_info.h"
 #include "libweave/src/http_constants.h"
@@ -35,7 +35,7 @@
 
 void Manager::Start(const Device::Options& options,
                     TaskRunner* task_runner,
-                    Network* network,
+                    NetworkProvider* network,
                     Mdns* mdns,
                     HttpServer* http_server,
                     WifiProvider* wifi,
@@ -51,7 +51,7 @@
   security_.reset(new SecurityManager(device->GetSettings().pairing_modes,
                                       device->GetSettings().embedded_code,
                                       disable_security_, task_runner));
-  network->AddOnConnectionChangedCallback(
+  network->AddConnectionChangedCallback(
       base::Bind(&Manager::OnConnectivityChanged, base::Unretained(this)));
 
   if (wifi && device->GetSettings().wifi_auto_setup_enabled) {
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h
index a452a6b..107a280 100644
--- a/libweave/src/privet/privet_manager.h
+++ b/libweave/src/privet/privet_manager.h
@@ -30,7 +30,7 @@
 class CommandManager;
 class DeviceRegistrationInfo;
 class Mdns;
-class Network;
+class NetworkProvider;
 class StateManager;
 
 namespace privet {
@@ -49,7 +49,7 @@
 
   void Start(const weave::Device::Options& options,
              TaskRunner* task_runner,
-             Network* network,
+             NetworkProvider* network,
              Mdns* mdns,
              HttpServer* http_server,
              WifiProvider* wifi,
diff --git a/libweave/src/privet/privet_types.cc b/libweave/src/privet/privet_types.cc
index 5d1222d..9c32bad 100644
--- a/libweave/src/privet/privet_types.cc
+++ b/libweave/src/privet/privet_types.cc
@@ -8,7 +8,7 @@
 
 #include <weave/enum_to_string.h>
 #include <weave/export.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
 #include <weave/privet.h>
 
 namespace weave {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index bd84e14..dff6c9f 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -7,7 +7,7 @@
 #include <base/logging.h>
 #include <base/memory/weak_ptr.h>
 #include <weave/enum_to_string.h>
-#include <weave/network.h>
+#include <weave/network_provider.h>
 #include <weave/task_runner.h>
 #include <weave/wifi_provider.h>
 
@@ -22,7 +22,7 @@
     const std::string& test_privet_ssid,
     bool ble_setup_enabled,
     TaskRunner* task_runner,
-    Network* network,
+    NetworkProvider* network,
     WifiProvider* wifi,
     CloudDelegate* gcd)
     : task_runner_{task_runner},
@@ -39,7 +39,7 @@
 
 void WifiBootstrapManager::Init() {
   UpdateConnectionState();
-  network_->AddOnConnectionChangedCallback(
+  network_->AddConnectionChangedCallback(
       base::Bind(&WifiBootstrapManager::OnConnectivityChange,
                  lifetime_weak_factory_.GetWeakPtr()));
   if (last_configured_ssid_.empty()) {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index f0cb20e..fbf6360 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -22,7 +22,7 @@
 
 namespace weave {
 
-class Network;
+class NetworkProvider;
 class TaskRunner;
 class WifiProvider;
 
@@ -41,7 +41,7 @@
                        const std::string& test_privet_ssid,
                        bool wifi_setup_enabled,
                        TaskRunner* task_runner,
-                       Network* shill_client,
+                       NetworkProvider* shill_client,
                        WifiProvider* wifi,
                        CloudDelegate* gcd);
   ~WifiBootstrapManager() override = default;
@@ -97,7 +97,7 @@
   SetupState setup_state_{SetupState::kNone};
   ConnectionState connection_state_{ConnectionState::kDisabled};
   TaskRunner* task_runner_{nullptr};
-  Network* network_{nullptr};
+  NetworkProvider* network_{nullptr};
   WifiProvider* wifi_{nullptr};
   WifiSsidGenerator ssid_generator_;
   base::Time monitor_until_;
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index d495f32..9bd7559 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -11,7 +11,7 @@
 #include <weave/test/mock_http_client.h>
 #include <weave/test/mock_http_server.h>
 #include <weave/test/mock_mdns.h>
-#include <weave/test/mock_network.h>
+#include <weave/test/mock_network_provider.h>
 #include <weave/test/mock_task_runner.h>
 #include <weave/test/mock_wifi_provider.h>
 #include <weave/test/unittest_utils.h>
@@ -222,9 +222,9 @@
   }
 
   void InitNetwork() {
-    EXPECT_CALL(network_, AddOnConnectionChangedCallback(_))
-        .WillRepeatedly(
-            Invoke([this](const Network::OnConnectionChangedCallback& cb) {
+    EXPECT_CALL(network_, AddConnectionChangedCallback(_))
+        .WillRepeatedly(Invoke(
+            [this](const NetworkProvider::ConnectionChangedCallback& cb) {
               network_callbacks_.push_back(cb);
             }));
     EXPECT_CALL(network_, GetConnectionState())
@@ -325,13 +325,13 @@
   StrictMock<test::MockConfigStore> config_store_;
   StrictMock<test::MockTaskRunner> task_runner_;
   StrictMock<test::MockHttpClient> http_client_;
-  StrictMock<test::MockNetwork> network_;
+  StrictMock<test::MockNetworkProvider> network_;
   StrictMock<test::MockMdns> mdns_;
   StrictMock<test::MockHttpServer> http_server_;
   StrictMock<test::MockWifiProvider> wifi_;
   StrictMock<test::MockBluetooth> bluetooth_;
 
-  std::vector<Network::OnConnectionChangedCallback> network_callbacks_;
+  std::vector<NetworkProvider::ConnectionChangedCallback> network_callbacks_;
 
   weave::Cloud* cloud_{nullptr};
 
