diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
index 697c493..a9c0270 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
@@ -541,10 +541,8 @@
 public static final int VEHICLE_VALUE_TYPE_STRING = 0x01;
 public static final int VEHICLE_VALUE_TYPE_BYTES = 0x02;
 public static final int VEHICLE_VALUE_TYPE_BOOLEAN = 0x03;
-public static final int VEHICLE_VALUE_TYPE_ZONED_INT32 = 0x04;
-public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT = 0x05;
-public static final int VEHICLE_VALUE_TYPE_ZONED_BOOLEAN = 0x06;
-public static final int VEHICLE_VALUE_TYPE_INT64 = 0x07;
+public static final int VEHICLE_VALUE_TYPE_ZONED_BOOLEAN = 0x04;
+public static final int VEHICLE_VALUE_TYPE_INT64 = 0x05;
 public static final int VEHICLE_VALUE_TYPE_FLOAT = 0x10;
 public static final int VEHICLE_VALUE_TYPE_FLOAT_VEC2 = 0x11;
 public static final int VEHICLE_VALUE_TYPE_FLOAT_VEC3 = 0x12;
@@ -553,14 +551,18 @@
 public static final int VEHICLE_VALUE_TYPE_INT32_VEC2 = 0x21;
 public static final int VEHICLE_VALUE_TYPE_INT32_VEC3 = 0x22;
 public static final int VEHICLE_VALUE_TYPE_INT32_VEC4 = 0x23;
+public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT = 0x30;
+public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2 = 0x31;
+public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3 = 0x32;
+public static final int VEHICLE_VALUE_TYPE_ZONED_INT32 = 0x40;
+public static final int VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2 = 0x41;
+public static final int VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3 = 0x42;
 public static String enumToString(int v) {
 switch(v) {
 case VEHICLE_VALUE_TYPE_SHOUD_NOT_USE: return "VEHICLE_VALUE_TYPE_SHOUD_NOT_USE";
 case VEHICLE_VALUE_TYPE_STRING: return "VEHICLE_VALUE_TYPE_STRING";
 case VEHICLE_VALUE_TYPE_BYTES: return "VEHICLE_VALUE_TYPE_BYTES";
 case VEHICLE_VALUE_TYPE_BOOLEAN: return "VEHICLE_VALUE_TYPE_BOOLEAN";
-case VEHICLE_VALUE_TYPE_ZONED_INT32: return "VEHICLE_VALUE_TYPE_ZONED_INT32";
-case VEHICLE_VALUE_TYPE_ZONED_FLOAT: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT";
 case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: return "VEHICLE_VALUE_TYPE_ZONED_BOOLEAN";
 case VEHICLE_VALUE_TYPE_INT64: return "VEHICLE_VALUE_TYPE_INT64";
 case VEHICLE_VALUE_TYPE_FLOAT: return "VEHICLE_VALUE_TYPE_FLOAT";
@@ -571,6 +573,12 @@
 case VEHICLE_VALUE_TYPE_INT32_VEC2: return "VEHICLE_VALUE_TYPE_INT32_VEC2";
 case VEHICLE_VALUE_TYPE_INT32_VEC3: return "VEHICLE_VALUE_TYPE_INT32_VEC3";
 case VEHICLE_VALUE_TYPE_INT32_VEC4: return "VEHICLE_VALUE_TYPE_INT32_VEC4";
+case VEHICLE_VALUE_TYPE_ZONED_FLOAT: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT";
+case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2";
+case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3";
+case VEHICLE_VALUE_TYPE_ZONED_INT32: return "VEHICLE_VALUE_TYPE_ZONED_INT32";
+case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: return "VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2";
+case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: return "VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3";
 default: return "UNKNOWN";
 }
 }
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
index 2b72163..e34e473 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
@@ -88,7 +88,7 @@
     public static VehiclePropValue createZonedIntValue(int property, int zone, int value,
             long timestamp) {
         return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32,timestamp).
-                setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).setInt32Value(value).
+                setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).addInt32Values(value).
                         build()).
                 build();
     }
@@ -97,14 +97,14 @@
             long timestamp) {
         return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN,timestamp).
                 setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).
-                        setInt32Value(value ? 1 : 0).build()).
+                        addInt32Values(value ? 1 : 0).build()).
                 build();
     }
 
     public static VehiclePropValue createZonedFloatValue(int property, int zone, float value,
             long timestamp) {
         return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT,timestamp).
-                setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).setFloatValue(value).
+                setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(zone).addFloatValues(value).
                         build()).
                 build();
     }
diff --git a/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp b/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
index 6d48ef9..f32a689 100644
--- a/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
+++ b/libvehiclenetwork/native/VehicleNetworkProtoUtil.cpp
@@ -52,13 +52,11 @@
                 out.set_bytes_value(in.value.bytes_value.data, in.value.bytes_value.len);
             }
         } break;
-        case VEHICLE_VALUE_TYPE_FLOAT: {
-            out.add_float_values(in.value.float_value);
-        } break;
+        case VEHICLE_VALUE_TYPE_FLOAT:
         case VEHICLE_VALUE_TYPE_FLOAT_VEC2:
         case VEHICLE_VALUE_TYPE_FLOAT_VEC3:
         case VEHICLE_VALUE_TYPE_FLOAT_VEC4: {
-            int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_FLOAT_VEC2 + 2;
+            int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_FLOAT + 1;
             for (int i = 0; i < expectedSize; i++) {
                 out.add_float_values(in.value.float_array[i]);
             }
@@ -66,31 +64,46 @@
         case VEHICLE_VALUE_TYPE_INT64: {
             out.set_int64_value(in.value.int64_value);
         } break;
-        case VEHICLE_VALUE_TYPE_INT32:
         case VEHICLE_VALUE_TYPE_BOOLEAN: {
             out.add_int32_values(in.value.int32_value);
         } break;
+        case VEHICLE_VALUE_TYPE_INT32:
         case VEHICLE_VALUE_TYPE_INT32_VEC2:
         case VEHICLE_VALUE_TYPE_INT32_VEC3:
         case VEHICLE_VALUE_TYPE_INT32_VEC4: {
-            int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_INT32_VEC2 + 2;
+            int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_INT32 + 1;
             for (int i = 0; i < expectedSize; i++) {
                 out.add_int32_values(in.value.int32_array[i]);
             }
         } break;
+        case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
         case VEHICLE_VALUE_TYPE_ZONED_INT32:
-        case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: {
+        case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
+        case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: {
+            int expectedSize;
+            if (in.value_type == VEHICLE_VALUE_TYPE_ZONED_BOOLEAN) {
+                expectedSize = 1;
+            } else {
+                expectedSize = in.value_type - VEHICLE_VALUE_TYPE_ZONED_INT32 + 1;
+            }
             ZonedValue* zonedValue = new ZonedValue();
             ASSERT_OR_HANDLE_NO_MEMORY(zonedValue, return NO_MEMORY);
-            zonedValue->set_zone_or_window(in.value.zoned_int32_value.zone);
-            zonedValue->set_int32_value(in.value.zoned_int32_value.value);
+            zonedValue->set_zone_or_window(in.value.zoned_int32_array.zone);
+            for (int i = 0; i < expectedSize; i++) {
+                zonedValue->add_int32_values(in.value.zoned_int32_array.values[i]);
+            }
             out.set_allocated_zoned_value(zonedValue);
         } break;
-        case VEHICLE_VALUE_TYPE_ZONED_FLOAT: {
+        case VEHICLE_VALUE_TYPE_ZONED_FLOAT:
+        case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
+        case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: {
+            int expectedSize = in.value_type - VEHICLE_VALUE_TYPE_ZONED_FLOAT + 1;
             ZonedValue* zonedValue = new ZonedValue();
             ASSERT_OR_HANDLE_NO_MEMORY(zonedValue, return NO_MEMORY);
-            zonedValue->set_zone_or_window(in.value.zoned_int32_value.zone);
-            zonedValue->set_float_value(in.value.zoned_float_value.value);
+            zonedValue->set_zone_or_window(in.value.zoned_float_array.zone);
+            for (int i = 0; i < expectedSize; i++) {
+                zonedValue->add_float_values(in.value.zoned_float_array.values[i]);
+            }
             out.set_allocated_zoned_value(zonedValue);
         } break;
     }
@@ -181,7 +194,6 @@
             }
             out.value.int64_value = in.int64_value();
         } break;
-        case VEHICLE_VALUE_TYPE_INT32:
         case VEHICLE_VALUE_TYPE_BOOLEAN: {
             if (in.int32_values_size() != 1) {
                 if (canIgnoreNoData) {
@@ -192,10 +204,11 @@
             }
             out.value.int32_value = in.int32_values(0);
         } break;
+        case VEHICLE_VALUE_TYPE_INT32:
         case VEHICLE_VALUE_TYPE_INT32_VEC2:
         case VEHICLE_VALUE_TYPE_INT32_VEC3:
         case VEHICLE_VALUE_TYPE_INT32_VEC4: {
-            int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_INT32_VEC2 + 2;
+            int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_INT32 + 1;
             if (in.int32_values_size() != expectedSize) {
                 if (canIgnoreNoData) {
                     return NO_ERROR;
@@ -208,8 +221,10 @@
                 out.value.int32_array[i] = in.int32_values(i);
             }
         } break;
+        case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
         case VEHICLE_VALUE_TYPE_ZONED_INT32:
-        case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: {
+        case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
+        case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: {
             if (!in.has_zoned_value()) {
                 if (canIgnoreNoData) {
                     return NO_ERROR;
@@ -218,17 +233,28 @@
                 return BAD_VALUE;
             }
             const ZonedValue& zonedValue = in.zoned_value();
-            if (!zonedValue.has_int32_value()) {
+            int expectedSize;
+            if (out.value_type == VEHICLE_VALUE_TYPE_ZONED_BOOLEAN) {
+                expectedSize = 1;
+            } else {
+                expectedSize = out.value_type - VEHICLE_VALUE_TYPE_ZONED_INT32 + 1;
+            }
+            if (zonedValue.int32_values_size() != expectedSize) {
                 if (canIgnoreNoData) {
                     return NO_ERROR;
                 }
-                ALOGE("no int32 in zoned value");
+                ALOGE("Wrong data length in zoned int boolean value, expected:%d, got:%d",
+                        expectedSize, zonedValue.int32_values_size());
                 return BAD_VALUE;
             }
-            out.value.zoned_int32_value.zone = zonedValue.zone_or_window();
-            out.value.zoned_int32_value.value = zonedValue.int32_value();
+            out.value.zoned_int32_array.zone = zonedValue.zone_or_window();
+            for (int i = 0; i < expectedSize; i++) {
+                out.value.zoned_int32_array.values[i] = zonedValue.int32_values(i);
+            }
         } break;
-        case VEHICLE_VALUE_TYPE_ZONED_FLOAT: {
+        case VEHICLE_VALUE_TYPE_ZONED_FLOAT:
+        case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
+        case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: {
             if (!in.has_zoned_value()) {
                 if (canIgnoreNoData) {
                     return NO_ERROR;
@@ -237,15 +263,19 @@
                 return BAD_VALUE;
             }
             const ZonedValue& zonedValue = in.zoned_value();
-            if (!zonedValue.has_float_value()) {
+            int expectedSize = out.value_type - VEHICLE_VALUE_TYPE_ZONED_FLOAT + 1;
+            if (zonedValue.float_values_size() != expectedSize) {
                 if (canIgnoreNoData) {
                     return NO_ERROR;
                 }
-                ALOGE("no float in zoned value");
+                ALOGE("Wrong data length in zoned float value, expected:%d, got:%d",
+                                        expectedSize, zonedValue.float_values_size());
                 return BAD_VALUE;
             }
-            out.value.zoned_float_value.zone = zonedValue.zone_or_window();
-            out.value.zoned_float_value.value = zonedValue.float_value();
+            out.value.zoned_float_array.zone = zonedValue.zone_or_window();
+            for (int i = 0; i < expectedSize; i++) {
+                out.value.zoned_float_array.values[i] = zonedValue.float_values(i);
+            }
         } break;
         default: {
             if (canIgnoreNoData) {
diff --git a/libvehiclenetwork/proto/VehicleNetworkProto.proto b/libvehiclenetwork/proto/VehicleNetworkProto.proto
index b5ff406..4cd81e4 100644
--- a/libvehiclenetwork/proto/VehicleNetworkProto.proto
+++ b/libvehiclenetwork/proto/VehicleNetworkProto.proto
@@ -42,8 +42,8 @@
 
 message ZonedValue {
     required int32 zone_or_window = 1;
-    optional int32 int32_value = 2; // also covers boolean value.
-    optional float float_value = 3;
+    repeated int32 int32_values = 2; // also covers boolean value.
+    repeated float float_values = 3;
 };
 
 message VehiclePropValue {
diff --git a/service/src/com/android/car/hal/HvacHalService.java b/service/src/com/android/car/hal/HvacHalService.java
index ecb4c0d..b9b6923 100644
--- a/service/src/com/android/car/hal/HvacHalService.java
+++ b/service/src/com/android/car/hal/HvacHalService.java
@@ -107,13 +107,13 @@
         if(value != null) {
             switch(hvacProp.getType()) {
                 case CarHvacManager.PROPERTY_TYPE_BOOLEAN:
-                    hvacProp.setBooleanValue(value.getZonedValue().getInt32Value() == 1);
+                    hvacProp.setBooleanValue(value.getZonedValue().getInt32Values(0) == 1);
                     break;
                 case CarHvacManager.PROPERTY_TYPE_INT:
-                    hvacProp.setIntegerValue(value.getZonedValue().getInt32Value());
+                    hvacProp.setIntegerValue(value.getZonedValue().getInt32Values(0));
                     break;
                 case CarHvacManager.PROPERTY_TYPE_FLOAT:
-                    hvacProp.setFloatValue(value.getZonedValue().getFloatValue());
+                    hvacProp.setFloatValue(value.getZonedValue().getFloatValues(0));
                     break;
             }
             hvacProp.setZone(zone);
@@ -258,16 +258,16 @@
                 switch(halType) {
                     case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
                         event = new CarHvacEvent(CarHvacEvent.HVAC_EVENT_PROPERTY_CHANGE,
-                                hvacPropId, zone, v.getZonedValue().getInt32Value() == 1);
+                                hvacPropId, zone, v.getZonedValue().getInt32Values(0) == 1);
                         break;
                     case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT: {
                         event = new CarHvacEvent(CarHvacEvent.HVAC_EVENT_PROPERTY_CHANGE,
-                                hvacPropId, zone, v.getZonedValue().getFloatValue());
+                                hvacPropId, zone, v.getZonedValue().getFloatValues(0));
                         break;
                     }
                     case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32: {
                         event = new CarHvacEvent(CarHvacEvent.HVAC_EVENT_PROPERTY_CHANGE,
-                                hvacPropId, zone, v.getZonedValue().getInt32Value());
+                                hvacPropId, zone, v.getZonedValue().getInt32Values(0));
                         break;
                     }
                     default:
diff --git a/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java b/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java
index 2c3d4a6..1f12167 100644
--- a/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java
+++ b/tests/carservice_test/src/com/android/support/car/test/CarHvacManagerTest.java
@@ -183,15 +183,11 @@
 
         @Override
         public synchronized void onPropertySet(VehiclePropValue value) {
-            Log.d(TAG, "onPropertySet intValue = " + value.getZonedValue().getInt32Value() +
-                    " floatValue = " + value.getZonedValue().getFloatValue());
             mMap.put(value.getProp(), value);
         }
 
         @Override
         public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            Log.d(TAG, "onPropertyGet intValue = " + value.getZonedValue().getInt32Value() +
-                    " floatValue = " + value.getZonedValue().getFloatValue());
             return mMap.get(value.getProp());
         }
 
diff --git a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
index 32d173e..0542cfb 100644
--- a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
+++ b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
@@ -38,10 +38,10 @@
                 break;
             case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32:
             case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
-                builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).setInt32Value(0).
+                builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).addInt32Values(0).
                         build());
             case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT:
-                builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).setFloatValue(0f).
+                builder.setZonedValue(ZonedValue.newBuilder().setZoneOrWindow(0).addFloatValues(0f).
                         build());
             case VehicleValueType.VEHICLE_VALUE_TYPE_INT64:
                 builder.setInt64Value(0);
