diff --git a/fmapp2/res/values/integers.xml b/fmapp2/res/values/integers.xml
new file mode 100644
index 0000000..a1698e1
--- /dev/null
+++ b/fmapp2/res/values/integers.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2009, 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (C) 2014 The CyanogenMod Project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *    * Neither the name of The Linux Foundation nor
+ *      the names of its contributors may be used to endorse or promote
+ *      products derived from this software without specific prior written
+ *      permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Look at FmSharedPreferences.java for index -->
+    <integer name="default_country_index">0</integer>
+</resources>
diff --git a/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java b/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
index 70a7d1c..fac6a2f 100644
--- a/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
+++ b/fmapp2/src/com/caf/fmradio/FmSharedPreferences.java
@@ -170,6 +170,8 @@
    private static int mLastAudioMode = -1;
    private static boolean mSpecialCarrierFlag = false;
 
+   public static int mDefaultCountryIndex = REGIONAL_BAND_NORTH_AMERICA;
+
    FmSharedPreferences(Context context){
       mContext = context.getApplicationContext();
       mFMConfiguration = new FmConfig();
@@ -507,7 +509,8 @@
                 .getBoolean(R.bool.def_fm_country_location_enabled)) {
             setCountry(sp.getInt(FMCONFIG_COUNTRY, REGIONAL_BAND_INDIA));
       } else {
-          setCountry(sp.getInt(FMCONFIG_COUNTRY, REGIONAL_BAND_NORTH_AMERICA));
+          mDefaultCountryIndex = mContext.getResources().getInteger(R.integer.default_country_index);
+          setCountry(sp.getInt(FMCONFIG_COUNTRY, mDefaultCountryIndex));
       }
       /* Last list the user was navigating */
       mListIndex = sp.getInt(LAST_LIST_INDEX, 0);
@@ -581,7 +584,7 @@
           setCountry(REGIONAL_BAND_CHINA);
           //Others set north America.
       } else {
-          setCountry(REGIONAL_BAND_NORTH_AMERICA);
+          setCountry(mDefaultCountryIndex);
       }
    }
 
diff --git a/fmapp2/src/com/caf/fmradio/Settings.java b/fmapp2/src/com/caf/fmradio/Settings.java
index 6ad98e6..bb996e4 100644
--- a/fmapp2/src/com/caf/fmradio/Settings.java
+++ b/fmapp2/src/com/caf/fmradio/Settings.java
@@ -491,8 +491,7 @@
                  mBandPreference
                         .setValueIndex(FmSharedPreferences.REGIONAL_BAND_CHINA);
              }else {
-                 mBandPreference
-                        .setValueIndex(FmSharedPreferences.REGIONAL_BAND_NORTH_AMERICA);
+                 mBandPreference.setValueIndex(FmSharedPreferences.mDefaultCountryIndex);
              }
              if (mRxMode) {
                 mAudioPreference.setValueIndex(0);
@@ -506,8 +505,7 @@
                     FmSharedPreferences
                     .setCountry(FmSharedPreferences.REGIONAL_BAND_CHINA);
                 }else{
-                    FmSharedPreferences
-                    .setCountry(FmSharedPreferences.REGIONAL_BAND_NORTH_AMERICA);
+                    FmSharedPreferences.setCountry(FmSharedPreferences.mDefaultCountryIndex);
                 }
              }
              mPrefs.Save();
