diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index e90f37c..cec3a94 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -2309,7 +2309,8 @@
                         phone.startSatellitePositionUpdates(onCompleted);
                     } else {
                         loge("startSatellitePositionUpdates: No phone object");
-                        request.result = SatelliteManager.SATELLITE_SERVICE_REQUEST_FAILED;
+                        request.result =
+                                SatelliteManager.SATELLITE_SERVICE_TELEPHONY_INTERNAL_ERROR;
                         notifyRequester(request);
                     }
                     break;
@@ -2344,7 +2345,8 @@
                         phone.stopSatellitePositionUpdates(onCompleted);
                     } else {
                         loge("stopSatellitePositionUpdates: No phone object");
-                        request.result = SatelliteManager.SATELLITE_SERVICE_REQUEST_FAILED;
+                        request.result =
+                                SatelliteManager.SATELLITE_SERVICE_TELEPHONY_INTERNAL_ERROR;
                         notifyRequester(request);
                     }
                     break;
@@ -12238,7 +12240,12 @@
     @Override
     @SatelliteManager.SatelliteServiceResult public int startSatellitePositionUpdates(int subId,
             int callbackId, @NonNull ISatellitePositionUpdateCallback callback) {
-        // TODO: check for SATELLITE_COMMUNICATION permission
+        enforceSatelliteCommunicationPermission("startSatellitePositionUpdates");
+
+        if (!isSatelliteEnabled(subId)) {
+            return SatelliteManager.SATELLITE_SERVICE_DISABLED;
+        }
+
         Phone phone = getPhone(subId);
         if (phone == null) {
             loge("startSatellitePositionUpdates called with invalid subId: " + subId
@@ -12246,7 +12253,7 @@
             phone = getDefaultPhone();
             if (phone == null) {
                 loge("startSatellitePositionUpdates failed with no phone object.");
-                return SatelliteManager.SATELLITE_SERVICE_REQUEST_FAILED;
+                return SatelliteManager.SATELLITE_SERVICE_TELEPHONY_INTERNAL_ERROR;
             }
         }
 
@@ -12280,7 +12287,12 @@
     @Override
     @SatelliteManager.SatelliteServiceResult public int stopSatellitePositionUpdates(int subId,
             int callbackId) {
-        // TODO: check for SATELLITE_COMMUNICATION permission
+        enforceSatelliteCommunicationPermission("stopSatellitePositionUpdates");
+
+        if (!isSatelliteEnabled(subId)) {
+            return SatelliteManager.SATELLITE_SERVICE_DISABLED;
+        }
+
         Phone phone = getPhone(subId);
         if (phone == null) {
             loge("stopSatellitePositionUpdates called with invalid subId: " + subId
@@ -12288,7 +12300,7 @@
             phone = getDefaultPhone();
             if (phone == null) {
                 loge("stopSatellitePositionUpdates failed with no phone object.");
-                return SatelliteManager.SATELLITE_SERVICE_REQUEST_FAILED;
+                return SatelliteManager.SATELLITE_SERVICE_TELEPHONY_INTERNAL_ERROR;
             }
         }
 
@@ -12296,7 +12308,7 @@
                 mSatellitePositionUpdateHandlers.remove(callbackId);
         if (handler == null) {
             loge("stopSatellitePositionUpdates: No SatellitePositionArgument");
-            return SatelliteManager.SATELLITE_SERVICE_REQUEST_FAILED;
+            return SatelliteManager.SATELLITE_SERVICE_TELEPHONY_INTERNAL_ERROR;
         } else {
             phone.unregisterForSatellitePointingInfoChanged(handler);
             phone.unregisterForSatelliteMessagesTransferComplete(handler);
