diff --git a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/PropertyUtils.java b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/PropertyUtils.java
index f8a3312..4002ae5 100644
--- a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/PropertyUtils.java
+++ b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/PropertyUtils.java
@@ -143,6 +143,8 @@
                     .put(new CarZone.Builder().setRow(CarZone.CAR_ZONE_ROW_THIRD)
                                     .setColumn(CarZone.CAR_ZONE_COLUMN_RIGHT).build(),
                             VehicleAreaSeat.SEAT_ROW_3_RIGHT)
+                    .put(new CarZone.Builder().setRow(CarZone.CAR_ZONE_ROW_ALL)
+                                    .setColumn(CarZone.CAR_ZONE_COLUMN_ALL).build(), 0)
                     .buildOrThrow();
 
     // Permissions for writing properties. They are system level permissions.
@@ -396,15 +398,16 @@
         for (Map.Entry<Integer, List<CarZone>> propertyIdWithCarZones :
                 propertyIdToCarZones.entrySet()) {
             for (CarZone carZone : propertyIdWithCarZones.getValue()) {
+                int propertyId = propertyIdWithCarZones.getKey();
                 if (CAR_ZONE_TO_AREA_ID.containsKey(carZone)) {
                     propertyIdWithAreaIds.add(PropertyIdAreaId.builder()
                             .setAreaId(CAR_ZONE_TO_AREA_ID.get(carZone))
-                            .setPropertyId(propertyIdWithCarZones.getKey())
+                            .setPropertyId(propertyId)
                             .build());
                 } else {
                     Log.w(LogTags.TAG_CAR_HARDWARE,
                             "Could not find area Id for car zone: " + carZone.toString()
-                                    +  " for property: " + propertyIdWithCarZones.getKey());
+                                    +  " for property: " + propertyId);
                 }
             }
         }
diff --git a/car/app/app-automotive/src/test/java/androidx/car/app/hardware/common/PropertyUtilsTest.java b/car/app/app-automotive/src/test/java/androidx/car/app/hardware/common/PropertyUtilsTest.java
index ef55551..e7d9a49 100644
--- a/car/app/app-automotive/src/test/java/androidx/car/app/hardware/common/PropertyUtilsTest.java
+++ b/car/app/app-automotive/src/test/java/androidx/car/app/hardware/common/PropertyUtilsTest.java
@@ -24,6 +24,8 @@
 
 import android.car.hardware.CarPropertyValue;
 
+import com.google.common.collect.ImmutableMap;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -34,6 +36,11 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.internal.DoNotInstrument;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
 
 @RunWith(RobolectricTestRunner.class)
 @DoNotInstrument
@@ -87,4 +94,19 @@
                 CAR_PROPERTY_RESPONSE_BUILDER.setStatus(CarValue.STATUS_UNKNOWN).build());
         verify(mCarPropertyValue, never()).getValue();
     }
+
+    @Test
+    public void convertPropertyValueToPropertyResponse_GetPropertyIdWithAreaIdForGlobalZone() {
+        List<PropertyIdAreaId> propertyIdAreaIds = new ArrayList<>();
+        propertyIdAreaIds.add(PropertyIdAreaId.builder()
+                .setAreaId(GLOBAL_AREA_ID)
+                .setPropertyId(PROPERTY_ID)
+                .build());
+        Map<Integer, List<CarZone>> propertyIdsWithCarZones =
+                ImmutableMap.<Integer, List<CarZone>>builder().put(PROPERTY_ID,
+                        Collections.singletonList(CarZone.CAR_ZONE_GLOBAL)).buildKeepingLast();
+        assertThat(
+                PropertyUtils.getPropertyIdWithAreaIds(propertyIdsWithCarZones)).isEqualTo(
+                        propertyIdAreaIds);
+    }
 }
