diff --git a/drivers/qmimodem/network-registration.c b/drivers/qmimodem/network-registration.c
index 78957a677d2d..c0c9338d1c23 100644
--- a/drivers/qmimodem/network-registration.c
+++ b/drivers/qmimodem/network-registration.c
@@ -31,10 +31,6 @@ struct netreg_data {
 	int lac;
 	int cellid;
 	bool is_roaming;
-	uint16_t event_indication_id;
-	uint16_t signal_info_indication_id;
-	uint16_t system_info_indication_id;
-	uint16_t serving_system_indication_id;
 };
 
 enum roaming_status {
@@ -587,23 +583,16 @@ static void register_indications_cb(struct qmi_result *result,
 
 	ofono_netreg_register(netreg);
 
-	data->event_indication_id =
-		qmi_service_register(data->nas, QMI_NAS_EVENT_REPORT,
+	qmi_service_register(data->nas, QMI_NAS_EVENT_REPORT,
 					event_notify, netreg, NULL);
 
-	data->serving_system_indication_id =
-		qmi_service_register(data->nas,
-					QMI_NAS_SERVING_SYSTEM_INDICATION,
+	qmi_service_register(data->nas, QMI_NAS_SERVING_SYSTEM_INDICATION,
 					ss_info_notify, netreg, NULL);
 
-	data->system_info_indication_id =
-		qmi_service_register(data->nas,
-					QMI_NAS_SYSTEM_INFO_INDICATION,
+	qmi_service_register(data->nas, QMI_NAS_SYSTEM_INFO_INDICATION,
 					system_info_notify, netreg, NULL);
 
-	data->signal_info_indication_id =
-		qmi_service_register(data->nas,
-					QMI_NAS_SIGNAL_INFO_INDICATION,
+	qmi_service_register(data->nas, QMI_NAS_SIGNAL_INFO_INDICATION,
 					signal_info_notify, netreg, NULL);
 }
 
@@ -636,10 +625,10 @@ error:
 	ofono_netreg_remove(netreg);
 }
 
-static void create_nas_cb(struct qmi_service *service, void *user_data)
+static int qmi_netreg_probe(struct ofono_netreg *netreg,
+				unsigned int vendor, void *user_data)
 {
-	struct ofono_netreg *netreg = user_data;
-	struct netreg_data *data = ofono_netreg_get_data(netreg);
+	struct qmi_service *nas = user_data;
 	struct qmi_param *param;
 	static const uint8_t PARAM_REPORT_SIGNAL_STRENGTH = 0x10;
 	static const uint8_t PARAM_REPORT_RF_INFO = 0x11;
@@ -650,46 +639,28 @@ static void create_nas_cb(struct qmi_service *service, void *user_data)
 	} __attribute__((__packed__)) ss = { .report = 0x01,
 			.count = 5, .dbm[0] = -55, .dbm[1] = -65,
 			.dbm[2] = -75, .dbm[3] = -85, .dbm[4] = -95 };
+	struct netreg_data *data;
 
 	DBG("");
 
-	if (!service) {
-		ofono_error("Failed to request NAS service");
-		goto error;
-	}
-
-	data->nas = service;
-
 	param = qmi_param_new();
-
 	qmi_param_append(param, PARAM_REPORT_SIGNAL_STRENGTH, sizeof(ss), &ss);
 	qmi_param_append_uint8(param, PARAM_REPORT_RF_INFO, 0x01);
 
-	if (qmi_service_send(data->nas, QMI_NAS_SET_EVENT_REPORT, param,
-					set_event_report_cb, netreg, NULL) > 0)
-		return;
-
-	qmi_param_free(param);
-error:
-	ofono_netreg_remove(netreg);
-}
-
-static int qmi_netreg_probe(struct ofono_netreg *netreg,
-				unsigned int vendor, void *user_data)
-{
-	struct qmi_device *device = user_data;
-	struct netreg_data *data;
-
-	DBG("");
+	if (!qmi_service_send(nas, QMI_NAS_SET_EVENT_REPORT, param,
+					set_event_report_cb, netreg, NULL)) {
+		qmi_param_free(param);
+		qmi_service_free(nas);
+		return -EIO;
+	}
 
 	data = l_new(struct netreg_data, 1);
-
+	data->nas = nas;
 	data->operator.name[0] = '\0';
 	data->operator.mcc[0] = '\0';
 	data->operator.mnc[0] = '\0';
 	data->operator.status = -1;
 	data->operator.tech = -1;
-
 	data->current_rat = QMI_NAS_NETWORK_RAT_NO_CHANGE;
 	data->is_roaming = false;
 	data->lac = -1;
@@ -697,9 +668,6 @@ static int qmi_netreg_probe(struct ofono_netreg *netreg,
 
 	ofono_netreg_set_data(netreg, data);
 
-	qmi_service_create_shared(device, QMI_SERVICE_NAS,
-					create_nas_cb, netreg, NULL);
-
 	return 0;
 }
 
@@ -711,31 +679,7 @@ static void qmi_netreg_remove(struct ofono_netreg *netreg)
 
 	ofono_netreg_set_data(netreg, NULL);
 
-	if (data->event_indication_id) {
-		qmi_service_unregister(data->nas, data->event_indication_id);
-		data->event_indication_id = 0;
-	}
-
-	if (data->serving_system_indication_id) {
-		qmi_service_unregister(data->nas,
-					data->serving_system_indication_id);
-		data->serving_system_indication_id = 0;
-	}
-
-	if (data->system_info_indication_id) {
-		qmi_service_unregister(data->nas,
-					data->system_info_indication_id);
-		data->system_info_indication_id = 0;
-	}
-
-	if (data->signal_info_indication_id) {
-		qmi_service_unregister(data->nas,
-					data->signal_info_indication_id);
-		data->signal_info_indication_id = 0;
-	}
-
 	qmi_service_free(data->nas);
-
 	l_free(data);
 }
 
diff --git a/plugins/gobi.c b/plugins/gobi.c
index da27930c1e94..34aa363cf82e 100644
--- a/plugins/gobi.c
+++ b/plugins/gobi.c
@@ -829,7 +829,8 @@ static void gobi_post_online(struct ofono_modem *modem)
 	DBG("%p", modem);
 
 	if (data->features & GOBI_NAS) {
-		ofono_netreg_create(modem, 0, "qmimodem", data->device);
+		ofono_netreg_create(modem, 0, "qmimodem",
+						qmi_service_clone(data->nas));
 		ofono_netmon_create(modem, 0, "qmimodem", data->device);
 	}
 
