diff --git a/src/com/android/phone/EmergencyCallbackModeService.java b/src/com/android/phone/EmergencyCallbackModeService.java
index 9ed38ae..334519a 100644
--- a/src/com/android/phone/EmergencyCallbackModeService.java
+++ b/src/com/android/phone/EmergencyCallbackModeService.java
@@ -40,6 +40,7 @@
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyProperties;
+import com.android.internal.telephony.util.TelephonyNotificationBuilder;
 
 /**
  * Application service that inserts/removes Emergency Callback Mode notification and
@@ -180,7 +181,8 @@
             }
             return;
         }
-        final Notification.Builder builder = new Notification.Builder(getApplicationContext());
+        final Notification.Builder builder = new TelephonyNotificationBuilder(
+                getApplicationContext());
         builder.setOngoing(true);
         builder.setPriority(Notification.PRIORITY_HIGH);
         builder.setSmallIcon(R.drawable.ic_emergency_callback_mode);
@@ -205,6 +207,7 @@
                      R.plurals.phone_in_ecm_notification_time, minutes).toString(), time);
         }
         builder.setContentText(text);
+        builder.setChannel(TelephonyNotificationBuilder.CHANNEL_ID_ALERT);
 
         // Show notification
         mNotificationManager.notify(R.string.phone_in_ecm_notification_title, builder.build());
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index fdbd1a3..d2a85b1 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -54,6 +54,7 @@
 
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.TelephonyCapabilities;
+import com.android.internal.telephony.util.TelephonyNotificationBuilder;
 import com.android.phone.settings.VoicemailNotificationSettingsUtil;
 import com.android.phone.settings.VoicemailSettingsActivity;
 import com.android.phone.vvm.omtp.sync.VoicemailStatusQueryHelper;
@@ -356,7 +357,7 @@
             Resources res = mContext.getResources();
             PersistableBundle carrierConfig = PhoneGlobals.getInstance().getCarrierConfigForSubId(
                     subId);
-            Notification.Builder builder = new Notification.Builder(mContext);
+            Notification.Builder builder = new TelephonyNotificationBuilder(mContext);
             builder.setSmallIcon(resId)
                     .setWhen(System.currentTimeMillis())
                     .setColor(subInfo.getIconTint())
@@ -366,7 +367,8 @@
                     .setSound(ringtoneUri)
                     .setColor(res.getColor(R.color.dialer_theme_color))
                     .setOngoing(carrierConfig.getBoolean(
-                            CarrierConfigManager.KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL));
+                            CarrierConfigManager.KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL))
+                    .setChannel(TelephonyNotificationBuilder.CHANNEL_ID_VOICE_MAIL);
 
             if (VoicemailNotificationSettingsUtil.isVibrationEnabled(phone)) {
                 builder.setDefaults(Notification.DEFAULT_VIBRATE);
@@ -512,13 +514,14 @@
                 notificationTitle = mContext.getString(R.string.labelCF);
             }
 
-            Notification.Builder builder = new Notification.Builder(mContext)
+            Notification.Builder builder = new TelephonyNotificationBuilder(mContext)
                     .setSmallIcon(R.drawable.stat_sys_phone_call_forward)
                     .setColor(subInfo.getIconTint())
                     .setContentTitle(notificationTitle)
                     .setContentText(mContext.getString(R.string.sum_cfu_enabled_indicator))
                     .setShowWhen(false)
-                    .setOngoing(true);
+                    .setOngoing(true)
+                    .setChannel(TelephonyNotificationBuilder.CHANNEL_ID_CALL_FORWARD);
 
             Intent intent = new Intent(Intent.ACTION_MAIN);
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
@@ -564,11 +567,12 @@
 
         final CharSequence contentText = mContext.getText(R.string.roaming_reenable_message);
 
-        final Notification.Builder builder = new Notification.Builder(mContext)
+        final Notification.Builder builder = new TelephonyNotificationBuilder(mContext)
                 .setSmallIcon(android.R.drawable.stat_sys_warning)
                 .setContentTitle(mContext.getText(R.string.roaming))
                 .setColor(mContext.getResources().getColor(R.color.dialer_theme_color))
-                .setContentText(contentText);
+                .setContentText(contentText)
+                .setChannel(TelephonyNotificationBuilder.CHANNEL_ID_MOBILE_DATA_ALERT);
 
         List<UserInfo> users = mUserManager.getUsers(true);
         for (int i = 0; i < users.size(); i++) {
@@ -600,13 +604,14 @@
     private void showNetworkSelection(String operator) {
         if (DBG) log("showNetworkSelection(" + operator + ")...");
 
-        Notification.Builder builder = new Notification.Builder(mContext)
+        Notification.Builder builder = new TelephonyNotificationBuilder(mContext)
                 .setSmallIcon(android.R.drawable.stat_sys_warning)
                 .setContentTitle(mContext.getString(R.string.notification_network_selection_title))
                 .setContentText(
                         mContext.getString(R.string.notification_network_selection_text, operator))
                 .setShowWhen(false)
-                .setOngoing(true);
+                .setOngoing(true)
+                .setChannel(TelephonyNotificationBuilder.CHANNEL_ID_ALERT);
 
         // create the target network operators settings intent
         Intent intent = new Intent(Intent.ACTION_MAIN);
