diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index c34f484..fc0c4a2 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -23,8 +23,7 @@
 #define USER_LOG_TAG "LYNQ_DATA"
 
 #define LYNQ_DATA_UCI_BUF 258
-#define LYNQ_DATA_UCI_APN_SECTION "lynq_apn_info"
-#define LYNQ_DATA_UCI_APN_KEY "insertId"
+
 
 
 
@@ -921,35 +920,17 @@
 /*Warren add for T800 platform 2021/11/19 end*/
 
 /*Typethree add for T800 platform 2022/04/21 start*/
-int insert_apn_char(char *agc, char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
+
+int insert_apn_char(char *agc, char *id,char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
 {
-    int ret = 0;
-    int fact_apn_id=0;
-    int tmp_id_num = 0;
-    char tmp_ID[16]="";
-    char apn_info_buf[LYNQ_DATA_UCI_BUF]="";
-    char apn_info_outbuf[LYNQ_DATA_UCI_BUF];
     char strtmp[10][32];
-
-    sprintf(apn_info_buf,"%s.%s.%s",LYNQ_UCI_FILE,LYNQ_DATA_UCI_APN_SECTION,LYNQ_DATA_UCI_APN_KEY);
-    ret = lynq_uci_get(apn_info_buf,apn_info_outbuf);
-    if (ret != UCI_OK)
+    if (id == NULL)
     {
-        LYERRLOG("Description APN failed to allocate an ID :ret = -1");
-        return -1;
+        sprintf(strtmp[0], "id=;");
     }
-    tmp_id_num = atoi(apn_info_outbuf);
-    fact_apn_id = -tmp_id_num;
-    tmp_id_num = tmp_id_num + 1;
-
-    apn_info_buf[LYNQ_DATA_UCI_BUF]="";
-    sprintf(apn_info_buf,"%s.%s.%s=%d",LYNQ_UCI_FILE,LYNQ_DATA_UCI_APN_SECTION,LYNQ_DATA_UCI_APN_KEY,tmp_id_num);
-
-    ret = lynq_uci_set(apn_info_buf);
-    if (ret != UCI_OK)
+    else
     {
-        LYERRLOG("Description APN failed to allocate an ID :ret = -2");
-        return -1;
+        sprintf(strtmp[0], "id=%s;", id);
     }
     if (mcc == NULL)
     {
@@ -961,7 +942,7 @@
     }
     if (mnc == NULL)
     {
-        sprintf(strtmp[12], "mnc=;");
+        sprintf(strtmp[2], "mnc=;");
     }
     else
     {
@@ -1023,7 +1004,7 @@
     {
         sprintf(strtmp[9], "carrier=%s;", carrier);
     }
-    sprintf(agc, "id=%d;%s%s%s%s%s%s%s%s%s",fact_apn_id, strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
+    sprintf(agc, "%s%s%s%s%s%s%s%s%s%s",strtmp[0], strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
 
     return 0;
 }
@@ -1226,19 +1207,15 @@
     Parcel p;
     if (cmd == 0) // insert apn db
     {
-        res = insert_apn_char(argc, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
-        if (res != UCI_OK)
-        {
-            LYERRLOG("Description APN failed to allocate an ID");
-            return -1;
-        }
+        res = insert_apn_char(argc, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
+
         client.uToken = Global_uToken;
         client.request = 2000 + 193; // RIL_REQUEST_MODIFY_APN
         client.paramLen = 2;
         bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
         sprintf(client.param, "%d %s", cmd, argc);
     }
-    else if (cmd == 1)
+    else if (cmd == 1) //delete apn db
     {
         if (NULL == id)
         {
@@ -1251,7 +1228,7 @@
         bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
         sprintf(client.param, "%d %s", cmd, argc);
     }
-    else if (cmd == 2)
+    else if (cmd == 2) //query apn db
     {
         query_apn_char(argc, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
         client.uToken = Global_uToken;
@@ -1260,7 +1237,7 @@
         bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
         sprintf(client.param, "%d %s", cmd, argc);
     }
-    else if (cmd == 3)
+    else if (cmd == 3)  //modify apn db
     {
         modify_apn_char(argc, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
         client.uToken = Global_uToken;
