diff --git a/mbtk/libgsw_lib/gsw_nw_interface.c b/mbtk/libgsw_lib/gsw_nw_interface.c
index beb811c..5f83c41 100755
--- a/mbtk/libgsw_lib/gsw_nw_interface.c
+++ b/mbtk/libgsw_lib/gsw_nw_interface.c
@@ -43,7 +43,7 @@
 typedef void (*mbtk_info_callback_func)(const void* data, int data_len);
 
 //#define MBTK_READY_UCI "persist.mbtk.sdk.state"
-#define SDK_READY_CMD "uci get persist.mbtk.sdk__state"
+#define SDK_READY_CMD "uci get lynq_uci.sdk_ready"
 #define MBTK_READY_STRING_SIZE_MAX (3+1)
 
 
@@ -1197,20 +1197,6 @@
 
 */
 
-static void convert_uci_to_gsw_modem_state(int uci, int *state)
-{
-    switch(uci)
-    {
-        case MBTK_READY_SUCCESS:
-            *state=GSW_MODEM_STATE_ONLINE;
-            return;
-        case MBTK_READY_INIT:
-             *state=GSW_MODEM_STATE_UNKNOWN;
-            return;
-    }
-     *state=GSW_MODEM_STATE_OFFLINE;
-    return;
-}
 
 static void gsw_serving_info_callback_thread()
 {
@@ -1467,38 +1453,65 @@
     return atoi(buffer);
 }
 
-int gsw_get_modem_state(int *state)
-{
-    int uci_value = get_sdk_ready();
-    if(uci_value < 0)
-    {
-        return GSW_HAL_NORMAL_FAIL;
-    }
-    convert_uci_to_gsw_modem_state(uci_value,state);
-    return GSW_HAL_SUCCESS;
-}
+static int g_modem_state = ((int)(GSW_MODEM_STATE_UNKNOWN)) - 1;
+static int g_gnss_state = ((int)(GSW_MODEM_STATE_UNKNOWN)) - 1;
 
-int g_mode_state=((int)(GSW_MODEM_STATE_UNKNOWN))-1;
 void gsw_modem_state_timer()
-{ 
-    while(nw_init_flag)
+{
+    int modem_state;
+    int gnss_state;
+
+    while (nw_init_flag) 
     {
-        int state;
-        int ret = gsw_get_modem_state(&state);
-        if(modem_cb != NULL)
+        int uci_value = get_sdk_ready();
+        if (uci_value < 0)
         {
-            if(ret != 0)
+            modem_state = GSW_MODEM_STATE_UNKNOWN;
+            gnss_state = GSW_SDK_STATE_GPS_DOWN;
+        }
+        else
+        {
+            if ((uci_value & 0x0F) == 0)
             {
-                modem_cb(GSW_MODEM_STATE_UNKNOWN);
-            }
-            else if(state!=g_mode_state)
+                modem_state = GSW_MODEM_STATE_ONLINE;
+            } 
+            else if (uci_value > 0 && uci_value <= 15) 
             {
-                LOGE(GSW_NW,"modem state changed from %d to %d",g_mode_state,state);
-                g_mode_state=state;
-                modem_cb(state);
+                modem_state = GSW_MODEM_STATE_OFFLINE;
             }
-         }
-         sleep(MODEM_TIMER);
+            else
+            {
+                modem_state = GSW_MODEM_STATE_UNKNOWN;
+            }
+
+            if (uci_value & (1 << 4))
+            {
+                gnss_state = GSW_SDK_STATE_GPS_DOWN;
+            }
+            else
+            {
+                gnss_state = GSW_SDK_STATE_GPS_UP;
+            }
+        }
+
+        if (modem_cb != NULL)
+        {
+
+            if (modem_state != g_modem_state)
+            {
+                LOGE(GSW_NW, "Modem state changed from %d to %d", g_modem_state, modem_state);
+                modem_cb(modem_state);
+                g_modem_state = modem_state;
+            }
+
+            if (gnss_state != g_gnss_state)
+            {
+                LOGE(GSW_NW, "GNSS state changed from %d to %d", g_gnss_state, gnss_state);
+                modem_cb(gnss_state);
+                g_gnss_state = gnss_state;
+            }
+        }
+        sleep(MODEM_TIMER);
     }
 }
 
