diff --git a/java/com/android/voicemail/impl/scheduling/TaskQueue.java b/java/com/android/voicemail/impl/scheduling/TaskQueue.java
index fc5aa94..6afcf00 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskQueue.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskQueue.java
@@ -23,6 +23,7 @@
 import com.android.voicemail.impl.Assert;
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.scheduling.Task.TaskId;
+import com.android.voicemail.impl.scheduling.Tasks.TaskCreationException;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -49,9 +50,13 @@
   public void fromBundles(Context context, List<Bundle> pendingTasks) {
     Assert.isTrue(queue.isEmpty());
     for (Bundle pendingTask : pendingTasks) {
-      Task task = Tasks.createTask(context, pendingTask);
-      task.onRestore(pendingTask);
-      add(task);
+      try {
+        Task task = Tasks.createTask(context, pendingTask);
+        task.onRestore(pendingTask);
+        add(task);
+      } catch (TaskCreationException e) {
+        VvmLog.e("TaskQueue.fromBundles", "cannot create task", e);
+      }
     }
   }
 
diff --git a/java/com/android/voicemail/impl/scheduling/TaskReceiver.java b/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
index e78dcf7..b9fd272 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
@@ -23,6 +23,7 @@
 import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import com.android.voicemail.impl.VvmLog;
+import com.android.voicemail.impl.scheduling.Tasks.TaskCreationException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -69,8 +70,12 @@
         deferredBroadcasts.add(intent);
         return;
       }
-      Task task = Tasks.createTask(context.getApplicationContext(), intent.getExtras());
-      taskExecutor.addTask(task);
+      try {
+        Task task = Tasks.createTask(context.getApplicationContext(), intent.getExtras());
+        taskExecutor.addTask(task);
+      } catch (TaskCreationException e) {
+        VvmLog.e(TAG, "cannot create task", e);
+      }
     } else {
       VvmLog.i(TAG, "scheduling new job");
       List<Bundle> taskList = new ArrayList<>();
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
index 0e3f27c..77a0d25 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
@@ -33,6 +33,7 @@
 import com.android.dialer.strictmode.StrictModeUtils;
 import com.android.voicemail.impl.Assert;
 import com.android.voicemail.impl.VvmLog;
+import com.android.voicemail.impl.scheduling.Tasks.TaskCreationException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -110,7 +111,11 @@
         TaskQueue queue = new TaskQueue();
         queue.fromBundles(context, existingTasks);
         for (Bundle pendingTask : pendingTasks) {
-          queue.add(Tasks.createTask(context, pendingTask));
+          try {
+            queue.add(Tasks.createTask(context, pendingTask));
+          } catch (TaskCreationException e) {
+            VvmLog.e(TAG, "cannot create task", e);
+          }
         }
         pendingTasks = queue.toBundles();
       }
diff --git a/java/com/android/voicemail/impl/scheduling/Tasks.java b/java/com/android/voicemail/impl/scheduling/Tasks.java
index 76da3d7..0333e16 100644
--- a/java/com/android/voicemail/impl/scheduling/Tasks.java
+++ b/java/com/android/voicemail/impl/scheduling/Tasks.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.BadParcelableException;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import com.android.voicemail.impl.VvmLog;
@@ -29,16 +30,30 @@
 
   static final String EXTRA_CLASS_NAME = "extra_class_name";
 
+  /** The task cannot be created. */
+  static final class TaskCreationException extends Exception {
+    TaskCreationException(Throwable throwable) {
+      super(throwable);
+    }
+  }
+
   /**
    * Create a task from a bundle. The bundle is created either with {@link #toBundle(Task)} or
    * {@link #createIntent(Context, Class)} from the target {@link Task}
    */
   @NonNull
-  public static Task createTask(Context context, Bundle extras) {
+  public static Task createTask(Context context, Bundle extras) throws TaskCreationException {
     // The extra contains custom parcelables which cannot be unmarshalled by the framework class
     // loader.
     extras.setClassLoader(context.getClassLoader());
-    String className = extras.getString(EXTRA_CLASS_NAME);
+    String className;
+    try {
+      className = extras.getString(EXTRA_CLASS_NAME);
+    } catch (BadParcelableException e) {
+      // BadParcelableException:Parcelable protocol requires that the class implements Parcelable
+      // This happens when the task is submitted before an update, and can no longer be unparceled.
+      throw new TaskCreationException(e);
+    }
     VvmLog.i("Task.createTask", "create task:" + className);
     if (className == null) {
       throw new IllegalArgumentException("EXTRA_CLASS_NAME expected");
