diff --git a/res/values/strings.xml b/res/values/strings.xml
index bcce41f..bf26d73 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -45,4 +45,18 @@
     <string name="stk_app_state">Application state</string>
     <string name="enable_app">Enabled</string>
     <string name="disable_app">Disabled</string>
+
+    <!-- Title text used for system dialog from STK app -->
+    <string name="stk_dialog_title">SIM ToolKit</string>
+    <!-- Default message when no alpha in OPEN_CHANNEL -->
+    <string name="default_open_channel_msg">Open Channel?</string>
+    <!-- Default message when no alpha in SEND_DATA -->
+    <string name="default_send_data_msg">Sending Data</string>
+    <!-- Default message when no alpha in RECEIVE_DATA -->
+    <string name="default_receive_data_msg">Receiving Data</string>
+    <!-- Default message when no alpha in CLOSE_CHANNEL-->
+    <string name="default_close_channel_msg">Channel Closed</string>
+    <!-- Button texts used in STK dialog -->
+    <string name="stk_dialog_accept">YES</string>
+    <string name="stk_dialog_reject">NO</string>
 </resources>
diff --git a/src/com/android/stk/StkAppService.java b/src/com/android/stk/StkAppService.java
index 9b3252d..1007a4a 100644
--- a/src/com/android/stk/StkAppService.java
+++ b/src/com/android/stk/StkAppService.java
@@ -16,11 +16,13 @@
 
 package com.android.stk;
 
+import android.app.AlertDialog;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.app.Service;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
@@ -32,6 +34,8 @@
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 import android.widget.ImageView;
 import android.widget.RemoteViews;
 import android.widget.TextView;
@@ -90,6 +94,7 @@
     static final String INPUT = "input";
     static final String HELP = "help";
     static final String CONFIRMATION = "confirm";
+    static final String CHOICE = "choice";
 
     // operations ids for different service functionality.
     static final int OP_CMD = 1;
@@ -104,12 +109,16 @@
     static final int RES_ID_INPUT = 12;
     static final int RES_ID_CONFIRM = 13;
     static final int RES_ID_DONE = 14;
+    static final int RES_ID_CHOICE = 15;
 
     static final int RES_ID_TIMEOUT = 20;
     static final int RES_ID_BACKWARD = 21;
     static final int RES_ID_END_SESSION = 22;
     static final int RES_ID_EXIT = 23;
 
+    static final int YES = 1;
+    static final int NO = 0;
+
     private static final String PACKAGE_NAME = "com.android.stk";
     private static final String MENU_ACTIVITY_NAME =
                                         PACKAGE_NAME + ".StkMenuActivity";
@@ -323,6 +332,9 @@
         case SEND_USSD:
         case SET_UP_IDLE_MODE_TEXT:
         case SET_UP_MENU:
+        case CLOSE_CHANNEL:
+        case RECEIVE_DATA:
+        case SEND_DATA:
             return false;
         }
 
@@ -438,6 +450,29 @@
         case PLAY_TONE:
             launchToneDialog();
             break;
+        case OPEN_CHANNEL:
+            launchOpenChannelDialog();
+            break;
+        case CLOSE_CHANNEL:
+        case RECEIVE_DATA:
+        case SEND_DATA:
+            TextMessage m = mCurrentCmd.geTextMessage();
+
+            if ((m != null) && (m.text == null)) {
+                switch(cmdMsg.getCmdType()) {
+                case CLOSE_CHANNEL:
+                    m.text = getResources().getString(R.string.default_close_channel_msg);
+                    break;
+                case RECEIVE_DATA:
+                    m.text = getResources().getString(R.string.default_receive_data_msg);
+                    break;
+                case SEND_DATA:
+                    m.text = getResources().getString(R.string.default_send_data_msg);
+                    break;
+                }
+            }
+            launchTransientEventMessage();
+            break;
         }
 
         if (!waitForUsersResponse) {
@@ -542,6 +577,18 @@
                 resMsg.setResultCode(ResultCode.NO_RESPONSE_FROM_USER);
             }
             break;
+        case RES_ID_CHOICE:
+            int choice = args.getInt(CHOICE);
+            CatLog.d(this, "User Choice=" + choice);
+            switch (choice) {
+                case YES:
+                    resMsg.setResultCode(ResultCode.OK);
+                    break;
+                case NO:
+                    resMsg.setResultCode(ResultCode.USER_NOT_ACCEPT);
+                    break;
+            }
+            break;
         default:
             CatLog.d(this, "Unknown result id");
             return;
@@ -760,6 +807,88 @@
         startActivity(newIntent);
     }
 
+    private void launchOpenChannelDialog() {
+        TextMessage msg = mCurrentCmd.geTextMessage();
+        if (msg == null) {
+            CatLog.d(this, "msg is null, return here");
+            return;
+        }
+
+        msg.title = getResources().getString(R.string.stk_dialog_title);
+        if (msg.text == null) {
+            msg.text = getResources().getString(R.string.default_open_channel_msg);
+        }
+
+        final AlertDialog dialog = new AlertDialog.Builder(mContext)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
+                    .setTitle(msg.title)
+                    .setMessage(msg.text)
+                    .setCancelable(false)
+                    .setPositiveButton(getResources().getString(R.string.stk_dialog_accept),
+                                       new DialogInterface.OnClickListener() {
+                        public void onClick(DialogInterface dialog, int which) {
+                            Bundle args = new Bundle();
+                            args.putInt(RES_ID, RES_ID_CHOICE);
+                            args.putInt(CHOICE, YES);
+                            Message message = mServiceHandler.obtainMessage();
+                            message.arg1 = OP_RESPONSE;
+                            message.obj = args;
+                            mServiceHandler.sendMessage(message);
+                        }
+                    })
+                    .setNegativeButton(getResources().getString(R.string.stk_dialog_reject),
+                                       new DialogInterface.OnClickListener() {
+                        public void onClick(DialogInterface dialog, int which) {
+                            Bundle args = new Bundle();
+                            args.putInt(RES_ID, RES_ID_CHOICE);
+                            args.putInt(CHOICE, NO);
+                            Message message = mServiceHandler.obtainMessage();
+                            message.arg1 = OP_RESPONSE;
+                            message.obj = args;
+                            mServiceHandler.sendMessage(message);
+                        }
+                    })
+                    .create();
+
+        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+        if (!mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_sf_slowBlur)) {
+            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
+        }
+
+        dialog.show();
+    }
+
+    private void launchTransientEventMessage() {
+        TextMessage msg = mCurrentCmd.geTextMessage();
+        if (msg == null) {
+            CatLog.d(this, "msg is null, return here");
+            return;
+        }
+
+        msg.title = getResources().getString(R.string.stk_dialog_title);
+
+        final AlertDialog dialog = new AlertDialog.Builder(mContext)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
+                    .setTitle(msg.title)
+                    .setMessage(msg.text)
+                    .setCancelable(false)
+                    .setPositiveButton(getResources().getString(android.R.string.ok),
+                                       new DialogInterface.OnClickListener() {
+                        public void onClick(DialogInterface dialog, int which) {
+                        }
+                    })
+                    .create();
+
+        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+        if (!mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_sf_slowBlur)) {
+            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
+        }
+
+        dialog.show();
+    }
+
     private String getItemName(int itemId) {
         Menu menu = mCurrentCmd.getMenu();
         if (menu == null) {
