diff --git a/src/com/android/contacts/dialpad/DialpadFragment.java b/src/com/android/contacts/dialpad/DialpadFragment.java
index 745c044..350fc28 100644
--- a/src/com/android/contacts/dialpad/DialpadFragment.java
+++ b/src/com/android/contacts/dialpad/DialpadFragment.java
@@ -191,6 +191,13 @@
 
     private boolean mWasEmptyBeforeTextChange;
 
+    /**
+     * This field is set to true while processing an incoming DIAL intent, in order to make sure
+     * that SpecialCharSequenceMgr actions can be triggered by user input but *not* by a
+     * tel: URI passed by some other app
+     */
+    private boolean mSkipSpecialCharSequenceHandling;
+
     @Override
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
         mWasEmptyBeforeTextChange = TextUtils.isEmpty(s);
@@ -214,7 +221,8 @@
         // When DTMF dialpad buttons are being pressed, we delay SpecialCharSequencMgr sequence,
         // since some of SpecialCharSequenceMgr's behavior is too abrupt for the "touch-down"
         // behavior.
-        if (SpecialCharSequenceMgr.handleChars(getActivity(), input.toString(), mDigits)) {
+        if (!mSkipSpecialCharSequenceHandling &&
+                SpecialCharSequenceMgr.handleChars(getActivity(), input.toString(), mDigits)) {
             // A special sequence was entered, clear the digits
             mDigits.getText().clear();
         }
@@ -436,17 +444,29 @@
         showDialpadChooser(needToShowDialpadChooser);
     }
 
+    /**
+     * Sets formatted digits to digits field.
+     *
+     * Watch out: this method assumes it is used only for loading the digits widget based on data
+     * in a DIAL or VIEW intent, and *not* ever called for digits typed by the user.
+     */
     private void setFormattedDigits(String data, String normalizedNumber) {
-        // strip the non-dialable numbers out of the data string.
-        String dialString = PhoneNumberUtils.extractNetworkPortion(data);
-        dialString =
-                PhoneNumberUtils.formatNumber(dialString, normalizedNumber, mCurrentCountryIso);
-        if (!TextUtils.isEmpty(dialString)) {
-            Editable digits = mDigits.getText();
-            digits.replace(0, digits.length(), dialString);
-            // for some reason this isn't getting called in the digits.replace call above..
-            // but in any case, this will make sure the background drawable looks right
-            afterTextChanged(digits);
+        try {
+            mSkipSpecialCharSequenceHandling = true;
+
+            // strip the non-dialable numbers out of the data string.
+            String dialString = PhoneNumberUtils.extractNetworkPortion(data);
+            dialString =
+                    PhoneNumberUtils.formatNumber(dialString, normalizedNumber, mCurrentCountryIso);
+            if (!TextUtils.isEmpty(dialString)) {
+                Editable digits = mDigits.getText();
+                digits.replace(0, digits.length(), dialString);
+                // for some reason this isn't getting called in the digits.replace call above..
+                // but in any case, this will make sure the background drawable looks right
+                afterTextChanged(digits);
+            }
+        } finally {
+            mSkipSpecialCharSequenceHandling = false;
         }
     }
 
