diff --git a/src/com/android/dialer/calllog/MissedCallNotifier.java b/src/com/android/dialer/calllog/MissedCallNotifier.java
index 98d02d0..3afc112 100644
--- a/src/com/android/dialer/calllog/MissedCallNotifier.java
+++ b/src/com/android/dialer/calllog/MissedCallNotifier.java
@@ -96,6 +96,7 @@
         boolean useCallLog = newCalls != null && newCalls.size() == count;
         NewCall newestCall = useCallLog ? newCalls.get(0) : null;
         long timeMs = useCallLog ? newestCall.dateMs : System.currentTimeMillis();
+        String missedNumber = useCallLog ? newestCall.number : number;
 
         Notification.Builder builder = new Notification.Builder(mContext);
         // Display the first line of the notification:
@@ -104,7 +105,7 @@
         if (count == 1) {
             //TODO: look up caller ID that is not in contacts.
             ContactInfo contactInfo = CallLogNotificationsHelper.getInstance(mContext)
-                    .getContactInfo(useCallLog ? newestCall.number : number,
+                    .getContactInfo(missedNumber,
                             useCallLog ? newestCall.numberPresentation
                                     : Calls.PRESENTATION_ALLOWED,
                             useCallLog ? newestCall.countryIso : null);
@@ -156,17 +157,17 @@
 
         // Add additional actions when there is only 1 missed call and the user isn't locked
         if (UserManagerCompat.isUserUnlocked(mContext) && count == 1) {
-            if (!TextUtils.isEmpty(number)
+            if (!TextUtils.isEmpty(missedNumber)
                     && !TextUtils.equals(
-                    number, mContext.getString(R.string.handle_restricted))) {
+                    missedNumber, mContext.getString(R.string.handle_restricted))) {
                 builder.addAction(R.drawable.ic_phone_24dp,
                         mContext.getString(R.string.notification_missedCall_call_back),
-                        createCallBackPendingIntent(number));
+                        createCallBackPendingIntent(missedNumber));
 
-                if (!PhoneNumberHelper.isUriNumber(number)) {
+                if (!PhoneNumberHelper.isUriNumber(missedNumber)) {
                     builder.addAction(R.drawable.ic_message_24dp,
                             mContext.getString(R.string.notification_missedCall_message),
-                            createSendSmsFromNotificationPendingIntent(number));
+                            createSendSmsFromNotificationPendingIntent(missedNumber));
                 }
             }
         }
@@ -254,7 +255,8 @@
         intent.setAction(
                 CallLogNotificationsService.ACTION_CALL_BACK_FROM_MISSED_CALL_NOTIFICATION);
         intent.putExtra(CallLogNotificationsService.EXTRA_MISSED_CALL_NUMBER, number);
-        return PendingIntent.getService(mContext, 0, intent, 0);
+        // Use FLAG_ONE_SHOT to avoid reusing previous PendingIntent with different number.
+        return PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_ONE_SHOT);
     }
 
     private PendingIntent createSendSmsFromNotificationPendingIntent(String number) {
@@ -262,7 +264,8 @@
         intent.setAction(
                 CallLogNotificationsService.ACTION_SEND_SMS_FROM_MISSED_CALL_NOTIFICATION);
         intent.putExtra(CallLogNotificationsService.EXTRA_MISSED_CALL_NUMBER, number);
-        return PendingIntent.getService(mContext, 0, intent, 0);
+        // Use FLAG_ONE_SHOT to avoid reusing previous PendingIntent with different number.
+        return PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_ONE_SHOT);
     }
 
     /**
