diff --git a/FMRecord/res/values-zh-rCN/strings.xml b/FMRecord/res/values-zh-rCN/strings.xml
index a55ae4b..660f743 100644
--- a/FMRecord/res/values-zh-rCN/strings.xml
+++ b/FMRecord/res/values-zh-rCN/strings.xml
@@ -41,4 +41,6 @@
     <!-- all recordings will show up in the media database in a playlist with this name -->
     <string name="audio_db_playlist_name">FM 录音</string>
     <string name="fm_record_progress">FM 录音进行中</string>
+    <string name="FMRecording_reach_size_limit">已到达最长限制.</string>
+    <string name="unable_to_store">无法保存已录音频</string>
 </resources>
diff --git a/FMRecord/res/values/strings.xml b/FMRecord/res/values/strings.xml
index ff11d19..244d41c 100644
--- a/FMRecord/res/values/strings.xml
+++ b/FMRecord/res/values/strings.xml
@@ -47,4 +47,5 @@
     <string name="audio_db_playlist_name">FM recordings</string>
     <string name="save_record_file">FM Recorded file saved to "<xliff:g id="record_file">%1$s</xliff:g>"</string>
     <string name="fm_record_progress">FM Recording in progress</string>
+    <string name="unable_to_store">Unable to save recorded audio</string>
 </resources>
diff --git a/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java b/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java
index fc0fc21..62f4a94 100644
--- a/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java
+++ b/FMRecord/src/com/codeaurora/fmrecording/FMRecordingService.java
@@ -259,7 +259,10 @@
 
         }
         mSampleFile = null;
-        File sampleDir = Environment.getExternalStorageDirectory();
+        File sampleDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/FMRecording");
+
+        if(!(sampleDir.mkdirs() || sampleDir.isDirectory()))
+            return false;
 
         try {
              mSampleFile = File.createTempFile("FMRecording", ".3gpp", sampleDir);
@@ -309,9 +312,12 @@
                          Log.d(TAG, "Maximum file size/duration reached, stopping the recording");
                          stopRecord();
                      }
-                     // Show the toast.
-                     Toast.makeText(FMRecordingService.this, R.string.FMRecording_reach_size_limit,
-                               Toast.LENGTH_LONG).show();
+                     if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED) {
+                         // Show the toast.
+                         Toast.makeText(FMRecordingService.this,
+                                        R.string.FMRecording_reach_size_limit,
+                                        Toast.LENGTH_LONG).show();
+                     }
                  }
              }
              // from MediaRecorder.OnErrorListener
@@ -417,7 +423,7 @@
         Log.d(TAG, "ContentURI: " + base);
         Uri result = resolver.insert(base, cv);
         if (result == null) {
-            Toast.makeText(this, "Unable to save recorded audio", Toast.LENGTH_SHORT).show();
+            Toast.makeText(this, R.string.unable_to_store, Toast.LENGTH_SHORT).show();
             return null;
         }
         if (getPlaylistId(res) == -1) {
@@ -469,7 +475,7 @@
         cv.put(MediaStore.Audio.Playlists.NAME, res.getString(R.string.audio_db_playlist_name));
         Uri uri = resolver.insert(MediaStore.Audio.Playlists.getContentUri("external"), cv);
         if (uri == null) {
-            Toast.makeText(this, "Unable to save recorded audio", Toast.LENGTH_SHORT).show();
+            Toast.makeText(this, R.string.unable_to_store, Toast.LENGTH_SHORT).show();
         }
         return uri;
     }
diff --git a/fmapp2/AndroidManifest.xml b/fmapp2/AndroidManifest.xml
index aeb3a1c..a0ed3ca 100644
--- a/fmapp2/AndroidManifest.xml
+++ b/fmapp2/AndroidManifest.xml
@@ -74,6 +74,7 @@
         <receiver android:name="com.caf.fmradio.FMMediaButtonIntentReceiver">
             <intent-filter>
                  <action android:name="android.intent.action.MEDIA_BUTTON" />
+                 <action android:name="android.media.AUDIO_BECOMING_NOISY" />
             </intent-filter>
         </receiver>
 
diff --git a/fmapp2/res/values-zh-rCN/strings.xml b/fmapp2/res/values-zh-rCN/strings.xml
index 76936b7..d32c0cd 100644
--- a/fmapp2/res/values-zh-rCN/strings.xml
+++ b/fmapp2/res/values-zh-rCN/strings.xml
@@ -115,5 +115,6 @@
     <string name="chanl_spacing">信道间隔</string>
     <string name="set">设置</string>
     <string name="cancel">取消</string>
-	<string name="rt_plus_tags">标签</string>
+    <string name="rt_plus_tags">标签</string>
+    <string name="user_defind_band_msg">请输入有效的频段范围 76.0 - 108.0</string>
 </resources>
diff --git a/fmapp2/res/values/strings.xml b/fmapp2/res/values/strings.xml
index 146866a..a2bf1d4 100644
--- a/fmapp2/res/values/strings.xml
+++ b/fmapp2/res/values/strings.xml
@@ -263,5 +263,6 @@
     <string name="band_sweep_choose">Choose Band Sweep Method</string>
     <string name="set">Set</string>
     <string name="cancel">Cancel</string>
+    <string name="user_defind_band_msg">Enter Freq from range 76.0 - 108.0</string>
 
 </resources>
diff --git a/fmapp2/src/com/caf/fmradio/FMMediaButtonIntentReceiver.java b/fmapp2/src/com/caf/fmradio/FMMediaButtonIntentReceiver.java
index 9bc4d77..949453f 100644
--- a/fmapp2/src/com/caf/fmradio/FMMediaButtonIntentReceiver.java
+++ b/fmapp2/src/com/caf/fmradio/FMMediaButtonIntentReceiver.java
@@ -36,6 +36,7 @@
 import android.content.pm.PackageManager;
 import android.content.Context;
 import android.content.ComponentName;
+import android.media.AudioManager;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.os.Bundle;
@@ -45,9 +46,14 @@
 
 private static final String TAG = "FMMediaButtonIntentReceiver";
 public static final String FM_MEDIA_BUTTON = "com.caf.fmradio.action.MEDIA_BUTTON";
+public static final String AUDIO_BECOMING_NOISY = "com.caf.fmradio.action.AUDIO_BECOMING_NOISY";
 public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction();
-       if ((action != null) && action.equals("android.intent.action.MEDIA_BUTTON")) {
+       String action = intent.getAction();
+       if ((action != null) && action.equals(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
+           Log.d(TAG, "ACTION_AUDIO_BECOMING_NOISY intent received for ACTION_HEADSET_PLUG");
+           Intent i = new Intent(AUDIO_BECOMING_NOISY);
+           context.sendBroadcast(i);
+       } else if ((action != null) && action.equals("android.intent.action.MEDIA_BUTTON")) {
            KeyEvent event = (KeyEvent)
                     intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
 
diff --git a/fmapp2/src/com/caf/fmradio/FMRadio.java b/fmapp2/src/com/caf/fmradio/FMRadio.java
index 9d48888..870df8c 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadio.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadio.java
@@ -962,6 +962,7 @@
                       RestoreDefaults();
                       enableRadioOnOffUI();
                       tuneRadio(FmSharedPreferences.DEFAULT_NO_FREQUENCY);
+                      FmSharedPreferences.addStation("", FmSharedPreferences.DEFAULT_NO_FREQUENCY, 0);
                   }
                }
             }
@@ -2046,11 +2047,9 @@
             String display = "";
             if (station != null) {
                display = station.getName();
-                Log.e(LOGTAG, "Venkat:before" + display );
                 if (display.length() > 6)
-		 display = display.substring(0,6)+"...";
-	       Log.e(LOGTAG, "Venkat: after" + display );
-		mPresetButtons[buttonIndex].setEllipsize(TextUtils.TruncateAt.END);
+                    display = display.substring(0,6)+"...";
+	       mPresetButtons[buttonIndex].setEllipsize(TextUtils.TruncateAt.END);
                mPresetButtons[buttonIndex].setText(display);
                mPresetButtons[buttonIndex].setTag(station);
                mPresetButtons[buttonIndex].setHeight(-1);
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 1143eaf..5dd1e7b 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -106,6 +106,7 @@
    private boolean mSleepActive = false;
    private BroadcastReceiver mRecordTimeoutListener = null;
    private BroadcastReceiver mDelayedServiceStopListener = null;
+   private BroadcastReceiver mAudioBecomeNoisyListener = null;
    private boolean mOverA2DP = false;
    private BroadcastReceiver mFmMediaButtonListener;
    private IFMRadioServiceCallbacks mCallbacks;
@@ -204,6 +205,7 @@
       // registering media button receiver seperately as we need to set
       // different priority for receiving media events
       registerFmMediaButtonReceiver();
+      registerAudioBecomeNoisy();
       if ( false == SystemProperties.getBoolean("ro.fm.mulinst.recording.support",true)) {
            mSingleRecordingInstanceSupported = true;
       }
@@ -257,6 +259,10 @@
           unregisterReceiver(mFmMediaButtonListener);
           mFmMediaButtonListener = null;
       }
+      if (mAudioBecomeNoisyListener != null) {
+          unregisterReceiver(mAudioBecomeNoisyListener);
+          mAudioBecomeNoisyListener = null;
+      }
       if (mSleepExpiredListener != null ) {
           unregisterReceiver(mSleepExpiredListener);
           mSleepExpiredListener = null;
@@ -505,6 +511,40 @@
          }
      }
 
+    public void registerAudioBecomeNoisy() {
+        if (mAudioBecomeNoisyListener == null) {
+            mAudioBecomeNoisyListener = new BroadcastReceiver() {
+                @Override
+                public void onReceive(Context context, Intent intent) {
+                    Log.d(LOGTAG, "FMMediaButtonIntentReceiver.AUDIO_BECOMING_NOISY");
+                    String intentAction = intent.getAction();
+                    if (FMMediaButtonIntentReceiver.AUDIO_BECOMING_NOISY.equals(intentAction)) {
+                       if (isFmOn())
+                       {
+                           /* Disable FM and let the UI know */
+                           fmOff();
+                           try
+                           {
+                              /* Notify the UI/Activity, only if the service is "bound"
+                              by an activity and if Callbacks are registered
+                              */
+                              if((mServiceInUse) && (mCallbacks != null) )
+                              {
+                                  mCallbacks.onDisabled();
+                              }
+                           } catch (RemoteException e)
+                           {
+                               e.printStackTrace();
+                           }
+                       }
+                    }
+                }
+            };
+            IntentFilter intentFilter = new IntentFilter(FMMediaButtonIntentReceiver.AUDIO_BECOMING_NOISY);
+            registerReceiver(mAudioBecomeNoisyListener, intentFilter);
+        }
+    }
+
     public void registerMusicServiceCommandReceiver() {
         if (mMusicCommandListener == null) {
             mMusicCommandListener = new BroadcastReceiver() {
@@ -599,6 +639,8 @@
             /* Update the UI based on the state change of the headset/antenna*/
             if(!isAntennaAvailable())
             {
+                if (!isFmOn())
+                    return;
                 /* Disable FM and let the UI know */
                 fmOff();
                 try
@@ -1750,6 +1792,12 @@
       if (isFmRecordingOn())
       {
           stopRecording();
+          try {
+               Thread.sleep(300);
+          } catch (Exception ex) {
+               Log.d( LOGTAG, "RunningThread InterruptedException");
+               return;
+          }
       }
       AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
       if(audioManager != null)
diff --git a/fmapp2/src/com/caf/fmradio/HorizontalNumberPicker.java b/fmapp2/src/com/caf/fmradio/HorizontalNumberPicker.java
index ac886bb..505097f 100644
--- a/fmapp2/src/com/caf/fmradio/HorizontalNumberPicker.java
+++ b/fmapp2/src/com/caf/fmradio/HorizontalNumberPicker.java
@@ -1600,7 +1600,11 @@
         for (int i = 0; i < mSelectorIndices.length; i++) {
             int selectorIndex = current + (i - mSelectorMiddleItemIndex);
             if (mWrapSelectorWheel) {
-                selectorIndex = getWrappedSelectorIndex(selectorIndex);
+                try {
+                    selectorIndex = getWrappedSelectorIndex(selectorIndex);
+                } catch(RuntimeException e) {
+                    e.printStackTrace();
+                }
             }
             mSelectorIndices[i] = selectorIndex;
             ensureCachedScrollSelectorValue(mSelectorIndices[i]);
@@ -1622,7 +1626,11 @@
         }
         // Wrap around the values if we go past the start or end
         if (mWrapSelectorWheel) {
-            current = getWrappedSelectorIndex(current);
+            try {
+                current = getWrappedSelectorIndex(current);
+            } catch(RuntimeException e) {
+                e.printStackTrace();
+            }
         }
         int previous = mValue;
         setValue(current);
diff --git a/fmapp2/src/com/caf/fmradio/PresetStation.java b/fmapp2/src/com/caf/fmradio/PresetStation.java
index 77bf648..bcbb55e 100644
--- a/fmapp2/src/com/caf/fmradio/PresetStation.java
+++ b/fmapp2/src/com/caf/fmradio/PresetStation.java
@@ -29,7 +29,7 @@
 package com.caf.fmradio;
 
 import qcom.fmradio.FmReceiver;
-
+import java.util.Locale;
 import android.text.TextUtils;
 //import android.util.Log;
 
@@ -638,132 +638,236 @@
       {
          case 1:
          {
-            ptyStr = "News";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "新闻";
+            else
+                ptyStr = "News";
             break;
          }
          case 2:
          {
-            ptyStr = "Information";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "信息频道";
+            else
+                ptyStr = "Information";
             break;
          }
          case 3:
          {
-            ptyStr = "Sports";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "体育";
+            else
+                ptyStr = "Sports";
             break;
          }
          case 4:
          {
-            ptyStr = "Talk";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "交流";
+            else
+                ptyStr = "Talk";
             break;
          }
          case 5:
          {
-            ptyStr = "Rock";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "摇滚";
+            else
+                ptyStr = "Rock";
             break;
          }
          case 6:
          {
-            ptyStr = "Classic Rock";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "经典摇滚";
+            else
+                ptyStr = "Classic Rock";
             break;
          }
          case 7:
          {
-            ptyStr = "Adult Hits";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "成人点击";
+            else
+                ptyStr = "Adult Hits";
             break;
          }
          case 8:
          {
-            ptyStr = "Soft Rock";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "轻摇滚";
+            else
+                ptyStr = "Soft Rock";
             break;
          }
          case 9:
          {
-            ptyStr = "Top 40";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "前40";
+            else
+                ptyStr = "Top 40";
             break;
          }
          case 10:
          {
-            ptyStr = "Country";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "乡村";
+            else
+                ptyStr = "Country";
             break;
          }
          case 11:
          {
-            ptyStr = "Oldies";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "老歌";
+            else
+                ptyStr = "Oldies";
             break;
          }
          case 12:
          {
-            ptyStr = "Soft";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "轻音乐";
+            else
+                ptyStr = "Soft";
             break;
          }
          case 13:
          {
-            ptyStr = "Nostalgia";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "怀旧";
+            else
+                ptyStr = "Nostalgia";
             break;
          }
          case 14:
          {
-            ptyStr = "Jazz";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "爵士";
+            else
+                ptyStr = "Jazz";
             break;
          }
          case 15:
          {
-            ptyStr = "Classical";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "古典";
+            else
+                ptyStr = "Classical";
             break;
          }
          case 16:
          {
-            ptyStr = "Rhythm and Blues";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "节奏布鲁斯";
+            else
+                ptyStr = "Rhythm and Blues";
             break;
          }
          case 17:
          {
-            ptyStr = "Soft Rhythm and Blues";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "轻节奏布鲁斯";
+            else
+                ptyStr = "Soft Rhythm and Blues";
             break;
          }
          case 18:
          {
-            ptyStr = "Foreign Language";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "外语频道";
+            else
+                ptyStr = "Foreign Language";
             break;
          }
          case 19:
          {
-            ptyStr = "Religious Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "宗教音乐";
+            else
+                ptyStr = "Religious Music";
             break;
          }
          case 20:
          {
-            ptyStr = "Religious Talk";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "宗教交流";
+            else
+                ptyStr = "Religious Talk";
             break;
          }
          case 21:
          {
-            ptyStr = "Personality";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "个性";
+            else
+                ptyStr = "Personality";
             break;
          }
          case 22:
          {
-            ptyStr = "Public";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "公共频道";
+            else
+                ptyStr = "Public";
             break;
          }
          case 23:
          {
-            ptyStr = "College";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "校园";
+            else
+                ptyStr = "College";
             break;
          }
          case 29:
          {
-            ptyStr = "Weather";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "天气";
+            else
+                ptyStr = "Weather";
             break;
          }
          case 30:
          {
-            ptyStr = "Emergency Test";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "紧急 测试";
+            else
+                ptyStr = "Emergency Test";
             break;
          }
          case 31:
          {
-            ptyStr = "Emergency";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "紧急";
+            else
+                ptyStr = "Emergency";
             break;
          }
          default:
@@ -784,157 +888,281 @@
       {
          case 1:
          {
-            ptyStr = "News";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "新闻";
+            else
+                ptyStr = "News";
             break;
          }
          case 2:
          {
-            ptyStr = "Current Affairs";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "新闻时事";
+            else
+                ptyStr = "Current Affairs";
             break;
          }
          case 3:
          {
-            ptyStr = "Information";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "信息";
+            else
+                ptyStr = "Information";
             break;
          }
          case 4:
          {
-            ptyStr = "Sport";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "体育";
+            else
+                ptyStr = "Sport";
             break;
          }
          case 5:
          {
-            ptyStr = "Education";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "教育";
+            else
+                ptyStr = "Education";
             break;
          }
          case 6:
          {
-            ptyStr = "Drama";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "戏剧";
+            else
+                ptyStr = "Drama";
             break;
          }
          case 7:
          {
-            ptyStr = "Culture";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "文化";
+            else
+                ptyStr = "Culture";
             break;
          }
          case 8:
          {
-            ptyStr = "Science";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "科学";
+            else
+                ptyStr = "Science";
             break;
          }
          case 9:
          {
-            ptyStr = "Varied";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "变奏";
+            else
+                ptyStr = "Varied";
             break;
          }
          case 10:
          {
-            ptyStr = "Pop Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "流行音乐";
+            else
+                ptyStr = "Pop Music";
             break;
          }
          case 11:
          {
-            ptyStr = "Rock Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "摇滚音乐";
+            else
+                ptyStr = "Rock Music";
             break;
          }
          case 12:
          {
-            ptyStr = "Easy Listening Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "轻音乐";
+            else
+                ptyStr = "Easy Listening Music";
             break;
          }
          case 13:
          {
-            ptyStr = "Light classical";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "轻古典音乐";
+            else
+                ptyStr = "Light classical";
             break;
          }
          case 14:
          {
-            ptyStr = "Serious classical";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "古典";
+            else
+                ptyStr = "Serious classical";
             break;
          }
          case 15:
          {
-            ptyStr = "Other Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "其他音乐";
+            else
+                ptyStr = "Other Music";
             break;
          }
          case 16:
          {
-            ptyStr = "Weather";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "天气";
+            else
+                ptyStr = "Weather";
             break;
          }
          case 17:
          {
-            ptyStr = "Finance";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "经济";
+            else
+                ptyStr = "Finance";
             break;
          }
          case 18:
          {
-            ptyStr = "Children programs";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "儿童节目";
+            else
+                ptyStr = "Children programs";
             break;
          }
          case 19:
          {
-            ptyStr = "Social Affairs";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "社会事务";
+            else
+                ptyStr = "Social Affairs";
             break;
          }
          case 20:
          {
-            ptyStr = "Religion";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "宗教";
+            else
+                ptyStr = "Religion";
             break;
          }
          case 21:
          {
-            ptyStr = "Phone In";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "听众来电";
+            else
+                ptyStr = "Phone In";
             break;
          }
          case 22:
          {
-            ptyStr = "Travel";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "旅行";
+            else
+                ptyStr = "Travel";
             break;
          }
          case 23:
          {
-            ptyStr = "Leisure";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "休闲";
+            else
+                ptyStr = "Leisure";
             break;
          }
          case 24:
          {
-            ptyStr = "Jazz Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "爵士音乐";
+            else
+                ptyStr = "Jazz Music";
             break;
          }
          case 25:
          {
-            ptyStr = "Country Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "乡村音乐";
+            else
+                ptyStr = "Country Music";
             break;
          }
          case 26:
          {
-            ptyStr = "National Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "民族音乐";
+            else
+                ptyStr = "National Music";
             break;
          }
          case 27:
          {
-            ptyStr = "Oldies Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "怀旧";
+            else
+                ptyStr = "Oldies Music";
             break;
          }
          case 28:
          {
-            ptyStr = "Folk Music";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "民族音乐";
+            else
+                ptyStr = "Folk Music";
             break;
          }
          case 29:
          {
-            ptyStr = "Documentary";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "记录";
+            else
+                ptyStr = "Documentary";
             break;
          }
          case 30:
          {
-            ptyStr = "Emergency Test";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "紧急测试";
+            else
+                ptyStr = "Emergency Test";
             break;
          }
          case 31:
          {
-            ptyStr = "Emergency";
+            if ((Locale.getDefault().getLanguage().equals("zh"))
+                || (Locale.getDefault().getLanguage().equals("zh_CN")))
+                ptyStr = "紧急";
+            else
+                ptyStr = "Emergency";
             break;
          }
          default:
diff --git a/fmapp2/src/com/caf/fmradio/Settings.java b/fmapp2/src/com/caf/fmradio/Settings.java
index d64621b..03f88c1 100644
--- a/fmapp2/src/com/caf/fmradio/Settings.java
+++ b/fmapp2/src/com/caf/fmradio/Settings.java
@@ -317,7 +317,8 @@
                   setBandSummary(summaryBandItems.length - 1);
                   clearStationList();
                }else {
-                  displayToast(USR_BAND_MSG);
+                  Toast.makeText(this, getString(R.string.user_defind_band_msg),
+                                                            Toast.LENGTH_SHORT).show();
                }
            }else if(key.equals(USER_DEFINED_BAND_MAX_KEY)) {
                String valStr = mUserBandMaxPref.getText();
@@ -336,7 +337,8 @@
                   setBandSummary(summaryBandItems.length - 1);
                   clearStationList();
                }else {
-                  displayToast(USR_BAND_MSG);
+                  Toast.makeText(this, getString(R.string.user_defind_band_msg),
+                                                            Toast.LENGTH_SHORT).show();
                }
           }else {
               if(mRxMode) {
