diff --git a/src/org/thoughtcrime/securesms/crypto/MmsCipher.java b/src/org/thoughtcrime/securesms/crypto/MmsCipher.java
index 56a49df641..29832a522d 100644
--- a/src/org/thoughtcrime/securesms/crypto/MmsCipher.java
+++ b/src/org/thoughtcrime/securesms/crypto/MmsCipher.java
@@ -8,6 +8,7 @@ import org.thoughtcrime.securesms.protocol.WirePrefix;
 import org.thoughtcrime.securesms.recipients.RecipientFactory;
 import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
 import org.thoughtcrime.securesms.recipients.Recipients;
+import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
 import org.thoughtcrime.securesms.util.Util;
 import org.whispersystems.libaxolotl.DuplicateMessageException;
 import org.whispersystems.libaxolotl.InvalidMessageException;
@@ -84,7 +85,7 @@ public class MmsCipher {
   }
 
   public SendReq encrypt(Context context, SendReq message)
-      throws NoSessionException, RecipientFormattingException
+      throws NoSessionException, RecipientFormattingException, UndeliverableMessageException
   {
     EncodedStringValue[] encodedRecipient = message.getTo();
     String               recipientString  = encodedRecipient[0].getString();
@@ -92,6 +93,10 @@ public class MmsCipher {
     long                 recipientId      = recipients.getPrimaryRecipient().getRecipientId();
     byte[]               pduBytes         = new PduComposer(context, message).make();
 
+    if (pduBytes == null) {
+      throw new UndeliverableMessageException("PDU composition failed, null payload");
+    }
+
     if (!axolotlStore.containsSession(recipientId, PushAddress.DEFAULT_DEVICE_ID)) {
       throw new NoSessionException("No session for: " + recipientId);
     }
diff --git a/src/org/thoughtcrime/securesms/jobs/MmsSendJob.java b/src/org/thoughtcrime/securesms/jobs/MmsSendJob.java
index 9bd434cbd7..cb297bb6df 100644
--- a/src/org/thoughtcrime/securesms/jobs/MmsSendJob.java
+++ b/src/org/thoughtcrime/securesms/jobs/MmsSendJob.java
@@ -149,6 +149,8 @@ public class MmsSendJob extends SendJob {
     String  number         = ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number();
     boolean upgradedSecure = false;
 
+    prepareMessageMedia(masterSecret, message, MediaConstraints.MMS_CONSTRAINTS, true);
+
     if (MmsDatabase.Types.isSecureType(message.getDatabaseMessageBox())) {
       message        = getEncryptedMessage(masterSecret, message);
       upgradedSecure = true;
@@ -158,10 +160,14 @@ public class MmsSendJob extends SendJob {
       message.setFrom(new EncodedStringValue(number));
     }
 
-    prepareMessageMedia(masterSecret, message, MediaConstraints.MMS_CONSTRAINTS, true);
-
     try {
-      OutgoingMmsConnection connection = new OutgoingMmsConnection(context, radio.getApnInformation(), new PduComposer(context, message).make());
+      byte[] pdu = new PduComposer(context, message).make();
+
+      if (pdu == null) {
+        throw new UndeliverableMessageException("PDU composition failed, null payload");
+      }
+
+      OutgoingMmsConnection connection = new OutgoingMmsConnection(context, radio.getApnInformation(), pdu);
       SendConf              conf       = connection.send(usingMmsRadio, useProxy);
 
       if (conf == null) {
@@ -179,7 +185,7 @@ public class MmsSendJob extends SendJob {
   }
 
   private SendReq getEncryptedMessage(MasterSecret masterSecret, SendReq pdu)
-      throws InsecureFallbackApprovalException
+      throws InsecureFallbackApprovalException, UndeliverableMessageException
   {
     try {
       MmsCipher cipher = new MmsCipher(new TextSecureAxolotlStore(context, masterSecret));