diff --git a/dongle_infrastructure.c b/dongle_infrastructure.c
index 97f389deb3932e1de62addddfcd6f1dea420236e..c6d88d7285ddb60a2c34bb9a79114686bf3e6d7c 100644
--- a/dongle_infrastructure.c
+++ b/dongle_infrastructure.c
@@ -126,7 +126,12 @@ int set_pin(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -201,7 +206,12 @@ int disable_pin(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -269,7 +279,12 @@ int enable_pin(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -337,7 +352,12 @@ int verify_pin(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -394,6 +414,7 @@ int remaining_tries(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -402,7 +423,12 @@ int remaining_tries(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -425,6 +451,7 @@ int get_pin_status(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -433,7 +460,12 @@ int get_pin_status(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -467,7 +499,12 @@ int unlock_sim(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -523,6 +560,7 @@ int list_apn_profiles(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -531,7 +569,12 @@ int list_apn_profiles(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -556,6 +599,7 @@ int delete_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
 	char *name; //what is max available name length in dongle?
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -564,7 +608,12 @@ int delete_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -607,6 +656,7 @@ int set_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
 	char *name;
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -615,7 +665,12 @@ int set_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -827,7 +882,12 @@ int create_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -854,6 +914,7 @@ int show_current_apn(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -862,7 +923,12 @@ int show_current_apn(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -885,6 +951,7 @@ int get_signal_strength(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -893,7 +960,12 @@ int get_signal_strength(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -916,6 +988,7 @@ int connect_network(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -924,7 +997,12 @@ int connect_network(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -947,6 +1025,7 @@ int disconnect_network(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -955,7 +1034,12 @@ int disconnect_network(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -978,6 +1062,7 @@ int modem_state(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -986,7 +1071,12 @@ int modem_state(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -1009,6 +1099,7 @@ int enable_roaming(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -1017,7 +1108,12 @@ int enable_roaming(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -1040,6 +1136,7 @@ int disable_roaming(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -1048,7 +1145,12 @@ int disable_roaming(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -1071,6 +1173,7 @@ int roam_status(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -1079,7 +1182,12 @@ int roam_status(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -1102,6 +1210,7 @@ int software_version(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -1110,7 +1219,12 @@ int software_version(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -1127,12 +1241,13 @@ fail:
 	return UBUS_STATUS_OK;
 }
 
-int sim_state(struct ubus_context *ctx, struct ubus_object *obj,
+int ubus_sim_state(struct ubus_context *ctx, struct ubus_object *obj,
 					struct ubus_request_data *req, const char *method,
 					struct blob_attr *msg)
 {
 	struct json_object *response;
 	struct dongle *usb;
+	int rv;
 
 	usb = get_dongle_by_obj_name(obj->name);
 	if (!usb) {
@@ -1141,7 +1256,12 @@ int sim_state(struct ubus_context *ctx, struct ubus_object *obj,
 		goto fail;
 	}
 
-	if (!sim_connected(usb)) {
+	rv = sim_state(usb);
+	if (rv == 1) {
+		ubus_print_key_val(ctx, req, "Failure", "Please activate SIM");
+		debug_print("SIM card not activated!\n");
+		goto fail;
+	} else if (rv == 2) {
 		ubus_print_key_val(ctx, req, "Failure", "No SIM card detected");
 		debug_print("No SIM card detected\n");
 		goto fail;
@@ -1180,7 +1300,7 @@ struct ubus_method obj_methods[] = {
 	UBUS_METHOD_NOARG("roam_status", roam_status),
 	UBUS_METHOD_NOARG("modem_state", modem_state),
 	UBUS_METHOD_NOARG("software_version", software_version),
-	UBUS_METHOD_NOARG("sim_state", sim_state),
+	UBUS_METHOD_NOARG("sim_state", ubus_sim_state),
 };
 
 struct ubus_object_type obj_type = UBUS_OBJECT_TYPE("dongle", obj_methods);