diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/MmsFileProvider.java b/Common/src/com/googlecode/android_scripting/facade/telephony/MmsFileProvider.java
new file mode 100644
index 0000000..5f462a3
--- /dev/null
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/MmsFileProvider.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.googlecode.android_scripting.facade.telephony;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.text.TextUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+/**
+ * A very simple content provider that can serve mms files from our cache directory so that
+ * SmsManager#sendMultimdeiaMessage and SmsManager#downloadMultimediaMessage can read/write
+ * the content of the MMS messages to send/download.
+ */
+public class MmsFileProvider extends ContentProvider {
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        // Don't support queries.
+        return null;
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        // Don't support inserts.
+        return null;
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        // Don't support deletes.
+        return 0;
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        // Don't support updates.
+        return 0;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        // For this sample, assume all files have no type.
+        return null;
+    }
+
+    @Override
+    public ParcelFileDescriptor openFile(Uri uri, String fileMode) throws FileNotFoundException {
+        File file = new File(getContext().getCacheDir(), uri.getPath());
+        int mode = (TextUtils.equals(fileMode, "r") ? ParcelFileDescriptor.MODE_READ_ONLY :
+                ParcelFileDescriptor.MODE_WRITE_ONLY
+                   | ParcelFileDescriptor.MODE_TRUNCATE
+                   | ParcelFileDescriptor.MODE_CREATE);
+        return ParcelFileDescriptor.open(file, mode);
+    }
+}
diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/SmsFacade.java b/Common/src/com/googlecode/android_scripting/facade/telephony/SmsFacade.java
index 1744d2b..5b0492c 100644
--- a/Common/src/com/googlecode/android_scripting/facade/telephony/SmsFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/SmsFacade.java
@@ -16,27 +16,6 @@
 
 package com.googlecode.android_scripting.facade.telephony;
 
-import com.google.android.mms.ContentType;
-import com.google.android.mms.InvalidHeaderValueException;
-import com.google.android.mms.pdu.CharacterSets;
-import com.google.android.mms.pdu.EncodedStringValue;
-import com.google.android.mms.pdu.GenericPdu;
-import com.google.android.mms.pdu.PduBody;
-import com.google.android.mms.pdu.PduComposer;
-import com.google.android.mms.pdu.PduHeaders;
-import com.google.android.mms.pdu.PduParser;
-import com.google.android.mms.pdu.PduPart;
-import com.google.android.mms.pdu.PduPersister;
-import com.google.android.mms.pdu.SendConf;
-import com.google.android.mms.pdu.SendReq;
-import com.google.android.mms.MmsException;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
 import android.app.Activity;
 import android.app.PendingIntent;
 import android.app.Service;
@@ -49,16 +28,26 @@
 import android.os.Bundle;
 import android.provider.Telephony.Sms.Intents;
 import android.provider.Telephony.Mms;
+import android.telephony.SmsCbCmasInfo;
+import android.telephony.SmsCbEtwsInfo;
+import android.telephony.SmsCbMessage;
 import android.telephony.SmsManager;
 import android.telephony.SmsMessage;
-import android.telephony.SmsCbMessage;
-import com.android.internal.telephony.gsm.SmsCbConstants;
-import com.android.internal.telephony.cdma.sms.SmsEnvelope;
-import android.telephony.SmsCbEtwsInfo;
-import android.telephony.SmsCbCmasInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
+import com.android.internal.telephony.cdma.sms.SmsEnvelope;
+import com.android.internal.telephony.gsm.SmsCbConstants;
+
+import com.google.android.mms.ContentType;
+import com.google.android.mms.InvalidHeaderValueException;
+import com.google.android.mms.pdu.CharacterSets;
+import com.google.android.mms.pdu.EncodedStringValue;
+import com.google.android.mms.pdu.PduBody;
+import com.google.android.mms.pdu.PduComposer;
+import com.google.android.mms.pdu.PduHeaders;
+import com.google.android.mms.pdu.PduPart;
+import com.google.android.mms.pdu.SendReq;
 import com.googlecode.android_scripting.Log;
 import com.googlecode.android_scripting.facade.EventFacade;
 import com.googlecode.android_scripting.facade.FacadeManager;
@@ -69,6 +58,12 @@
 import com.googlecode.android_scripting.rpc.RpcParameter;
 import com.googlecode.android_scripting.facade.telephony.TelephonyConstants;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
 //FIXME: Change the build order to use constants defined in here
 //import com.googlecode.android_scripting.provider.TelephonyTestProvider;
 
@@ -324,8 +319,6 @@
         // Default to 1 week;
         mms.setExpirySeconds(MmsBuilder.DEFAULT_EXPIRY_TIME);
 
-        Uri contentUri = null;
-
         String randomFileName = "mms." + String.valueOf(System.currentTimeMillis()) + ".dat";
 
         byte[] mmsBytes = mms.build();
@@ -335,19 +328,19 @@
         }
 
         if (writeBytesToCacheFile(randomFileName, mmsBytes) == false) {
-            Log.e("Failed to write PDU to file");
+            Log.e("Failed to write PDU to file " + randomFileName);
             return;
         }
 
-        contentUri = (new Uri.Builder())
-                .authority("com.googlecode.android_scripting.provider.telephonytestprovider")
-                .path("mms/" + randomFileName)
-                .scheme(ContentResolver.SCHEME_CONTENT)
-                .build();
+        Uri contentUri = (new Uri.Builder())
+                          .authority(
+                          "com.googlecode.android_scripting.facade.telephony.MmsFileProvider")
+                          .path(randomFileName)
+                          .scheme(ContentResolver.SCHEME_CONTENT)
+                          .build();
 
         if (contentUri != null) {
             Log.d(String.format("URI String: %s", contentUri.toString()));
-
             SmsManager.getDefault().sendMultimediaMessage(mContext,
                     contentUri, null/* locationUrl */, null/* configOverrides */,
                     PendingIntent.getBroadcast(mService, 0,
@@ -558,6 +551,7 @@
         @Override
         public void onReceive(Context context, Intent intent) {
             Bundle event = new Bundle();
+            event.putString("Type", "MmsDeliverStatus");
             String action = intent.getAction();
             int resultCode = getResultCode();
             event.putString("ResultCode", Integer.toString(resultCode));
@@ -575,7 +569,7 @@
         }
     }
 
-    // b/21569494 - Never receiving ANY of these events: requires debugging
+    // add mms matching after mms message parser is added in sl4a. b/34276948
     private class MmsIncomingListener extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -583,15 +577,21 @@
             String action = intent.getAction();
             if (Intents.MMS_DOWNLOADED_ACTION.equals(action)) {
                 Log.d("New MMS Downloaded");
-                mEventFacade.postEvent(TelephonyConstants.EventMmsDownloaded, new Bundle());
+                Bundle event = new Bundle();
+                event.putString("Type", "NewMmsReceived");
+                mEventFacade.postEvent(TelephonyConstants.EventMmsDownloaded, event);
             }
             else if (Intents.WAP_PUSH_RECEIVED_ACTION.equals(action)) {
                 Log.d("New Wap Push Received");
-                mEventFacade.postEvent(TelephonyConstants.EventWapPushReceived, new Bundle());
+                Bundle event = new Bundle();
+                event.putString("Type", "NewWapPushReceived");
+                mEventFacade.postEvent(TelephonyConstants.EventWapPushReceived, event);
             }
-            else if (Intents.DATA_SMS_RECEIVED_ACTION.equals(action)) {
+            if (Intents.DATA_SMS_RECEIVED_ACTION.equals(action)) {
                 Log.d("New Data SMS Received");
-                mEventFacade.postEvent(TelephonyConstants.EventDataSmsReceived, new Bundle());
+                Bundle event = new Bundle();
+                event.putString("Type", "NewDataSMSReceived");
+                mEventFacade.postEvent(TelephonyConstants.EventDataSmsReceived, event);
             }
             else {
                 Log.e("MmsIncomingListener Received Unexpected Event" + intent.toString());
@@ -962,7 +962,7 @@
             final PduPart part = new PduPart();
             part.setCharset(CharacterSets.UTF_8);
             part.setContentType(ContentType.TEXT_PLAIN.getBytes());
-            part.setContentLocation("text0".getBytes());
+            part.setContentLocation(TEMP_CONTENT_FILE_NAME.getBytes());
             int index = TEMP_CONTENT_FILE_NAME.lastIndexOf(".");
             String contentId = (index == -1) ? TEMP_CONTENT_FILE_NAME
                     : TEMP_CONTENT_FILE_NAME.substring(0, index);
diff --git a/ScriptingLayerForAndroid/AndroidManifest.xml b/ScriptingLayerForAndroid/AndroidManifest.xml
index fdcfae1..a903b5d 100644
--- a/ScriptingLayerForAndroid/AndroidManifest.xml
+++ b/ScriptingLayerForAndroid/AndroidManifest.xml
@@ -45,6 +45,8 @@
     <uses-permission android:name="android.permission.BROADCAST_WAP_PUSH" />
     <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
     <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
+    <uses-permission android:name="android.permission.BROADCAST_SMS" />
+    <uses-permission android:name="android.permission.BROADCAST_WAP_PUSH" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
@@ -78,6 +80,7 @@
     <uses-permission android:name="android.permission.MASTER_CLEAR" />
     <uses-permission android:name="android.permission.USE_CREDENTIALS" />
     <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
+    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
     <uses-permission android:name="android.permission.WRITE_CONTACTS" />
     <uses-permission android:name="android.permission.ACCESS_WIMAX_STATE" />
     <uses-permission android:name="android.permission.CHANGE_WIMAX_STATE" />
@@ -202,6 +205,11 @@
         </activity>
         <provider android:name=".provider.ScriptProvider" android:authorities="com.googlecode.android_scripting.provider.scriptprovider" />
         <provider android:name=".provider.ApiProvider" android:authorities="com.googlecode.android_scripting.provider.apiprovider" />
+        <provider android:name=".facade.telephony.MmsFileProvider"
+                  android:authorities="com.googlecode.android_scripting.facade.telephony.MmsFileProvider"
+                  android:enabled="true"
+                  android:grantUriPermissions="true"
+                  android:exported="true" />
         <provider
             android:name="android.support.v4.content.FileProvider"
             android:authorities="com.googlecode.android_scripting.provider.telephonytestprovider"
