diff --git a/res/values/strings.xml b/res/values/strings.xml
index 71eefe8..3bcb0e1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2386,7 +2386,8 @@
     <!-- SMS Application [CHAR LIMIT=35]-->
     <string name="sms_application_title" translatable="true">Default SMS app</string>
     <string name="sms_change_default_dialog_title" translatable="true">Change SMS app?</string>
-    <string name="sms_change_default_dialog_text" translatable="true">Use <xliff:g id="new_app">%s</xliff:g> instead of <xliff:g id="current_app">%s</xliff:g> as your SMS application?</string>
+    <string name="sms_change_default_dialog_text" translatable="true">Use <xliff:g id="new_app">%s</xliff:g> instead of <xliff:g id="current_app">%s</xliff:g> as your SMS app?</string>
+    <string name="sms_change_default_no_previous_dialog_text" translatable="true">Use <xliff:g id="new_app">%s</xliff:g> as your SMS app?</string>
 
     <!-- The SIM operator is not known [CHAR_ LIMIT=50]-->
     <string name="mobile_unknown_sim_operator" translatable="true">Uknown SIM operator</string>
diff --git a/src/com/android/settings/SmsDefaultDialog.java b/src/com/android/settings/SmsDefaultDialog.java
index 93ac864..d9a6c5f 100644
--- a/src/com/android/settings/SmsDefaultDialog.java
+++ b/src/com/android/settings/SmsDefaultDialog.java
@@ -24,6 +24,7 @@
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.provider.Telephony.Sms.Intents;
+import android.telephony.TelephonyManager;
 
 import com.android.internal.app.AlertActivity;
 import com.android.internal.app.AlertController;
@@ -62,23 +63,38 @@
     }
 
     private boolean buildDialog(String packageName) {
+        TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
+        if (tm.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) {
+            // No phone, no SMS
+            return false;
+        }
+
         mNewSmsApplicationData = SmsApplication.getSmsApplicationData(packageName, this);
         if (mNewSmsApplicationData == null) {
             return false;
         }
 
+        SmsApplicationData oldSmsApplicationData = null;
         ComponentName oldSmsComponent = SmsApplication.getDefaultSmsApplication(this, true);
-        SmsApplicationData oldSmsApplicationData =
-                SmsApplication.getSmsApplicationData(oldSmsComponent.getPackageName(), this);
-        if (oldSmsApplicationData.mPackageName.equals(mNewSmsApplicationData.mPackageName)) {
-            return false;
+        if (oldSmsComponent != null) {
+            oldSmsApplicationData =
+                    SmsApplication.getSmsApplicationData(oldSmsComponent.getPackageName(), this);
+            if (oldSmsApplicationData.mPackageName.equals(mNewSmsApplicationData.mPackageName)) {
+                return false;
+            }
         }
 
         // Compose dialog; get
         final AlertController.AlertParams p = mAlertParams;
         p.mTitle = getString(R.string.sms_change_default_dialog_title);
-        p.mMessage = getString(R.string.sms_change_default_dialog_text,
-                mNewSmsApplicationData.mApplicationName, oldSmsApplicationData.mApplicationName);
+        if (oldSmsApplicationData != null) {
+            p.mMessage = getString(R.string.sms_change_default_dialog_text,
+                    mNewSmsApplicationData.mApplicationName,
+                    oldSmsApplicationData.mApplicationName);
+        } else {
+            p.mMessage = getString(R.string.sms_change_default_no_previous_dialog_text,
+                    mNewSmsApplicationData.mApplicationName);
+        }
         p.mPositiveButtonText = getString(R.string.yes);
         p.mNegativeButtonText = getString(R.string.no);
         p.mPositiveButtonListener = this;
