diff --git a/src/com/android/stk/StkAppService.java b/src/com/android/stk/StkAppService.java
index 1220741..8c47948 100755
--- a/src/com/android/stk/StkAppService.java
+++ b/src/com/android/stk/StkAppService.java
@@ -174,6 +174,7 @@
     static final int OP_SET_ACT_INST = 8;
     static final int OP_SET_DAL_INST = 9;
     static final int OP_SET_MAINACT_INST = 10;
+    static final int OP_ALPHA_NOTIFY = 13;
 
     // Response ids
     static final int RES_ID_MENU_SELECTION = 11;
@@ -315,6 +316,7 @@
             break;
         case OP_RESPONSE:
         case OP_CARD_STATUS_CHANGED:
+        case OP_ALPHA_NOTIFY:
             msg.obj = args;
             /* falls through */
         case OP_LAUNCH_APP:
@@ -571,6 +573,9 @@
                 CatLog.d(LOG_TAG, "Set activity instance. " + mainAct);
                 mStkContext[slotId].mMainActivityInstance = mainAct;
                 break;
+            case OP_ALPHA_NOTIFY:
+                handleAlphaNotify((Bundle) msg.obj);
+                break;
             }
         }
 
@@ -1485,6 +1490,7 @@
         mStkContext[slotId].mSetupMenuState = STATE_EXIST;
         return false;
     }
+
     StkContext getStkContext(int slotId) {
         if (slotId >= 0 && slotId < mSimCount) {
             return mStkContext[slotId];
@@ -1493,4 +1499,13 @@
             return null;
         }
     }
+
+    private void handleAlphaNotify(Bundle args) {
+        String alphaString = args.getString(AppInterface.ALPHA_STRING);
+
+        CatLog.d(this, "Alpha string received from card: " + alphaString);
+        Toast toast = Toast.makeText(sInstance, alphaString, Toast.LENGTH_LONG);
+        toast.setGravity(Gravity.TOP, 0, 0);
+        toast.show();
+    }
 }
