diff --git a/cellular_capability_gsm.cc b/cellular_capability_gsm.cc
index c33cf14..ac8c1a9 100644
--- a/cellular_capability_gsm.cc
+++ b/cellular_capability_gsm.cc
@@ -135,9 +135,13 @@
     }
   }
   if (cellular()->mdn().empty()) {
-    // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
-    cellular()->set_mdn(card_proxy_->GetMSISDN());
-    VLOG(2) << "MSISDN/MDN: " << cellular()->mdn();
+    try {
+      // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
+      cellular()->set_mdn(card_proxy_->GetMSISDN());
+      VLOG(2) << "MSISDN/MDN: " << cellular()->mdn();
+    } catch (const DBus::Error e) {
+      LOG(WARNING) << "Unable to obtain MSISDN/MDN: " << e.what();
+    }
   }
   SetHomeProvider();
 }
@@ -300,6 +304,11 @@
           network_id));
 }
 
+bool CellularCapabilityGSM::IsRegistered() {
+  return (registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME ||
+          registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING);
+}
+
 void CellularCapabilityGSM::RegisterOnNetworkTask(const string &network_id) {
   LOG(INFO) << __func__ << "(" << network_id << ")";
   // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
@@ -463,32 +472,29 @@
 void CellularCapabilityGSM::SetAccessTechnology(uint32 access_technology) {
   access_technology_ = access_technology;
   if (cellular()->service().get()) {
-    cellular()->service()->set_network_tech(GetNetworkTechnologyString());
+    cellular()->service()->SetNetworkTechnology(GetNetworkTechnologyString());
   }
 }
 
 string CellularCapabilityGSM::GetNetworkTechnologyString() const {
-  if (registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_HOME ||
-      registration_state_ == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING) {
-    switch (access_technology_) {
-      case MM_MODEM_GSM_ACCESS_TECH_GSM:
-      case MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT:
-        return flimflam::kNetworkTechnologyGsm;
-      case MM_MODEM_GSM_ACCESS_TECH_GPRS:
-        return flimflam::kNetworkTechnologyGprs;
-      case MM_MODEM_GSM_ACCESS_TECH_EDGE:
-        return flimflam::kNetworkTechnologyEdge;
-      case MM_MODEM_GSM_ACCESS_TECH_UMTS:
-        return flimflam::kNetworkTechnologyUmts;
-      case MM_MODEM_GSM_ACCESS_TECH_HSDPA:
-      case MM_MODEM_GSM_ACCESS_TECH_HSUPA:
-      case MM_MODEM_GSM_ACCESS_TECH_HSPA:
-        return flimflam::kNetworkTechnologyHspa;
-      case MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS:
-        return flimflam::kNetworkTechnologyHspaPlus;
-      default:
-        NOTREACHED();
-    }
+  switch (access_technology_) {
+    case MM_MODEM_GSM_ACCESS_TECH_GSM:
+    case MM_MODEM_GSM_ACCESS_TECH_GSM_COMPACT:
+      return flimflam::kNetworkTechnologyGsm;
+    case MM_MODEM_GSM_ACCESS_TECH_GPRS:
+      return flimflam::kNetworkTechnologyGprs;
+    case MM_MODEM_GSM_ACCESS_TECH_EDGE:
+      return flimflam::kNetworkTechnologyEdge;
+    case MM_MODEM_GSM_ACCESS_TECH_UMTS:
+      return flimflam::kNetworkTechnologyUmts;
+    case MM_MODEM_GSM_ACCESS_TECH_HSDPA:
+    case MM_MODEM_GSM_ACCESS_TECH_HSUPA:
+    case MM_MODEM_GSM_ACCESS_TECH_HSPA:
+      return flimflam::kNetworkTechnologyHspa;
+    case MM_MODEM_GSM_ACCESS_TECH_HSPA_PLUS:
+      return flimflam::kNetworkTechnologyHspaPlus;
+    default:
+      break;
   }
   return "";
 }
