diff --git a/dongle_apn.c b/dongle_apn.c
index e32f46f5fff23b3aa0ca96ac48484c86a04ffc84..dbd94fc95b08a0045342faad2dcb7ee85e8be6ed 100644
--- a/dongle_apn.c
+++ b/dongle_apn.c
@@ -32,24 +32,6 @@ int list_apn_profiles(struct ubus_context *ctx, struct ubus_object *obj,
 	struct json_object *apn_profiles = get_apn_profiles_json();
 
 	write_to_ubus(apn_profiles, ctx, req);
-	/*struct blob_buf bb;
-
-	memset(&bb, 0, sizeof(struct blob_buf));
-	blob_buf_init(&bb, 0);
-	json_object_object_foreach(apn_profiles, key, val) {
-		char *apn_profile = json_object_get_string(val);
-
-		if (strlen(apn_profile) > 0) {
-			char *apn_name = strtok(apn_profile, "($)");
-
-			blobmsg_add_string(&bb, key, apn_name);
-		} else
-			break;
-	}
-	ubus_send_reply(ctx, req, bb.head);
-
-	json_object_put(apn_profiles);
-	blob_buf_free(&bb);*/
 	return 0;
 }
 
diff --git a/dongle_network.c b/dongle_network.c
index 98f526350cafd81283084b4761f9bf3fdaf05b14..ba265dd5dc165d6d1016b87af23e3183bb025426 100644
--- a/dongle_network.c
+++ b/dongle_network.c
@@ -17,12 +17,10 @@
 
 struct ubus_context *ctx;
 
-int signal_strength(struct ubus_context *ctx, struct ubus_object *obj,
+int get_signal_strength(struct ubus_context *ctx, struct ubus_object *obj,
 			struct ubus_request_data *req, const char *method,
 			struct blob_attr *msg)
 {
-	struct blob_buf bb;
-
 	char *response = get_request("rssi");
 	struct json_object *parsed_response = json_tokener_parse(response);
 
@@ -32,9 +30,32 @@ int signal_strength(struct ubus_context *ctx, struct ubus_object *obj,
 
 	return 0;
 }
+int connect_network(struct ubus_context *ctx, struct ubus_object *obj,
+			struct ubus_request_data *req, const char *method,
+			struct blob_attr *msg)
+{
+	char *response = _connect();
+	struct json_object *parsed_response = json_tokener_parse(response);
+
+	write_to_ubus(parsed_response, ctx, req);
+	return 0;
+}
+
+int disconnect(struct ubus_context *ctx, struct ubus_object *obj,
+			struct ubus_request_data *req, const char *method,
+			struct blob_attr *msg)
+{
+	char *response = _disconnect();
+	struct json_object *parsed_response = json_tokener_parse(response);
+
+	write_to_ubus(parsed_response, ctx, req);
+	return 0;
+}
 
 struct ubus_method dongle_object_methods[] = {
-	UBUS_METHOD_NOARG("signal_strength", signal_strength),
+	UBUS_METHOD_NOARG("get_signal_strength", get_signal_strength),
+	UBUS_METHOD_NOARG("connect", connect_network),
+	UBUS_METHOD_NOARG("disconnect", disconnect),
 };
 
 struct ubus_object_type dongle_object_type = UBUS_OBJECT_TYPE("dongle", dongle_object_methods);
diff --git a/libmobile.c b/libmobile.c
index be66ad30d920b4b1d614d5cc0b5d434e18406138..3e835f144a361cafc9f94de737a36b17e2701955 100644
--- a/libmobile.c
+++ b/libmobile.c
@@ -101,11 +101,26 @@ int get_apn_profiles_len(void)
 	return -1;
 }
 
+char *_connect(void)
+{
+	char query[1024] = {0};
+
+	strncpy(query, "http://192.168.0.1/goform//goform_set_cmd_process?isTest=false&goformId=CONNECT_NETWORK", 1023);
+	return post_request(query);
+}
+
+char *_disconnect(void)
+{
+	char query[1024] = {0};
+	// removed notcallback, why have it?
+	strncpy(query, "http://192.168.0.1/goform//goform_set_cmd_process?isTest=false&goformId=DISCONNECT_NETWORK", 1023);
+	return post_request(query);
+}
+
 char *_delete_apn(int idx)
 {
 	char query[1024] = {0};
 
-	query[0] = '\0';
 	strncpy(query, "isTest=false&apn_action=delete&apn_mode=manual&index=", 1023);
 	sprintf(query + strlen(query), "%d", idx);
 	strncat(query + strlen(query), "&goformId=APN_PROC_EX", 1023);
diff --git a/libmobile.h b/libmobile.h
index 2bc6e63201439ff15d4e8fa6032264b5b2cefbac..6758ca0d6fbc0299edf8becc3e201d6ea1a822b8 100644
--- a/libmobile.h
+++ b/libmobile.h
@@ -12,6 +12,8 @@ size_t write_func(void *buffer, size_t size, size_t nmemb, void *userp);
 struct json_object *get_apn_profiles_json(void);
 struct blob_buf json_to_blob(struct json_object *response, struct blob_buf bb);
 int get_apn_profiles_len(void);
+char *_connect(void);
+char *_disconnect(void);
 char *_delete_apn(int idx);
 int get_apn_profile_idx(struct json_object *apn_profiles, char *name);
 char *get_current_wan_apn(void);