diff --git a/src/com/android/bluetooth/mapclient/MceStateMachine.java b/src/com/android/bluetooth/mapclient/MceStateMachine.java
index 85ba60e..1095135 100644
--- a/src/com/android/bluetooth/mapclient/MceStateMachine.java
+++ b/src/com/android/bluetooth/mapclient/MceStateMachine.java
@@ -70,7 +70,9 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 /* The MceStateMachine is responsible for setting up and maintaining a connection to a single
@@ -720,6 +722,11 @@
                         mmsBmessage.parseMsgPart(message.getBodyContent());
                         intent.putExtra(android.content.Intent.EXTRA_TEXT,
                                 mmsBmessage.getMessageAsText());
+                        ArrayList<VCardEntry> recipients = message.getRecipients();
+                        if (recipients != null && !recipients.isEmpty()) {
+                            intent.putExtra(android.content.Intent.EXTRA_CC,
+                                    getRecipientsUri(recipients));
+                        }
                     }
                     // Only send to the current default SMS app if one exists
                     String defaultMessagingPackage = Telephony.Sms.getDefaultSmsPackage(mService);
@@ -735,6 +742,29 @@
             }
         }
 
+        /**
+         * Retrieves the URIs of all the participants of a group conversation, besides the sender
+         * of the message.
+         * @param recipients
+         * @return
+         */
+        private String[] getRecipientsUri(ArrayList<VCardEntry> recipients) {
+            Set<String> uris = new HashSet<>();
+
+            for (VCardEntry recipient : recipients) {
+                List<VCardEntry.PhoneData> phoneData = recipient.getPhoneList();
+                if (phoneData != null && phoneData.size() > 0) {
+                    String phoneNumber = phoneData.get(0).getNumber();
+                    if (DBG) {
+                        Log.d(TAG, "CC Recipient number: " + phoneNumber);
+                    }
+                    uris.add(getContactURIFromPhone(phoneNumber));
+                }
+            }
+            String[] stringUris = new String[uris.size()];
+            return uris.toArray(stringUris);
+        }
+
         private void notifySentMessageStatus(String handle, EventReport.Type status) {
             if (DBG) {
                 Log.d(TAG, "got a status for " + handle + " Status = " + status);
