diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java
index 0658279..895edfd 100644
--- a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParser.java
@@ -60,7 +60,6 @@
     public static final String SATELLITE_BANDS = "bands";
     public static final String SATELLITE_TAG_ID_LIST = "tag_ids";
 
-
     /**
      * Parses a JSON file containing satellite access configurations.
      *
@@ -193,15 +192,17 @@
         return satelliteId;
     }
 
-    @Nullable
+    @NonNull
     protected static SatellitePosition parseSatellitePosition(
             @NonNull JSONObject satelliteInfoJson) {
         JSONObject jsonObject = satelliteInfoJson.optJSONObject(SATELLITE_POSITION);
+        SatellitePosition satellitePosition = new SatellitePosition(Double.NaN, Double.NaN);
+
         if (jsonObject == null) {
             loge("parseSatellitePosition: jsonObject is null");
-            return null;
+            return satellitePosition;
         }
-        SatellitePosition satellitePosition;
+
         try {
             double longitude = jsonObject.getDouble(SATELLITE_LONGITUDE);
             double altitude = jsonObject.getDouble(SATELLITE_ALTITUDE);
@@ -209,11 +210,11 @@
                 satellitePosition = new SatellitePosition(longitude, altitude);
             } else {
                 loge("parseSatellitePosition: invalid value: " + longitude + " | " + altitude);
-                return null;
+                return satellitePosition;
             }
         } catch (JSONException e) {
             loge("parseSatellitePosition: json parsing error " + e.getMessage());
-            return null;
+            return satellitePosition;
         }
 
         logd("parseSatellitePosition: " + satellitePosition);
diff --git a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParserTest.java b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParserTest.java
index d577a63..72fb705 100644
--- a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParserTest.java
+++ b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessConfigurationParserTest.java
@@ -301,7 +301,10 @@
             for (int j = 0; j < satelliteInfoArray.length(); j++) {
                 JSONObject infoJson = satelliteInfoArray.getJSONObject(i);
                 assertNull(parseSatelliteId(infoJson));
-                assertNull(parseSatellitePosition(infoJson));
+                SatellitePosition satellitePosition = parseSatellitePosition(infoJson);
+                assertNotNull(satellitePosition);
+                assertTrue(Double.isNaN(satellitePosition.getLongitudeDegrees()));
+                assertTrue(Double.isNaN(satellitePosition.getAltitudeKm()));
                 assertTrue(parseSatelliteEarfcnRangeList(infoJson).isEmpty());
                 assertNotNull(parseSatelliteBandList(infoJson));
                 assertEquals(0, parseSatelliteBandList(infoJson).size());
