diff --git a/libmobile.c b/libmobile.c
index 252e338c58914ad6e8df06955f57fe80e8b9a812..c6af4b000b884abba3f0e269c15a27bf717c4c52 100644
--- a/libmobile.c
+++ b/libmobile.c
@@ -1,9 +1,6 @@
 /**
  * TODO:
- * 	1. Add parsing for displaying APN profiles available to make sense of them
- * 	2. Add more input options when creating APN profile
- * 	3. Seperate "set default" and "apply" APN profiles (what is the difference anyway?)
- *	4. Change way to seperate profile configurations? (i.e. currently 0: .., 1: .., n: ...)
+ * 	1. Add more input options when creating APN profile
  */
 #include "libmobile.h"
 
@@ -94,17 +91,19 @@ static int apn_profile_idx(struct json_object *apn_profiles, char *name)
 	int idx = 0;
 
 	json_object_object_foreach(apn_profiles, key, val) {
-		char *apn_profile = json_object_get_string(val);
+		struct json_object *profile_name_json;
 
-		if (!apn_profile || strlen(apn_profile) <= 0)
-			break;
-		char *apn_name = strtok(apn_profile, "($)");
+		json_object_object_get_ex(val, "profile_name", &profile_name_json);
 
-		if (strncmp(apn_name, name, 1024) == 0)
+		if (!profile_name_json)
+			goto fail;
+		char *profile_name = json_object_get_string(profile_name_json);
+
+		if (strncmp(profile_name, name, 1024) == 0)
 			return idx;
 		idx++;
 	}
-
+fail:
 	return -1;
 }
 
@@ -134,6 +133,7 @@ static int get_apn_profiles_len(void)
 			len++;
 		else
 			goto success;
+
 	}
 
 success:
@@ -459,16 +459,22 @@ fail:
 	return NULL;
 }
 
-struct json_object *mobile_create_apn_profile(char *name)
+struct json_object *mobile_create_apn_profile(char *profile_name, char *wan_apn, char *pdp_type)
 {
 	char query[1024] = {0};
 
+	//snprintf(query, 1023, "isTest=false&goformId=APN_PROC_EX&apn_action=save&apn_mode=manual&profile_name=%s&wan_dial=*99%23&apn_select=manual&pdp_type=\
+	%s&pdp_select=auto&pdp_addr=&index=%d&wan_apn=%s&ppp_auth_mode=none&ppp_username=&ppp_passwd=&dns_mode=auto&prefer_dns_manual=&standby_dns_manual=",\
+	profile_name, pdp_type, get_apn_profiles_len(), wan_apn);
+
 	strncpy(query, "isTest=false&goformId=APN_PROC_EX&apn_action=save&apn_mode=manual&profile_name=", 1023);
-	strncat(query + strlen(query), name, 1023);
-	strncat(query + strlen(query), "&wan_dial=*99%23&apn_select=manual&pdp_type=IP&pdp_select=auto&pdp_addr=&index=", 1023);
-	sprintf(query + strlen(query), "%d", get_apn_profiles_len());
+	strncat(query + strlen(query), profile_name, 1023);
+	strncat(query + strlen(query), "&wan_dial=*99%23&apn_select=manual&pdp_type=", 1023);
+	strncat(query + strlen(query), pdp_type, 1023);
+	strncat(query + strlen(query), "&pdp_select=auto&pdp_addr=&index=", 1023);
+	snprintf(query + strlen(query), 255, "%d", get_apn_profiles_len());
 	strncat(query + strlen(query), "&wan_apn=", 1023);
-	strncat(query + strlen(query), name, 1023);
+	strncat(query + strlen(query), wan_apn, 1023);
 	strncat(query + strlen(query), "&ppp_auth_mode=none&ppp_username=&ppp_passwd=&dns_mode=auto&prefer_dns_manual=&standby_dns_manual=", 1023);
 
 	return prepare_request(query, POST);
@@ -492,7 +498,7 @@ struct json_object *mobile_set_apn_profile(char *name)
 
 	strncpy(query, "isTest=false&goformId=APN_PROC_EX&apn_mode=manual&apn_action=set_default&set_default_flag=1&pdp_type=IP&index=", 1023);
 	sprintf(query + strlen(query), "%d", idx);
-
+	printf("query %s\n", query);
 	json_object_put(apn_profiles);
 	return prepare_request(query, POST);
 free_idx:
diff --git a/libmobile.h b/libmobile.h
index c31381d2917078d0336cc80af92a1ded384d641b..092b362afe03e20f9af881970725f5f92e9419dd 100644
--- a/libmobile.h
+++ b/libmobile.h
@@ -182,13 +182,15 @@ struct json_object *mobile_get_apn_profiles(void);
  * Creates a new APN profile.
  *
  * Parameter:
- * 		name - Name of the APN (and WAN) profile to create.
+ * 		name - Name of the APN profile to create.
+ * 		wan_apn - Name of the wan.
+ * 		pdp_type - The pdp type to use IPv4/IPv6.
  *
  * Returns:
  *		A pointer to a json_object containing the JSON response from the server. {"result": "success"/"failure"}
  *		NULL on failure.
  */
-struct json_object *mobile_create_apn_profile(char *name);
+struct json_object *mobile_create_apn_profile(char *profile_name, char *wan_apn, char *pdp_type);
 
 /**
  * Function: mobile_set_apn_profile