diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 7ad35ed..8b5934f 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -957,12 +957,14 @@
                     break;
 
                 case CMD_NV_WRITE_CDMA_PRL:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_NV_WRITE_CDMA_PRL_DONE, request);
                     defaultPhone.nvWriteCdmaPrl((byte[]) request.argument, onCompleted);
                     break;
 
                 case EVENT_NV_WRITE_CDMA_PRL_DONE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     handleNullReturnEvent(msg, "nvWriteCdmaPrl");
                     break;
 
@@ -1715,11 +1717,13 @@
                     notifyRequester(request);
                     break;
                 case CMD_GET_CDMA_ROAMING_MODE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_GET_CDMA_ROAMING_MODE_DONE, request);
                     getPhoneFromRequest(request).queryCdmaRoamingPreference(onCompleted);
                     break;
                 case EVENT_GET_CDMA_ROAMING_MODE_DONE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     ar = (AsyncResult) msg.obj;
                     request = (MainThreadRequest) ar.userObj;
                     if (ar.exception != null) {
@@ -1730,23 +1734,27 @@
                     notifyRequester(request);
                     break;
                 case CMD_SET_CDMA_ROAMING_MODE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_SET_CDMA_ROAMING_MODE_DONE, request);
                     int mode = (int) request.argument;
                     getPhoneFromRequest(request).setCdmaRoamingPreference(mode, onCompleted);
                     break;
                 case EVENT_SET_CDMA_ROAMING_MODE_DONE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     ar = (AsyncResult) msg.obj;
                     request = (MainThreadRequest) ar.userObj;
                     request.result = ar.exception == null;
                     notifyRequester(request);
                     break;
                 case CMD_GET_CDMA_SUBSCRIPTION_MODE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_MODE_DONE, request);
                     getPhoneFromRequest(request).queryCdmaSubscriptionMode(onCompleted);
                     break;
                 case EVENT_GET_CDMA_SUBSCRIPTION_MODE_DONE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     ar = (AsyncResult) msg.obj;
                     request = (MainThreadRequest) ar.userObj;
                     if (ar.exception != null) {
@@ -1757,6 +1765,7 @@
                     notifyRequester(request);
                     break;
                 case CMD_SET_CDMA_SUBSCRIPTION_MODE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_SET_CDMA_SUBSCRIPTION_MODE_DONE, request);
                     int subscriptionMode = (int) request.argument;
@@ -1764,6 +1773,7 @@
                             subscriptionMode, onCompleted);
                     break;
                 case EVENT_SET_CDMA_SUBSCRIPTION_MODE_DONE:
+                    if (mFeatureFlags.cleanupCdma()) break;
                     ar = (AsyncResult) msg.obj;
                     request = (MainThreadRequest) ar.userObj;
                     request.result = ar.exception == null;
@@ -3732,6 +3742,8 @@
 
     @Override
     public String getMeidForSlot(int slotIndex, String callingPackage, String callingFeatureId) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         try {
             mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
         } catch (SecurityException se) {
@@ -3763,6 +3775,8 @@
 
     @Override
     public String getManufacturerCodeForSlot(int slotIndex) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         enforceTelephonyFeatureWithException(getCurrentPackageName(),
                 PackageManager.FEATURE_TELEPHONY_CDMA, "getManufacturerCodeForSlot");
 
@@ -4033,6 +4047,7 @@
      */
     @Override
     public int getCdmaEriIconIndex(String callingPackage, String callingFeatureId) {
+        if (mFeatureFlags.cleanupCdma()) return -1;
         return getCdmaEriIconIndexForSubscriber(getDefaultSubscription(), callingPackage,
                 callingFeatureId);
     }
@@ -4040,6 +4055,8 @@
     @Override
     public int getCdmaEriIconIndexForSubscriber(int subId, String callingPackage,
             String callingFeatureId) {
+        if (mFeatureFlags.cleanupCdma()) return -1;
+
         if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
                 mApp, subId, callingPackage, callingFeatureId,
                 "getCdmaEriIconIndexForSubscriber")) {
@@ -4070,6 +4087,7 @@
      */
     @Override
     public int getCdmaEriIconMode(String callingPackage, String callingFeatureId) {
+        if (mFeatureFlags.cleanupCdma()) return -1;
         return getCdmaEriIconModeForSubscriber(getDefaultSubscription(), callingPackage,
                 callingFeatureId);
     }
@@ -4077,6 +4095,8 @@
     @Override
     public int getCdmaEriIconModeForSubscriber(int subId, String callingPackage,
             String callingFeatureId) {
+        if (mFeatureFlags.cleanupCdma()) return -1;
+
         if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
                 mApp, subId, callingPackage, callingFeatureId,
                 "getCdmaEriIconModeForSubscriber")) {
@@ -4101,6 +4121,7 @@
      */
     @Override
     public String getCdmaEriText(String callingPackage, String callingFeatureId) {
+        if (mFeatureFlags.cleanupCdma()) return null;
         return getCdmaEriTextForSubscriber(getDefaultSubscription(), callingPackage,
                 callingFeatureId);
     }
@@ -4108,6 +4129,8 @@
     @Override
     public String getCdmaEriTextForSubscriber(int subId, String callingPackage,
             String callingFeatureId) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
                 mApp, subId, callingPackage, callingFeatureId,
                 "getCdmaEriIconTextForSubscriber")) {
@@ -4132,6 +4155,8 @@
      */
     @Override
     public String getCdmaMdn(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "getCdmaMdn");
 
@@ -4157,6 +4182,8 @@
      */
     @Override
     public String getCdmaMin(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "getCdmaMin");
 
@@ -6385,6 +6412,8 @@
      */
     @Override
     public String nvReadItem(int itemID) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         WorkSource workSource = getWorkSource(Binder.getCallingUid());
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, getDefaultSubscription(), "nvReadItem");
@@ -6410,6 +6439,8 @@
      */
     @Override
     public boolean nvWriteItem(int itemID, String itemValue) {
+        if (mFeatureFlags.cleanupCdma()) return false;
+
         WorkSource workSource = getWorkSource(Binder.getCallingUid());
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, getDefaultSubscription(), "nvWriteItem");
@@ -6435,6 +6466,8 @@
      */
     @Override
     public boolean nvWriteCdmaPrl(byte[] preferredRoamingList) {
+        if (mFeatureFlags.cleanupCdma()) return false;
+
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, getDefaultSubscription(), "nvWriteCdmaPrl");
 
@@ -9215,6 +9248,8 @@
      */
     @Override
     public String getCdmaPrlVersion(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         enforceReadPrivilegedPermission("getCdmaPrlVersion");
 
         enforceTelephonyFeatureWithException(getCurrentPackageName(),
@@ -10326,6 +10361,8 @@
 
     @Override
     public int getCdmaRoamingMode(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT;
+
         TelephonyPermissions
                 .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
                         mApp, subId, "getCdmaRoamingMode");
@@ -10343,6 +10380,8 @@
 
     @Override
     public boolean setCdmaRoamingMode(int subId, int mode) {
+        if (mFeatureFlags.cleanupCdma()) return false;
+
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "setCdmaRoamingMode");
 
@@ -10359,6 +10398,8 @@
 
     @Override
     public int getCdmaSubscriptionMode(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return TelephonyManager.CDMA_SUBSCRIPTION_UNKNOWN;
+
         TelephonyPermissions
                 .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
                         mApp, subId, "getCdmaSubscriptionMode");
@@ -10376,6 +10417,8 @@
 
     @Override
     public boolean setCdmaSubscriptionMode(int subId, int mode) {
+        if (mFeatureFlags.cleanupCdma()) return false;
+
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "setCdmaSubscriptionMode");
 
