diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 7ad35ed..bafcc6f 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");
 
@@ -9168,10 +9201,12 @@
             }
             String aid = null;
             try {
-                aid = UiccController.getInstance().getUiccPort(phone.getPhoneId())
-                        .getApplicationByType(appType).getAid();
+                UiccCardApplication app = UiccController.getInstance()
+                        .getUiccPort(phone.getPhoneId()).getApplicationByType(appType);
+                if (app == null) return null;
+                aid = app.getAid();
             } catch (Exception e) {
-                Log.e(LOG_TAG, "Not getting aid. Exception ex=" + e);
+                Log.e(LOG_TAG, "Not getting aid", e);
             }
             return aid;
         } finally {
@@ -9199,7 +9234,7 @@
             try {
                 esn = phone.getEsn();
             } catch (Exception e) {
-                Log.e(LOG_TAG, "Not getting ESN. Exception ex=" + e);
+                Log.e(LOG_TAG, "Not getting ESN", e);
             }
             return esn;
         } finally {
@@ -9215,6 +9250,8 @@
      */
     @Override
     public String getCdmaPrlVersion(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return null;
+
         enforceReadPrivilegedPermission("getCdmaPrlVersion");
 
         enforceTelephonyFeatureWithException(getCurrentPackageName(),
@@ -10326,6 +10363,8 @@
 
     @Override
     public int getCdmaRoamingMode(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT;
+
         TelephonyPermissions
                 .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
                         mApp, subId, "getCdmaRoamingMode");
@@ -10343,6 +10382,8 @@
 
     @Override
     public boolean setCdmaRoamingMode(int subId, int mode) {
+        if (mFeatureFlags.cleanupCdma()) return false;
+
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "setCdmaRoamingMode");
 
@@ -10359,6 +10400,8 @@
 
     @Override
     public int getCdmaSubscriptionMode(int subId) {
+        if (mFeatureFlags.cleanupCdma()) return TelephonyManager.CDMA_SUBSCRIPTION_UNKNOWN;
+
         TelephonyPermissions
                 .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
                         mApp, subId, "getCdmaSubscriptionMode");
@@ -10376,6 +10419,8 @@
 
     @Override
     public boolean setCdmaSubscriptionMode(int subId, int mode) {
+        if (mFeatureFlags.cleanupCdma()) return false;
+
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "setCdmaSubscriptionMode");
 
diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java
index 895edfd..ad0926b 100644
--- a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java
@@ -325,7 +325,7 @@
     }
 
     private static boolean isValidEarfcn(int earfcn) {
-        if (earfcn >= 0 && earfcn <= 65535) {
+        if (earfcn >= 0) {
             return true;
         }
         loge("isValidEarfcn: earfcn value is out of valid range: " + earfcn);
