diff --git a/libweave/examples/ubuntu/netlink_network.cc b/libweave/examples/ubuntu/netlink_network.cc
index a76655a..d121fca 100644
--- a/libweave/examples/ubuntu/netlink_network.cc
+++ b/libweave/examples/ubuntu/netlink_network.cc
@@ -60,13 +60,13 @@
   auto refill_result = nl_cache_refill(nl_sock_.get(), nl_cache_.get());
   if (refill_result < 0) {
     LOG(ERROR) << "failed to refresh netlink cache: " << refill_result;
-    return Network::State::kFailure;
+    return Network::State::kError;
   }
   std::unique_ptr<rtnl_link, Deleter> nl_link{
       rtnl_link_get(nl_cache_.get(), if_index)};
   if (!nl_link) {
     LOG(ERROR) << "failed to get interface 0";
-    return Network::State::kFailure;
+    return Network::State::kError;
   }
 
   int state = rtnl_link_get_operstate(nl_link.get());
@@ -77,13 +77,13 @@
     case IF_OPER_DORMANT:
       return Network::State::kConnecting;
     case IF_OPER_UP:
-      return Network::State::kConnected;
+      return Network::State::kOnline;
     case IF_OPER_TESTING:
     case IF_OPER_NOTPRESENT:
     case IF_OPER_UNKNOWN:
     default:
       LOG(ERROR) << "unknown interface state: " << state;
-      return Network::State::kFailure;
+      return Network::State::kError;
   }
 }
 
diff --git a/libweave/examples/ubuntu/network_manager.cc b/libweave/examples/ubuntu/network_manager.cc
index 0fdae2d..6d92949 100644
--- a/libweave/examples/ubuntu/network_manager.cc
+++ b/libweave/examples/ubuntu/network_manager.cc
@@ -132,9 +132,9 @@
   if (force_bootstrapping_)
     return;
   if (std::system("ping talk.google.com -c 1") == 0)
-    network_state_ = State::kConnected;
+    network_state_ = State::kOnline;
   else if (std::system("nmcli dev"))
-    network_state_ = State::kFailure;
+    network_state_ = State::kError;
   else if (std::system("nmcli dev | grep connecting") == 0)
     network_state_ = State::kConnecting;
 
diff --git a/libweave/include/weave/provider/network.h b/libweave/include/weave/provider/network.h
index 8e22166..cb3730e 100644
--- a/libweave/include/weave/provider/network.h
+++ b/libweave/include/weave/provider/network.h
@@ -20,9 +20,9 @@
  public:
   enum class State {
     kOffline = 0,
-    kFailure,
+    kError,
     kConnecting,
-    kConnected,
+    kOnline,
   };
 
   // Callback type for AddConnectionChangedCallback.
diff --git a/libweave/src/privet/privet_types.cc b/libweave/src/privet/privet_types.cc
index 8d380f0..769d3a3 100644
--- a/libweave/src/privet/privet_types.cc
+++ b/libweave/src/privet/privet_types.cc
@@ -58,9 +58,9 @@
 
 const EnumToStringMap<Network::State>::Map kNetworkStateMap[] = {
     {Network::State::kOffline, "offline"},
-    {Network::State::kFailure, "failure"},
+    {Network::State::kError, "error"},
     {Network::State::kConnecting, "connecting"},
-    {Network::State::kConnected, "connected"},
+    {Network::State::kOnline, "online"},
 };
 
 }  // namespace
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 7e439e3..e67e016 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -59,7 +59,7 @@
 }
 
 void WifiBootstrapManager::StartBootstrapping() {
-  if (network_->GetConnectionState() == Network::State::kConnected) {
+  if (network_->GetConnectionState() == Network::State::kOnline) {
     // 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
@@ -122,7 +122,7 @@
   // connectivity state.  See OnConnectivityChange().
   UpdateState(State::kMonitoring);
 
-  if (network_->GetConnectionState() == Network::State::kConnected) {
+  if (network_->GetConnectionState() == Network::State::kOnline) {
     monitor_until_ = {};
   } else {
     if (monitor_until_.is_null()) {
@@ -225,7 +225,7 @@
 
   if (state_ == State::kMonitoring ||  // Reset monitoring timeout.
       (state_ != State::kDisabled &&
-       network_->GetConnectionState() == Network::State::kConnected)) {
+       network_->GetConnectionState() == Network::State::kOnline)) {
     StartMonitoring();
   }
 }
@@ -246,7 +246,7 @@
     case Network::State::kOffline:
       connection_state_ = ConnectionState{ConnectionState::kOffline};
       return;
-    case Network::State::kFailure: {
+    case Network::State::kError: {
       // TODO(wiley) Pull error information from somewhere.
       ErrorPtr error;
       Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState,
@@ -257,7 +257,7 @@
     case Network::State::kConnecting:
       connection_state_ = ConnectionState{ConnectionState::kConnecting};
       return;
-    case Network::State::kConnected:
+    case Network::State::kOnline:
       connection_state_ = ConnectionState{ConnectionState::kOnline};
       return;
   }
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 594103e..a44101a 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -349,7 +349,7 @@
     InitDnsSd();
 
     EXPECT_CALL(network_, GetConnectionState())
-        .WillRepeatedly(Return(provider::Network::State::kConnected));
+        .WillRepeatedly(Return(provider::Network::State::kOnline));
   }
 };
 
@@ -358,7 +358,7 @@
 
   // Short disconnect.
   NotifyNetworkChanged(provider::Network::State::kOffline, {});
-  NotifyNetworkChanged(provider::Network::State::kConnected,
+  NotifyNetworkChanged(provider::Network::State::kOnline,
                        base::TimeDelta::FromSeconds(10));
   task_runner_.Run();
 
@@ -406,7 +406,7 @@
     task_runner_.Run();
   }
 
-  NotifyNetworkChanged(Network::State::kConnected, {});
+  NotifyNetworkChanged(Network::State::kOnline, {});
   task_runner_.Run();
 }
 
