diff --git a/src/com/android/mms/data/ContactList.java b/src/com/android/mms/data/ContactList.java
index a2615ee..96fdc4e 100644
--- a/src/com/android/mms/data/ContactList.java
+++ b/src/com/android/mms/data/ContactList.java
@@ -22,11 +22,17 @@
         return list;
     }
 
-    public static ContactList getByNumbers(String semiSepNumbers, boolean canBlock) {
+    public static ContactList getByNumbers(String semiSepNumbers,
+                                           boolean canBlock,
+                                           boolean replaceNumber) {
         ContactList list = new ContactList();
         for (String number : semiSepNumbers.split(";")) {
             if (!TextUtils.isEmpty(number)) {
-                list.add(Contact.get(number, canBlock));
+                Contact contact = Contact.get(number, canBlock);
+                if (replaceNumber) {
+                    contact.setNumber(number);
+                }
+                list.add(contact);
             }
         }
         return list;
diff --git a/src/com/android/mms/data/Conversation.java b/src/com/android/mms/data/Conversation.java
index 95be170..7119607 100644
--- a/src/com/android/mms/data/Conversation.java
+++ b/src/com/android/mms/data/Conversation.java
@@ -164,7 +164,8 @@
         }
 
         String recipient = uri.getSchemeSpecificPart();
-        return get(context, ContactList.getByNumbers(recipient, false));
+        return get(context, ContactList.getByNumbers(recipient,
+                false /* don't block */, true /* replace number */));
     }
 
     /**
@@ -183,7 +184,8 @@
             return false;       // it's a thread id for a conversation
         }
         String recipient = uri.getSchemeSpecificPart();
-        ContactList incomingRecipient = ContactList.getByNumbers(recipient, false);
+        ContactList incomingRecipient = ContactList.getByNumbers(recipient,
+                false /* don't block */, false /* don't replace number */);
         return mRecipients.equals(incomingRecipient);
     }
 
diff --git a/src/com/android/mms/ui/ComposeMessageActivity.java b/src/com/android/mms/ui/ComposeMessageActivity.java
index 5217c72..c1969f9 100644
--- a/src/com/android/mms/ui/ComposeMessageActivity.java
+++ b/src/com/android/mms/ui/ComposeMessageActivity.java
@@ -2910,7 +2910,9 @@
     private void initActivityState(Bundle bundle, Intent intent) {
         if (bundle != null) {
             String recipients = bundle.getString("recipients");
-            mConversation = Conversation.get(this, ContactList.getByNumbers(recipients, false));
+            mConversation = Conversation.get(this,
+                    ContactList.getByNumbers(recipients,
+                            false /* don't block */, true /* replace number */));
             mExitOnSent = bundle.getBoolean("exit_on_sent", false);
             mWorkingMessage.readStateFromBundle(bundle);
             return;
@@ -2931,8 +2933,8 @@
                 // special intent extra parameter to specify the address
                 String address = intent.getStringExtra("address");
                 if (!TextUtils.isEmpty(address)) {
-                    mConversation = Conversation.get(this,
-                            ContactList.getByNumbers(address, false));
+                    mConversation = Conversation.get(this, ContactList.getByNumbers(address,
+                            false /* don't block */, true /* replace number */));
                 } else {
                     mConversation = Conversation.createNew(this);
                 }
