diff --git a/res/values/strings.xml b/res/values/strings.xml
index e5dd9b6..c79bacc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -919,7 +919,7 @@
     <!-- FDN settings: error message displayed in a popup (toast) -->
     <string name="pin2_invalid">FDN wasn\'t updated because you typed an incorrect PIN.</string>
     <!-- FDN settings: error message displayed in a popup (toast) -->
-    <string name="fdn_invalid_number">FDN wasn\'t updated because the number is empty or exceeds 20 digits.</string>
+    <string name="fdn_invalid_number">FDN wasn\'t updated because the number exceeds 20 digits.</string>
     <!-- FDN settings: error message displayed in a popup (toast), when the entered
          FDN number was inappropriate, OR, PIN2 the user entered was incorrect.
          Because of API restriction, there's no way to determine which is the exact
diff --git a/src/com/android/phone/settings/fdn/EditFdnContactScreen.java b/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
index b8a761c..921e947 100644
--- a/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
+++ b/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
@@ -33,9 +33,11 @@
 import android.provider.Contacts.PhonesColumns;
 import android.provider.ContactsContract.CommonDataKinds;
 import android.telephony.PhoneNumberUtils;
+import android.text.Editable;
 import android.text.Selection;
 import android.text.Spannable;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.text.method.DialerKeyListener;
 import android.util.Log;
 import android.view.Menu;
@@ -239,6 +241,7 @@
         if (mNameField != null) {
             mNameField.setOnFocusChangeListener(mOnFocusChangeHandler);
             mNameField.setOnClickListener(mClicked);
+            mNameField.addTextChangedListener(mTextWatcher);
         }
 
         mNumberField = (EditText) findViewById(R.id.fdn_number);
@@ -247,6 +250,7 @@
             mNumberField.setKeyListener(DialerKeyListener.getInstance());
             mNumberField.setOnFocusChangeListener(mOnFocusChangeHandler);
             mNumberField.setOnClickListener(mClicked);
+            mNumberField.addTextChangedListener(mTextWatcher);
         }
 
         if (!mAddContact) {
@@ -261,6 +265,7 @@
         mButton = (Button) findViewById(R.id.button);
         if (mButton != null) {
             mButton.setOnClickListener(mClicked);
+            setButtonEnabled();
         }
 
         mPinFieldContainer = (LinearLayout) findViewById(R.id.pinc);
@@ -276,6 +281,15 @@
     }
 
     /**
+     * Enable Save button if text has been added to both name and number
+     */
+    private void setButtonEnabled() {
+        if (mButton != null && mNameField != null && mNumberField != null) {
+            mButton.setEnabled(mNameField.length() > 0 && mNumberField.length() > 0);
+        }
+    }
+
+    /**
       * @param number is voice mail number
       * @return true if number length is less than 20-digit limit
       *
@@ -446,6 +460,19 @@
         }
     };
 
+    private final TextWatcher mTextWatcher = new TextWatcher() {
+        @Override
+        public void afterTextChanged(Editable arg0) {}
+
+        @Override
+        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
+
+        @Override
+        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
+            setButtonEnabled();
+        }
+    };
+
     private class QueryHandler extends AsyncQueryHandler {
         public QueryHandler(ContentResolver cr) {
             super(cr);
