diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 65dcb94..be4b94c 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -4354,8 +4354,9 @@
                 PackageManager.FEATURE_TELEPHONY_CALLING, "sendVisualVoicemailSmsForSubscriber");
 
         SmsController smsController = PhoneFactory.getSmsController();
-        smsController.sendVisualVoicemailSmsForSubscriber(callingPackage, callingAttributionTag,
-                subId, number, port, text, sentIntent);
+        smsController.sendVisualVoicemailSmsForSubscriber(callingPackage,
+                Binder.getCallingUserHandle().getIdentifier(), callingAttributionTag, subId, number,
+                port, text, sentIntent);
     }
 
     /**
@@ -14358,25 +14359,9 @@
      * @throws SecurityException if the caller doesn't have the required permission.
      */
     @Override
-    public void requestProvisionSubscriberIds(@NonNull ResultReceiver result) {
-        enforceSatelliteCommunicationPermission("requestProvisionSubscriberIds");
-        mSatelliteController.requestProvisionSubscriberIds(result);
-    }
-
-    /**
-     * Request to get provisioned status for given a satellite subscriber id.
-     *
-     * @param satelliteSubscriberId Satellite subscriber id requiring provisioned status check.
-     * @param result The result receiver, which returns the provisioned status of the token if the
-     * request is successful or an error code if the request failed.
-     *
-     * @throws SecurityException if the caller doesn't have the required permission.
-     */
-    @Override
-    public void requestIsProvisioned(@NonNull String satelliteSubscriberId,
-            @NonNull ResultReceiver result) {
-        enforceSatelliteCommunicationPermission("requestIsProvisioned");
-        mSatelliteController.requestIsProvisioned(satelliteSubscriberId, result);
+    public void requestSatelliteSubscriberProvisionStatus(@NonNull ResultReceiver result) {
+        enforceSatelliteCommunicationPermission("requestSatelliteSubscriberProvisionStatus");
+        mSatelliteController.requestSatelliteSubscriberProvisionStatus(result);
     }
 
     /**
diff --git a/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java b/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
index 906aa28..37813e3 100644
--- a/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
@@ -263,6 +263,12 @@
     }
 
     private void notifyCsSelected() {
+        if (isOutOfService()) {
+            loge("Cannot place call in current ServiceState: " + mServiceState.getState());
+            notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
+            return;
+        }
+
         logd("notifyCsSelected");
         mSelectorState = SelectorState.INACTIVE;
         if (mWwanSelectorCallback == null) {
@@ -317,26 +323,14 @@
             logd("WPS call placed over PS");
             notifyPsSelected();
         } else {
-            if (isOutOfService()) {
-                loge("Cannot place call in current ServiceState: " + mServiceState.getState());
-                notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
-            } else {
-                logd("WPS call placed over CS");
-                notifyCsSelected();
-            }
+            logd("WPS call placed over CS");
+            notifyCsSelected();
         }
     }
 
     private void handleReselectDomain(ImsReasonInfo imsReasonInfo) {
         mReselectDomain = false;
 
-        // Out of service
-        if (isOutOfService()) {
-            loge("Cannot place call in current ServiceState: " + mServiceState.getState());
-            notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
-            return;
-        }
-
         // IMS -> CS
         if (imsReasonInfo != null) {
             logd("PsDisconnectCause:" + imsReasonInfo.getCode());
@@ -413,12 +407,7 @@
 
         if (!mImsStateTracker.isMmTelFeatureAvailable()) {
             logd("MmTelFeatureAvailable unavailable");
-            if (isOutOfService()) {
-                loge("Cannot place call in current ServiceState: " + mServiceState.getState());
-                notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
-            } else {
-                notifyCsSelected();
-            }
+            notifyCsSelected();
             return;
         }
 
@@ -434,23 +423,13 @@
         // Check IMS registration state.
         if (!mImsStateTracker.isImsRegistered()) {
             logd("IMS is NOT registered");
-            if (isOutOfService()) {
-                loge("Cannot place call in current ServiceState: " + mServiceState.getState());
-                notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
-            } else {
-                notifyCsSelected();
-            }
+            notifyCsSelected();
             return;
         }
 
         // Check TTY
         if (isTtyModeEnabled() && !isTtySupportedByIms()) {
-            if (isOutOfService()) {
-                loge("Cannot place call in current ServiceState: " + mServiceState.getState());
-                notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
-            } else {
-                notifyCsSelected();
-            }
+            notifyCsSelected();
             return;
         }
 
@@ -479,12 +458,7 @@
         } else {
             logd("IMS is not voice capable");
             // Voice call CS fallback
-            if (isOutOfService()) {
-                loge("Cannot place call in current ServiceState: " + mServiceState.getState());
-                notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
-            } else {
-                notifyCsSelected();
-            }
+            notifyCsSelected();
         }
     }
 
diff --git a/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml b/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
index b1b2ccf..9bb8d3f 100644
--- a/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
+++ b/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
@@ -126,17 +126,11 @@
             android:paddingRight="4dp"
             android:text="@string/getIsEmergency"/>
         <Button
-            android:id="@+id/requestProvisionSubscriberIds"
+            android:id="@+id/requestSatelliteSubscriberProvisionStatus"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingRight="4dp"
-            android:text="@string/requestProvisionSubscriberIds"/>
-        <Button
-            android:id="@+id/requestIsProvisioned"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingRight="4dp"
-            android:text="@string/requestIsProvisioned"/>
+            android:text="@string/requestSatelliteSubscriberProvisionStatus"/>
         <Button
             android:id="@+id/provisionSatellite"
             android:layout_width="match_parent"
diff --git a/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml b/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
index c51d574..728576a 100644
--- a/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
+++ b/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
@@ -93,8 +93,7 @@
     <string name="reportSatelliteNotSupportedFromModem">reportSatelliteNotSupportedFromModem</string>
     <string name="showCurrentSatelliteSupportedStated">showCurrentSatelliteSupportedStated</string>
 
-    <string name="requestProvisionSubscriberIds">requestProvisionSubscriberIds</string>
-    <string name="requestIsProvisioned">requestIsProvisioned</string>
+    <string name="requestSatelliteSubscriberProvisionStatus">requestSatelliteSubscriberProvisionStatus</string>
     <string name="provisionSatellite">provisionSatellite</string>
 
     <string name="Back">Back</string>
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteControl.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteControl.java
index 4843c5f..379fc74 100644
--- a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteControl.java
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteControl.java
@@ -26,6 +26,7 @@
 import android.telephony.satellite.SatelliteCapabilities;
 import android.telephony.satellite.SatelliteManager;
 import android.telephony.satellite.SatelliteSubscriberInfo;
+import android.telephony.satellite.SatelliteSubscriberProvisionStatus;
 import android.telephony.satellite.stub.SatelliteResult;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -47,7 +48,8 @@
 
     private SatelliteManager mSatelliteManager;
     private SubscriptionManager mSubscriptionManager;
-    private List<SatelliteSubscriberInfo> mSatelliteSubscriberInfoList = new ArrayList<>();
+    private List<SatelliteSubscriberProvisionStatus> mSatelliteSubscriberProvisionStatuses =
+            new ArrayList<>();
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -86,10 +88,8 @@
                 .setOnClickListener(this::isRequestIsSatelliteEnabledForCarrierApp);
         findViewById(R.id.getIsEmergency)
                 .setOnClickListener(this::getIsEmergencyApp);
-        findViewById(R.id.requestProvisionSubscriberIds)
-                .setOnClickListener(this::requestProvisionSubscriberIdsApp);
-        findViewById(R.id.requestIsProvisioned)
-                .setOnClickListener(this::requestIsProvisionedApp);
+        findViewById(R.id.requestSatelliteSubscriberProvisionStatus)
+                .setOnClickListener(this::requestSatelliteSubscriberProvisionStatusApp);
         findViewById(R.id.provisionSatellite)
                 .setOnClickListener(this::provisionSatelliteApp);
         findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
@@ -393,67 +393,36 @@
                 .getIsEmergency());
     }
 
-    private void requestProvisionSubscriberIdsApp(View view) {
-        final AtomicReference<List<SatelliteSubscriberInfo>> list = new AtomicReference<>();
+    private void requestSatelliteSubscriberProvisionStatusApp(View view) {
+        final AtomicReference<List<SatelliteSubscriberProvisionStatus>> list =
+                new AtomicReference<>();
         final AtomicReference<Integer> errorCode = new AtomicReference<>();
-        OutcomeReceiver<List<SatelliteSubscriberInfo>, SatelliteManager.SatelliteException>
+        OutcomeReceiver<List<SatelliteSubscriberProvisionStatus>,
+                SatelliteManager.SatelliteException>
                 receiver =
                 new OutcomeReceiver<>() {
                     @Override
-                    public void onResult(List<SatelliteSubscriberInfo> result) {
-                        mSatelliteSubscriberInfoList = result;
+                    public void onResult(List<SatelliteSubscriberProvisionStatus> result) {
+                        mSatelliteSubscriberProvisionStatuses = result;
                         list.set(result);
                         TextView textView = findViewById(R.id.text_id);
-                        String text = "";
-                        for (SatelliteSubscriberInfo psi : result) {
+                        String text = "requestSatelliteSubscriberProvisionStatus: result=";
+                        for (SatelliteSubscriberProvisionStatus psi : result) {
                             text += "" + psi + " , ";
                         }
-                        textView.setText("requestProvisionSubscriberIds: result=" + text);
+                        textView.setText(text);
                     }
 
                     @Override
                     public void onError(SatelliteManager.SatelliteException exception) {
                         errorCode.set(exception.getErrorCode());
                         TextView textView = findViewById(R.id.text_id);
-                        textView.setText("Status for requestProvisionSubscriberIds error : "
-                                + SatelliteErrorUtils.mapError(errorCode.get()));
+                        textView.setText(
+                                "Status for requestSatelliteSubscriberProvisionStatus error : "
+                                        + SatelliteErrorUtils.mapError(errorCode.get()));
                     }
                 };
-        mSatelliteManager.requestProvisionSubscriberIds(Runnable::run, receiver);
-    }
-
-    private void requestIsProvisionedApp(View view) {
-        final AtomicReference<Boolean> enabled = new AtomicReference<>();
-        final AtomicReference<Integer> errorCode = new AtomicReference<>();
-        OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> receiver =
-                new OutcomeReceiver<>() {
-                    @Override
-                    public void onResult(Boolean result) {
-                        enabled.set(result);
-                        TextView textView = findViewById(R.id.text_id);
-                        if (enabled.get()) {
-                            textView.setText("requestIsProvisioned is true");
-                        } else {
-                            textView.setText("Status for requestIsProvisioned result : "
-                                    + enabled.get());
-                        }
-                    }
-
-                    @Override
-                    public void onError(SatelliteManager.SatelliteException exception) {
-                        errorCode.set(exception.getErrorCode());
-                        TextView textView = findViewById(R.id.text_id);
-                        textView.setText("Status for requestIsProvisioned error : "
-                                + SatelliteErrorUtils.mapError(errorCode.get()));
-                    }
-                };
-        if (mSatelliteSubscriberInfoList == null || mSatelliteSubscriberInfoList.get(0) == null) {
-            TextView textView = findViewById(R.id.text_id);
-            textView.setText("No ProvisionSubscriberIdList");
-            return;
-        }
-        mSatelliteManager.requestIsProvisioned(
-                mSatelliteSubscriberInfoList.get(0).getSubscriberId(), Runnable::run, receiver);
+        mSatelliteManager.requestSatelliteSubscriberProvisionStatus(Runnable::run, receiver);
     }
 
     private void provisionSatelliteApp(View view) {
@@ -481,6 +450,10 @@
                                 + SatelliteErrorUtils.mapError(errorCode.get()));
                     }
                 };
-        mSatelliteManager.provisionSatellite(mSatelliteSubscriberInfoList, Runnable::run, receiver);
+        List<SatelliteSubscriberInfo> list = new ArrayList<>();
+        for (SatelliteSubscriberProvisionStatus status : mSatelliteSubscriberProvisionStatuses) {
+            list.add(status.getSatelliteSubscriberInfo());
+        }
+        mSatelliteManager.provisionSatellite(list, Runnable::run, receiver);
     }
 }
