diff --git a/dongle_apn.c b/dongle_apn.c
index 2a698673a1e9144375b7f4f80e83fee6eba0b0df..ec69236a4a63f77c87cb61404d81e88b6eb84a05 100644
--- a/dongle_apn.c
+++ b/dongle_apn.c
@@ -1,201 +1,5 @@
 #include "dongle_apn.h"
 
-enum {
-	APN_NAME,
-	__APN_MAX
-};
-
-enum {
-	PROFILE_NAME,
-	WAN_APN,
-	PDP_TYPE,
-	__CREATE_MAX
-};
-
-const struct blobmsg_policy apn_policy[__APN_MAX] = {
-	[APN_NAME] = {.name = "profile_name", .type = BLOBMSG_TYPE_STRING}
-};
-
-const struct blobmsg_policy create_apn_policy[__CREATE_MAX] = {
-	[PROFILE_NAME] = {.name = "profile_name", .type = BLOBMSG_TYPE_STRING},
-	[WAN_APN] = {.name = "wan_apn", .type = BLOBMSG_TYPE_STRING},
-	[PDP_TYPE] = {.name = "pdp_type", .type = BLOBMSG_TYPE_STRING}
-};
-
-int list_apn_profiles(struct ubus_context *ctx, struct ubus_object *obj,
-			   struct ubus_request_data *req, const char *method,
-			   struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	response = mobile_get_apn_profiles(ip_addr);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int delete_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
-			   struct ubus_request_data *req, const char *method,
-			   struct blob_attr *msg)
-{
-	struct blob_attr *tb[__APN_MAX];
-	char *name, *ip_addr; //what is max available name length in dongle?
-	struct json_object *response;
-
-	blobmsg_parse(apn_policy, __APN_MAX, tb, blob_data(msg), blob_len(msg));
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	if (!tb[APN_NAME])
-		goto fail_argument;
-
-	name = (char *)blobmsg_data(tb[APN_NAME]);
-	if (strlen(name) == 0) {
-		debug_print("Empty is not a name!\n");
-		goto fail_argument;
-	} else if (strlen(name) > 1023) {
-		debug_print("name too long!\n");
-		goto fail_argument;
-	}
-
-	response = mobile_delete_apn(ip_addr, name);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_argument:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int set_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
-					   struct ubus_request_data *req, const char *method,
-					   struct blob_attr *msg)
-{
-	struct blob_attr *tb[__APN_MAX];
-	char *name, *ip_addr;
-	struct json_object *response;
-
-	blobmsg_parse(apn_policy, __APN_MAX, tb, blob_data(msg), blob_len(msg));
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	if (!tb[APN_NAME])
-		goto fail_argument;
-
-	name = (char *)blobmsg_data(tb[APN_NAME]);
-	if (strlen(name) == 0) {
-		debug_print("Empty is not a name!\n");
-		goto fail_argument;
-	} else if (strlen(name) > 1023) {
-		debug_print("name too long!\n");
-		goto fail_argument;
-	}
-
-	response = mobile_set_apn_profile(ip_addr, name);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_argument:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int create_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
-				struct ubus_request_data *req, const char *method,
-				struct blob_attr *msg)
-{
-	struct blob_attr *tb[__CREATE_MAX];
-	char *profile_name, *wan_apn, *pdp_type, *ip_addr; //what is max available name length in dongle?
-	struct json_object *response;
-
-	blobmsg_parse(create_apn_policy, __CREATE_MAX, tb, blob_data(msg), blob_len(msg));
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	if (!tb[PROFILE_NAME] || !tb[WAN_APN] || !tb[PDP_TYPE]) {
-		debug_print("Need to provide all arguments!\n");
-		goto fail_argument;
-	}
-
-	profile_name = (char *)blobmsg_data(tb[PROFILE_NAME]);
-	wan_apn = (char *)blobmsg_data(tb[WAN_APN]);
-	pdp_type = (char *)blobmsg_data(tb[PDP_TYPE]);
-	if (strlen(profile_name) > 1023 || strlen(wan_apn) > 1023 || strlen(pdp_type) > 1023) {
-		debug_print("input may be max 1023 characters!\n");
-		goto fail_argument;
-	} else if (strlen(profile_name) <= 0 || strlen(wan_apn) <= 0 || strlen(pdp_type) <= 0) {
-		debug_print("Empty string is not a valid input!\n");
-		goto fail_argument;
-	}
-
-	response = mobile_create_apn_profile(ip_addr, profile_name, wan_apn, pdp_type);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_argument:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int show_current_apn(struct ubus_context *ctx, struct ubus_object *obj,
-				 struct ubus_request_data *req, const char *method,
-				 struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	response = mobile_get_current_apn(ip_addr);
-
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
 struct ubus_method apn_object_methods[] = {
 	UBUS_METHOD_NOARG("list", list_apn_profiles),
 	UBUS_METHOD("create", create_apn_profile, create_apn_policy),
diff --git a/dongle_network.c b/dongle_network.c
index 638aac4cd7896a096f7bba60be17c71c92409d26..a102d1d03ad29e234645ac59627c7fc47c225581 100644
--- a/dongle_network.c
+++ b/dongle_network.c
@@ -1,172 +1,5 @@
 #include "dongle_network.h"
 
-char *dongle_ip;
-
-int get_signal_strength(struct ubus_context *ctx, struct ubus_object *obj,
-			struct ubus_request_data *req, const char *method,
-			struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	response = mobile_get_rssi(ip_addr);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int connect_network(struct ubus_context *ctx, struct ubus_object *obj,
-			struct ubus_request_data *req, const char *method,
-			struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	response = mobile_connect_network(ip_addr);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int disconnect(struct ubus_context *ctx, struct ubus_object *obj,
-			struct ubus_request_data *req, const char *method,
-			struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	response = mobile_disconnect_network(ip_addr);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int modem_state(struct ubus_context *ctx, struct ubus_object *obj,
-			   struct ubus_request_data *req, const char *method,
-			   struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	response = mobile_get_modem_state(ip_addr);
-
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int enable_roaming(struct ubus_context *ctx, struct ubus_object *obj,
-			   struct ubus_request_data *req, const char *method,
-			   struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	response = mobile_enable_roaming(ip_addr);
-
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int disable_roaming(struct ubus_context *ctx, struct ubus_object *obj,
-				   struct ubus_request_data *req, const char *method,
-				   struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	response = mobile_disable_roaming(ip_addr);
-
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int roam_status(struct ubus_context *ctx, struct ubus_object *obj,
-					struct ubus_request_data *req, const char *method,
-					struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	response = mobile_get_roam_status(ip_addr);
-
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
 struct ubus_method network_object_methods[] = {
 	UBUS_METHOD_NOARG("signal_strength", get_signal_strength),
 	UBUS_METHOD_NOARG("connect", connect_network),
diff --git a/dongle_pin.c b/dongle_pin.c
index c241b97aa364dfad8dde3bcd366c9553181ff332..8e66d804aeb3dceb5e03ef632e3ed9fbd6014d2f 100644
--- a/dongle_pin.c
+++ b/dongle_pin.c
@@ -1,447 +1,5 @@
 #include "dongle_pin.h"
 
-static int isdigits(const char *pin);
-static int validate_pin_format(char *pin);
-
-enum {
-	NEW_PIN,
-	CURRENT_PIN,
-	__SET_PIN_MAX
-};
-
-enum {
-	PIN,
-	__PIN_MAX
-};
-
-enum {
-	UNLOCK_PIN,
-	PUK,
-	__UNLOCK_MAX
-};
-
-const struct blobmsg_policy set_pin_policy[__SET_PIN_MAX] = {
-	[NEW_PIN] = {.name = "new_pin", .type = BLOBMSG_TYPE_STRING},
-	[CURRENT_PIN] = {.name = "current_pin", .type = BLOBMSG_TYPE_STRING},
-};
-
-const struct blobmsg_policy pin_policy[__PIN_MAX] = {
-	[PIN] = {.name = "pin", .type = BLOBMSG_TYPE_STRING},
-};
-
-const struct blobmsg_policy unlock_policy[__UNLOCK_MAX] = {
-	[UNLOCK_PIN] = {.name = "pin", .type = BLOBMSG_TYPE_STRING},
-	[PUK] = {.name = "puk", .type = BLOBMSG_TYPE_STRING},
-};
-
-static int isdigits(const char *pin)
-{
-	while (*pin) {
-		if (isdigit(*pin++) == 0)
-			return false;
-	}
-	return true;
-}
-
-static int validate_puk_format(char *puk)
-{
-	if (!isdigits(puk)) {
-		debug_print("Please enter digits only!\n");
-		goto fail;
-	} else if (strlen(puk) == 8) {
-		debug_print("Please enter 8 digits!\n");
-		goto fail;
-	}
-
-	return 0;
-fail:
-	return -1;
-}
-
-static int validate_pin_format(char *pin)
-{
-	if (!isdigits(pin)) {
-		debug_print("Please enter digits only!\n");
-		goto fail;
-	} else if (strlen(pin) > 8 || strlen(pin) < 4) {
-		debug_print("Please enter between 4 to 8 digits!\n");
-		goto fail;
-	} else if (atoi(pin) == 0) {
-		debug_print("0000 is not a valid pin! Lowest available is 0001\n");
-		goto fail;
-	}
-
-	return 0;
-fail:
-	return -1;
-}
-
-int set_pin(struct ubus_context *ctx, struct ubus_object *obj,
-				 struct ubus_request_data *req, const char *method,
-				 struct blob_attr *msg)
-{
-	struct blob_attr *tb[__SET_PIN_MAX];
-	char *new_pin, *current_pin, *ip_addr;
-	int rv;
-	struct json_object *response, *rv_json;
-
-	blobmsg_parse(set_pin_policy, __SET_PIN_MAX, tb, blob_data(msg), blob_len(msg));
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	if (!tb[NEW_PIN] && !tb[CURRENT_PIN]) {
-		debug_print("Please enter both a new pin and old pin!\n");
-		goto fail_input;
-	}
-	new_pin = (char *)blobmsg_data(tb[NEW_PIN]);
-	current_pin = (char *)blobmsg_data(tb[CURRENT_PIN]);
-
-	rv = validate_pin_format(new_pin);
-	if (rv > 0) {
-		debug_print("invalid pin format\n");
-		goto fail_input;
-	}
-
-	rv = validate_pin_format(current_pin);
-	if (rv > 0) {
-		debug_print("invalid pin format\n");
-		goto fail_input;
-	}
-
-	response = mobile_get_pin_status(ip_addr);
-	if (!response) {
-		debug_print("error getting pin_status\n");
-		goto fail_data;
-	}
-
-	json_object_object_get_ex(response, "pin_status", &rv_json);
-	if (!rv_json) {
-		debug_print("no pin_status available\n");
-		goto fail_result;
-	}
-
-	/* Enable PIN if it is disabled */
-	if (!json_object_get_int(rv_json)) {
-		json_object_put(response);
-
-		response = mobile_enable_pin(ip_addr, current_pin);
-		if (!response) {
-			debug_print("error enabling pin!\n");
-			goto fail_unknown;
-		}
-
-		json_object_object_get_ex(response, "result", &rv_json);
-		if (!rv_json) {
-			debug_print("error getting result!\n");
-			goto fail_result;
-		}
-
-		if (strncmp(json_object_get_string(rv_json), "failure", strlen("failure")) == 0) {
-			debug_print("Incorrect pin!\n");
-			goto incorrect_pin;
-		}
-	}
-
-	json_object_put(response);
-	response = mobile_set_pin(ip_addr, current_pin, new_pin);
-	if (!response) {
-		debug_print("error setting pin!\n");
-		goto fail_data;
-	}
-
-	json_object_object_get_ex(response, "result", &rv_json);
-	if (!rv_json) {
-		debug_print("no result available from %s!", __func__);
-		goto fail_result;
-	}
-
-incorrect_pin:
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_input:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_data:
-	free(ip_addr);
-	return UBUS_STATUS_NO_DATA;
-fail_result:
-	free(ip_addr);
-	json_object_put(response);
-	return UBUS_STATUS_UNKNOWN_ERROR;
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int disable_pin(struct ubus_context *ctx, struct ubus_object *obj,
-			struct ubus_request_data *req, const char *method,
-			struct blob_attr *msg)
-{
-	struct blob_attr *tb[__PIN_MAX];
-	char *pin, *ip_addr;
-	int rv;
-	struct json_object *response, *rv_json;
-
-	blobmsg_parse(pin_policy, __PIN_MAX, tb, blob_data(msg), blob_len(msg));
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	if (!tb[PIN]) {
-		debug_print("Please enter a pin!\n");
-		goto fail_input;
-	}
-	pin = (char *)blobmsg_data(tb[PIN]);
-	rv = validate_pin_format(pin);
-	if (rv < 0) {
-		debug_print("invalid pin format!\n");
-		goto fail_input;
-	}
-
-	response = mobile_get_pin_status(ip_addr);
-	if (!response) {
-		debug_print("no response from get_pin_status!\n");
-		goto fail_data;
-	}
-
-	json_object_object_get_ex(response, "pin_status", &rv_json);
-	if (!rv_json) {
-		debug_print("no pin_status available in response!\n");
-		goto fail_result;
-	}
-
-	if (!json_object_get_int(rv_json)) {
-		debug_print("already disabled!\n");
-		goto success; //kind of...
-	}
-
-	json_object_put(response);
-	response = mobile_disable_pin(ip_addr, pin);
-	if (!response) {
-		debug_print("error disabling pin!\n");
-		goto fail_data;
-	}
-
-	json_object_object_get_ex(response, "result", &rv_json);
-	if (!rv_json) {
-		debug_print("no result available in response!\n");
-		goto fail_result;
-	}
-
-	if (strncmp(json_object_get_string(rv_json), "failure", strlen("failure")) == 0)
-		debug_print("Incorrect pin!\n");
-
-success:
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_input:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_data:
-	free(ip_addr);
-	return UBUS_STATUS_NO_DATA;
-fail_result:
-	free(ip_addr);
-	json_object_put(response);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int enable_pin(struct ubus_context *ctx, struct ubus_object *obj,
-			struct ubus_request_data *req, const char *method,
-			struct blob_attr *msg)
-{
-	struct blob_attr *tb[__PIN_MAX];
-	char *pin, *ip_addr;
-	int rv;
-	struct json_object *response, *rv_json;
-
-	blobmsg_parse(pin_policy, __PIN_MAX, tb, blob_data(msg), blob_len(msg));
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	if (!tb[PIN]) {
-		debug_print("Please enter both a new pin and old pin!\n");
-		goto fail_input;
-	}
-
-	pin = (char *)blobmsg_data(tb[PIN]);
-	rv = validate_pin_format(pin);
-	if (rv < 0) {
-		debug_print("invalid pin format!\n");
-		goto fail_input;
-	}
-
-	response = mobile_get_pin_status(ip_addr);
-	if (!response) {
-		debug_print("no response from get_pin_status!\n");
-		goto fail_data;
-	}
-
-	json_object_object_get_ex(response, "pin_status", &rv_json);
-	if (!rv_json) {
-		debug_print("no pin_status available in response!\n");
-		goto fail_result;
-	}
-	if (!json_object_get_int(rv_json)) {
-		debug_print("already enabled!\n");
-		goto success;
-	}
-
-	json_object_put(response);
-	response = mobile_enable_pin(ip_addr, pin);
-	if (!response) {
-		debug_print("no response from get_pin_status!\n");
-		goto fail_data;
-	}
-
-	json_object_object_get_ex(response, "result", &rv_json);
-	if (!rv_json) {
-		debug_print("no result available in response!\n");
-		goto fail_result;
-	}
-
-	if (strncmp(json_object_get_string(rv_json), "failure", strlen("failure")) == 0)
-		debug_print("Incorrect pin!\n");
-
-success:
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_input:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_data:
-	free(ip_addr);
-	return UBUS_STATUS_NO_DATA;
-fail_result:
-	free(ip_addr);
-	json_object_put(response);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int verify_pin(struct ubus_context *ctx, struct ubus_object *obj,
-			   struct ubus_request_data *req, const char *method,
-			   struct blob_attr *msg)
-{
-	struct blob_attr *tb[__PIN_MAX];
-	char *pin, *ip_addr;
-	int rv;
-	struct json_object *response;
-
-	blobmsg_parse(pin_policy, __PIN_MAX, tb, blob_data(msg), blob_len(msg));
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	if (!tb[PIN]) {
-		debug_print("Please enter a pin\n!");
-		goto fail_input;
-	}
-
-	pin = (char *)blobmsg_data(tb[PIN]);
-	rv = validate_pin_format(pin);
-	if (rv < 0) {
-		debug_print("invalid pin format!\n");
-		goto fail_input;
-	}
-
-	response = mobile_set_pin(ip_addr, pin, pin);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_input:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int remaining_tries(struct ubus_context *ctx, struct ubus_object *obj,
-			   struct ubus_request_data *req, const char *method,
-			   struct blob_attr *msg)
-{
-	char *ip_addr;
-	struct json_object *response;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-
-	response = mobile_get_remaining_tries(ip_addr);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-int unlock_sim(struct ubus_context *ctx, struct ubus_object *obj,
-			   struct ubus_request_data *req, const char *method,
-			   struct blob_attr *msg)
-{
-	struct blob_attr *tb[__UNLOCK_MAX];
-	char *pin, *puk, *ip_addr;
-	struct json_object *response;//, *rv_json;
-	int rv;
-
-	ip_addr = strdup("192.168.0.1");
-	if (!ip_addr)
-		goto fail_strdup;
-	/*response = mobile_get_remaining_tries(ip_addr);
-	if (!response)
-		goto fail_unknown;
-*/
-	/*json_object_object_get_ex(response, "pinnumber", &rv_json);
-	if (json_object_get_int(rv_json) > 0)
-		goto fail_unknown;
-*/
-	if (!tb[PUK] || !tb[UNLOCK_PIN]) {
-		debug_print("Please enter both a pin and a puk code!\n");
-		goto fail_input;
-	}
-	puk = (char *)blobmsg_data(tb[PUK]);
-	pin = (char *)blobmsg_data(tb[UNLOCK_PIN]);
-
-	rv = validate_pin_format(pin);
-	if (rv < 0)
-		goto fail_input;
-
-	rv = validate_puk_format(puk);
-	if (rv < 0)
-		goto fail_input;
-
-	response = mobile_unlock_sim(ip_addr, puk, pin);
-	if (!response)
-		goto fail_unknown;
-
-	free(ip_addr);
-	return print_to_ubus(response, ctx, req);
-fail_input:
-	free(ip_addr);
-	return UBUS_STATUS_INVALID_ARGUMENT;
-fail_unknown:
-	free(ip_addr);
-fail_strdup:
-	return UBUS_STATUS_UNKNOWN_ERROR;
-}
-
-
 struct ubus_method pin_object_methods[] = {
 	UBUS_METHOD("set_pin", set_pin, set_pin_policy),
 	UBUS_METHOD("disable_pin", disable_pin, pin_policy),