diff --git a/libweave/examples/ubuntu/network_manager.cc b/libweave/examples/ubuntu/network_manager.cc
index 4f94ef2..33da720 100644
--- a/libweave/examples/ubuntu/network_manager.cc
+++ b/libweave/examples/ubuntu/network_manager.cc
@@ -21,8 +21,6 @@
 
 namespace {
 
-using provider::NetworkState;
-
 int ForkCmd(const std::string& path, const std::vector<std::string>& args) {
   int pid = fork();
   if (pid != 0)
@@ -129,27 +127,27 @@
 }
 
 void NetworkImpl::UpdateNetworkState() {
-  network_state_ = NetworkState::kOffline;
+  network_state_ = Network::State::kOffline;
   if (force_bootstrapping_)
     return;
   if (std::system("ping talk.google.com -c 1") == 0)
-    network_state_ = NetworkState::kConnected;
+    network_state_ = State::kConnected;
   else if (std::system("nmcli dev"))
-    network_state_ = NetworkState::kFailure;
+    network_state_ = State::kFailure;
   else if (std::system("nmcli dev | grep connecting") == 0)
-    network_state_ = NetworkState::kConnecting;
+    network_state_ = State::kConnecting;
 
   task_runner_->PostDelayedTask(FROM_HERE,
                                 base::Bind(&NetworkImpl::UpdateNetworkState,
                                            weak_ptr_factory_.GetWeakPtr()),
                                 base::TimeDelta::FromSeconds(10));
 
-  bool online = GetConnectionState() == NetworkState::kConnected;
+  bool online = GetConnectionState() == State::kConnected;
   for (const auto& cb : callbacks_)
     cb.Run();
 }
 
-NetworkState NetworkImpl::GetConnectionState() const {
+provider::Network::State NetworkImpl::GetConnectionState() const {
   return network_state_;
 }
 
@@ -157,7 +155,7 @@
   if (hostapd_started_)
     return;
 
-  network_state_ = NetworkState::kOffline;
+  network_state_ = State::kOffline;
 
   // Release wlan0 interface.
   CHECK_EQ(0, std::system("nmcli nm wifi off"));
diff --git a/libweave/examples/ubuntu/network_manager.h b/libweave/examples/ubuntu/network_manager.h
index 4df2a07..b8e589d 100644
--- a/libweave/examples/ubuntu/network_manager.h
+++ b/libweave/examples/ubuntu/network_manager.h
@@ -32,7 +32,7 @@
   // Network implementation.
   void AddConnectionChangedCallback(
       const ConnectionChangedCallback& callback) override;
-  provider::NetworkState GetConnectionState() const override;
+  State GetConnectionState() const override;
   void OpenSslSocket(const std::string& host,
                      uint16_t port,
                      const OpenSslSocketSuccessCallback& success_callback,
@@ -61,7 +61,7 @@
   bool hostapd_started_{false};
   provider::TaskRunner* task_runner_{nullptr};
   std::vector<ConnectionChangedCallback> callbacks_;
-  provider::NetworkState network_state_{provider::NetworkState::kOffline};
+  provider::Network::State network_state_{provider::Network::State::kOffline};
 
   base::WeakPtrFactory<NetworkImpl> weak_ptr_factory_{this};
 };
diff --git a/libweave/include/weave/provider/network.h b/libweave/include/weave/provider/network.h
index bba60f0..8e22166 100644
--- a/libweave/include/weave/provider/network.h
+++ b/libweave/include/weave/provider/network.h
@@ -14,17 +14,17 @@
 namespace weave {
 namespace provider {
 
-enum class NetworkState {
-  kOffline = 0,
-  kFailure,
-  kConnecting,
-  kConnected,
-};
-
 // Interface with methods to detect network connectivity and opening network
 // connections.
 class Network {
  public:
+  enum class State {
+    kOffline = 0,
+    kFailure,
+    kConnecting,
+    kConnected,
+  };
+
   // Callback type for AddConnectionChangedCallback.
   using ConnectionChangedCallback = base::Closure;
 
@@ -39,7 +39,7 @@
       const ConnectionChangedCallback& callback) = 0;
 
   // Returns current Internet connectivity state
-  virtual NetworkState GetConnectionState() const = 0;
+  virtual State GetConnectionState() const = 0;
 
   // Opens bidirectional sockets and returns attached stream.
   virtual void OpenSslSocket(
diff --git a/libweave/include/weave/provider/test/mock_network.h b/libweave/include/weave/provider/test/mock_network.h
index 3da43be..e38dde2 100644
--- a/libweave/include/weave/provider/test/mock_network.h
+++ b/libweave/include/weave/provider/test/mock_network.h
@@ -19,7 +19,7 @@
  public:
   MOCK_METHOD1(AddConnectionChangedCallback,
                void(const ConnectionChangedCallback&));
-  MOCK_CONST_METHOD0(GetConnectionState, NetworkState());
+  MOCK_CONST_METHOD0(GetConnectionState, State());
   MOCK_METHOD4(OpenSslSocket,
                void(const std::string&,
                     uint16_t,
diff --git a/libweave/src/privet/privet_types.cc b/libweave/src/privet/privet_types.cc
index aebf63b..dd26b93 100644
--- a/libweave/src/privet/privet_types.cc
+++ b/libweave/src/privet/privet_types.cc
@@ -20,7 +20,7 @@
 using privet::CryptoType;
 using privet::SetupState;
 using privet::WifiType;
-using provider::NetworkState;
+using provider::Network;
 
 const EnumToStringMap<PairingType>::Map kPairingTypeMap[] = {
     {PairingType::kPinCode, "pinCode"},
@@ -68,11 +68,11 @@
     {WifiSetupState::kConnecting, "connecting"},
 };
 
-const EnumToStringMap<provider::NetworkState>::Map kNetworkStateMap[] = {
-    {NetworkState::kOffline, "offline"},
-    {NetworkState::kFailure, "failure"},
-    {NetworkState::kConnecting, "connecting"},
-    {NetworkState::kConnected, "connected"},
+const EnumToStringMap<Network::State>::Map kNetworkStateMap[] = {
+    {Network::State::kOffline, "offline"},
+    {Network::State::kFailure, "failure"},
+    {Network::State::kConnecting, "connecting"},
+    {Network::State::kConnected, "connected"},
 };
 
 }  // namespace
@@ -106,7 +106,7 @@
     : EnumToStringMap(kWifiSetupStateMap) {}
 
 template <>
-LIBWEAVE_EXPORT EnumToStringMap<NetworkState>::EnumToStringMap()
+LIBWEAVE_EXPORT EnumToStringMap<Network::State>::EnumToStringMap()
     : EnumToStringMap(kNetworkStateMap) {}
 
 }  // namespace weave
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 4756a66..144fad6 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -17,7 +17,7 @@
 namespace weave {
 namespace privet {
 
-using provider::NetworkState;
+using provider::Network;
 
 WifiBootstrapManager::WifiBootstrapManager(
     const std::string& last_configured_ssid,
@@ -59,7 +59,7 @@
 }
 
 void WifiBootstrapManager::StartBootstrapping() {
-  if (network_->GetConnectionState() == NetworkState::kConnected) {
+  if (network_->GetConnectionState() == Network::State::kConnected) {
     // If one of the devices we monitor for connectivity is online, we need not
     // start an AP.  For most devices, this is a situation which happens in
     // testing when we have an ethernet connection.  If you need to always
@@ -124,7 +124,7 @@
   // connectivity state.  See OnConnectivityChange().
   UpdateState(State::kMonitoring);
 
-  if (network_->GetConnectionState() == NetworkState::kConnected) {
+  if (network_->GetConnectionState() == Network::State::kConnected) {
     monitor_until_ = {};
   } else {
     if (monitor_until_.is_null()) {
@@ -240,7 +240,7 @@
 
   if (state_ == State::kMonitoring ||  // Reset monitoring timeout.
       (state_ != State::kDisabled &&
-       network_->GetConnectionState() == NetworkState::kConnected)) {
+       network_->GetConnectionState() == Network::State::kConnected)) {
     StartMonitoring();
   }
 }
@@ -255,12 +255,13 @@
   connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
   if (last_configured_ssid_.empty())
     return;
-  NetworkState service_state{network_->GetConnectionState()};
+
+  Network::State service_state{network_->GetConnectionState()};
   switch (service_state) {
-    case NetworkState::kOffline:
+    case Network::State::kOffline:
       connection_state_ = ConnectionState{ConnectionState::kOffline};
       return;
-    case NetworkState::kFailure: {
+    case Network::State::kFailure: {
       // TODO(wiley) Pull error information from somewhere.
       ErrorPtr error;
       Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState,
@@ -268,10 +269,10 @@
       connection_state_ = ConnectionState{std::move(error)};
       return;
     }
-    case NetworkState::kConnecting:
+    case Network::State::kConnecting:
       connection_state_ = ConnectionState{ConnectionState::kConnecting};
       return;
-    case NetworkState::kConnected:
+    case Network::State::kConnected:
       connection_state_ = ConnectionState{ConnectionState::kOnline};
       return;
   }
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 15891d6..e787c84 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -37,7 +37,7 @@
 using test::CreateDictionaryValue;
 using test::ValueToString;
 using provider::test::MockHttpClientResponse;
-using provider::NetworkState;
+using provider::Network;
 
 const char kCategory[] = "powerd";
 
@@ -230,7 +230,7 @@
               network_callbacks_.push_back(cb);
             }));
     EXPECT_CALL(network_, GetConnectionState())
-        .WillRepeatedly(Return(NetworkState::kOffline));
+        .WillRepeatedly(Return(Network::State::kOffline));
   }
 
   void InitDnsSd() {
@@ -310,7 +310,7 @@
     task_runner_.Run();
   }
 
-  void NotifyNetworkChanged(provider::NetworkState state,
+  void NotifyNetworkChanged(provider::Network::State state,
                             base::TimeDelta delay) {
     EXPECT_CALL(network_, GetConnectionState()).WillRepeatedly(Return(state));
     for (const auto& cb : network_callbacks_) {
@@ -423,7 +423,7 @@
     InitDnsSd();
 
     EXPECT_CALL(network_, GetConnectionState())
-        .WillRepeatedly(Return(provider::NetworkState::kConnected));
+        .WillRepeatedly(Return(provider::Network::State::kConnected));
   }
 };
 
@@ -431,13 +431,13 @@
   StartDevice();
 
   // Short disconnect.
-  NotifyNetworkChanged(provider::NetworkState::kOffline, {});
-  NotifyNetworkChanged(provider::NetworkState::kConnected,
+  NotifyNetworkChanged(provider::Network::State::kOffline, {});
+  NotifyNetworkChanged(provider::Network::State::kConnected,
                        base::TimeDelta::FromSeconds(10));
   task_runner_.Run();
 
   // Long disconnect.
-  NotifyNetworkChanged(NetworkState::kOffline, {});
+  NotifyNetworkChanged(Network::State::kOffline, {});
   auto offline_from = task_runner_.GetClock()->Now();
   EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
       .WillOnce(InvokeWithoutArgs([this, offline_from]() {
@@ -456,7 +456,7 @@
   StartDevice();
 
   // Long disconnect.
-  NotifyNetworkChanged(NetworkState::kOffline, {});
+  NotifyNetworkChanged(Network::State::kOffline, {});
 
   for (int i = 0; i < 5; ++i) {
     auto offline_from = task_runner_.GetClock()->Now();
@@ -480,7 +480,7 @@
     task_runner_.Run();
   }
 
-  NotifyNetworkChanged(NetworkState::kConnected, {});
+  NotifyNetworkChanged(Network::State::kConnected, {});
   task_runner_.Run();
 }
 
@@ -488,7 +488,7 @@
   EXPECT_CALL(config_store_, LoadSettings())
       .WillRepeatedly(Return(R"({"last_configured_ssid": "TEST_ssid"})"));
   EXPECT_CALL(network_, GetConnectionState())
-      .WillRepeatedly(Return(NetworkState::kOffline));
+      .WillRepeatedly(Return(Network::State::kOffline));
 
   auto offline_from = task_runner_.GetClock()->Now();
   EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
