tizen 2.3.1 release
[framework/telephony/tel-plugin-dbus_tapi.git] / src / sat_manager.c
index bcda369..bd058bd 100755 (executable)
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
-#include <glib-object.h>
+#include <sys/time.h>
 
 #include <tcore.h>
 #include <server.h>
 #include <plugin.h>
+#include <storage.h>
 #include <hal.h>
 #include <communicator.h>
 #include <core_object.h>
 #include <user_request.h>
 #include <util.h>
 #include <co_sat.h>
+#include <co_call.h>
+#include <co_network.h>
 #include <type/call.h>
 #include <type/sim.h>
 
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
 #include "generated-code.h"
 #include "common.h"
 #include "sat_manager.h"
 #include "sat_ui_support/sat_ui_support.h"
 
 #define SAT_DEF_CMD_Q_MAX 10
-#define SAT_TIME_OUT 60000
+#define SAT_DEF_CMD_Q_MIN 0
+#define SAT_TIME_OUT 30000
+#define TIZEN_SAT_DELAY_TO_CLEAN_MSG 15000
+#define SAT_USC2_INPUT_LEN_MAX 70
+#define SAT_EVENT_DOWNLOAD_MAX 9
+
+#define LANGUAGE_XML_PATH "/opt/usr/apps/org.tizen.setting/data/langlist.xml"
+
+#define SAT_CMD_Q_CHECK(index) \
+       if (index < SAT_DEF_CMD_Q_MIN || index > SAT_DEF_CMD_Q_MAX-1) { warn("invalid index!!"); return FALSE; }
+
+static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data);
+
+static struct sat_manager_queue_data *sat_queue[SAT_DEF_CMD_Q_MAX] = {NULL, };
+gboolean g_evt_list[SAT_EVENT_DOWNLOAD_MAX] = {0};
+
+static unsigned char _convert_decimal_to_bcd(int dec)
+{
+       int tmp1, tmp0;
+       unsigned char tmp3;
+
+       tmp1 = dec/10;
+       tmp0 = dec - tmp1*10;
+       tmp3 = tmp0 << 4;
+       tmp3 += tmp1;
+
+       dbg("input decimal(%d), bcd(%d%d), endian(%x)", dec, tmp1, tmp0, tmp3);
+       return tmp3;
+}
+
+static const gchar* _convert_sim_lang_to_string(enum tel_sim_language_type lang)
+{
+       dbg("convert lang(%d)", lang);
+       switch(lang){
+               case SIM_LANG_GERMAN:
+                       return "de_DE.UTF-8";
+               case SIM_LANG_ENGLISH:
+                       return "en_GB.UTF-8";
+               case SIM_LANG_ITALIAN:
+                       return "it_IT.UTF-8";
+               case SIM_LANG_FRENCH:
+                       return "fr_FR.UTF-8";
+               case SIM_LANG_SPANISH:
+                       return "es_ES.UTF-8";
+               case SIM_LANG_DUTCH:
+                       return "nl_NL.UTF-8";
+               case SIM_LANG_SWEDISH:
+                       return "sv_SE.UTF-8";
+               case SIM_LANG_DANISH:
+                       return "da_DK.UTF-8";
+               case SIM_LANG_PORTUGUESE:
+                       return "pt_PT.UTF-8";
+               case SIM_LANG_FINNISH:
+                       return "fi_FI.UTF-8";
+               case SIM_LANG_NORWEGIAN:
+                       return "nb_NO.UTF-8";
+               case SIM_LANG_GREEK:
+                       return "el_GR.UTF-8";
+               case SIM_LANG_TURKISH:
+                       return "tr_TR.UTF-8";
+               case SIM_LANG_HUNGARIAN:
+                       return "hu_HU.UTF-8";
+               case SIM_LANG_POLISH:
+                       return "pl_PL.UTF-8";
+               case SIM_LANG_KOREAN:
+                       return "ko_KR.UTF-8";
+               case SIM_LANG_CHINESE:
+                       return "zh_CH.UTF-8";
+               case SIM_LANG_RUSSIAN:
+                       return "ru_RU.UTF-8";
+               case SIM_LANG_JAPANESE:
+                       return "ja_JP.UTF-8";
+               default:
+                       return NULL;
+       }//end of switch
+
+       return NULL;
+}
+
+static enum tel_sim_language_type _convert_string_to_sim_lang(const gchar* lang_str)
+{
+       dbg("convert lang(%s)", lang_str);
+
+       if (g_str_equal(lang_str, "de_DE.UTF-8") == TRUE) {
+               return SIM_LANG_GERMAN;
+       }
+       else if (g_str_equal(lang_str, "en_GB.UTF-8") == TRUE) {
+               return SIM_LANG_ENGLISH;
+       }
+       else if (g_str_equal(lang_str, "it_IT.UTF-8") == TRUE) {
+               return SIM_LANG_ITALIAN;
+       }
+       else if (g_str_equal(lang_str, "fr_FR.UTF-8") == TRUE) {
+               return SIM_LANG_FRENCH;
+       }
+       else if (g_str_equal(lang_str, "es_ES.UTF-8") == TRUE) {
+               return SIM_LANG_SPANISH;
+       }
+       else if (g_str_equal(lang_str, "nl_NL.UTF-8") == TRUE) {
+               return SIM_LANG_DUTCH;
+       }
+       else if (g_str_equal(lang_str, "sv_SE.UTF-8") == TRUE) {
+               return SIM_LANG_SWEDISH;
+       }
+       else if (g_str_equal(lang_str, "da_DK.UTF-8") == TRUE) {
+               return SIM_LANG_DANISH;
+       }
+       else if (g_str_equal(lang_str, "pt_PT.UTF-8") == TRUE) {
+               return SIM_LANG_PORTUGUESE;
+       }
+       else if (g_str_equal(lang_str, "fi_FI.UTF-8") == TRUE) {
+               return SIM_LANG_FINNISH;
+       }
+       else if (g_str_equal(lang_str, "nb_NO.UTF-8") == TRUE) {
+               return SIM_LANG_NORWEGIAN;
+       }
+       else if (g_str_equal(lang_str, "el_GR.UTF-8") == TRUE) {
+               return SIM_LANG_GREEK;
+       }
+       else if (g_str_equal(lang_str, "tr_TR.UTF-8") == TRUE) {
+               return SIM_LANG_TURKISH;
+       }
+       else if (g_str_equal(lang_str, "hu_HU.UTF-8") == TRUE) {
+               return SIM_LANG_HUNGARIAN;
+       }
+       else if (g_str_equal(lang_str, "pl_PL.UTF-8") == TRUE) {
+               return SIM_LANG_POLISH;
+       }
+       else if (g_str_equal(lang_str, "ko_KR.UTF-8") == TRUE) {
+               return SIM_LANG_KOREAN;
+       }
+       else if (g_str_equal(lang_str, "zh_CH.UTF-8") == TRUE) {
+               return SIM_LANG_CHINESE;
+       }
+       else if (g_str_equal(lang_str, "ru_RU.UTF-8") == TRUE) {
+               return SIM_LANG_RUSSIAN;
+       }
+       else if (g_str_equal(lang_str, "ja_JP.UTF-8") == TRUE) {
+               return SIM_LANG_JAPANESE;
+       }
+
+       dbg("there is no matched language");
+       return SIM_LANG_UNSPECIFIED;
+}
+
+static unsigned char _convert_hex_char_to_int(char c)
+{
+       if (c >= '0' && c <= '9')
+               return (c - '0');
+       else if (c >= 'A' && c <= 'F')
+               return (c - 'A' + 10);
+       else if (c >= 'a' && c <= 'f')
+               return (c - 'a' + 10);
+       else {
+               dbg("invalid charater!!");
+               return -1;
+       }
+}
+
+static char* _convert_hex_string_to_bytes(char *s)
+{
+       char *ret;
+       int i;
+       int sz;
+
+       if (s == NULL)
+               return NULL;
+
+       sz = strlen(s);
+       ret = calloc(1, (sz / 2) + 1);
+       if (ret == NULL) 
+               return NULL;
+
+       dbg("Convert String to Binary!!");
+
+       for (i = 0; i < sz; i += 2) {
+               ret[i / 2] = (char) ((_convert_hex_char_to_int(s[i]) << 4) | _convert_hex_char_to_int(s[i + 1]));
+       }
+
+       return ret;
+}
 
 static unsigned int _get_time_in_ms(struct tel_sat_duration *dr)
 {
@@ -68,75 +255,166 @@ static unsigned int _get_time_in_ms(struct tel_sat_duration *dr)
        return 0;
 }
 
-static int _get_queue_size(struct custom_data *ctx)
+static int _get_queue_empty_index(void)
 {
-       int temp;
-       temp = (int)g_queue_get_length(&ctx->queue_sat);
-       dbg("[SAT]SAT Command Queue current Size [%d], MAX SIZE [%d]\n", temp,  SAT_DEF_CMD_Q_MAX);
-       return temp;
+       int cnt = 0;
+       int i;
+       int local_index = -1;
+
+       for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
+               if(sat_queue[i]) {
+                       dbg("index[%d] is being used",i);
+                       cnt++;
+               }
+       }
+       for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
+               if(!sat_queue[i]) {
+                       dbg("found empty slot [%p] at index [%d]", sat_queue[i] ,i);
+                       local_index = i;
+                       break;
+               }
+       }
+       dbg("[SAT]SAT Command Queue current length [%d], MAX [%d]. \n", cnt, SAT_DEF_CMD_Q_MAX);
+       return local_index;
 }
 
 static gboolean _push_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
 {
-       struct sat_manager_queue_data* item = NULL;
-       if (_get_queue_size(ctx) == (SAT_DEF_CMD_Q_MAX - 1)) {
-               dbg("[SAT] FAILED TO ENQUEUE - QUEUE FULL!\n");
+       struct sat_manager_queue_data *item;
+       int local_index = cmd_obj->cmd_id;
+
+       SAT_CMD_Q_CHECK(local_index);
+
+       if (sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is not null [%p].\n", sat_queue[local_index]);
                return FALSE;
        }
 
-       item = g_new(struct sat_manager_queue_data, 1);
+       item = g_new0(struct sat_manager_queue_data, 1);
 
-       if (item == NULL) {
+       if(!item) {
                dbg("[SAT] FAILED TO ALLOC QUEUE ITEM!\n");
                return FALSE;
        }
 
-       memcpy((void*)item, cmd_obj, sizeof(struct sat_manager_queue_data));
-       g_queue_push_tail(&ctx->queue_sat, item);
+       memcpy((void*)item, (void*)cmd_obj, sizeof(struct sat_manager_queue_data));
+       sat_queue[local_index] = item;
+       dbg("push data to queue at index[%d], [%p].\n",local_index, item);
        return TRUE;
 }
 
 static gboolean _pop_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
 {
-       struct sat_manager_queue_data *item = NULL;
+       struct sat_manager_queue_data *item;
+       int local_index = command_id;
+
+       SAT_CMD_Q_CHECK(local_index);
 
-       if (g_queue_is_empty(&ctx->queue_sat))
+       if(!sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is null !!\n", local_index);
                return FALSE;
+       }
 
-       item = g_queue_pop_nth(&ctx->queue_sat, command_id);
-       memcpy((void*)cmd_obj, item, sizeof(struct sat_manager_queue_data));
-       g_free(item);
+       item = sat_queue[local_index];
 
+       memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
+       dbg("pop data from queue at index[%d],[%p].\n",local_index, item);
+       sat_queue[local_index] = NULL;
+       g_free(item);
        return TRUE;
 }
 
 static gboolean _peek_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
 {
-       gpointer element = NULL;
+       struct sat_manager_queue_data *item = NULL;
 
-       if (g_queue_is_empty(&ctx->queue_sat)) {
-               dbg("[SAT] queue_sat is empty.")
-               return FALSE;
-       }
+       int local_index = command_id;
 
-       element = g_queue_peek_nth(&ctx->queue_sat, command_id);
-       if (element==NULL) {
-               dbg("[SAT] queue_sat has no element with command_id [%d].\n", command_id);
+       SAT_CMD_Q_CHECK(local_index);
+
+       if(!sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is null !!\n", local_index);
                return FALSE;
        }
 
-       memcpy((void*)cmd_obj, element, sizeof(struct sat_manager_queue_data));
+       item = sat_queue[local_index];
+       memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
+       dbg("peek data from queue at index[%d],[%p].\n",local_index, item);
        return TRUE;
 }
 
-void sat_manager_init_queue(struct custom_data *ctx)
+static gboolean _sat_manager_check_language_set(const char* lan)
+{
+       xmlNode *cur_node = NULL;
+       xmlNodePtr cur;
+       void *xml_doc = NULL,*xml_root_node = NULL;
+       char *id = NULL;
+       gboolean ret = FALSE;
+
+       dbus_plugin_util_load_xml(LANGUAGE_XML_PATH, "langlist", &xml_doc, &xml_root_node);
+       if (!xml_root_node) {
+               err("[LANGUAGE LIST] Load error - Root node is NULL.");
+               goto EXIT;
+       }
+
+       cur = xml_root_node;
+       /* Compare language */
+       for(cur_node = cur; cur_node; cur_node = cur_node->next) {
+               if (cur_node->type == XML_ELEMENT_NODE) {
+                       id = (char *)xmlGetProp(cur_node, (const xmlChar *)"id");
+                       if (id && g_str_has_prefix(lan, id)) {
+                               dbg("Supported: id[%s], lan[%s]", id, lan);
+                               ret = TRUE;
+                               goto EXIT;
+                       }
+               }
+       }
+       warn("Not supported language[%s]", lan);
+EXIT:
+       dbus_plugin_util_unload_xml(&xml_doc, &xml_root_node);
+       return ret;
+}
+
+void sat_manager_init_queue(struct custom_data *ctx, const char *cp_name)
 {
-       g_queue_init(&ctx->queue_sat);
+       int i;
+
+       dbg("Entered into queue");
+       for(i=0;i<SAT_DEF_CMD_Q_MAX;i++) {
+               struct sat_manager_queue_data * item = sat_queue[i];
+               if(item != NULL && !g_strcmp0(cp_name,item->cp_name)) {
+                       dbg("item[%d]: cmd_type[%d]", i, item->cmd_type);
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+                       switch(item->cmd_type) {
+                               case SAT_PROATV_CMD_SEND_SMS:
+                               case SAT_PROATV_CMD_SEND_SS:
+                               case SAT_PROATV_CMD_SEND_USSD:
+                               case SAT_PROATV_CMD_SEND_DTMF: {
+                                       dbg("[SAT] set noti flag");
+                                       item->noti_required = TRUE;
+                                       return;
+                                       } break;
+                               default:
+                                       break;
+                       }
+#endif
+                       g_free(item->cp_name);
+                       g_free(item);
+                       sat_queue[i] = NULL;
+               }
+       }
 }
 
 static gboolean sat_manager_enqueue_cmd(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
 {
-       cmd_obj->cmd_id = g_queue_get_length(&ctx->queue_sat);
+       int id;
+
+       id = _get_queue_empty_index();
+       if(id < 0) {
+               dbg("Fail to get empty index.\n");
+               return FALSE;
+       }
+       cmd_obj->cmd_id = id;
        return _push_data(ctx, cmd_obj);
 }
 
@@ -153,29 +431,29 @@ static gboolean sat_manager_queue_peek_data_by_id(struct custom_data *ctx, struc
 static gboolean sat_manager_check_availiable_event_list(struct tel_sat_setup_event_list_tlv *event_list_tlv)
 {
        gboolean rv = TRUE;
-       int index = 0;
+       int local_index = 0;
 
-       for(index = 0; index < event_list_tlv->event_list.event_list_cnt; index++){
-               if(event_list_tlv->event_list.evt_list[index] == EVENT_USER_ACTIVITY){
+       for(local_index = 0; local_index < event_list_tlv->event_list.event_list_cnt; local_index++){
+               if(event_list_tlv->event_list.evt_list[local_index] == EVENT_USER_ACTIVITY){
                        dbg("do user activity");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_IDLE_SCREEN_AVAILABLE){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_IDLE_SCREEN_AVAILABLE){
                        dbg("do idle screen");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_LANGUAGE_SELECTION){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_LANGUAGE_SELECTION){
                        dbg("do language selection");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_BROWSER_TERMINATION){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_BROWSER_TERMINATION){
                        dbg("do browser termination");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_DATA_AVAILABLE){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_DATA_AVAILABLE){
                        dbg("do data available (bip)");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_CHANNEL_STATUS){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_CHANNEL_STATUS){
                        dbg("do channel status (bip)");
                }
                else{
-                       dbg("unmanaged event (%d)", event_list_tlv->event_list.evt_list[index]);
+                       dbg("unmanaged event (%d)", event_list_tlv->event_list.evt_list[local_index]);
                        rv = FALSE;
                }
        }
@@ -183,12 +461,37 @@ static gboolean sat_manager_check_availiable_event_list(struct tel_sat_setup_eve
        return rv;
 }
 
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+static TReturn sat_manager_send_user_confirmation(Communicator *comm, TcorePlugin *target_plg, struct treq_sat_user_confirmation_data *conf_data)
+{
+       TReturn rv = TCORE_RETURN_SUCCESS;
+       UserRequest *ur = NULL;
+
+       ur = tcore_user_request_new(comm, tcore_server_get_cp_name_by_plugin(target_plg));
+       if (!ur) {
+               dbg("ur is NULL");
+               return TCORE_RETURN_FAILURE;
+       }
+
+       tcore_user_request_set_command(ur, TREQ_SAT_REQ_USERCONFIRMATION);
+       tcore_user_request_set_data(ur, sizeof(struct treq_sat_user_confirmation_data), (void *)conf_data);
+       rv = tcore_communicator_dispatch_request(comm, ur);
+       if (rv != TCORE_RETURN_SUCCESS) {
+               dbg("fail to send terminal response",rv);
+               tcore_user_request_unref(ur);
+               rv = TCORE_RETURN_FAILURE;
+       }
+
+       return rv;
+}
+#endif
+
 static TReturn sat_manager_send_terminal_response(Communicator *comm, TcorePlugin *target_plg, struct treq_sat_terminal_rsp_data *tr)
 {
        TReturn rv = TCORE_RETURN_SUCCESS;
        UserRequest *ur = NULL;
 
-       ur = tcore_user_request_new(comm, tcore_plugin_get_description(target_plg)->name);
+       ur = tcore_user_request_new(comm, tcore_server_get_cp_name_by_plugin(target_plg));
        if (!ur) {
                dbg("ur is NULL");
                return TCORE_RETURN_FAILURE;
@@ -199,223 +502,249 @@ static TReturn sat_manager_send_terminal_response(Communicator *comm, TcorePlugi
        rv = tcore_communicator_dispatch_request(comm, ur);
        if (rv != TCORE_RETURN_SUCCESS) {
                dbg("fail to send terminal response",rv);
+               tcore_user_request_unref(ur);
                rv = TCORE_RETURN_FAILURE;
        }
 
        return rv;
 }
 
-GVariant* sat_manager_caching_setup_menu_info(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_menu_tlv* setup_menu_tlv)
+gboolean sat_manager_remove_cmd_by_id(struct custom_data *ctx, int cmd_id)
+{
+       struct sat_manager_queue_data *item;
+       int local_index = cmd_id;
+
+       if(!sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is already null !!\n", local_index);
+               return FALSE;
+       }
+       item = sat_queue[local_index];
+
+       dbg("remove data from queue at index[%d],[%p].\n",local_index, item);
+       sat_queue[local_index] = NULL;
+       g_free(item->cp_name);
+       g_free(item);
+       return TRUE;
+}
+
+GVariant* sat_manager_caching_setup_menu_info(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_menu_tlv* setup_menu_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *setup_menu_info = NULL;
        struct sat_manager_queue_data q_data;
 
-       gint command_id = 0, menu_cnt = 0, title_len =0;
+       gushort title_len = 0;
+       gint command_id = 0, menu_cnt = 0;
        gboolean menu_present = FALSE, help_info = FALSE, updated = FALSE;
        gchar main_title[SAT_ALPHA_ID_LEN_MAX];
-       GVariantBuilder *v_builder = NULL;
+       GVariantBuilder v_builder;
        GVariant *menu_items = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       int local_index = 0;
+       GVariant *icon_id = NULL;
+       GVariant *icon_list = NULL;
+       GVariant *icon_list_info = NULL;
+       GVariantBuilder v_builder_icon;
+       GVariantBuilder v_builder_icon_list_data;
+#endif
+       /* To check menu update */
+       GSList *list = NULL;
+       struct cached_data *object;
+       struct treq_sat_terminal_rsp_data tr;
 
        dbg("interpreting setup menu notification");
        memset(&main_title, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if ((setup_menu_tlv->icon_id.is_exist)
-                       && (setup_menu_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!setup_menu_tlv->alpha_id.is_exist || setup_menu_tlv->alpha_id.alpha_data_len == 0)){
-
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("exceptional case to fix gcf case 2.4 command not understood");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_menu.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+       /* check menu info is already updated */
+       for (list = ctx->cached_data; list; list = list->next) {
+               object = (struct cached_data *) list->data;
+               if (object == NULL)
+                       continue;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
-
-       //check menu update
-       if(ctx->cached_sat_main_menu){
-               dbg("main menu info is updated");
-               updated = TRUE;
+               if (g_strcmp0(object->cp_name, cp_name) == 0) {
+                       if(object->cached_sat_main_menu) {
+                               dbg("main menu info is updated");
+                               updated = TRUE;
+                       }
+               }
        }
 
-       //menu item count
-       menu_cnt = setup_menu_tlv->menu_item_cnt;
-       if(!menu_cnt){
-               /*
-                * support GCF case 27.22.4.8.1 - 1.1 setup menu
-                */
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("no item");
+       //check the validation of content
+       if(!setup_menu_tlv->menu_item_cnt || !setup_menu_tlv->menu_item[0].text_len){
+               //support GCF case 27.22.4.8.1 - 1.1 setup menu
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
+               dbg("no menu item updated menu(%d)", updated);
 
-               memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = setup_menu_tlv->command_detail.cmd_num;
+               tr.cmd_type = setup_menu_tlv->command_detail.cmd_type;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
+               memcpy((void*)&tr.terminal_rsp_data.setup_menu.command_detail,
+                               &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
+               tr.terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
 
-       //check the validation of content
-       if(setup_menu_tlv->menu_item_cnt == 1 && setup_menu_tlv->menu_item[0].text_len == 0){
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("item removed");
+               if(updated){
+                       tr.terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
+               }else{
+                       tr.terminal_rsp_data.setup_menu.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+               }
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               //return NULL;
+       }
 
-               memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_menu.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
+       help_info = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.help_info;
+       menu_present = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.select_preference;
+       menu_cnt = setup_menu_tlv->menu_item_cnt;
 
        //get title
        if(setup_menu_tlv->alpha_id.alpha_data_len)
-               sat_mgr_convert_string((unsigned char*)&main_title,(unsigned short *)&title_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&main_title, (unsigned short*)&title_len,
                        setup_menu_tlv->alpha_id.dcs.a_format,
                        (unsigned char*)&setup_menu_tlv->alpha_id.alpha_data,
                        (unsigned short)setup_menu_tlv->alpha_id.alpha_data_len);
        dbg("sat main menu title(%s)",main_title);
 
-       v_builder = g_variant_builder_new(G_VARIANT_TYPE ("a(si)"));
+       g_variant_builder_init(&v_builder, G_VARIANT_TYPE ("a(si)"));
 
        //get menu items
        if(!setup_menu_tlv->next_act_ind_list.cnt){
-               int index = 0;
+               int local_index = 0;
 
                dbg("setup_menu_tlv->next_act_ind_list.cnt == 0");
 
-               for(index = 0; index < menu_cnt; index++){
-                       gint item_len;
+               for(local_index = 0; local_index < menu_cnt; local_index++){
+                       gushort item_len;
                        gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
 
-                       if(!setup_menu_tlv->alpha_id.alpha_data_len)
-                               setup_menu_tlv->alpha_id.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-
                        memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
-                       sat_mgr_convert_string((unsigned char*)&item_str, (unsigned short *)&item_len,
-                               setup_menu_tlv->alpha_id.dcs.a_format,
-                               (unsigned char*)&setup_menu_tlv->menu_item[index].text,
-                               (unsigned short)setup_menu_tlv->menu_item[index].text_len);
+                       tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
+                               setup_menu_tlv->menu_item[local_index].dcs.a_format,
+                               (unsigned char*)&setup_menu_tlv->menu_item[local_index].text,
+                               (unsigned short)setup_menu_tlv->menu_item[local_index].text_len);
 
-                       dbg( "index(%d) item_id(%d) item_string(%s)", index, setup_menu_tlv->menu_item[index].item_id, item_str);
+                       dbg( "index(%d) item_id(%d) item_string(%s)", local_index, setup_menu_tlv->menu_item[local_index].item_id, item_str);
 
                        //g_variant_builder_add(v_builder, "(sy)", &item_str, setup_menu_tlv->menu_item[index].item_id);
-                       g_variant_builder_add(v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[index].item_id));
+                       g_variant_builder_add(&v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[local_index].item_id));
                }
        }
        else{
-               int index = 0;
+               int local_index = 0;
 
-               dbg("setup_menu_tlv->next_act_ind_list.cnt == 0");
+               dbg("setup_menu_tlv->next_act_ind_list.cnt != 0");
 
-               for(index = 0; index < menu_cnt; index++){
-                       gint item_len;
+               for(local_index = 0; local_index < menu_cnt; local_index++){
+                       gushort item_len;
                        gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
 
-                       if(setup_menu_tlv->alpha_id.alpha_data_len == 0)
-                               setup_menu_tlv->alpha_id.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-
                        memset(&item_str, '\0' , SAT_ITEM_TEXT_LEN_MAX + 1);
-                       sat_mgr_convert_string((unsigned char*)&item_str, (unsigned short *)&item_len,
-                               setup_menu_tlv->alpha_id.dcs.a_format,
-                               (unsigned char*)&setup_menu_tlv->menu_item[index].text,
-                               (unsigned short)setup_menu_tlv->menu_item[index].text_len);
-
-                       if( setup_menu_tlv->next_act_ind_list.indicator_list[index] == SAT_PROATV_CMD_SEND_SMS) {
-                               g_strlcat(item_str," [Send SMS]", 11);
-                       }
-                       else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_SETUP_CALL) {
-                               g_strlcat(item_str," [Set Up Call]", 14);
-                       }
-                       else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_LAUNCH_BROWSER){
-                               g_strlcat(item_str," [Launch Browser]", 17);
-                       }
-                       else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_PROVIDE_LOCAL_INFO)   {
-                               g_strlcat(item_str," [Provide Terminal Information]", 31);
-                       }
+                       tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
+                               setup_menu_tlv->menu_item[local_index].dcs.a_format,
+                               (unsigned char*)&setup_menu_tlv->menu_item[local_index].text,
+                               (unsigned short)setup_menu_tlv->menu_item[local_index].text_len);
 
-                       dbg( "index(%d) item_id(%d) item_string(%s)", index, setup_menu_tlv->menu_item[index].item_id, item_str);
+                       dbg( "index(%d) item_id(%d) item_string(%s)", local_index, setup_menu_tlv->menu_item[local_index].item_id, item_str);
 
-                       //g_variant_builder_add(v_builder, "(sy)", g_strdup(item_str), setup_menu_tlv->menu_item[index].item_id);
-                       g_variant_builder_add(v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[index].item_id));
+                       //g_variant_builder_add(v_builder, "(sy)", g_strdup(item_str), setup_menu_tlv->menu_item[local_index].item_id);
+                       g_variant_builder_add(&v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[local_index].item_id));
                }
-
        }
-       menu_items = g_variant_builder_end(v_builder);
+
+       menu_items = g_variant_builder_end(&v_builder);
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SETUP_MENU;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.setupMenuInd), setup_menu_tlv, sizeof(struct tel_sat_setup_menu_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(setup_menu_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", setup_menu_tlv->icon_id.is_exist, setup_menu_tlv->icon_id.icon_qualifer, (gint32) setup_menu_tlv->icon_id.icon_identifier, (gint32) setup_menu_tlv->icon_id.icon_info.width,
+                       (gint32) setup_menu_tlv->icon_id.icon_info.height, setup_menu_tlv->icon_id.icon_info.ics, setup_menu_tlv->icon_id.icon_info.icon_data_len, setup_menu_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+
+       /* Icon list data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiv)"));
+       if(setup_menu_tlv->icon_list.is_exist) {
+               g_variant_builder_init(&v_builder_icon_list_data, G_VARIANT_TYPE ("a(iiiiis)"));
+               for(local_index= 0; local_index< (int)setup_menu_tlv->icon_list.icon_cnt; local_index++){
+                       g_variant_builder_add(&v_builder_icon_list_data, "(iiiiis)", (gint32) setup_menu_tlv->icon_list.icon_id_list[local_index], (gint32) setup_menu_tlv->icon_list.icon_info[local_index].width,
+                               (gint32) setup_menu_tlv->icon_list.icon_info[local_index].height, setup_menu_tlv->icon_list.icon_info[local_index].ics, setup_menu_tlv->icon_list.icon_info[local_index].icon_data_len, setup_menu_tlv->icon_list.icon_info[local_index].icon_file);
+               }
+               icon_list_info = g_variant_builder_end(&v_builder_icon_list_data);
+
+               g_variant_builder_add(&v_builder_icon, "(biiv)", setup_menu_tlv->icon_list.is_exist, setup_menu_tlv->icon_list.icon_qualifer, (gint32) setup_menu_tlv->icon_list.icon_cnt, icon_list_info);
+       }
+       icon_list = g_variant_builder_end(&v_builder_icon);
+
+       setup_menu_info = g_variant_new("(ibsvibbvv)", command_id, menu_present, main_title, menu_items,
+                       menu_cnt, help_info, updated, icon_id, icon_list);
+#else
        setup_menu_info = g_variant_new("(ibsvibb)", command_id, menu_present, main_title, menu_items,
                        menu_cnt, help_info, updated);
-
+#endif
        return setup_menu_info;
 }
 
-GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_display_text_tlv* display_text_tlv)
+GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_display_text_tlv* display_text_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *display_text = NULL;
        struct sat_manager_queue_data q_data;
 
-       gint command_id = 0, text_len =0, duration= 0, tmp_duration = 0;
+       gushort text_len = 0;
+       gint command_id = 0, duration= 0, tmp_duration = 0;
        gboolean immediately_rsp = FALSE, high_priority = FALSE, user_rsp_required = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting display text notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if ( (display_text_tlv->icon_id.is_exist && display_text_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       || !display_text_tlv->text.string_length ){
+       if(!display_text_tlv->text.string_length ||
+               (display_text_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS)){
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("displat text - invalid parameter of TLVs is found!!");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = display_text_tlv->command_detail.cmd_num;
-               tr->cmd_type = display_text_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = display_text_tlv->command_detail.cmd_num;
+               tr.cmd_type = display_text_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &display_text_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
-               tr->terminal_rsp_data.display_text.device_id.dest = display_text_tlv->device_id.src;
-               tr->terminal_rsp_data.display_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*) &tr.terminal_rsp_data.display_text.command_detail,
+                       &display_text_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.display_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -425,32 +754,42 @@ GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plu
                duration = SAT_TIME_OUT;
        }
        else{
-               duration = 15000;
+               /* Set by default if duration is not provided. */
+               duration = TIZEN_SAT_DELAY_TO_CLEAN_MSG;
        }
 
        //immediate response requested
-       if (!display_text_tlv->immediate_response_requested)
+       if (display_text_tlv->immediate_response_requested)
                immediately_rsp = TRUE;
 
        //high priority
        if (display_text_tlv->command_detail.cmd_qualifier.display_text.text_priority == TEXT_PRIORITY_HIGH)
                high_priority = TRUE;
-       dbg("user rsp required(%d), immediately rsp(%d) priority(%d)",user_rsp_required, immediately_rsp, high_priority);
 
        //get text
-       sat_mgr_convert_string((unsigned char*) &text, (unsigned short *) &text_len,
+       tcore_util_convert_string_to_utf8((unsigned char*) &text, (unsigned short *) &text_len,
                        display_text_tlv->text.dcs.a_format,
                        (unsigned char*) &display_text_tlv->text.string,
                        (unsigned short) display_text_tlv->text.string_length);
        dbg("sat display text(%s)",text);
 
        //duration
-       if(!display_text_tlv->duration.time_interval){
+       if(display_text_tlv->duration.time_interval){
                tmp_duration = _get_time_in_ms(&display_text_tlv->duration);
        }
 
-       if(tmp_duration > 0)
+       /* duration is required only when clear message after a delay
+        * 27.22.4.1.7.4.2 DISPLAY TEXT ( Variable Timeout )
+        */
+       if(tmp_duration > 0) {
                duration = tmp_duration;
+       }
+
+       if(immediately_rsp && user_rsp_required)
+               duration = 0;
+
+       dbg("user rsp required(%d), immediately rsp(%d) duration (%d), priority(%d)",
+               user_rsp_required, immediately_rsp, duration, high_priority);
 
 /*      ETSI TS 102 223 6.4.1 DISPLAY TEXT
         If help information is requested by the user, this command may be used to display help information on the screen. The
@@ -465,60 +804,81 @@ GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plu
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_DISPLAY_TEXT;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.displayTextInd), display_text_tlv, sizeof(struct tel_sat_display_text_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(display_text_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", display_text_tlv->icon_id.is_exist, display_text_tlv->icon_id.icon_qualifer, (gint32) display_text_tlv->icon_id.icon_identifier, (gint32) display_text_tlv->icon_id.icon_info.width,
+                       (gint32) display_text_tlv->icon_id.icon_info.height, display_text_tlv->icon_id.icon_info.ics, display_text_tlv->icon_id.icon_info.icon_data_len, display_text_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        display_text = g_variant_new("(isiibbbv)", command_id, text, text_len, duration,
-                       high_priority, user_rsp_required, immediately_rsp, icon_id);
+               high_priority, user_rsp_required, immediately_rsp, icon_id);
+#else
+       display_text = g_variant_new("(isiibbb)", command_id, text, text_len, duration,
+               high_priority, user_rsp_required, immediately_rsp);
+#endif
 
        return display_text;
 }
 
-GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_select_item_tlv* select_item_tlv)
+GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_select_item_tlv* select_item_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *select_item = NULL;
        struct sat_manager_queue_data q_data;
 
-       int index = 0;
-       gint command_id = 0, default_item_id = 0, menu_cnt = 0, text_len =0;
+       gushort text_len = 0;
+       gint command_id = 0, default_item_id = 0, menu_cnt = 0;
        gboolean help_info = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
-       GVariantBuilder *v_builder = NULL;
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+       GVariantBuilder v_builder;
        GVariant *menu_items = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       int local_index = 0;
        GVariant *icon_id = NULL;
        GVariant *icon_list = NULL;
-
+       GVariant *icon_list_info = NULL;
+       GVariantBuilder v_builder_icon;
+       GVariantBuilder v_builder_icon_list;
+#else
+       int local_index = 0;
+#endif
        dbg("interpreting select item notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if ((select_item_tlv->icon_id.is_exist)
-                       && (select_item_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && ( !select_item_tlv->alpha_id.is_exist || select_item_tlv->alpha_id.alpha_data_len == 0) ) {
+       if(!select_item_tlv->menu_item_cnt || !select_item_tlv->menu_item[0].text_len){
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("select item - mandatory field does not exist");
 
-               tr = (struct treq_sat_terminal_rsp_data *) calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = select_item_tlv->command_detail.cmd_num;
+               tr.cmd_type = select_item_tlv->command_detail.cmd_type;
 
-               tr->cmd_number = select_item_tlv->command_detail.cmd_num;
-               tr->cmd_type = select_item_tlv->command_detail.cmd_type;
+               memcpy((void*) &tr.terminal_rsp_data.select_item.command_detail,
+                       &select_item_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               memcpy((void*) &tr->terminal_rsp_data.select_item.command_detail, &select_item_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.select_item.device_id.src = select_item_tlv->device_id.dest;
-               tr->terminal_rsp_data.select_item.device_id.dest = select_item_tlv->device_id.src;
-               tr->terminal_rsp_data.select_item.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               tr.terminal_rsp_data.select_item.device_id.src = select_item_tlv->device_id.dest;
+               tr.terminal_rsp_data.select_item.device_id.dest = select_item_tlv->device_id.src;
+               tr.terminal_rsp_data.select_item.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -526,13 +886,13 @@ GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plug
        help_info = select_item_tlv->command_detail.cmd_qualifier.select_item.help_info;
 
        if(!select_item_tlv->alpha_id.is_exist){
-               dbg("set the item dcs value to ALPHABET_FROMAT_8BIT_DATA");
-               select_item_tlv->alpha_id.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+               dbg("set the item dcs value to ALPHABET_FORMAT_8BIT_DATA");
+               select_item_tlv->alpha_id.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
        }
 
        // select item text
        if(select_item_tlv->alpha_id.is_exist && select_item_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                select_item_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&select_item_tlv->alpha_id.alpha_data,
                                (unsigned short)select_item_tlv->alpha_id.alpha_data_len);
@@ -547,92 +907,109 @@ GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plug
        dbg( "menu item count(%d)", menu_cnt);
 
        //items
-       v_builder = g_variant_builder_new(G_VARIANT_TYPE ("a(iis)"));
-       for(index= 0; index< menu_cnt; index++){
-               gint item_len;
+       g_variant_builder_init(&v_builder, G_VARIANT_TYPE ("a(iis)"));
+       for(local_index= 0; local_index< menu_cnt; local_index++){
+               gushort item_len;
                gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
 
                memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
 
-               sat_mgr_convert_string((unsigned char*) &item_str, (unsigned short *) &item_len,
-                               select_item_tlv->alpha_id.dcs.a_format,
-                               (unsigned char*) &select_item_tlv->menu_item[index].text,
-                               (unsigned short) select_item_tlv->menu_item[index].text_len);
-
-               if (select_item_tlv->item_next_act_ind_list.cnt != 0) {
-                       if( select_item_tlv->item_next_act_ind_list.indicator_list[index] == SAT_PROATV_CMD_SEND_SMS) {
-                               g_strlcat(item_str," [Send SMS]", 11);
-                       }
-                       else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_SETUP_CALL) {
-                               g_strlcat(item_str," [Set Up Call]", 14);
-                       }
-                       else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_LAUNCH_BROWSER){
-                               g_strlcat(item_str," [Launch Browser]", 17);
-                       }
-                       else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_PROVIDE_LOCAL_INFO)     {
-                               g_strlcat(item_str," [Provide Terminal Information]", 31);
-                       }
-               }
+               tcore_util_convert_string_to_utf8((unsigned char*) &item_str, (unsigned short *) &item_len,
+                               select_item_tlv->menu_item[local_index].dcs.a_format,
+                               (unsigned char*) &select_item_tlv->menu_item[local_index].text,
+                               (unsigned short) select_item_tlv->menu_item[local_index].text_len);
 
-               item_len = strlen(item_str);
-               dbg( "index(%d) item_id(%d) item_len(%d) item_string(%s)", index, select_item_tlv->menu_item[index].item_id, item_len, item_str);
-               g_variant_builder_add(v_builder, "(iis)", (gint32)(select_item_tlv->menu_item[index].item_id), item_len, item_str);
+               dbg( "index(%d) item_id(%d) item_len(%d) item_string(%s)", local_index, select_item_tlv->menu_item[local_index].item_id, item_len, item_str);
+               g_variant_builder_add(&v_builder, "(iis)", (gint32)(select_item_tlv->menu_item[local_index].item_id), item_len, item_str);
        }
-       menu_items = g_variant_builder_end(v_builder);
+       menu_items = g_variant_builder_end(&v_builder);
 
        // generate command id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SELECT_ITEM;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.selectItemInd), select_item_tlv, sizeof(struct tel_sat_select_item_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new_variant(menu_items);
-       icon_list = g_variant_new_variant(menu_items);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(select_item_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", select_item_tlv->icon_id.is_exist, select_item_tlv->icon_id.icon_qualifer, (gint32) select_item_tlv->icon_id.icon_identifier, (gint32) select_item_tlv->icon_id.icon_info.width,
+                       (gint32) select_item_tlv->icon_id.icon_info.height, select_item_tlv->icon_id.icon_info.ics, select_item_tlv->icon_id.icon_info.icon_data_len, select_item_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+
+       /* Icon list data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiv)"));
+       if(select_item_tlv->icon_list.is_exist) {
+               g_variant_builder_init(&v_builder_icon_list, G_VARIANT_TYPE ("a(iiiiis)"));
+               for(local_index= 0; local_index< (int)select_item_tlv->icon_list.icon_cnt; local_index++){
+                       g_variant_builder_add(&v_builder_icon_list, "(iiiiis)", (gint32) select_item_tlv->icon_list.icon_id_list[local_index], (gint32) select_item_tlv->icon_list.icon_info[local_index].width,
+                               (gint32) select_item_tlv->icon_list.icon_info[local_index].height, select_item_tlv->icon_list.icon_info[local_index].ics, select_item_tlv->icon_list.icon_info[local_index].icon_data_len, select_item_tlv->icon_list.icon_info[local_index].icon_file);
+               }
+               icon_list_info = g_variant_builder_end(&v_builder_icon_list);
+
+               g_variant_builder_add(&v_builder_icon, "(biiv)", select_item_tlv->icon_list.is_exist, select_item_tlv->icon_list.icon_qualifer, (gint32) select_item_tlv->icon_list.icon_cnt, icon_list_info);
+
+       }
+       icon_list = g_variant_builder_end(&v_builder_icon);
 
        select_item = g_variant_new("(ibsiiivvv)", command_id, help_info, text, text_len,
                        default_item_id, menu_cnt, menu_items, icon_id, icon_list);
-
+#else
+       select_item = g_variant_new("(ibsiiiv)", command_id, help_info, text, text_len,
+                       default_item_id, menu_cnt, menu_items);
+#endif
        return select_item;
 }
 
-GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv)
+GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *get_inkey = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, key_type = 0, input_character_mode = 0;
-       gint text_len = 0, duration = 0, tmp_duration = 0;
+       gushort text_len = 0;
+       gint duration = 0, tmp_duration = 0;
        gboolean b_numeric = FALSE, b_help_info = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting get inkey notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if (get_inkey_tlv->icon_id.is_exist && !get_inkey_tlv->text.string_length
-                       && (get_inkey_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)){
+       if(!get_inkey_tlv->text.string_length ||
+               (get_inkey_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS)){
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("get inkey - invalid parameter of TLVs is found!!");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = get_inkey_tlv->command_detail.cmd_num;
-               tr->cmd_type = get_inkey_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = get_inkey_tlv->command_detail.cmd_num;
+               tr.cmd_type = get_inkey_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.get_inkey.command_detail, &get_inkey_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.get_inkey.device_id.src = get_inkey_tlv->device_id.dest;
-               tr->terminal_rsp_data.get_inkey.device_id.dest = get_inkey_tlv->device_id.src;
-               tr->terminal_rsp_data.get_inkey.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*) &tr.terminal_rsp_data.get_inkey.command_detail,
+                       &get_inkey_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.get_inkey.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -655,7 +1032,7 @@ GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin
        b_help_info = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.help_info;
 
        //text & text len
-       sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+       tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                                                get_inkey_tlv->text.dcs.a_format ,
                                                                (unsigned char*)&get_inkey_tlv->text.string,
                                                                (unsigned short)get_inkey_tlv->text.string_length);
@@ -670,54 +1047,83 @@ GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_GET_INKEY;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.getInkeyInd), get_inkey_tlv, sizeof(struct tel_sat_get_inkey_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(get_inkey_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", get_inkey_tlv->icon_id.is_exist, get_inkey_tlv->icon_id.icon_qualifer, (gint32) get_inkey_tlv->icon_id.icon_identifier, (gint32) get_inkey_tlv->icon_id.icon_info.width,
+                               (gint32) get_inkey_tlv->icon_id.icon_info.height, get_inkey_tlv->icon_id.icon_info.ics, get_inkey_tlv->icon_id.icon_info.icon_data_len, get_inkey_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        get_inkey = g_variant_new("(iiibbsiiv)", command_id, key_type, input_character_mode, b_numeric,
                        b_help_info, text, text_len, duration, icon_id);
-
+#else
+       get_inkey = g_variant_new("(iiibbsii)", command_id, key_type, input_character_mode, b_numeric,
+                       b_help_info, text, text_len, duration);
+#endif
        return get_inkey;
 }
 
-GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_input_tlv* get_input_tlv)
+GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_input_tlv* get_input_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *get_input = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, input_character_mode = 0;
-       gint text_len = 0, def_text_len = 0, rsp_len_min = 0, rsp_len_max = 0;
+       gushort text_len = 0, def_text_len = 0;
+       gint rsp_len_min = 0, rsp_len_max = 0;
        gboolean b_numeric = FALSE, b_help_info = FALSE, b_echo_input = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX], def_text[SAT_TEXT_STRING_LEN_MAX];
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+       gchar def_text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting get input notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
+       memset(&def_text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if(get_input_tlv->icon_id.is_exist && get_input_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY ){
+#if GCF //disable the text length prb for GCF
+       if(
+               (get_input_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS) ||
+               (!get_input_tlv->rsp_len.max) || (get_input_tlv->rsp_len.min > get_input_tlv->rsp_len.max)){
+#else
+       if(!get_input_tlv->text.string_length ||
+               (get_input_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS) ||
+               (!get_input_tlv->rsp_len.max) || (get_input_tlv->rsp_len.min > get_input_tlv->rsp_len.max)){
+#endif
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("get input - invalid parameter of TLVs is found!!");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = get_input_tlv->command_detail.cmd_num;
-               tr->cmd_type = get_input_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = get_input_tlv->command_detail.cmd_num;
+               tr.cmd_type = get_input_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.get_input.command_detail, &get_input_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.get_input.device_id.src = get_input_tlv->device_id.dest;
-               tr->terminal_rsp_data.get_input.device_id.dest = get_input_tlv->device_id.src;
-               tr->terminal_rsp_data.get_input.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*) &tr.terminal_rsp_data.get_input.command_detail,
+                       &get_input_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.get_input.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -738,87 +1144,88 @@ GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *plugin
 
        //text & text len
        if(get_input_tlv->text.string_length){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                get_input_tlv->text.dcs.a_format ,
                                (unsigned char*)&get_input_tlv->text.string,
                                (unsigned short)get_input_tlv->text.string_length);
                dbg("get input text(%s)",text);
        }
-       else{
-               memcpy(text,"", 1);
-               text_len = 0;
-       }
 
        //response length min & max
        rsp_len_min = get_input_tlv->rsp_len.min;
        rsp_len_max = get_input_tlv->rsp_len.max;
 
+       /* 27.22.4.3.4 Expected Seq.4.2 */
+       if(input_character_mode == INPUT_ALPHABET_TYPE_UCS2 && rsp_len_max > SAT_USC2_INPUT_LEN_MAX)
+               rsp_len_max = SAT_USC2_INPUT_LEN_MAX;
+
        //default text & default text len
        if(get_input_tlv->default_text.string_length){
-               sat_mgr_convert_string((unsigned char*)&def_text,(unsigned short *)&def_text_len,
-                               get_input_tlv->text.dcs.a_format ,
+               int temp_len = get_input_tlv->default_text.string_length;
+               if(temp_len > rsp_len_max) {
+                       dbg("get input def_text_len(%d) is larger than rsp_len_max(%d)", temp_len, rsp_len_max);
+                       get_input_tlv->default_text.string_length = rsp_len_max;
+               }
+               tcore_util_convert_string_to_utf8((unsigned char*)&def_text,(unsigned short *)&def_text_len,
+                               get_input_tlv->default_text.dcs.a_format ,
                                (unsigned char*)&get_input_tlv->default_text.string,
                                (unsigned short)get_input_tlv->default_text.string_length);
-               dbg("get input default text(%s)",text);
+               dbg("get input default text(%s)",def_text);
        }
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_GET_INPUT;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.getInputInd), get_input_tlv, sizeof(struct tel_sat_get_input_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(get_input_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", get_input_tlv->icon_id.is_exist, get_input_tlv->icon_id.icon_qualifer, (gint32) get_input_tlv->icon_id.icon_identifier, (gint32) get_input_tlv->icon_id.icon_info.width,
+                                       (gint32) get_input_tlv->icon_id.icon_info.height, get_input_tlv->icon_id.icon_info.ics, get_input_tlv->icon_id.icon_info.icon_data_len, get_input_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        get_input = g_variant_new("(iibbbsiiisiv)", command_id, input_character_mode, b_numeric, b_help_info,
                        b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len, icon_id);
-
+#else
+       get_input = g_variant_new("(iibbbsiiisi)", command_id, input_character_mode, b_numeric, b_help_info,
+                       b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len);
+#endif
        return get_input;
 }
 
-GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_play_tone_tlv* play_tone_tlv)
+GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_play_tone_tlv* play_tone_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *play_tone = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, tone_type = 0, duration = 0, tmp_duration = 0;
-       gint text_len = 0;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gushort text_len = 0;
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting play tone notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (play_tone_tlv->icon_id.is_exist) && ( play_tone_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!play_tone_tlv->alpha_id.is_exist || !play_tone_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = play_tone_tlv->command_detail.cmd_num;
-               tr->cmd_type = play_tone_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.play_tone.command_detail, &play_tone_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.play_tone.device_id.src = play_tone_tlv->device_id.dest;
-               tr->terminal_rsp_data.play_tone.device_id.dest = play_tone_tlv->device_id.src;
-               tr->terminal_rsp_data.play_tone.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
-
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
-
        //text and text len
        if( play_tone_tlv->alpha_id.is_exist && play_tone_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                play_tone_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&play_tone_tlv->alpha_id.alpha_data,
                                (unsigned short)play_tone_tlv->alpha_id.alpha_data_len);
@@ -837,64 +1244,59 @@ GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *plugin
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_PLAY_TONE;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.play_tone), play_tone_tlv, sizeof(struct tel_sat_play_tone_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(play_tone_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", play_tone_tlv->icon_id.is_exist, play_tone_tlv->icon_id.icon_qualifer, (gint32) play_tone_tlv->icon_id.icon_identifier, (gint32) play_tone_tlv->icon_id.icon_info.width,
+                                       (gint32) play_tone_tlv->icon_id.icon_info.height, play_tone_tlv->icon_id.icon_info.ics, play_tone_tlv->icon_id.icon_info.icon_data_len, play_tone_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        play_tone = g_variant_new("(isivii)", command_id, text, text_len, icon_id, tone_type, duration);
-
+#else
+       play_tone = g_variant_new("(isiii)", command_id, text, text_len, tone_type, duration);
+#endif
        return play_tone;
 }
 
-GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_sms_tlv* send_sms_tlv)
+GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_sms_tlv* send_sms_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_sms = NULL;
        struct sat_manager_queue_data q_data;
 
-       int index = 0;
+       int local_index = 0;
        gint command_id = 0, ton = 0, npi = 0, tpdu_type = 0;
        gboolean b_packing_required = FALSE;
-       gint text_len = 0, number_len = 0, tpdu_data_len= 0;
+       gushort text_len = 0, number_len = 0, tpdu_data_len= 0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], dialling_number[SAT_DIALING_NUMBER_LEN_MAX];
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *tpdu_data = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send sms notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&dialling_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_sms_tlv->icon_id.is_exist) && ( send_sms_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_sms_tlv->alpha_id.is_exist || !send_sms_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_sms_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_sms_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &send_sms_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_sms.device_id.src = send_sms_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_sms.device_id.dest = send_sms_tlv->device_id.src;
-               tr->terminal_rsp_data.send_sms.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
-
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
-
        //text and text len
        if( send_sms_tlv->alpha_id.is_exist && send_sms_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_sms_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_sms_tlv->alpha_id.alpha_data,
                                (unsigned short)send_sms_tlv->alpha_id.alpha_data_len);
@@ -917,70 +1319,85 @@ GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *plugin_
        //tpdu data : type, data, data len
        tpdu_type = send_sms_tlv->sms_tpdu.tpdu_type;
        tpdu_data_len = send_sms_tlv->sms_tpdu.data_len;
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
-       for (index = 0; index < tpdu_data_len; index++) {
-               g_variant_builder_add(builder, "y", send_sms_tlv->sms_tpdu.data[index]);
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
+       for (local_index= 0; local_index < tpdu_data_len; local_index++) {
+               g_variant_builder_add(&builder, "y", send_sms_tlv->sms_tpdu.data[local_index]);
        }
-       tpdu_data = g_variant_builder_end(builder);
+       tpdu_data = g_variant_builder_end(&builder);
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_SMS;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.sendSMSInd), send_sms_tlv, sizeof(struct tel_sat_send_sms_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_sms_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_sms_tlv->icon_id.is_exist, send_sms_tlv->icon_id.icon_qualifer, (gint32) send_sms_tlv->icon_id.icon_identifier, (gint32) send_sms_tlv->icon_id.icon_info.width,
+                                       (gint32) send_sms_tlv->icon_id.icon_info.height, send_sms_tlv->icon_id.icon_info.ics, send_sms_tlv->icon_id.icon_info.icon_data_len, send_sms_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        send_sms = g_variant_new("(isivbiisiivi)", command_id, text, text_len, icon_id, b_packing_required,
                        ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
-
+#else
+       send_sms = g_variant_new("(isibiisiivi)", command_id, text, text_len, b_packing_required,
+                       ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
+#endif
        return send_sms;
 }
 
-GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ss_tlv* send_ss_tlv)
+GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_ss_tlv* send_ss_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_ss = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, ton = 0, npi = 0;
-       gint text_len, ss_str_len;
+       gushort text_len = 0;
+       gint ss_str_len = 0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], ss_string[SAT_SS_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send ss notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&ss_string, 0 , SAT_SS_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_ss_tlv->icon_id.is_exist) && ( send_ss_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_ss_tlv->alpha_id.is_exist || !send_ss_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       if(!send_ss_tlv->alpha_id.is_exist &&
+               (send_ss_tlv->icon_id.is_exist && send_ss_tlv->icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no alpha id and no self explanatory");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_ss_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_ss_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ss_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ss_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_ss.device_id.src = send_ss_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_ss.device_id.dest = send_ss_tlv->device_id.src;
-               tr->terminal_rsp_data.send_ss.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ss.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
                return NULL;
        }
 
        //text and text len
        if( send_ss_tlv->alpha_id.is_exist && send_ss_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_ss_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_ss_tlv->alpha_id.alpha_data,
                                (unsigned short)send_ss_tlv->alpha_id.alpha_data_len);
@@ -993,64 +1410,94 @@ GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *plugin_n
        ss_str_len = send_ss_tlv->ss_string.string_len;
        memcpy(ss_string, send_ss_tlv->ss_string.ss_string, SAT_SS_STRING_LEN_MAX);
 
+       if(!ss_str_len || (ss_str_len > SAT_SS_STRING_LEN_MAX) ){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no ss string");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ss_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ss_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ss.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_SS;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_ss), send_ss_tlv, sizeof(struct tel_sat_send_ss_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       send_ss = g_variant_new("(isiviiis)", command_id, text, text_len, icon_id,
-                       ton, npi, ss_str_len, ss_string);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_ss_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_ss_tlv->icon_id.is_exist, send_ss_tlv->icon_id.icon_qualifer, (gint32) send_ss_tlv->icon_id.icon_identifier, (gint32) send_ss_tlv->icon_id.icon_info.width,
+                                       (gint32) send_ss_tlv->icon_id.icon_info.height, send_ss_tlv->icon_id.icon_info.ics, send_ss_tlv->icon_id.icon_info.icon_data_len, send_ss_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       send_ss = g_variant_new("(isiviiis)", command_id, text, text_len, icon_id, ton, npi, ss_str_len, ss_string);
+#else
+       send_ss = g_variant_new("(isiiiis)", command_id, text, text_len, ton, npi, ss_str_len, ss_string);
+#endif
        return send_ss;
 }
 
-GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ussd_tlv* send_ussd_tlv)
+GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_ussd_tlv* send_ussd_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_ussd = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0;
-       gint text_len, ussd_str_len;
+       guchar dcs = 0;
+       gushort text_len = 0, ussd_str_len = 0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], ussd_string[SAT_USSD_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send ussd notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&ussd_string, 0 , SAT_USSD_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_ussd_tlv->icon_id.is_exist) && ( send_ussd_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_ussd_tlv->alpha_id.is_exist || !send_ussd_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       if(!send_ussd_tlv->alpha_id.is_exist &&
+               (send_ussd_tlv->icon_id.is_exist && send_ussd_tlv->icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no alpha id and no self explanatory");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_ussd_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_ussd_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ussd_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ussd_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_ussd.device_id.src = send_ussd_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_ussd.device_id.dest = send_ussd_tlv->device_id.src;
-               tr->terminal_rsp_data.send_ussd.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ussd.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
                return NULL;
        }
 
        //text and text len
        if( send_ussd_tlv->alpha_id.is_exist && send_ussd_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_ussd_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_ussd_tlv->alpha_id.alpha_data,
                                (unsigned short)send_ussd_tlv->alpha_id.alpha_data_len);
@@ -1058,40 +1505,77 @@ GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *plugin
        }
 
        //ussd string
-       sat_mgr_convert_string((unsigned char*)&ussd_string,(unsigned short *)&ussd_str_len,
+       dcs = send_ussd_tlv->ussd_string.dsc.raw_dcs;
+       tcore_util_convert_string_to_utf8((unsigned char*)&ussd_string,(unsigned short *)&ussd_str_len,
                                send_ussd_tlv->ussd_string.dsc.a_format,
                                (unsigned char*)&send_ussd_tlv->ussd_string.ussd_string,
                                (unsigned short)send_ussd_tlv->ussd_string.string_len);
 
+
+       if(!ussd_str_len || (ussd_str_len > SAT_USSD_STRING_LEN_MAX) ){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no ss string");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ussd_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ussd_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ussd.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_USSD;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_ussd), send_ussd_tlv, sizeof(struct tel_sat_send_ussd_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       send_ussd = g_variant_new("(isivis)", command_id, text, text_len, icon_id, ussd_str_len, ussd_string);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_ussd_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_ussd_tlv->icon_id.is_exist, send_ussd_tlv->icon_id.icon_qualifer, (gint32) send_ussd_tlv->icon_id.icon_identifier, (gint32) send_ussd_tlv->icon_id.icon_info.width,
+                                       (gint32) send_ussd_tlv->icon_id.icon_info.height, send_ussd_tlv->icon_id.icon_info.ics, send_ussd_tlv->icon_id.icon_info.icon_data_len, send_ussd_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       send_ussd = g_variant_new("(isivyis)", command_id, text, text_len, icon_id, dcs, ussd_str_len, ussd_string);
+#else
+       send_ussd = g_variant_new("(isiyis)", command_id, text, text_len, dcs, ussd_str_len, ussd_string);
+#endif
        return send_ussd;
 }
 
-GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_call_tlv* setup_call_tlv)
+GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_call_tlv* setup_call_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *setup_call = NULL;
        struct sat_manager_queue_data q_data;
+       struct treq_sat_terminal_rsp_data tr;
 
-       gint command_id = 0, call_type = 0, text_len = 0, duration = 0;
-       gchar text[SAT_TEXT_STRING_LEN_MAX], call_number[SAT_DIALING_NUMBER_LEN_MAX];
+       gushort text_len = 0, confirm_text_len = 0;
+       gint command_id = 0, call_type = 0, duration = 0;
+       gchar confirm_text[SAT_TEXT_STRING_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], call_number[SAT_DIALING_NUMBER_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting setup call notification");
+       memset(&confirm_text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&call_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
+       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1099,39 +1583,43 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
 
        if(setup_call_tlv->duration.time_interval > 0)
        {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] redial is not supported.\n");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_call_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_call_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_call.device_id.src = setup_call_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
-
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
+               tr.terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+               goto SEND_TR;
        }
 
        //check for subaddress field
        if(setup_call_tlv->subaddress.subaddress_len > 0)
        {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] Sub address is not supported > 0)");
+               tr.terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+               goto SEND_TR;
+               return NULL;
+       }
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_call_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_call_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_call.device_id.src = setup_call_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+       if(setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call == SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY ||
+          setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call == SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY_WITH_REDIAL)
+       {
+               GSList *co_list = NULL;
+               CoreObject *co_call = NULL;
+               int total_call_cnt = 0;
+
+               co_list = tcore_plugin_get_core_objects_bytype(plg, CORE_OBJECT_TYPE_CALL);
+               if ( !co_list ) {
+                       dbg("[ error ] co_list : 0");
+                       tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       goto SEND_TR;
+               }
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
+               co_call = (CoreObject *)co_list->data;
+               g_slist_free(co_list);
+               total_call_cnt = tcore_call_object_total_length(co_call);
+               if (total_call_cnt){
+                       dbg("[SAT] Another call in progress hence rejecting. total_call_cnt: %d", total_call_cnt);
+                       tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr.terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_ME_BUSY_ON_CALL;
+                       goto SEND_TR;
+               }
        }
 
        //call type
@@ -1139,25 +1627,20 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
 
        //call display data
        if(setup_call_tlv->call_setup_alpha_id.alpha_data_len != 0){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                setup_call_tlv->call_setup_alpha_id.dcs.a_format,
                                (unsigned char*)&setup_call_tlv->call_setup_alpha_id.alpha_data,
                                (unsigned short)setup_call_tlv->call_setup_alpha_id.alpha_data_len);
        }
-       else{
-               if(setup_call_tlv->user_confirm_alpha_id.alpha_data_len != 0){
-                       sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
-                                       setup_call_tlv->user_confirm_alpha_id.dcs.a_format,
-                                       (unsigned char*)&setup_call_tlv->user_confirm_alpha_id.alpha_data,
-                                       (unsigned short)setup_call_tlv->user_confirm_alpha_id.alpha_data_len);
-               }
-               else{
-                       memcpy(text, setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
-                       text_len = setup_call_tlv->address.dialing_number_len;
-               }
-       }
        dbg("setup call display text (%s)",text);
 
+       if(setup_call_tlv->user_confirm_alpha_id.alpha_data_len != 0){
+               tcore_util_convert_string_to_utf8((unsigned char*)&confirm_text,(unsigned short *)&confirm_text_len,
+                               setup_call_tlv->user_confirm_alpha_id.dcs.a_format,
+                               (unsigned char*)&setup_call_tlv->user_confirm_alpha_id.alpha_data,
+                               (unsigned short)setup_call_tlv->user_confirm_alpha_id.alpha_data_len);
+       }
+
        //call number
        if(setup_call_tlv->address.ton == TON_INTERNATIONAL){
                call_number[0] = '+';
@@ -1166,7 +1649,7 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
        else{
                memcpy(call_number,setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
        }
-       dbg("setup call call number(%s)",setup_call_tlv->address.dialing_number);
+       dbg("setup call call number: origin(%s), final(%s)",setup_call_tlv->address.dialing_number, call_number);
 
        //duration
        if(setup_call_tlv->duration.time_interval > 0)
@@ -1175,32 +1658,53 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SETUP_CALL;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.setup_call), setup_call_tlv, sizeof(struct tel_sat_setup_call_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       setup_call = g_variant_new("(isivisi)", command_id, text, text_len, icon_id, call_type, call_number, duration);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(setup_call_tlv->call_setup_icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", setup_call_tlv->call_setup_icon_id.is_exist, setup_call_tlv->call_setup_icon_id.icon_qualifer, (gint32) setup_call_tlv->call_setup_icon_id.icon_identifier, (gint32) setup_call_tlv->call_setup_icon_id.icon_info.width,
+                                       (gint32) setup_call_tlv->call_setup_icon_id.icon_info.height, setup_call_tlv->call_setup_icon_id.icon_info.ics, setup_call_tlv->call_setup_icon_id.icon_info.icon_data_len, setup_call_tlv->call_setup_icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       setup_call = g_variant_new("(isisivisi)", command_id, confirm_text, confirm_text_len, text, text_len, icon_id, call_type, call_number, duration);
+#else
+       setup_call = g_variant_new("(isisiisi)", command_id, confirm_text, confirm_text_len, text, text_len, call_type, call_number, duration);
+#endif
        return setup_call;
+
+SEND_TR:
+       tr.cmd_number = setup_call_tlv->command_detail.cmd_num;
+       tr.cmd_type = setup_call_tlv->command_detail.cmd_type;
+       memcpy((void*)&tr.terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr.terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
+       tr.terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
+       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+       return NULL;
 }
 
-GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_event_list_tlv *event_list_tlv)
+GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_event_list_tlv *event_list_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *event_list = NULL;
 
-       int index = 0;
+       int local_index = 0;
        gboolean rv = FALSE;
        gint event_cnt = 0;
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *evt_list = NULL;
        struct treq_sat_terminal_rsp_data *tr = NULL;
 
        dbg("interpreting event list notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1209,18 +1713,25 @@ GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char
        //event cnt
        event_cnt = event_list_tlv->event_list.event_list_cnt;
        dbg("event cnt(%d)", event_cnt);
+       // reset evnet list
+       memset(g_evt_list, 0, SAT_EVENT_DOWNLOAD_MAX);
 
        //get event
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ai"));
-       for (index = 0; index < event_cnt; index++) {
-               g_variant_builder_add(builder, "i", event_list_tlv->event_list.evt_list[index]);
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ai"));
+       for (local_index = 0; local_index < event_cnt; local_index++) {
+               g_variant_builder_add(&builder, "i", event_list_tlv->event_list.evt_list[local_index]);
+               if(event_list_tlv->event_list.evt_list[local_index] >= SAT_EVENT_DOWNLOAD_MAX)
+                       continue;
+               g_evt_list[event_list_tlv->event_list.evt_list[local_index]] = TRUE;
        }
-       evt_list = g_variant_builder_end(builder);
+       evt_list = g_variant_builder_end(&builder);
 
        event_list = g_variant_new("(iv)", event_cnt, evt_list);
 
        //send TR - does not need from application's response
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return NULL;
        tr->cmd_number = event_list_tlv->command_detail.cmd_num;
        tr->cmd_type = event_list_tlv->command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.setup_event_list.command_detail, &event_list_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -1230,55 +1741,59 @@ GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char
        tr->terminal_rsp_data.setup_event_list.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
        rv = sat_manager_check_availiable_event_list(event_list_tlv);
-       if(!rv){
-               tr->terminal_rsp_data.setup_event_list.result_type = RESULT_SUCCESS_WITH_MISSING_INFO;
-       }
+       dbg("rv of sat_manager_check_availiable_event_list()=[%d]", rv);
 
        sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       g_free(tr);
 
        return event_list;
 }
 
-GVariant* sat_manager_setup_idle_mode_text_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_idle_mode_text_tlv *idle_mode_tlv)
+GVariant* sat_manager_setup_idle_mode_text_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_idle_mode_text_tlv *idle_mode_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *idle_mode = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0;
-       gint text_len;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gushort text_len = 0;
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting setup idle mode text notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( ((idle_mode_tlv->icon_id.is_exist) && ( idle_mode_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY))
-                       || idle_mode_tlv->text.string_length == 0 )
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = idle_mode_tlv->command_detail.cmd_num;
-               tr->cmd_type = idle_mode_tlv->command_detail.cmd_type;
+       if(!idle_mode_tlv->text.string_length && decode_error != TCORE_SAT_SUCCESS){
+               struct treq_sat_terminal_rsp_data tr;
 
-               memcpy((void*)&tr->terminal_rsp_data.setup_idle_mode_text.command_detail, &idle_mode_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = idle_mode_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = idle_mode_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               dbg("setup idle mode text - invalid parameter of TLVs is found!!");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = idle_mode_tlv->command_detail.cmd_num;
+               tr.cmd_type = idle_mode_tlv->command_detail.cmd_type;
+
+               memcpy((void*) &tr.terminal_rsp_data.setup_idle_mode_text.command_detail,
+                       &idle_mode_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
-       sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+       tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                        idle_mode_tlv->text.dcs.a_format,
                        (unsigned char*)&idle_mode_tlv->text.string,
                        (unsigned short)idle_mode_tlv->text.string_length);
@@ -1288,41 +1803,107 @@ GVariant* sat_manager_setup_idle_mode_text_noti(struct custom_data *ctx, const c
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.idle_mode), idle_mode_tlv, sizeof(struct tel_sat_setup_idle_mode_text_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(idle_mode_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", idle_mode_tlv->icon_id.is_exist, idle_mode_tlv->icon_id.icon_qualifer, (gint32) idle_mode_tlv->icon_id.icon_identifier, (gint32) idle_mode_tlv->icon_id.icon_info.width,
+                                       (gint32) idle_mode_tlv->icon_id.icon_info.height, idle_mode_tlv->icon_id.icon_info.ics, idle_mode_tlv->icon_id.icon_info.icon_data_len, idle_mode_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        idle_mode = g_variant_new("(isiv)", command_id, text, text_len, icon_id);
-
+#else
+       idle_mode = g_variant_new("(isi)", command_id, text, text_len);
+#endif
        return idle_mode;
 }
 
-GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_open_channel_tlv *open_channel_tlv)
+GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_open_channel_tlv *open_channel_tlv)
 {
        TcorePlugin *plg = NULL;
+       CoreObject *co_call = NULL;
+       CoreObject *co_network = NULL;
+
+       GSList* call_active_list = NULL;
+       enum telephony_network_access_technology result = 0;
+
        GVariant *open_channel = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, bearer_type = 0, protocol_type = 0, dest_addr_type = 0;
        gboolean immediate_link = FALSE, auto_reconnection = FALSE, bg_mode = FALSE;
-       gint text_len = 0, buffer_size = 0, port_number = 0;
+       gushort text_len = 0;
+       gint buffer_size = 0, port_number = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX], dest_address[SAT_OTHER_ADDR_LEN_MAX];
-       GVariant *icon_id = NULL;
        GVariant *bearer_param = NULL;
        GVariant *bearer_detail = NULL;
-
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id = NULL;
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting open channel notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
        memset(&dest_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
+       co_call = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_CALL);
+       co_network = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_NETWORK);
+       if(!co_call || !co_network){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("call or network co_obj does not exist");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = open_channel_tlv->command_detail.cmd_num;
+               tr.cmd_type = open_channel_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &open_channel_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               tr.terminal_rsp_data.open_channel.me_problem_type = ME_PROBLEM_NO_SERVICE;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.bearer_desc, &open_channel_tlv->bearer_desc, sizeof(struct tel_sat_bearer_description));
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+
+               return NULL;
+       }
+
+       call_active_list = tcore_call_object_find_by_status(co_call, TCORE_CALL_STATUS_ACTIVE);
+       tcore_network_get_access_technology(co_network,&result);
+       if(result < NETWORK_ACT_UMTS && call_active_list){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("call is busy in not 3G state atc(%d)", result);
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = open_channel_tlv->command_detail.cmd_num;
+               tr.cmd_type = open_channel_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &open_channel_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               tr.terminal_rsp_data.open_channel.me_problem_type = ME_PROBLEM_ME_BUSY_ON_CALL;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.bearer_desc, &open_channel_tlv->bearer_desc, sizeof(struct tel_sat_bearer_description));
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               g_slist_free(call_active_list);
+               return NULL;
+       }
+
+
        //immediate link
        immediate_link = open_channel_tlv->command_detail.cmd_qualifier.open_channel.immediate_link;
 
@@ -1334,7 +1915,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
        //open channel text
        if(open_channel_tlv->alpha_id.is_exist && open_channel_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                open_channel_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&open_channel_tlv->alpha_id.alpha_data,
                                (unsigned short)open_channel_tlv->alpha_id.alpha_data_len);
@@ -1353,7 +1934,8 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
        //data destination address
        dest_addr_type = open_channel_tlv->data_destination_address.address_type;
-       memcpy(dest_address, open_channel_tlv->data_destination_address.address, open_channel_tlv->data_destination_address.address_len);
+       memcpy(dest_address,  open_channel_tlv->data_destination_address.address,
+                       open_channel_tlv->data_destination_address.address_len);
        dbg("destination IP address (%s)", dest_address);
 
        //bearer type
@@ -1367,7 +1949,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        //bearer detail
                        gint ton = 0, npi = 0, time_duration1 = 0, time_duration2 = 0, other_addr_type = 0;
-                       gint login_len = 0, pwd_len = 0;
+                       gushort login_len = 0, pwd_len = 0;
                        gchar dialling_number[SAT_DIALING_NUMBER_LEN_MAX], sub_addr[SAT_SUB_ADDR_LEN_MAX];
                        gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
                        gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
@@ -1398,12 +1980,12 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        other_addr_type = open_channel_tlv->bearer_detail.cs_bearer.other_address.address_type;
                        memcpy(other_address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address_len);
 
-                       sat_mgr_convert_string((unsigned char*) &login, (unsigned short *) &login_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
                                        open_channel_tlv->bearer_detail.cs_bearer.text_user_login.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string_length);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                        open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string_length);
@@ -1418,7 +2000,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        //bearer detail
                        gint other_addr_type = 0;
-                       gint login_len = 0, pwd_len = 0;
+                       gushort login_len = 0, pwd_len = 0;
                        gchar network_access_name[SAT_NET_ACC_NAM_LEN_MAX];
                        gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
                        gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
@@ -1438,17 +2020,17 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        bearer_param = g_variant_new("(iiiiii)", precedence_class, delay_class, reliability_class, peak_class, mean_class, pdp_type);
 
-                       memcpy(network_access_name, open_channel_tlv->bearer_detail.ps_bearer.network_access_name.network_access_name, open_channel_tlv->bearer_detail.ps_bearer.network_access_name.length);
-
+                       memcpy(network_access_name, open_channel_tlv->bearer_detail.ps_bearer.network_access_name.network_access_name,
+                                       open_channel_tlv->bearer_detail.ps_bearer.network_access_name.length);
                        other_addr_type = open_channel_tlv->bearer_detail.ps_bearer.other_address.address_type;
                        memcpy(other_address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address_len);
 
-                       sat_mgr_convert_string((unsigned char*) &login, (unsigned short *) &login_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
                                        open_channel_tlv->bearer_detail.ps_bearer.text_user_login.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string_length);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                        open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string_length);
@@ -1461,7 +2043,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        //bearer detail
                        gint other_addr_type = 0;
-                       gint login_len = 0, pwd_len = 0;
+                       gushort login_len = 0, pwd_len = 0;
                        gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
                        gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
 
@@ -1475,12 +2057,12 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        other_addr_type = open_channel_tlv->bearer_detail.default_bearer.other_address.address_type;
                        memcpy(other_address, open_channel_tlv->bearer_detail.default_bearer.other_address.address, open_channel_tlv->bearer_detail.default_bearer.other_address.address_len);
 
-                       sat_mgr_convert_string((unsigned char*) &login, (unsigned short *) &login_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
                                        open_channel_tlv->bearer_detail.default_bearer.text_user_login.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_login.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_login.string_length);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                        open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
@@ -1492,7 +2074,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        //bearer param
 
                        //bearer detail
-                       gint pwd_len = 0;
+                       gushort pwd_len = 0;
                        gint remote_address_type =0, time_duration1 = 0, time_duration2 = 0;
                        gchar remote_address[SAT_REMOTE_ENTITY_ADDR_LEN_MAX];
                        gchar pwd[SAT_TEXT_STRING_LEN_MAX];
@@ -1506,7 +2088,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        time_duration1 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration1);
                        time_duration2 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration2);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                                                                        open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
                                                                                        (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
                                                                                        (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
@@ -1525,33 +2107,56 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_OPEN_CHANNEL;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.open_channel), open_channel_tlv, sizeof(struct tel_sat_open_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
+               dbg("orange request - do not show the popup");
+               _sat_manager_handle_open_channel_confirm(ctx, plg, command_id, USER_CONFIRM_YES, NULL);
+               return open_channel;
+#endif
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(open_channel_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", open_channel_tlv->icon_id.is_exist, open_channel_tlv->icon_id.icon_qualifer, (gint32) open_channel_tlv->icon_id.icon_identifier, (gint32) open_channel_tlv->icon_id.icon_info.width,
+                                       (gint32) open_channel_tlv->icon_id.icon_info.height, open_channel_tlv->icon_id.icon_info.ics, open_channel_tlv->icon_id.icon_info.icon_data_len, open_channel_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+       //execute bip
+       //sat_ui_support_exec_bip();
 
        open_channel = g_variant_new("(isivbbbiviiiisv)", command_id, text, text_len, icon_id, immediate_link, auto_reconnection, bg_mode,
                        bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
-
+#else
+       open_channel = g_variant_new("(isibbbiviiiisv)", command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
+#endif
        return open_channel;
 }
 
-GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_close_channel_tlv *close_channel_tlv)
+GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_close_channel_tlv *close_channel_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *close_channel = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, channel_id = 0;
-       gint text_len = 0;
+       gushort text_len = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting close channel notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1562,7 +2167,7 @@ GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *pl
 
        //close channel text
        if(close_channel_tlv->alpha_id.is_exist && close_channel_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                close_channel_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&close_channel_tlv->alpha_id.alpha_data,
                                (unsigned short)close_channel_tlv->alpha_id.alpha_data_len);
@@ -1571,32 +2176,47 @@ GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *pl
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_CLOSE_CHANNEL;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.close_channel), close_channel_tlv, sizeof(struct tel_sat_close_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(close_channel_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", close_channel_tlv->icon_id.is_exist, close_channel_tlv->icon_id.icon_qualifer, (gint32) close_channel_tlv->icon_id.icon_identifier, (gint32) close_channel_tlv->icon_id.icon_info.width,
+                                       (gint32) close_channel_tlv->icon_id.icon_info.height, close_channel_tlv->icon_id.icon_info.ics, close_channel_tlv->icon_id.icon_info.icon_data_len, close_channel_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        close_channel = g_variant_new("(isivi)", command_id, text, text_len, icon_id, channel_id);
-
+#else
+       close_channel = g_variant_new("(isii)", command_id, text, text_len, channel_id);
+#endif
        return close_channel;
 }
 
-GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_receive_channel_tlv *receive_data_tlv)
+GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_receive_channel_tlv *receive_data_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *receive_data = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, channel_id = 0;
-       gint text_len = 0, channel_data_len = 0;
+       gushort text_len = 0;
+       gint channel_data_len = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting receive data notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1607,7 +2227,7 @@ GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plu
 
        //receive data text
        if(receive_data_tlv->alpha_id.is_exist && receive_data_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                receive_data_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&receive_data_tlv->alpha_id.alpha_data,
                                (unsigned short)receive_data_tlv->alpha_id.alpha_data_len);
@@ -1618,36 +2238,50 @@ GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plu
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_RECEIVE_DATA;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.receive_data), receive_data_tlv, sizeof(struct tel_sat_receive_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(receive_data_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", receive_data_tlv->icon_id.is_exist, receive_data_tlv->icon_id.icon_qualifer, (gint32) receive_data_tlv->icon_id.icon_identifier, (gint32) receive_data_tlv->icon_id.icon_info.width,
+                                       (gint32) receive_data_tlv->icon_id.icon_info.height, receive_data_tlv->icon_id.icon_info.ics, receive_data_tlv->icon_id.icon_info.icon_data_len, receive_data_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        receive_data = g_variant_new("(isivii)", command_id, text, text_len, icon_id, channel_id, channel_data_len);
-
+#else
+       receive_data = g_variant_new("(isiii)", command_id, text, text_len, channel_id, channel_data_len);
+#endif
        return receive_data;
 }
 
-GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_channel_tlv *send_data_tlv)
+GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_channel_tlv *send_data_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_data = NULL;
        struct sat_manager_queue_data q_data;
 
-       int index = 0;
+       int local_index = 0;
        gint command_id = 0, channel_id = 0, data_len = 0;
        gboolean send_data_immediately = FALSE;
-       gint text_len = 0;
+       gushort text_len = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX];
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *channel_data = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send data notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1661,7 +2295,7 @@ GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *plugin
 
        //send data text
        if(send_data_tlv->alpha_id.is_exist && send_data_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_data_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_data_tlv->alpha_id.alpha_data,
                                (unsigned short)send_data_tlv->alpha_id.alpha_data_len);
@@ -1669,28 +2303,40 @@ GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *plugin
 
        //channel data, data len
        data_len = send_data_tlv->channel_data.data_string_len;
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
-       for (index = 0; index < data_len; index++) {
-               dbg("send data index(%d) data(0x%x)",index, send_data_tlv->channel_data.data_string[index]);
-               g_variant_builder_add(builder, "y", send_data_tlv->channel_data.data_string[index]);
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
+       for (local_index = 0; local_index < data_len; local_index++) {
+               //dbg("send data index(%d) data(0x%x)",index, send_data_tlv->channel_data.data_string[index]);
+               g_variant_builder_add(&builder, "y", send_data_tlv->channel_data.data_string[local_index]);
        }
-       channel_data = g_variant_builder_end(builder);
+       channel_data = g_variant_builder_end(&builder);
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_DATA;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_data), send_data_tlv, sizeof(struct tel_sat_send_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_data_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_data_tlv->icon_id.is_exist, send_data_tlv->icon_id.icon_qualifer, (gint32) send_data_tlv->icon_id.icon_identifier, (gint32) send_data_tlv->icon_id.icon_info.width,
+                                       (gint32) send_data_tlv->icon_id.icon_info.height, send_data_tlv->icon_id.icon_info.ics, send_data_tlv->icon_id.icon_info.icon_data_len, send_data_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        send_data = g_variant_new("(isivibvi)", command_id, text, text_len, icon_id, channel_id, send_data_immediately, channel_data, data_len);
-
+#else
+       send_data = g_variant_new("(isiibvi)", command_id, text, text_len, channel_id, send_data_immediately, channel_data, data_len);
+#endif
        return send_data;
 }
 
-GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_channel_status_tlv *get_channel_status_tlv)
+GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_channel_status_tlv *get_channel_status_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *get_channel_status = NULL;
@@ -1700,7 +2346,7 @@ GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const cha
 
        dbg("interpreting get channel status notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1709,8 +2355,11 @@ GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const cha
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_GET_CHANNEL_STATUS;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.get_channel_status), get_channel_status_tlv, sizeof(struct tel_sat_get_channel_status_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
        get_channel_status = g_variant_new("(i)", command_id);
@@ -1718,21 +2367,23 @@ GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const cha
        return get_channel_status;
 }
 
-GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_refresh_tlv *refresh_tlv)
+GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_refresh_tlv *refresh_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *refresh = NULL;
+#if !defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
        struct sat_manager_queue_data q_data;
+#endif
 
        gint command_id = 0;
        gint refresh_type =0;
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *file_list = NULL;
-       int index = 0;
+       int local_index = 0;
 
        dbg("interpreting refresh notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1740,38 +2391,52 @@ GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *plugin_n
 
        refresh_type = refresh_tlv->command_detail.cmd_qualifier.refresh.refresh;
 
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ai"));
-       for (index = 0; index < refresh_tlv->file_list.file_count; index++) {
-               g_variant_builder_add(builder, "i", refresh_tlv->file_list.file_id[index]);
+       if(refresh_type != SIM_REFRESH_CMD_FCN) {
+               dbg("reset event list.");
+               memset(g_evt_list, 0, SAT_EVENT_DOWNLOAD_MAX);
+       }
+
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ai"));
+       for (local_index = 0; local_index < refresh_tlv->file_list.file_count; local_index++) {
+               g_variant_builder_add(&builder, "i", refresh_tlv->file_list.file_id[local_index]);
        }
-       file_list = g_variant_builder_end(builder);
+       file_list = g_variant_builder_end(&builder);
 
        //enqueue data and generate cmd_id
-       memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
-       q_data.cmd_type = SAT_PROATV_CMD_REFRESH;
-       memcpy((void*)&(q_data.cmd_data.refresh), refresh_tlv, sizeof(struct tel_sat_refresh_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
-       command_id = q_data.cmd_id;
+#if !defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
+               memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
+               q_data.cmd_type = SAT_PROATV_CMD_REFRESH;
+               q_data.cp_name = g_strdup(cp_name);
+               memcpy((void*)&(q_data.cmd_data.refresh), refresh_tlv, sizeof(struct tel_sat_refresh_tlv));
+               if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+                       g_free(q_data.cp_name);
+               }
+               command_id = q_data.cmd_id;
+#endif
 
        refresh = g_variant_new("(iiv)", command_id, refresh_type, file_list);
 
        return refresh;
 }
 
-void sat_manager_more_time_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_more_time_tlv *more_time_tlv)
+void sat_manager_more_time_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_more_time_tlv *more_time_tlv)
 {
        TcorePlugin *plg = NULL;
        struct treq_sat_terminal_rsp_data *tr = NULL;
 
        dbg("interpreting more time notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return;
        }
+
        //send TR - does not need from application's response
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return;
+
        tr->cmd_number = more_time_tlv->command_detail.cmd_num;
        tr->cmd_type = more_time_tlv->command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.more_time.command_detail, &more_time_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -1781,51 +2446,79 @@ void sat_manager_more_time_noti(struct custom_data *ctx, const char *plugin_name
        tr->terminal_rsp_data.more_time.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
        sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       g_free(tr);
+
+       return;
 }
 
-GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_dtmf_tlv *send_dtmf_tlv)
+GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_dtmf_tlv *send_dtmf_tlv)
 {
        TcorePlugin *plg = NULL;
+       CoreObject *co_call = NULL;
+       GSList* call_active_list = NULL;
+
        GVariant *send_dtmf = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0;
-       gint text_len =0, dtmf_str_len =0;
+       gushort text_len =0;
+       gint dtmf_str_len =0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], dtmf_str[SAT_DTMF_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send dtmf notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&dtmf_str, 0 , SAT_DTMF_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_dtmf_tlv->icon_id.is_exist) && ( send_dtmf_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_dtmf_tlv->alpha_id.is_exist || !send_dtmf_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       co_call = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_CALL);
+       if(!co_call){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("call object does not exist");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_dtmf_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_dtmf_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_dtmf_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_dtmf_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_dtmf.device_id.src = send_dtmf_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_dtmf.device_id.dest = send_dtmf_tlv->device_id.src;
-               tr->terminal_rsp_data.send_dtmf.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_dtmf.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_dtmf.result_type = RESULT_BEYOND_ME_CAPABILITIES;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
+       call_active_list = tcore_call_object_find_by_status(co_call, TCORE_CALL_STATUS_ACTIVE);
+       if(!call_active_list){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no active call");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_dtmf_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_dtmf_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_dtmf.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               tr.terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NOT_IN_SPEECH_CALL;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
                return NULL;
        }
+       g_slist_free(call_active_list);
 
        //text and text len
        if( send_dtmf_tlv->alpha_id.is_exist && send_dtmf_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_dtmf_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_dtmf_tlv->alpha_id.alpha_data,
                                (unsigned short)send_dtmf_tlv->alpha_id.alpha_data_len);
@@ -1839,59 +2532,127 @@ GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *plugin
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_DTMF;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_dtmf), send_dtmf_tlv, sizeof(struct tel_sat_send_dtmf_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       send_dtmf = g_variant_new("(isivis)", command_id, text, text_len, icon_id,
-                       dtmf_str_len, dtmf_str);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_dtmf_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_dtmf_tlv->icon_id.is_exist, send_dtmf_tlv->icon_id.icon_qualifer, (gint32) send_dtmf_tlv->icon_id.icon_identifier, (gint32) send_dtmf_tlv->icon_id.icon_info.width,
+                                       (gint32) send_dtmf_tlv->icon_id.icon_info.height, send_dtmf_tlv->icon_id.icon_info.ics, send_dtmf_tlv->icon_id.icon_info.icon_data_len, send_dtmf_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       send_dtmf = g_variant_new("(isivis)", command_id, text, text_len, icon_id, dtmf_str_len, dtmf_str);
+#else
+       send_dtmf = g_variant_new("(isiis)", command_id, text, text_len, dtmf_str_len, dtmf_str);
+#endif
        return send_dtmf;
 }
 
-GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_launch_browser_tlv *launch_browser_tlv)
+GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_launch_browser_tlv *launch_browser_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *launch_browser = NULL;
        struct sat_manager_queue_data q_data;
 
+#if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
+       gboolean b_app_running = FALSE;
+#endif
        gint command_id = 0;
-       gint browser_id = 0;
-       gint url_len =0, text_len =0, gateway_proxy_len =0;
+       gint browser_launch_type = 0, browser_id = 0;
+       gint url_len =0;
+       gushort text_len =0, gateway_proxy_len =0;
        gchar url[SAT_URL_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], gateway_proxy[SAT_TEXT_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting launch browser notification");
        memset(&url, 0 , SAT_URL_LEN_MAX);
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&gateway_proxy, 0 , SAT_TEXT_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (launch_browser_tlv->user_confirm_icon_id.is_exist) && ( launch_browser_tlv->user_confirm_icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!launch_browser_tlv->user_confirm_alpha_id.is_exist || !launch_browser_tlv->user_confirm_alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       if(!launch_browser_tlv->user_confirm_alpha_id.is_exist &&
+               (launch_browser_tlv->user_confirm_icon_id.is_exist && launch_browser_tlv->user_confirm_icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no alpha id and no self explanatory");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = launch_browser_tlv->command_detail.cmd_num;
-               tr->cmd_type = launch_browser_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
+               tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.launch_browser.device_id.src = launch_browser_tlv->device_id.dest;
-               tr->terminal_rsp_data.launch_browser.device_id.dest = launch_browser_tlv->device_id.src;
-               tr->terminal_rsp_data.launch_browser.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.launch_browser.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
+#if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
+       b_app_running = sat_ui_check_app_is_running("org.tizen.browser");
+#endif
+       //browser launch type
+       browser_launch_type = launch_browser_tlv->command_detail.cmd_qualifier.launch_browser.launch_browser;
+
+       /* ORA PLM P131004-00081:Launch browser while session already opened.
+        * Tizen-SAT looks at command qualifier only when ME in GCF mode.
+        *
+        * 2013.12.10 : Now, GCF certificate permits device option that "Terminal supports
+        * browser with multiple sessions/taps" so we don't need GCF feature anymore and
+        * therefore disabled here.
+        */
+#if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
+       if(browser_launch_type == LAUNCH_BROWSER_IF_NOT_ALREADY_LAUNCHED && b_app_running){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("browser is already running type(%d)", browser_launch_type);
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
+               tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.launch_browser.result_type = RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE;
+               tr.terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_BROWSER_UNAVAILABLE;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+
+               return NULL;
+       }
+       else if( (browser_launch_type == LAUNCH_BROWSER_USE_EXISTING_BROWSER || browser_launch_type == LAUNCH_BROWSER_CLOSE_AND_LAUNCH_NEW_BROWSER) && !b_app_running){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("browser is not running type(%d)", browser_launch_type);
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
+               tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.launch_browser.result_type = RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE;
+               tr.terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_BROWSER_UNAVAILABLE;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
+#endif
 
        //browser id
        browser_id = launch_browser_tlv->browser_id;
@@ -1909,7 +2670,7 @@ GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *p
                dbg("launch browser gateway_proxy digit type string (%s)",gateway_proxy);
        } else {
                if( launch_browser_tlv->gateway_proxy_text.string_length){
-                       sat_mgr_convert_string((unsigned char*)&gateway_proxy,(unsigned short *)&gateway_proxy_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*)&gateway_proxy,(unsigned short *)&gateway_proxy_len,
                                        launch_browser_tlv->gateway_proxy_text.dcs.a_format,
                                        (unsigned char*)&launch_browser_tlv->gateway_proxy_text.string,
                                        (unsigned short)launch_browser_tlv->gateway_proxy_text.string_length);
@@ -1919,7 +2680,7 @@ GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *p
 
        //user confirm text and user confirm text len
        if( launch_browser_tlv->user_confirm_alpha_id.is_exist && launch_browser_tlv->user_confirm_alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                launch_browser_tlv->user_confirm_alpha_id.dcs.a_format,
                                (unsigned char*)&launch_browser_tlv->user_confirm_alpha_id.alpha_data,
                                (unsigned short)launch_browser_tlv->user_confirm_alpha_id.alpha_data_len);
@@ -1929,50 +2690,153 @@ GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *p
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_LAUNCH_BROWSER;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.launch_browser), launch_browser_tlv, sizeof(struct tel_sat_launch_browser_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       launch_browser = g_variant_new("(iisisisiv)",
-                       command_id, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
-
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(launch_browser_tlv->user_confirm_icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", launch_browser_tlv->user_confirm_icon_id.is_exist, launch_browser_tlv->user_confirm_icon_id.icon_qualifer, (gint32) launch_browser_tlv->user_confirm_icon_id.icon_identifier, (gint32) launch_browser_tlv->user_confirm_icon_id.icon_info.width,
+                                       (gint32) launch_browser_tlv->user_confirm_icon_id.icon_info.height, launch_browser_tlv->user_confirm_icon_id.icon_info.ics, launch_browser_tlv->user_confirm_icon_id.icon_info.icon_data_len, launch_browser_tlv->user_confirm_icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+
+       launch_browser = g_variant_new("(iiisisisiv)",
+                       command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
+#else
+       launch_browser = g_variant_new("(iiisisisi)",
+                       command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
+#endif
        return launch_browser;
 }
 
-GVariant* sat_manager_provide_local_info_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_provide_local_info_tlv *provide_local_info_tlv)
+GVariant* sat_manager_provide_local_info_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_provide_local_info_tlv *provide_local_info_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *provide_info = NULL;
-       struct sat_manager_queue_data q_data;
 
-       gint command_id = 0;
        gint info_type =0;
+       struct treq_sat_terminal_rsp_data *tr = NULL;
 
        dbg("interpreting provide local info notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
+       provide_info = g_variant_new("(i)", info_type);
+
+       //send TR - does not need from application's response
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return NULL;
+
+       tr->cmd_number = provide_local_info_tlv->command_detail.cmd_num;
+       tr->cmd_type = provide_local_info_tlv->command_detail.cmd_type;
+       memcpy((void*)&tr->terminal_rsp_data.provide_local_info.command_detail, &provide_local_info_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr->terminal_rsp_data.provide_local_info.device_id.src = provide_local_info_tlv->device_id.dest;
+       tr->terminal_rsp_data.provide_local_info.device_id.dest = provide_local_info_tlv->device_id.src;
+       tr->terminal_rsp_data.provide_local_info.other_info = TRUE;
+
        info_type = provide_local_info_tlv->command_detail.cmd_qualifier.provide_local_info.provide_local_info;
 
-       //enqueue data and generate cmd_id
-       memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
-       q_data.cmd_type = SAT_PROATV_CMD_PROVIDE_LOCAL_INFO;
-       memcpy((void*)&(q_data.cmd_data.provide_local_info), provide_local_info_tlv, sizeof(struct tel_sat_provide_local_info_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
-       command_id = q_data.cmd_id;
+       switch(info_type){
+               case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:{
+                       int err = 0; int gmt = 0, n_flg = 0;
+                       struct timezone c_tz;
+                       struct timeval c_time;
 
-       provide_info = g_variant_new("(ii)", command_id, info_type);
+                       time_t time_val;
+                       struct tm time_info;
+
+                       time(&time_val);
+
+                       tzset();
+                       err = gettimeofday(&c_time, &c_tz);
+                       localtime_r(&time_val, &time_info);
+
+                       //set the time information
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.year =
+                               _convert_decimal_to_bcd(time_info.tm_year+1900-2000);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.month =
+                                       _convert_decimal_to_bcd(time_info.tm_mon+1);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.day =
+                                       _convert_decimal_to_bcd(time_info.tm_mday);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.hour =
+                                       _convert_decimal_to_bcd(time_info.tm_hour);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.minute =
+                                       _convert_decimal_to_bcd(time_info.tm_min);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.second =
+                                       _convert_decimal_to_bcd(time_info.tm_sec);
+
+                       gmt = c_tz.tz_minuteswest/60;
+                       if(gmt < 0){
+                               gmt = gmt * -1;
+                               n_flg = 1;
+                       }
+
+                       if(err != 0){
+                               tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone = 0xFF;
+                       }
+                       else{
+                               tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone =
+                                       _convert_decimal_to_bcd(gmt);
+
+                               if(n_flg == 1){
+                                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x80;
+                               }
+
+                               if(time_info.tm_isdst > 0){
+                                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x40;
+                               }
+                       }
+
+                       tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
+                       tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+               } break;
+               case LOCAL_INFO_LANGUAGE:{
+                       Server *s = NULL;
+                       static Storage *strg;
+                       gchar *lang_str = NULL;
+                       enum tel_sim_language_type lang_type = SIM_LANG_UNSPECIFIED;
+
+                       tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
+                       tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+
+                       s = ctx->server;
+                       strg = tcore_server_find_storage(s, "vconf");
+                       lang_str = tcore_storage_get_string(strg, STORAGE_KEY_LANGUAGE_SET);
+                       if(lang_str)
+                               lang_type = _convert_string_to_sim_lang(lang_str);
+
+                       tr->terminal_rsp_data.provide_local_info.other.language = lang_type;
+               } break;
+               default :{
+                       tr->terminal_rsp_data.provide_local_info.other_info = FALSE;
+                       tr->terminal_rsp_data.provide_local_info.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+               } break;
+       }
+
+       sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       g_free(tr);
 
        return provide_info;
 }
 
-GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_language_notification_tlv *language_notification_tlv)
+GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_language_notification_tlv *language_notification_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *language_noti = NULL;
@@ -1984,7 +2848,7 @@ GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const
 
        dbg("interpreting langauge notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -2001,8 +2865,11 @@ GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_LANGUAGE_NOTIFICATION;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.language_notification), language_notification_tlv, sizeof(struct tel_sat_language_notification_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
        language_noti = g_variant_new("(iib)", command_id, language, b_specified);
@@ -2010,6 +2877,136 @@ GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const
        return language_noti;
 }
 
+gboolean sat_manager_processing_unsupport_proactive_command(struct custom_data *ctx, const char *cp_name, struct tel_sat_unsupproted_command_tlv *unsupport_tlv)
+{
+       TcorePlugin *plg = NULL;
+       struct treq_sat_terminal_rsp_data tr;
+
+       dbg("[SAT] unsupport proactive command (%d)", unsupport_tlv->command_detail.cmd_type);
+
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return FALSE;
+       }
+
+       memset(&tr, 0x00, sizeof(struct treq_sat_terminal_rsp_data));
+       tr.cmd_number = unsupport_tlv->command_detail.cmd_num;
+       tr.cmd_type = unsupport_tlv->command_detail.cmd_type;
+
+       memcpy((void*)&tr.terminal_rsp_data.unsupport_cmd.command_detail, &unsupport_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr.terminal_rsp_data.unsupport_cmd.device_id.src = DEVICE_ID_ME;
+       tr.terminal_rsp_data.unsupport_cmd.device_id.dest = DEVICE_ID_SIM;
+       tr.terminal_rsp_data.unsupport_cmd.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+
+       return TRUE;
+}
+
+gboolean sat_manager_handle_sat_ui_launch_fail(struct custom_data *ctx, const char *cp_name, struct tnoti_sat_proactive_ind *p_ind)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       TcorePlugin *plg = NULL;
+       struct treq_sat_terminal_rsp_data tr;
+
+       dbg("[SAT] proactive command (%d)", p_ind->cmd_type);
+
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return FALSE;
+       }
+
+       memset(&tr, 0x00, sizeof(struct treq_sat_terminal_rsp_data));
+       tr.cmd_number = p_ind->cmd_number;
+       tr.cmd_type = p_ind->cmd_type;
+
+       switch (p_ind->cmd_type) {
+               case SAT_PROATV_CMD_DISPLAY_TEXT: {
+                       memcpy((void*)&tr.terminal_rsp_data.display_text.command_detail, &p_ind->proactive_ind_data.display_text.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.display_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SELECT_ITEM: {
+                       memcpy((void*)&tr.terminal_rsp_data.select_item.command_detail, &p_ind->proactive_ind_data.select_item.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.select_item.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.select_item.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.select_item.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_GET_INKEY: {
+                       memcpy((void*)&tr.terminal_rsp_data.get_inkey.command_detail, &p_ind->proactive_ind_data.get_inkey.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.get_inkey.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_GET_INPUT: {
+                       memcpy((void*)&tr.terminal_rsp_data.get_input.command_detail, &p_ind->proactive_ind_data.get_input.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.get_input.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_PLAY_TONE: {
+                       memcpy((void*)&tr.terminal_rsp_data.play_tone.command_detail, &p_ind->proactive_ind_data.play_tone.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.play_tone.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SEND_SMS: {
+                       memcpy((void*)&tr.terminal_rsp_data.send_sms.command_detail, &p_ind->proactive_ind_data.send_sms.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.send_sms.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SEND_SS: {
+                       memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &p_ind->proactive_ind_data.send_ss.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.send_ss.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SEND_USSD: {
+                       memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &p_ind->proactive_ind_data.send_ussd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SETUP_CALL: {
+                       memcpy((void*)&tr.terminal_rsp_data.setup_call.command_detail, &p_ind->proactive_ind_data.setup_call.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.setup_call.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT: {
+                       memcpy((void*)&tr.terminal_rsp_data.setup_idle_mode_text.command_detail, &p_ind->proactive_ind_data.setup_idle_mode_text.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_OPEN_CHANNEL: {
+                       memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &p_ind->proactive_ind_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_LAUNCH_BROWSER: {
+                       memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &p_ind->proactive_ind_data.launch_browser.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.launch_browser.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               default:
+                       dbg("unsupported command.");
+                       break;
+       }
+
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+       if(rv != TCORE_RETURN_SUCCESS)
+               return FALSE;
+
+       return TRUE;
+}
+
 static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
 {
        TReturn rv = TCORE_RETURN_FAILURE;
@@ -2019,7 +3016,6 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2040,6 +3036,10 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(i)", &resp);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.setupMenuInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.setupMenuInd.command_detail.cmd_type;
 
@@ -2054,8 +3054,13 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
        switch(resp){
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.setupMenuInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+
+                       if(q_data.cmd_data.setupMenuInd.text_attribute.b_txt_attr || q_data.cmd_data.setupMenuInd.text_attribute_list.list_cnt > 0)
+                               tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if(q_data.cmd_data.setupMenuInd.icon_id.is_exist)
                                tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
                        tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
 
@@ -2079,6 +3084,8 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -2091,7 +3098,6 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2112,15 +3118,26 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(ii)",&resp, &me_problem);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.display_text.device_id.src = q_data.cmd_data.displayTextInd.device_id.dest;
-       tr->terminal_rsp_data.display_text.device_id.dest = q_data.cmd_data.displayTextInd.device_id.src;
+       tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
+
+                       if(q_data.cmd_data.displayTextInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.displayTextInd.icon_id.is_exist)
+                               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
                        tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
 
@@ -2136,9 +3153,6 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
                        break;
        }
 
-       if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
-
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
        if(rv != TCORE_RETURN_SUCCESS){
@@ -2146,6 +3160,8 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -2154,11 +3170,10 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, me_problem;
+       gint resp;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2177,18 +3192,26 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &me_problem);
+       g_variant_get(exec_result, "(i)",&resp);
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
 
        tr->cmd_number = q_data.cmd_data.play_tone.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.play_tone.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.play_tone.command_detail, &q_data.cmd_data.play_tone.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.play_tone.device_id.src = q_data.cmd_data.play_tone.device_id.dest;
-       tr->terminal_rsp_data.play_tone.device_id.dest = q_data.cmd_data.play_tone.device_id.src;
+       tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.play_tone.device_id.dest = DEVICE_ID_SIM;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.play_tone.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+
+                       if(q_data.cmd_data.play_tone.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.play_tone.icon_id.is_exist)
                                tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
@@ -2206,14 +3229,11 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
 
                default:
                        tr->terminal_rsp_data.play_tone.result_type = resp;
-                       tr->terminal_rsp_data.play_tone.me_problem_type = me_problem;
-                       dbg("[SAT] wrong result from app exec resp(%d) me_problem(%d)", resp, me_problem);
+                       tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       dbg("[SAT] wrong result from app exec resp(%d)", resp);
                        break;
        }
 
-       if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
-
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
        if(rv != TCORE_RETURN_SUCCESS){
@@ -2221,6 +3241,7 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2233,7 +3254,6 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2254,16 +3274,20 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(i)",&resp);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.sendSMSInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.sendSMSInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data.cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.send_sms.device_id.src = q_data.cmd_data.sendSMSInd.device_id.dest;
+       tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_sms.device_id.dest = q_data.cmd_data.sendSMSInd.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.sendSMSInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if (q_data.cmd_data.sendSMSInd.icon_id.is_exist)
                                tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        break;
@@ -2293,6 +3317,11 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
                        tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
 
+               case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+                       tr->terminal_rsp_data.send_sms.result_type = RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING;
+                       tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+
                case RESULT_SMS_RP_ERROR:
                        tr->terminal_rsp_data.send_sms.result_type = RESULT_SMS_RP_ERROR;
                        tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
@@ -2311,6 +3340,8 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
                result = FALSE;
        }
 
+       g_free(tr);
+
 /*     if( q_data.cmd_data.sendSMSInd.alpha_id.alpha_data_len && q_data.cmd_data.sendSMSInd.alpha_id.is_exist)
                sat_ui_support_terminate_sat_ui();*/
 
@@ -2322,12 +3353,12 @@ static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, Tcor
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, ss_problem;
+       gint resp, me_problem, ss_cause, call_ctrl_problem, ss_str_len;
+       GVariant *ss_str = NULL;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
        //call ctrl action, result data object, text
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2346,25 +3377,66 @@ static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, Tcor
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &ss_problem);
+       g_variant_get(exec_result, "(iii@vii)", &resp, &me_problem, &ss_cause, &ss_str, &ss_str_len, &call_ctrl_problem);
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
 
        tr->cmd_number = q_data.cmd_data.send_ss.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_ss.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.send_ss.command_detail, &q_data.cmd_data.send_ss.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.send_ss.device_id.src = q_data.cmd_data.send_ss.device_id.dest;
+       tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_ss.device_id.dest = q_data.cmd_data.send_ss.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.send_ss.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if (q_data.cmd_data.send_ss.icon_id.is_exist)
                                tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
+                       if(ss_str_len > 0 && ss_str){
+                               int local_index = 0;
+                               guchar data;
+                               GVariantIter *iter = NULL;
+                               GVariant *intermediate = NULL;
+                               char *tmp = NULL;
+
+                               intermediate = g_variant_get_variant(ss_str);
+                               dbg("ss string format(%s)", g_variant_get_type_string(intermediate));
+
+                               g_variant_get(intermediate, "ay", &iter);
+                               while( g_variant_iter_loop (iter, "y", &data)){
+                                       dbg("index(%d) data(%c)", local_index, data);
+                                       tr->terminal_rsp_data.send_ss.text.string[local_index] = data;
+                                       local_index++;
+                               }
+                               g_variant_iter_free(iter);
+                               g_variant_unref(intermediate);
+
+                               tr->terminal_rsp_data.send_ss.text.string_length = local_index;
+                               tmp = _convert_hex_string_to_bytes(tr->terminal_rsp_data.send_ss.text.string);
+                               memset(tr->terminal_rsp_data.send_ss.text.string, 0x00,
+                                       sizeof(tr->terminal_rsp_data.send_ss.text.string));
+                               if(tmp) {
+                                       memcpy(tr->terminal_rsp_data.send_ss.text.string, tmp,
+                                               tr->terminal_rsp_data.send_ss.text.string_length);
+                                       g_free(tmp);
+                               }
+                               else {
+                                       err("memcpy failed");
+                               }
+                               dbg("SS string len:%d", tr->terminal_rsp_data.send_ss.text.string_length);
+                       }
                        break;
 
                case RESULT_SS_RETURN_ERROR:
                        tr->terminal_rsp_data.send_ss.result_type = RESULT_SS_RETURN_ERROR;
-                       tr->terminal_rsp_data.send_ss.ss_problem = ss_problem;
+                       if (ss_cause == SATK_SS_PROBLEM_FACILITY_NOT_SUPPORTED) {
+                                tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_FACILITY_NOT_SUPPORTED;
+                        } else {
+                                tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_NO_SPECIFIC_CAUSE;
+                        }
                        break;
 
                case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
@@ -2384,10 +3456,39 @@ static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, Tcor
                dbg("fail to send terminal response");
                result = FALSE;
        }
+       g_free(tr);
+
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+       if( q_data.cmd_data.send_ss.alpha_id.alpha_data_len && q_data.cmd_data.send_ss.alpha_id.is_exist ) {
+               char *path;
+               const gchar *cp_name;
+               TelephonySAT *sat;
+               TelephonyObjectSkeleton *object;
+
+               dbg("AlphaID is present, terminate SAT-UI.");
+               cp_name = tcore_server_get_cp_name_by_plugin(plg);
+               if (cp_name == NULL) {
+                       err("CP name is NULL");
+                       goto Exit;
+               }
 
-       if( q_data.cmd_data.send_ss.alpha_id.alpha_data_len && q_data.cmd_data.send_ss.alpha_id.is_exist )
-               sat_ui_support_terminate_sat_ui();
+               dbg("CP Name: [%s]", cp_name);
+               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
 
+               /* Look-up Hash table for Object */
+               object = g_hash_table_lookup(ctx->objects, path);
+               dbg("Path: [%s] Interface object: [%p]", path, object);
+               g_free(path);
+               if (object == NULL) {
+                       err("Object is NOT defined!!!");
+                       goto Exit;
+               }
+
+               sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+               telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
+       }
+Exit:
+#endif
        return result;
 }
 
@@ -2396,12 +3497,12 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, ussd_problem;
+       gint resp, me_problem, ss_cause, ussd_str_len;
+       GVariant *ussd_str = NULL;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
        //call ctrl action, result data object, text, result2, text2
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2420,26 +3521,140 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &ussd_problem);
+       g_variant_get(exec_result, "(iii@vi)", &resp, &me_problem, &ss_cause, &ussd_str, &ussd_str_len);
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
 
        tr->cmd_number = q_data.cmd_data.send_ussd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_ussd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.send_ussd.command_detail, &q_data.cmd_data.send_ussd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.send_ussd.device_id.src = q_data.cmd_data.send_ussd.device_id.dest;
+       tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_ussd.device_id.dest = q_data.cmd_data.send_ussd.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.send_ussd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if (q_data.cmd_data.send_ussd.icon_id.is_exist)
                                tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
+                       if(ussd_str_len > 0 && ussd_str){
+                               int local_index = 0, i = 0;
+                               guchar data;
+                               GVariantIter *iter = NULL;
+                               GVariant *intermediate = NULL;
+                               enum alphabet_format alpha_format;
+
+                               intermediate = g_variant_get_variant(ussd_str);
+                               dbg("ussd string format(%s)", g_variant_get_type_string(intermediate));
+
+                               g_variant_get(intermediate, "ay", &iter);
+                               while( g_variant_iter_loop (iter, "y", &data)){
+                                       dbg("local_index(%d) data(%c)", local_index, data);
+                                       tr->terminal_rsp_data.send_ussd.text.string[local_index] = data;
+                                       local_index++;
+                               }
+
+                               if(local_index >=1 )
+                                       tr->terminal_rsp_data.send_ussd.text.string_length = local_index-1;
+                               tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs = q_data.cmd_data.send_ussd.ussd_string.dsc.raw_dcs;
+                               /*bits 2 & 3 indicate the character set being used */
+                               switch (tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs & 0x0C) {
+                                       case 0x00:
+                                       case 0x0C:
+                                               alpha_format = ALPHABET_FORMAT_SMS_DEFAULT;
+                                               break;
+
+                                       case 0x04:
+                                               alpha_format = ALPHABET_FORMAT_8BIT_DATA;
+                                               break;
+
+                                       case 0X08:
+                                               alpha_format = ALPHABET_FORMAT_UCS2;
+                                               break;
+
+                                       default:
+                                               alpha_format = ALPHABET_FORMAT_RESERVED;
+                                               break;
+                               }
+                               dbg("string :[%s] len:[%d] dcs:[%d] alpha_format:[%d]", tr->terminal_rsp_data.send_ussd.text.string, tr->terminal_rsp_data.send_ussd.text.string_length,
+                                       tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs, alpha_format);
+                               g_variant_iter_free(iter);
+                               g_variant_unref(intermediate);
+                               switch(alpha_format){
+                                       case ALPHABET_FORMAT_SMS_DEFAULT:
+                                               /* As per the test spec TS 151.010-04 raw dcs for SMS default is 0 */
+                                               tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs = ALPHABET_FORMAT_SMS_DEFAULT;
+                                               if (tr->terminal_rsp_data.send_ussd.text.string_length > 0){
+                                                       int tmp_len;
+                                                       char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1];
+                                                       char  *packed_data;
+
+                                                       dbg("UTF 8 to GSM SMS default");
+                                                       tcore_util_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len,
+                                                               (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
+                                                               tr->terminal_rsp_data.send_ussd.text.string_length);
+                                                       packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
+                                                       memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
+                                                               sizeof(tr->terminal_rsp_data.send_ussd.text.string));
+                                                       if(packed_data){
+                                                               memcpy((void*)tr->terminal_rsp_data.send_ussd.text.string, packed_data, strlen(packed_data));
+                                                               tr->terminal_rsp_data.send_ussd.text.string_length = strlen(packed_data);
+                                                               g_free(packed_data);
+                                                       }
+                                               }
+                                               dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
+                                                       dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
+                                               break;
+                                       case ALPHABET_FORMAT_8BIT_DATA: {
+                                               gint output_data_len = 0;
+                                               gchar output_data[SAT_USSD_STRING_LEN_MAX];
+                                               dbg("UTF 8 to GSM 8 BIT DATA");
+                                               tcore_util_convert_utf8_to_gsm((unsigned char*)output_data,&output_data_len,
+                                                       (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
+                                                       tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
+                                                       sizeof(tr->terminal_rsp_data.send_ussd.text.string));
+                                               if(output_data_len > 0){
+                                                       memcpy((void*)tr->terminal_rsp_data.send_ussd.text.string, output_data, output_data_len);
+                                                       tr->terminal_rsp_data.send_ussd.text.string_length = output_data_len;
+                                               }
+                                               dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
+                                                       dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
+                                               }
+                                               break;
+                                       case ALPHABET_FORMAT_UCS2: {
+                                               char *tmp = NULL;
+                                               int str_len = 0;
+                                               dbg("UCS2 DATA");
+                                               tcore_util_convert_utf8_to_ucs2(&tmp,
+                                                               &str_len, (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
+                                                               tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
+                                                       sizeof(tr->terminal_rsp_data.send_ussd.text.string));
+                                               memcpy(tr->terminal_rsp_data.send_ussd.text.string, tmp, str_len);
+                                               tr->terminal_rsp_data.send_ussd.text.string_length = str_len;
+                                               dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
+                                                       dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
+                                               g_free(tmp);
+                                       }
+                                               break;
+                                       default:
+                                               break;
+                               }
+                       }
                        break;
 
                case RESULT_SS_RETURN_ERROR:
                case RESULT_USSD_RETURN_ERROR:
                        tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
-                       tr->terminal_rsp_data.send_ussd.ussd_problem = ussd_problem;
+                       if(ss_cause == SATK_USSD_PROBLEM_UNKNOWN_ALPHABET)
+                               tr->terminal_rsp_data.send_ussd.ussd_problem = ss_cause;
+
                        break;
 
                case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
@@ -2454,7 +3669,7 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
 
                default:
                        tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
-                       tr->terminal_rsp_data.send_ussd.ussd_problem = SATK_SS_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.send_ussd.ussd_problem = SATK_USSD_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
        }
 
@@ -2464,10 +3679,41 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
                dbg("fail to send terminal response");
                result = FALSE;
        }
+       g_free(tr);
+
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+       if( q_data.cmd_data.send_ussd.alpha_id.alpha_data_len && q_data.cmd_data.send_ussd.alpha_id.is_exist ) {
+               char *path;
+               const gchar *cp_name;
+               TelephonySAT *sat;
+               TelephonyObjectSkeleton *object;
+
+               dbg("AlphaID is present, terminate SAT-UI.");
+               //emit session end signal
+               cp_name = tcore_server_get_cp_name_by_plugin(plg);
+               if (cp_name == NULL) {
+                       err("CP name is NULL");
+                       goto Exit;
+               }
 
-       if( q_data.cmd_data.send_ussd.alpha_id.alpha_data_len && q_data.cmd_data.send_ussd.alpha_id.is_exist )
-               sat_ui_support_terminate_sat_ui();
+               dbg("CP Name: [%s]", cp_name);
+               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
 
+               /* Look-up Hash table for Object */
+               object = g_hash_table_lookup(ctx->objects, path);
+               dbg("Path: [%s] Interface object: [%p]", path, object);
+               g_free(path);
+               if (object == NULL) {
+                       err("Object is NOT defined!!!");
+                       goto Exit;
+               }
+
+               sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+               telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
+       }
+
+Exit:
+#endif
        return result;
 }
 
@@ -2480,7 +3726,6 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2501,17 +3746,20 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &cc_problem, &call_cause);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &q_data.cmd_data.setup_call.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.setup_call.device_id.src = q_data.cmd_data.setup_call.device_id.dest;
+       tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.setup_call.call_setup_icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR ||
-                                       q_data.cmd_data.setup_call.call_setup_icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR )
+                       if (q_data.cmd_data.setup_call.call_setup_icon_id.is_exist || q_data.cmd_data.setup_call.user_confirm_icon_id.is_exist)
                                tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
                        tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
@@ -2519,13 +3767,13 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
 
                case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
                        tr->terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
-                       tr->terminal_rsp_data.send_sms.me_problem_type = me_problem;
+                       tr->terminal_rsp_data.setup_call.me_problem_type = me_problem;
                        break;
 
                case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:{
                        tr->terminal_rsp_data.setup_call.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
                        switch(call_cause){
-                               case CALL_CAUSE_BUSY:
+                               case CALL_ERROR_BUSY:
                                        tr->terminal_rsp_data.setup_call.network_problem_type = NETWORK_PROBLEM_USER_BUSY;
                                break;
                                default :
@@ -2567,6 +3815,7 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2575,12 +3824,12 @@ static gboolean _sat_manager_handle_setup_idle_mode_text_result(struct custom_da
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, me_problem;
-       struct treq_sat_terminal_rsp_data *tr;
+       gint resp;
+       struct treq_sat_terminal_rsp_data tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
@@ -2598,36 +3847,33 @@ static gboolean _sat_manager_handle_setup_idle_mode_text_result(struct custom_da
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &me_problem);
+       g_variant_get(exec_result, "(i)",&resp);
 
-       tr->cmd_number = q_data.cmd_data.idle_mode.command_detail.cmd_num;
-       tr->cmd_type = q_data.cmd_data.idle_mode.command_detail.cmd_type;
-       memcpy((void*)&tr->terminal_rsp_data.setup_idle_mode_text.command_detail, &q_data.cmd_data.idle_mode.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data.cmd_data.idle_mode.device_id.dest;
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data.cmd_data.idle_mode.device_id.src;
+       tr.cmd_number = q_data.cmd_data.idle_mode.command_detail.cmd_num;
+       tr.cmd_type = q_data.cmd_data.idle_mode.command_detail.cmd_type;
+       memcpy((void*)&tr.terminal_rsp_data.setup_idle_mode_text.command_detail, &q_data.cmd_data.idle_mode.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data.cmd_data.idle_mode.device_id.dest;
+       tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data.cmd_data.idle_mode.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
-                       tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.idle_mode.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-                               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+                       tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
+                       if (q_data.cmd_data.idle_mode.icon_id.is_exist)
+                               tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        break;
                default:
-                       tr->terminal_rsp_data.setup_idle_mode_text.result_type = resp;
-                       tr->terminal_rsp_data.setup_idle_mode_text.me_problem_type = me_problem;
+                       tr.terminal_rsp_data.setup_idle_mode_text.result_type = resp;
                        break;
        }
 
        result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, &tr);
        if(rv != TCORE_RETURN_SUCCESS){
                dbg("fail to send terminal response");
                result = FALSE;
        }
 
-       sat_ui_support_terminate_sat_ui();
-
        return result;
 }
 
@@ -2644,7 +3890,6 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2669,6 +3914,9 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
 
        bearer_desc = g_variant_get_variant(desc_tmp);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.open_channel.command_detail, &q_data.cmd_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -2748,8 +3996,10 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
 
                        tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_type = service_type;
 
-                       if(!service_record)
+                       if(service_record) {
                                memcpy(tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_record, service_record, strlen(service_record));
+                               g_free(service_record);
+                       }
 
                }break;
                default:
@@ -2763,6 +4013,7 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2776,7 +4027,6 @@ static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2797,6 +4047,9 @@ static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx,
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iii)",&resp, &me_problem, &bip_problem);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.close_channel.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.close_channel.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.close_channel.command_detail, &q_data.cmd_data.close_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -2832,6 +4085,7 @@ static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2848,7 +4102,6 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2869,6 +4122,9 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iiiiibv)",&resp, &me_problem, &bip_problem, &data_str_len, &data_len, &other_info, &received_data);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.receive_data.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.receive_data.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.receive_data.command_detail, &q_data.cmd_data.receive_data.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -2901,7 +4157,7 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
        tr->terminal_rsp_data.receive_data.channel_data.data_string_len = data_str_len;
 
        if(received_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
 
@@ -2909,13 +4165,13 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
 
                g_variant_get(received_data, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       tr->terminal_rsp_data.receive_data.channel_data.data_string[index] = data;
-                       index++;
+                       //dbg("index(%d) data(%d)", index, data);
+                       tr->terminal_rsp_data.receive_data.channel_data.data_string[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
 
-               dbg("the last index data(%d), data_total_len(%d)", index, data_str_len);
+               dbg("the last index data(%d), data_total_len(%d)", local_index, data_str_len);
        }
 
        result = TRUE;
@@ -2925,6 +4181,7 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2939,7 +4196,6 @@ static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, Tco
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2960,6 +4216,9 @@ static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, Tco
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &bip_problem, &data_len);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.send_data.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_data.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.send_data.command_detail, &q_data.cmd_data.send_data.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -2997,6 +4256,7 @@ static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, Tco
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -3011,7 +4271,6 @@ static gboolean sat_manager_handle_get_channel_status_result(struct custom_data
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3033,6 +4292,9 @@ static gboolean sat_manager_handle_get_channel_status_result(struct custom_data
        g_variant_get(exec_result, "(iiiiii)",&resp, &me_problem, &bip_problem,
                        &channel_id, &channel_status, &channel_status_info);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.get_channel_status.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.get_channel_status.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.get_channel_status.command_detail, &q_data.cmd_data.get_channel_status.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3072,6 +4334,7 @@ static gboolean sat_manager_handle_get_channel_status_result(struct custom_data
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -3080,65 +4343,60 @@ static gboolean sat_manager_handle_send_dtmf_result(struct custom_data *ctx, Tco
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
+       gint resp;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+               g_free(tr);
                return result;
        }
 
        if(!exec_result){
                dbg("[SAT] get channel status data is null");
+               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
+               g_free(tr);
                return result;
        }
 
+       dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
+       g_variant_get(exec_result, "(i)",&resp);
 
-       result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
-       if(rv != TCORE_RETURN_SUCCESS){
-               dbg("fail to send terminal response");
-               result = FALSE;
-       }
-
-       return result;
-}
-
-static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
-{
-       TReturn rv = TCORE_RETURN_FAILURE;
-       gboolean result = FALSE;
-
-       struct treq_sat_terminal_rsp_data *tr;
-       struct sat_manager_queue_data q_data;
+       tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
+       tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
+       memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &q_data.cmd_data.send_dtmf.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+       tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
 
-       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
-               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               return result;
-       }
+       tr->terminal_rsp_data.send_dtmf.result_type = resp;
+       switch (resp) {
+               case RESULT_SUCCESS:
+                       if (q_data.cmd_data.send_dtmf.icon_id.is_exist)
+                               tr->terminal_rsp_data.send_dtmf.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+                       break;
 
-       if(!exec_result){
-               dbg("[SAT] get channel status data is null");
-               return result;
-       }
+               case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+                       tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NOT_IN_SPEECH_CALL;
+                       break;
 
-       if (!plg){
-               dbg("there is no valid plugin at this point");
-               return result;
+               default:
+                       tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
        }
 
-
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
        if(rv != TCORE_RETURN_SUCCESS){
@@ -3146,18 +4404,19 @@ static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
-static gboolean sat_manager_handle_provide_local_info_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
+static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
 {
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
+       gint resp, browser_problem;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3175,43 +4434,43 @@ static gboolean sat_manager_handle_provide_local_info_result(struct custom_data
                return result;
        }
 
-
-       result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
-       if(rv != TCORE_RETURN_SUCCESS){
-               dbg("fail to send terminal response");
-               result = FALSE;
-       }
-
-       return result;
-}
-
-static gboolean sat_manager_handle_language_notification_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
-{
-       TReturn rv = TCORE_RETURN_FAILURE;
-       gboolean result = FALSE;
-
-       struct treq_sat_terminal_rsp_data *tr;
-       struct sat_manager_queue_data q_data;
+       dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
+       g_variant_get(exec_result, "(ii)",&resp,&browser_problem);
 
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
-
-       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
-               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+       if (!tr)
                return result;
-       }
+       tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
+       tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
+       memcpy((void*)&tr->terminal_rsp_data.launch_browser.command_detail, &q_data.cmd_data.launch_browser.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-       if(!exec_result){
-               dbg("[SAT] get channel status data is null");
-               return result;
-       }
+       tr->terminal_rsp_data.launch_browser.device_id.src = q_data.cmd_data.launch_browser.device_id.dest;
+       tr->terminal_rsp_data.launch_browser.device_id.dest = q_data.cmd_data.launch_browser.device_id.src;
 
-       if (!plg){
-               dbg("there is no valid plugin at this point");
-               return result;
-       }
+       tr->terminal_rsp_data.launch_browser.result_type = resp;
+       switch (resp) {
+               case RESULT_SUCCESS:
+                       if (q_data.cmd_data.launch_browser.user_confirm_icon_id.is_exist)
+                               tr->terminal_rsp_data.launch_browser.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+               case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
 
+               case RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE:
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = browser_problem;
+                       break;
+               default:
+                       tr->terminal_rsp_data.launch_browser.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+       }
 
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
@@ -3220,6 +4479,7 @@ static gboolean sat_manager_handle_language_notification_result(struct custom_da
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -3293,21 +4553,11 @@ gboolean sat_manager_handle_app_exec_result(struct custom_data *ctx, TcorePlugin
                        result = sat_manager_handle_launch_browser_result(ctx, plg, command_id, resp);
                        break;
 
-               case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:
-                       result = sat_manager_handle_provide_local_info_result(ctx, plg, command_id, resp);
-                       break;
-
-               case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:
-                       result = sat_manager_handle_language_notification_result(ctx, plg, command_id, resp);
-                       break;
-
                default:
                        dbg("[SAT] invalid command type(%d)", command_type);
                        break;
        }
 
-       sat_ui_support_terminate_sat_ui();
-
        return result;
 }
 
@@ -3316,11 +4566,10 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint item_id;
+       gint item_id=0;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3334,7 +4583,7 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
        }
 
        if(addtional_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3344,14 +4593,17 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
+                       dbg("index(%d) data(%d)", local_index, data);
                        item_id = data;
-                       index++;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.selectItemInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.selectItemInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.select_item.command_detail, &q_data.cmd_data.selectItemInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3365,7 +4617,10 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
                        tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS;
                        tr->terminal_rsp_data.select_item.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
-                       if (q_data.cmd_data.selectItemInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.selectItemInd.text_attribute.b_txt_attr || q_data.cmd_data.selectItemInd.text_attribute_list.list_cnt > 0)
+                               tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.selectItemInd.icon_id.is_exist)
                                tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        break;
@@ -3402,6 +4657,8 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3413,7 +4670,6 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3426,10 +4682,9 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
                return result;
        }
 
-       if (q_data.cmd_data.displayTextInd.immediate_response_requested){
-               return TRUE;
-       }
-
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3441,7 +4696,10 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
                        tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
                        tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
-                       if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.displayTextInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.displayTextInd.icon_id.is_exist)
                                tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
                } break;
 
@@ -3474,6 +4732,8 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3487,7 +4747,6 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
        memset(inkey_data, 0, SAT_TEXT_STRING_LEN_MAX);
 
@@ -3502,7 +4761,7 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
        }
 
        if(addtional_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3512,15 +4771,18 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       inkey_data[index] = data;
-                       index++;
+                       dbg("index(%d) data(%d)", local_index, data);
+                       inkey_data[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
-               inkey_data_len = index;
+               inkey_data_len = local_index;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.getInkeyInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.getInkeyInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.get_inkey.command_detail, &q_data.cmd_data.getInkeyInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3531,12 +4793,15 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                case USER_CONFIRM_YES:
                        tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
 
-                       if (q_data.cmd_data.getInkeyInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.getInkeyInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.getInkeyInd.icon_id.is_exist)
                                tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
                                tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
-                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
                                tr->terminal_rsp_data.get_inkey.text.string_length = 1;
                                tr->terminal_rsp_data.get_inkey.text.string[0] = 0x01;
                        }
@@ -3546,7 +4811,7 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
 
                                if (!q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_set){
                                        tr->terminal_rsp_data.get_inkey.text.is_digit_only = TRUE;
-                                       tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+                                       tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
                                        tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
 
                                        memcpy((void*)tr->terminal_rsp_data.get_inkey.text.string, inkey_data, inkey_data_len);
@@ -3561,26 +4826,32 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                                                char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
 
                                                dbg("sat gsm7 encoding");
-                                               sat_mgr_convert_utf8_to_gsm((unsigned char*) tmp_str, &tmp_len, (unsigned char*)inkey_data, inkey_data_len);
+                                               tcore_util_convert_utf8_to_gsm((unsigned char*) tmp_str, &tmp_len, (unsigned char*)inkey_data, inkey_data_len);
                                                packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
 
-                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-                                               tr->terminal_rsp_data.get_inkey.text.string_length = strlen(packed_data);
-                                               memcpy((void*) tr->terminal_rsp_data.get_inkey.text.string, packed_data, strlen(packed_data));
+                                               if(packed_data){
+                                                       tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
+                                                       tr->terminal_rsp_data.get_inkey.text.string_length = strlen(packed_data);
+                                                       memcpy((void*) tr->terminal_rsp_data.get_inkey.text.string, packed_data, strlen(packed_data));
 
-                                               if (packed_data) g_free(packed_data);
+                                                       g_free(packed_data);
+                                               }
                                        }
                                        else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 )
                                        {
+                                               char *tmp = NULL;
                                                dbg("UCS2 DATA");
 
-                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_UCS2;
-                                               sat_mgr_convert_utf8_to_ucs2((unsigned char*)tr->terminal_rsp_data.get_inkey.text.string,
+                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
+                                               tcore_util_convert_utf8_to_ucs2(&tmp,
                                                                &tr->terminal_rsp_data.get_inkey.text.string_length, (unsigned char*)inkey_data, inkey_data_len);
+
+                                               memcpy(tr->terminal_rsp_data.get_inkey.text.string, tmp, tr->terminal_rsp_data.get_inkey.text.string_length);
+                                               g_free(tmp);
                                        }
                                        else
                                        {
-                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_RESERVED;
+                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
                                                dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_inkey.text.dcs.a_format);
                                        }
                                }
@@ -3598,7 +4869,7 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                        if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
                                tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
                                tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
-                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
                                tr->terminal_rsp_data.get_inkey.text.string_length = 1;
                                tr->terminal_rsp_data.get_inkey.text.string[0] = 0x00;
                        }
@@ -3606,10 +4877,6 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
 
                case USER_CONFIRM_TIMEOUT:
                        tr->terminal_rsp_data.get_inkey.result_type = RESULT_NO_RESPONSE_FROM_USER;
-                       if (q_data.cmd_data.getInkeyInd.duration.time_interval > 0){
-                               tr->terminal_rsp_data.get_inkey.duration.time_interval = q_data.cmd_data.getInkeyInd.duration.time_interval;
-                               tr->terminal_rsp_data.get_inkey.duration.time_unit = q_data.cmd_data.getInkeyInd.duration.time_unit;
-                       }
                        break;
 
                case USER_CONFIRM_END:
@@ -3628,6 +4895,8 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3641,24 +4910,21 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
        memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
        if(addtional_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3668,15 +4934,19 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       input_data[index] = data;
-                       index++;
+                       dbg("index(%d) data(%d)", local_index, data);
+                       input_data[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
-               input_data_len = index;
+               input_data_len = local_index;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.getInputInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.getInputInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.get_input.command_detail, &q_data.cmd_data.getInputInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3692,27 +4962,32 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
                                tr->terminal_rsp_data.get_input.text.is_digit_only = TRUE;
                        }
 
-                       if (q_data.cmd_data.getInputInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.getInputInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.getInputInd.icon_id.is_exist)
                                tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        if(!q_data.cmd_data.getInputInd.command_detail.cmd_qualifier.get_input.user_input_unpacked_format){
                                dbg("[SAT] packing to SMS7 default");
 
                                tr->terminal_rsp_data.get_input.text.string_length = 0;
-                               tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_SMS_DEFAULT;
+                               tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_SMS_DEFAULT;
 
                                if (input_data_len > 0){
                                        int tmp_len;
                                        char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
 
                                        dbg("sat gsm7 encoding");
-                                       sat_mgr_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len, (unsigned char*)input_data, input_data_len);
+                                       tcore_util_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len, (unsigned char*)input_data, input_data_len);
                                        packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
 
-                                       memcpy((void*)tr->terminal_rsp_data.get_input.text.string, packed_data, strlen(packed_data));
-                                       tr->terminal_rsp_data.get_input.text.string_length = strlen(packed_data);
+                                       if(packed_data){
+                                               memcpy((void*)tr->terminal_rsp_data.get_input.text.string, packed_data, strlen(packed_data));
+                                               tr->terminal_rsp_data.get_input.text.string_length = strlen(packed_data);
 
-                                       if (packed_data) g_free(packed_data);
+                                               g_free(packed_data);
+                                       }
                                }
 
                        }
@@ -3722,20 +4997,22 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
 
                                if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_SMS_DEFAULT){
 
-                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-                                       sat_mgr_convert_utf8_to_gsm((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
+                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
+                                       tcore_util_convert_utf8_to_gsm((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
                                                        &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
 
                                }
                                else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 ){
+                                       char *tmp = NULL;
 
-                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_UCS2;
-                                       sat_mgr_convert_utf8_to_ucs2((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
-                                                       &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
+                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
+                                       tcore_util_convert_utf8_to_ucs2(&tmp, &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
 
+                                       memcpy(tr->terminal_rsp_data.get_input.text.string, tmp, tr->terminal_rsp_data.get_input.text.string_length);
+                                       g_free(tmp);
                                }
                                else{
-                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_RESERVED;
+                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
                                        dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_input.text.dcs.a_format);
                                }
                        } break;
@@ -3767,6 +5044,8 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3780,24 +5059,21 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
        memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
-       if(addtional_data){
-               int index = 0;
+       if (addtional_data) {
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3807,19 +5083,24 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       input_data[index] = data;
-                       index++;
+                       dbg("index(%d) data(%d)", local_index, data);
+                       input_data[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
-               input_data_len = index;
+               input_data_len = local_index;
+               dbg("input_data_len=[%d]", input_data_len);
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &q_data.cmd_data.setup_call.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.setup_call.device_id.src = q_data.cmd_data.setup_call.device_id.dest;
+       tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
 
        switch(confirm_type){
@@ -3828,45 +5109,70 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
                        TelephonySAT *sat;
                        TelephonyObjectSkeleton *object;
 
-                       gchar *plg_name = NULL;
+                       const gchar *cp_name;
                        GVariant *setup_call = NULL;
 
-                       gint command_id, call_type, text_len, duration;
-                       gchar *text, *call_number;
+                       gint command_id, call_type, confirmed_text_len, text_len, duration;
+                       gchar *confirmed_text = NULL, *text = NULL, *call_number = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id;
-
-                       plg_name = tcore_plugin_ref_plugin_name(plg);
-                       if (plg_name) {
-                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
+#endif
+                       enum dbus_tapi_sim_slot_id slot_id;
+                       gboolean call_app_rv;
+
+                       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                       if (cp_name == NULL) {
+                               err("CP name is NULL");
+                               goto Exit;
                        }
-                       else {
-                               path = g_strdup_printf("%s", MY_DBUS_PATH);
-                       }
-                       dbg("path = [%s]", path);
 
+                       dbg("CP Name: [%s]", cp_name);
+                       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                       /* Look-up Hash table for Object */
                        object = g_hash_table_lookup(ctx->objects, path);
+                       dbg("Path: [%s] Interface object: [%p]", path, object);
+                       g_free(path);
+                       if (object == NULL) {
+                               err("Object is NOT defined!!!");
+                               goto Exit;
+                       }
+
                        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-                       setup_call = sat_manager_setup_call_noti(ctx, plg_name, &q_data.cmd_data.setup_call);
+                       setup_call = sat_manager_setup_call_noti(ctx, cp_name, &q_data.cmd_data.setup_call);
 
                        dbg("setup call type_format(%s)", g_variant_get_type_string(setup_call));
-                       g_variant_get(setup_call, "(isi@visi)", &command_id, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(setup_call, "(isisi@visi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
 
-                       telephony_sat_emit_setup_call(sat, command_id, text, text_len, call_type,
+                       telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len, text, text_len, icon_id, call_type,
                                        call_number, duration);
+#else
+                       g_variant_get(setup_call, "(isisiisi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &call_type, &call_number, &duration);
 
-                       sat_ui_support_launch_call_application(q_data.cmd_data.setup_call.command_detail.cmd_type, setup_call);
-                       return TRUE;
-               }break;
+                       telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len, text, text_len, call_type,
+                                       call_number, duration);
+#endif
+                       g_free(confirmed_text);
+                       g_free(text);
+                       g_free(call_number);
+
+                       slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
+                       dbg("slot_id: [%d]", slot_id);
+
+                       call_app_rv = sat_ui_support_launch_call_application(q_data.cmd_data.setup_call.command_detail.cmd_type, setup_call, slot_id);
+                       free (tr);
+
+                       return call_app_rv;
+               }
 
                case USER_CONFIRM_NO_OR_CANCEL:{
-                       tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
-                       tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
-                       tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.setup_call.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
                }break;
 
                case USER_CONFIRM_END:{
-                       tr->terminal_rsp_data.setup_call.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
+                       tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
                }break;
 
                case USER_CONFIRM_HELP_INFO:
@@ -3881,7 +5187,8 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
                dbg("fail to send terminal response");
                result = FALSE;
        }
-
+Exit:
+       free (tr);
        return result;
 }
 
@@ -3893,25 +5200,26 @@ static gboolean _sat_manager_handle_send_dtmf_confirm(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &q_data.cmd_data.send_dtmf.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.send_dtmf.device_id.src = q_data.cmd_data.send_dtmf.device_id.dest;
+       tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
 
        dbg("confirm_type[%d]", confirm_type);
@@ -3933,6 +5241,7 @@ static gboolean _sat_manager_handle_send_dtmf_confirm(struct custom_data *ctx, T
                dbg("fail to send terminal response");
                result = FALSE;
        }
+       g_free(tr);
 
        return result;
 }
@@ -3945,21 +5254,22 @@ static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *c
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.launch_browser.command_detail, &q_data.cmd_data.launch_browser.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3974,44 +5284,69 @@ static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *c
                        TelephonySAT *sat;
                        TelephonyObjectSkeleton *object;
 
-                       gchar *plg_name = NULL;
+                       const gchar *cp_name;
                        GVariant *launch_browser = NULL;
 
                        gint command_id = 0;
-                       gint browser_id = 0;
+                       gint browser_launch_type = 0, browser_id = 0;
                        gint url_len = 0, text_len = 0, gateway_proxy_len =0;
                        gchar *url = NULL;
                        gchar *text = NULL;
                        gchar *gateway_proxy = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id = NULL;
+#endif
+                       enum dbus_tapi_sim_slot_id slot_id;
 
-                       plg_name = tcore_plugin_ref_plugin_name(plg);
-                       if (plg_name) {
-                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-                       } else {
-                               path = g_strdup_printf("%s", MY_DBUS_PATH);
+                       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                       if (cp_name == NULL) {
+                               err("CP name is NULL");
+                               goto Exit;
                        }
-                       dbg("path = [%s]", path);
 
+                       dbg("CP Name: [%s]", cp_name);
+                       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                       /* Look-up Hash table for Object */
                        object = g_hash_table_lookup(ctx->objects, path);
+                       dbg("Path: [%s] Interface object: [%p]", path, object);
+                       g_free(path);
+                       if (object == NULL) {
+                               err("Object is NOT defined!!!");
+                               goto Exit;
+                       }
                        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-                       launch_browser = sat_manager_launch_browser_noti(ctx, plg_name, &q_data.cmd_data.launch_browser);
+                       launch_browser = sat_manager_launch_browser_noti(ctx, cp_name, &q_data.cmd_data.launch_browser);
 
                        dbg("launch_browser type_format(%s)", g_variant_get_type_string(launch_browser));
-                       g_variant_get(launch_browser, "(iisisisi@v)", &command_id, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len, &icon_id);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(launch_browser, "(iiisisisi@v)", &command_id, &browser_launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len, &icon_id);
+
+                       telephony_sat_emit_launch_browser(sat, command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
+#else
+                       g_variant_get(launch_browser, "(iiisisisi)", &command_id, &browser_launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len);
 
-                       telephony_sat_emit_launch_browser(sat, command_id, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
+                       telephony_sat_emit_launch_browser(sat, command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
+#endif
+                       g_free(url);
+                       g_free(text);
+                       g_free(gateway_proxy);
 
-                       sat_ui_support_launch_browser_application(q_data.cmd_data.launch_browser.command_detail.cmd_type, launch_browser);
+                       slot_id = get_sim_slot_id_by_cp_name((char*)tcore_server_get_cp_name_by_plugin(plg));
+                       dbg("slot_id: [%d]", slot_id);
+
+                       sat_ui_support_launch_browser_application(q_data.cmd_data.launch_browser.command_detail.cmd_type, launch_browser, slot_id);
+
+                       g_free(tr);
                        return TRUE;
                }break;
 
                case USER_CONFIRM_NO_OR_CANCEL:
-               case USER_CONFIRM_END:
                        tr->terminal_rsp_data.launch_browser.result_type = RESULT_BACKWARD_MOVE_BY_USER;
-                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
-                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+               case USER_CONFIRM_END:
+                       tr->terminal_rsp_data.launch_browser.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
                        break;
 
                default:
@@ -4025,10 +5360,11 @@ static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *c
                dbg("fail to send terminal response");
                result = FALSE;
        }
-
+Exit:
+       g_free(tr);
        return result;
 }
-
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
 static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
 {
        TReturn rv = TCORE_RETURN_FAILURE;
@@ -4037,21 +5373,22 @@ static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.open_channel.command_detail, &q_data.cmd_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -4063,41 +5400,68 @@ static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx
        switch(confirm_type){
                case USER_CONFIRM_YES:{
                        char *path;
-                       TelephonySAT *sat;
                        TelephonyObjectSkeleton *object;
 
-                       gchar *plg_name = NULL;
+                       const gchar *cp_name;
 
                        GVariant *open_channel = NULL;
 
                        gint command_id, bearer_type, protocol_type, dest_addr_type;
                        gboolean immediate_link, auto_reconnection, bg_mode;
                        gint text_len, buffer_size, port_number;
-                       gchar *text, *dest_address;
+                       gchar *text = NULL, *dest_address = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id;
+#endif
                        GVariant *bearer_param;
                        GVariant *bearer_detail;
 
                        //emit send_dtmf signal
-                       plg_name = tcore_plugin_ref_plugin_name(plg);
-                       if (plg_name) {
-                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-                       } else {
-                               path = g_strdup_printf("%s", MY_DBUS_PATH);
+                       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                       if (cp_name == NULL) {
+                               err("CP name is NULL");
+                               goto Exit;
                        }
-                       dbg("path = [%s]", path);
 
+                       dbg("CP Name: [%s]", cp_name);
+                       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                       /* Look-up Hash table for Object */
                        object = g_hash_table_lookup(ctx->objects, path);
-                       sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+                       dbg("Path: [%s] Interface object: [%p]", path, object);
+                       g_free(path);
+                       if (object == NULL) {
+                               err("Object is NOT defined!!!");
+                               goto Exit;
+                       }
 
-                       open_channel = sat_manager_open_channel_noti(ctx, plg_name, &q_data.cmd_data.open_channel);
+                       open_channel = sat_manager_open_channel_noti(ctx, cp_name, &q_data.cmd_data.open_channel);
 
                        dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
                                        &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#else
+                       g_variant_get(open_channel,"(isibbbi@viiiis@v)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
+                                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#endif
+                       /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
+
+                       g_free(text);
+                       g_free(dest_address);
+                       //BIP Manager
+                       {
+                               GDBusConnection *conn = NULL;
+                               const gchar *g_path = NULL;
+
+                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
+                       }
 
-                       telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
-                                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
+                       g_free(tr);
 
                        return TRUE;
                }break;
@@ -4120,10 +5484,57 @@ static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx
                dbg("fail to send terminal response");
                result = FALSE;
        }
-
+Exit:
+       g_free(tr);
        return result;
 }
+#else
+static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
 
+       struct treq_sat_user_confirmation_data *conf_data;
+       struct sat_manager_queue_data q_data;
+
+       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+
+       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
+               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       conf_data = (struct treq_sat_user_confirmation_data *)calloc(1, sizeof(struct treq_sat_user_confirmation_data));
+       if (!conf_data)
+               return result;
+
+       dbg("confirm_type[%d]", confirm_type);
+
+       switch(confirm_type){
+               case USER_CONFIRM_YES:
+               case USER_CONFIRM_NO_OR_CANCEL:
+               case USER_CONFIRM_END:
+                       conf_data->user_conf = confirm_type;
+                       break;
+               default:
+                       dbg("Not handled confirm type!");
+                       break;
+       }
+       result = TRUE;
+       rv = sat_manager_send_user_confirmation(ctx->comm, plg, conf_data);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send user confirmation message");
+               result = FALSE;
+       }
+       g_free(conf_data);
+       return result;
+}
+#endif
 gboolean sat_manager_handle_user_confirm(struct custom_data *ctx, TcorePlugin *plg, GVariant *user_confirm_data)
 {
        gboolean rv = FALSE;
@@ -4186,112 +5597,222 @@ static gboolean _sat_manager_handle_play_tone_ui_display_status(struct custom_da
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
        GVariant *play_tone = NULL;
 
 
        gint command_id, tone_type, duration;
        gint text_len;
        gchar* text;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
-
+#endif
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for play tone");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.play_tone.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.play_tone.command_detail.cmd_type;
                memcpy((void*)&tr->terminal_rsp_data.play_tone.command_detail, &q_data->cmd_data.play_tone.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               tr->terminal_rsp_data.play_tone.device_id.src = q_data->cmd_data.play_tone.device_id.dest;
+               tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.play_tone.device_id.dest = q_data->cmd_data.play_tone.device_id.src;
                tr->terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               free (tr);
+
                return TRUE;
        }
 
        //emit play tone signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       play_tone = sat_manager_play_tone_noti(ctx, plg_name, &q_data->cmd_data.play_tone);
+       play_tone = sat_manager_play_tone_noti(ctx, cp_name, &q_data->cmd_data.play_tone);
 
        dbg("play tone type_format(%s)", g_variant_get_type_string(play_tone));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(play_tone, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &tone_type, &duration);
 
+       telephony_sat_emit_play_tone(sat, command_id, text, text_len, icon_id, tone_type, duration);
+#else
+       g_variant_get(play_tone, "(isiii)", &command_id, &text, &text_len, &tone_type, &duration);
+
        telephony_sat_emit_play_tone(sat, command_id, text, text_len, tone_type, duration);
+#endif
+       g_free(text);
 
        return TRUE;
 }
 
+static gboolean _sat_manager_handle_setup_idle_mode_text_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
+
+       struct treq_sat_terminal_rsp_data *tr;
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
+       tr->cmd_number = q_data->cmd_data.idle_mode.command_detail.cmd_num;
+       tr->cmd_type = q_data->cmd_data.idle_mode.command_detail.cmd_type;
+       memcpy((void*)&tr->terminal_rsp_data.setup_idle_mode_text.command_detail, &q_data->cmd_data.idle_mode.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data->cmd_data.idle_mode.device_id.dest;
+       tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data->cmd_data.idle_mode.device_id.src;
+
+       tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
+       if (q_data->cmd_data.idle_mode.icon_id.is_exist)
+               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
+       //fail to display text
+       if(!display_status){
+               dbg("[SAT] fail to show ui display for setup_idle_mode_text");
+               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+       }
+
+       result = TRUE;
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send terminal response");
+               result = FALSE;
+       }
+       g_free(tr);
+
+       return result;
+}
+
+static gboolean _sat_manager_handle_refresh_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
+{
+       struct treq_sat_terminal_rsp_data tr;
+
+       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+
+       tr.cmd_number = q_data->cmd_data.refresh.command_detail.cmd_num;
+       tr.cmd_type = q_data->cmd_data.refresh.command_detail.cmd_type;
+       memcpy((void*)&tr.terminal_rsp_data.refresh.command_detail, &q_data->cmd_data.refresh.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr.terminal_rsp_data.refresh.device_id.src = q_data->cmd_data.refresh.device_id.dest;
+       tr.terminal_rsp_data.refresh.device_id.dest = q_data->cmd_data.refresh.device_id.src;
+
+       if(!display_status){
+               dbg("fail to show ui for refresh");
+               tr.terminal_rsp_data.refresh.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+       }
+       else{
+               dbg("success to show ui for refresh");
+               tr.terminal_rsp_data.refresh.result_type = RESULT_SUCCESS;
+               tr.terminal_rsp_data.refresh.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+       }
+
+       dbg("send refresh tr");
+       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+       return TRUE;
+}
+
+
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
 static gboolean _sat_manager_handle_send_sms_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
 {
        char *path;
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const char *cp_name;
        GVariant *send_sms = NULL;
 
-
        gint command_id, ton, npi, tpdu_type;
        gboolean b_packing_required;
        gint text_len, number_len, tpdu_data_len;
        gchar* text, *dialling_number;
-       GVariant *tpdu_data, *icon_id;
+       GVariant *tpdu_data;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id;
+#endif
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send sms");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.sendSMSInd.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.sendSMSInd.command_detail.cmd_type;
                memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data->cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               tr->terminal_rsp_data.send_sms.device_id.src = q_data->cmd_data.sendSMSInd.device_id.dest;
+               tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_sms.device_id.dest = q_data->cmd_data.sendSMSInd.device_id.src;
                tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               free (tr);
+
                return TRUE;
        }
 
        //emit send sms signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_sms = sat_manager_send_sms_noti(ctx, plg_name, &q_data->cmd_data.sendSMSInd);
+       send_sms = sat_manager_send_sms_noti(ctx, cp_name, &q_data->cmd_data.sendSMSInd);
 
        dbg("send sms type_format(%s)", g_variant_get_type_string(send_sms));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(send_sms, "(isi@vbiisii@vi)", &command_id, &text, &text_len, &icon_id, &b_packing_required, &ton, &npi,
                        &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
-
+#else
+       g_variant_get(send_sms, "(isibiisii@vi)", &command_id, &text, &text_len, &b_packing_required, &ton, &npi,
+                       &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
+#endif
        telephony_sat_emit_send_sms(sat, command_id, text, text_len, b_packing_required,
                        ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
 
+       g_free(text);
+       g_free(dialling_number);
        return TRUE;
 }
 
@@ -4301,53 +5822,76 @@ static gboolean _sat_manager_handle_send_ss_ui_display_status(struct custom_data
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
        GVariant *send_ss = NULL;
 
-
        gint command_id, ton, npi;
        gint text_len, ss_str_len;
-       gchar* text, *ss_string;
+       gchar* text = NULL, *ss_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
+#endif
+       enum dbus_tapi_sim_slot_id slot_id;
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send ss");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.send_ss.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.send_ss.command_detail.cmd_type;
                memcpy((void*)&tr->terminal_rsp_data.send_ss.command_detail, &q_data->cmd_data.send_ss.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               tr->terminal_rsp_data.send_ss.device_id.src = q_data->cmd_data.send_ss.device_id.dest;
+               tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_ss.device_id.dest = q_data->cmd_data.send_ss.device_id.src;
                tr->terminal_rsp_data.send_ss.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               free (tr);
+
                return TRUE;
        }
 
        //emit send ss signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_ss = sat_manager_send_ss_noti(ctx, plg_name, &q_data->cmd_data.send_ss);
+       send_ss = sat_manager_send_ss_noti(ctx, cp_name, &q_data->cmd_data.send_ss);
 
        dbg("send ss type_format(%s)", g_variant_get_type_string(send_ss));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(send_ss, "(isi@viiis)", &command_id, &text, &text_len, &icon_id,
                        &ton, &npi, &ss_str_len, &ss_string);
-
+#else
+       g_variant_get(send_ss, "(isiiiis)", &command_id, &text, &text_len,
+                       &ton, &npi, &ss_str_len, &ss_string);
+#endif
        telephony_sat_emit_send_ss(sat, command_id, text, text_len, ton, npi, ss_string);
+       g_free(text);
+       g_free(ss_string);
+
+       slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
+       dbg("slot_id: [%d]", slot_id);
+       sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_SS, send_ss, slot_id);
 
        return TRUE;
 }
@@ -4358,175 +5902,148 @@ static gboolean _sat_manager_handle_send_ussd_ui_display_status(struct custom_da
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
        GVariant *send_ussd = NULL;
 
        gint command_id;
+       guchar dcs;
        gint text_len, ussd_str_len;
-       gchar* text, *ussd_string;
+       gchar* text = NULL, *ussd_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
+#endif
+       enum dbus_tapi_sim_slot_id slot_id;
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send ussd");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.send_ussd.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.send_ussd.command_detail.cmd_type;
                memcpy((void*)&tr->terminal_rsp_data.send_ussd.command_detail, &q_data->cmd_data.send_ussd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               tr->terminal_rsp_data.send_ussd.device_id.src = q_data->cmd_data.send_ussd.device_id.dest;
+               tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_ussd.device_id.dest = q_data->cmd_data.send_ussd.device_id.src;
                tr->terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               g_free(tr);
+
                return TRUE;
        }
 
        //emit send ussd signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_ussd = sat_manager_send_ussd_noti(ctx, plg_name, &q_data->cmd_data.send_ussd);
+       send_ussd = sat_manager_send_ussd_noti(ctx, cp_name, &q_data->cmd_data.send_ussd);
 
        dbg("send ussd type_format(%s)", g_variant_get_type_string(send_ussd));
-       g_variant_get(send_ussd, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &ussd_str_len, &ussd_string);
-
-       telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, ussd_string);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(send_ussd, "(isi@vyis)", &command_id, &text, &text_len, &icon_id, &dcs, &ussd_str_len, &ussd_string);
+#else
+       g_variant_get(send_ussd, "(isiyis)", &command_id, &text, &text_len, &dcs, &ussd_str_len, &ussd_string);
+#endif
+       telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, dcs, ussd_string);
+       g_free(text);
+       g_free(ussd_string);
+
+       slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
+       dbg("slot_id: [%d]", slot_id);
+       sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_USSD, send_ussd,slot_id);
 
        return TRUE;
 }
 
-static gboolean _sat_manager_handle_setup_idle_mode_text_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
-{
-       TReturn rv = TCORE_RETURN_FAILURE;
-       gboolean result = FALSE;
-
-       struct treq_sat_terminal_rsp_data *tr;
-
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-
-       if (!plg){
-               dbg("there is no valid plugin at this point");
-               return result;
-       }
-
-       tr->cmd_number = q_data->cmd_data.idle_mode.command_detail.cmd_num;
-       tr->cmd_type = q_data->cmd_data.idle_mode.command_detail.cmd_type;
-       memcpy((void*)&tr->terminal_rsp_data.setup_idle_mode_text.command_detail, &q_data->cmd_data.idle_mode.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data->cmd_data.idle_mode.device_id.dest;
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data->cmd_data.idle_mode.device_id.src;
-
-       tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
-               if (q_data->cmd_data.idle_mode.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-                               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
-
-       //fail to display text
-       if(!display_status){
-               dbg("[SAT] fail to show ui display for setup_idle_mode_text");
-               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
-       }
-
-       result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
-       if(rv != TCORE_RETURN_SUCCESS){
-               dbg("fail to send terminal response");
-               result = FALSE;
-       }
-
-       sat_ui_support_terminate_sat_ui();
-
-       return result;
-}
-
-static gboolean _sat_manager_handle_refresh_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
-{
-       struct treq_sat_terminal_rsp_data tr;
-
-       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
-
-       tr.cmd_number = q_data->cmd_data.refresh.command_detail.cmd_num;
-       tr.cmd_type = q_data->cmd_data.refresh.command_detail.cmd_type;
-       memcpy((void*)&tr.terminal_rsp_data.refresh.command_detail, &q_data->cmd_data.refresh.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr.terminal_rsp_data.refresh.device_id.src = q_data->cmd_data.refresh.device_id.dest;
-       tr.terminal_rsp_data.refresh.device_id.dest = q_data->cmd_data.refresh.device_id.src;
-
-       if(!display_status){
-               dbg("fail to show ui for refresh");
-               tr.terminal_rsp_data.refresh.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
-       }
-       else{
-               dbg("success to show ui for refresh");
-               tr.terminal_rsp_data.more_time.result_type = RESULT_SUCCESS;
-               tr.terminal_rsp_data.more_time.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
-       }
-
-       dbg("send refresh tr");
-       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
-       return TRUE;
-}
-
 static gboolean _sat_manager_handle_send_dtmf_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
 {
        char *path;
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
 
        GVariant *send_dtmf = NULL;
        gint command_id = 0;
        gint text_len = 0, dtmf_str_len = 0;
        gchar *text = NULL;
        gchar *dtmf_str = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+#endif
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send_dtmf");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.send_dtmf.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.send_dtmf.command_detail.cmd_type;
                memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &q_data->cmd_data.send_dtmf.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               tr->terminal_rsp_data.send_dtmf.device_id.src = q_data->cmd_data.send_dtmf.device_id.dest;
+               tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data->cmd_data.send_dtmf.device_id.src;
                tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               g_free(tr);
+
                return TRUE;
        }
 
        //emit send_dtmf signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       } else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_dtmf = sat_manager_send_dtmf_noti(ctx, plg_name, &q_data->cmd_data.send_dtmf);
+       send_dtmf = sat_manager_send_dtmf_noti(ctx, cp_name, &q_data->cmd_data.send_dtmf);
 
        dbg("send_dtmf type_format(%s)", g_variant_get_type_string(send_dtmf));
-       g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str, &dtmf_str_len);
-
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str_len, &dtmf_str);
+#else
+       g_variant_get(send_dtmf, "(isiis)", &command_id, &text, &text_len, &dtmf_str_len, &dtmf_str);
+#endif
        telephony_sat_emit_send_dtmf(sat, command_id, text, text_len, dtmf_str, dtmf_str_len);
+       g_free(text);
+       g_free(dtmf_str);
 
        return TRUE;
 }
@@ -4534,10 +6051,9 @@ static gboolean _sat_manager_handle_send_dtmf_ui_display_status(struct custom_da
 static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
 {
        char *path;
-       TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
 
        GVariant *open_channel = NULL;
 
@@ -4545,15 +6061,19 @@ static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom
        gboolean immediate_link, auto_reconnection, bg_mode;
        gint text_len, buffer_size, port_number;
        gchar *text, *dest_address;
-       GVariant *icon_id;
        GVariant *bearer_param;
        GVariant *bearer_detail;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id;
+#endif
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for open channel");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.open_channel.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.open_channel.command_detail.cmd_type;
@@ -4564,29 +6084,55 @@ static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom
                tr->terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               g_free(tr);
+
                return TRUE;
        }
 
        //emit send_dtmf signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       } else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
-       sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
 
-       open_channel = sat_manager_open_channel_noti(ctx, plg_name, &q_data->cmd_data.open_channel);
+       open_channel = sat_manager_open_channel_noti(ctx, cp_name, &q_data->cmd_data.open_channel);
 
        dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
                        &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#else
+       g_variant_get(open_channel,"(isibbbi@viiiis@v)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
+                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#endif
+       /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
+       g_free(text);
+       g_free(dest_address);
 
-       telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
-                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
+       //BIP Manager
+       {
+               GDBusConnection *conn = NULL;
+               const gchar *g_path = NULL;
+
+               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
+       }
 
        return TRUE;
 }
@@ -4641,16 +6187,141 @@ gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlug
 
        return result;
 }
+#else
+static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
+       struct treq_sat_user_confirmation_data *conf_data;
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       conf_data = (struct treq_sat_user_confirmation_data *)calloc(1, sizeof(struct treq_sat_user_confirmation_data));
+       if (!conf_data)
+               return result;
+
+       dbg("display_status[%d]", display_status);
+
+       if(display_status)
+               conf_data->user_conf = USER_CONFIRM_YES;
+       else
+               conf_data->user_conf = USER_CONFIRM_NO_OR_CANCEL;
+
+       result = TRUE;
+       rv = sat_manager_send_user_confirmation(ctx->comm, plg, conf_data);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send user confirmation message");
+               result = FALSE;
+       }
+       g_free(conf_data);
+       return result;
+}
+
+gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gboolean display_status)
+{
+       gboolean result = FALSE;
+       struct sat_manager_queue_data q_data;
+
+       dbg("[SAT] ui display status : command id(%d) display status(%d)", command_id, display_status);
+       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+
+       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
+               dbg("[SAT] command peek data from queue is failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       switch(q_data.cmd_type){
+               case SAT_PROATV_CMD_PLAY_TONE:
+                       result = _sat_manager_handle_play_tone_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
+                       result = _sat_manager_handle_setup_idle_mode_text_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_REFRESH:
+                       result = _sat_manager_handle_refresh_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_OPEN_CHANNEL:
+                       result = _sat_manager_handle_open_channel_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_SEND_SMS:
+               case SAT_PROATV_CMD_SEND_SS:
+               case SAT_PROATV_CMD_SEND_USSD:
+               case SAT_PROATV_CMD_SEND_DTMF:
+                       dbg("[SAT] command(0x%x) will be handled by CP", q_data.cmd_type);
+                       result = TRUE;
+                       if(q_data.noti_required) {
+                               TelephonySAT *sat;
+                               TelephonyObjectSkeleton *object;
+                               const gchar *cp_name;
+                               gchar *path = NULL;
+
+                               dbg("Noti flag is set, send session end evt.");
+                               //emit session end
+
+                               cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                               if (cp_name == NULL) {
+                                       err("CP name is NULL");
+                                       return FALSE;
+                               }
+
+                               dbg("CP Name: [%s]", cp_name);
+                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                               /* Look-up Hash table for Object */
+                               object = g_hash_table_lookup(ctx->objects, path);
+                               dbg("Path: [%s] Interface object: [%p]", path, object);
+                               g_free(path);
+                               if (object == NULL) {
+                                       err("Object is NOT defined!!!");
+                                       return FALSE;
+                               }
+
+                               sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+                               telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
+                       }
+                       break;
+               default:
+                       dbg("[SAT] cannot handle ui display status command(0x%x)", q_data.cmd_type);
+                       break;
+       }
+       return result;
+}
 
+#endif
 gboolean sat_manager_handle_event_download_envelop(int event_type,  int src_dev, int dest_dev, struct tel_sat_envelop_event_download_tlv *evt_download, GVariant *download_data)
 {
+       gboolean rv = FALSE;
        GVariant *data = NULL;
 
        dbg("download data type_format(%s)", g_variant_get_type_string(download_data));
        g_variant_get(download_data, "v", &data);
 
+
+       if(g_evt_list[event_type] == TRUE){
+               dbg("event (%d) shoud be passed to sim", event_type);
+               rv = TRUE;
+       }
+
+       if(!rv){
+               dbg("(%d) event does not requested by sim", event_type);
+               return FALSE;
+       }
+
        switch(event_type)
        {
+               case EVENT_USER_ACTIVITY:
+                       dbg("data type_format(%s)", g_variant_get_type_string(data));
+                       evt_download->device_identitie.src = src_dev;
+                       evt_download->device_identitie.dest = dest_dev;
+                       break;
                case EVENT_IDLE_SCREEN_AVAILABLE:
                        dbg("data type_format(%s)", g_variant_get_type_string(data));
                        g_variant_get(data, "(b)", &evt_download->idle_screen);
@@ -4704,3 +6375,85 @@ gboolean sat_manager_handle_event_download_envelop(int event_type,  int src_dev,
 
        return TRUE;
 }
+
+gboolean sat_manager_update_language(struct custom_data *ctx, const char *cp_name, GVariant *language_noti)
+{
+       Server *s = NULL;
+       TcorePlugin *plg = NULL;
+       static Storage *strg;
+
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
+       const gchar *lang_str = NULL;
+       gint command_id, language;
+       gboolean b_specified;
+
+       struct treq_sat_terminal_rsp_data *tr;
+       struct sat_manager_queue_data q_data;
+
+       s = ctx->server;
+       strg = tcore_server_find_storage(s, "vconf");
+
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+
+       dbg("language_noti type_format(%s)", g_variant_get_type_string(language_noti));
+       g_variant_get(language_noti, "(iib)", &command_id, &language, &b_specified);
+
+       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
+               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if(q_data.cmd_type != SAT_PROATV_CMD_LANGUAGE_NOTIFICATION){
+               dbg("[SAT] Language Noti dequeue failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if (b_specified) {
+               lang_str = _convert_sim_lang_to_string((enum tel_sim_language_type)language);
+               if(!lang_str){
+                       dbg("language is not exist");
+               }
+               dbg("converted lang (%s)", lang_str);
+
+               if(_sat_manager_check_language_set(lang_str)) {
+                       dbg("supprted language, set vconf.");
+                       result = tcore_storage_set_string(strg,STORAGE_KEY_LANGUAGE_SET, (const char*)lang_str);
+                       if(!result){
+                               dbg("fail to update language");
+                       }
+               }
+       }
+
+       /* TR should be sent with success result
+        * regardless of language is specified or not.
+        */
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return FALSE;
+
+       tr->cmd_number = q_data.cmd_data.language_notification.command_detail.cmd_num;
+       tr->cmd_type = q_data.cmd_data.language_notification.command_detail.cmd_type;
+       memcpy((void*)&tr->terminal_rsp_data.language_notification.command_detail, &q_data.cmd_data.language_notification.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr->terminal_rsp_data.language_notification.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.language_notification.device_id.dest = DEVICE_ID_SIM;
+       tr->terminal_rsp_data.language_notification.result_type = RESULT_SUCCESS;
+
+       result = TRUE;
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send terminal response");
+               g_free(tr);
+               result = FALSE;
+               return result;
+       }
+
+       g_free(tr);
+       return result;
+}