diff --git a/aosp/dynamic_partition_control_android.cc b/aosp/dynamic_partition_control_android.cc
index a1d5e91..657eec9 100644
--- a/aosp/dynamic_partition_control_android.cc
+++ b/aosp/dynamic_partition_control_android.cc
@@ -1013,8 +1013,8 @@
   // target slot.
   const auto& partition_name_suffix =
       partition_name + SlotSuffixForSlotNumber(slot);
-  if (GetVirtualAbCompressionFeatureFlag().IsEnabled() &&
-      IsDynamicPartition(partition_name) && slot != current_slot) {
+  if (UpdateUsesSnapshotCompression() && IsDynamicPartition(partition_name) &&
+      slot != current_slot) {
     return {{.mountable_device_path =
                  GetStaticDevicePath(device_dir, partition_name_suffix),
              .is_dynamic = true}};
diff --git a/aosp/dynamic_partition_control_android_unittest.cc b/aosp/dynamic_partition_control_android_unittest.cc
index b2e5c89..2f290d7 100644
--- a/aosp/dynamic_partition_control_android_unittest.cc
+++ b/aosp/dynamic_partition_control_android_unittest.cc
@@ -59,7 +59,8 @@
         .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::NONE)));
     ON_CALL(dynamicControl(), GetVirtualAbCompressionFeatureFlag())
         .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::NONE)));
-
+    ON_CALL(dynamicControl(), UpdateUsesSnapshotCompression())
+        .WillByDefault(Return(false));
     ON_CALL(dynamicControl(), GetDeviceDir(_))
         .WillByDefault(Invoke([](auto path) {
           *path = kFakeDevicePath;
@@ -399,6 +400,8 @@
       .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH)));
   ON_CALL(dynamicControl(), GetVirtualAbCompressionFeatureFlag())
       .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::NONE)));
+  ON_CALL(dynamicControl(), UpdateUsesSnapshotCompression())
+      .WillByDefault(Return(false));
   ON_CALL(dynamicControl(), IsDynamicPartition(_)).WillByDefault(Return(true));
 
   EXPECT_CALL(dynamicControl(),
@@ -437,6 +440,8 @@
       .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH)));
   ON_CALL(dynamicControl(), GetVirtualAbCompressionFeatureFlag())
       .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH)));
+  ON_CALL(dynamicControl(), UpdateUsesSnapshotCompression())
+      .WillByDefault(Return(true));
   EXPECT_CALL(dynamicControl(), IsDynamicPartition(_))
       .Times(AtLeast(1))
       .WillRepeatedly(Return(true));
diff --git a/common/dynamic_partition_control_interface.h b/common/dynamic_partition_control_interface.h
index 61127d4..8b29c3b 100644
--- a/common/dynamic_partition_control_interface.h
+++ b/common/dynamic_partition_control_interface.h
@@ -69,6 +69,9 @@
   // Return the feature flags of Virtual A/B on this device.
   virtual FeatureFlag GetVirtualAbFeatureFlag() = 0;
   // Return the feature flags of Virtual A/B Compression on this device.
+  // This function will tell you if current device supports VABC. However, it
+  // DOES NOT tell you if VABC is used for current OTA update. For that, use
+  // UpdateUsesSnapshotCompression.
   virtual FeatureFlag GetVirtualAbCompressionFeatureFlag() = 0;
 
   // Attempt to optimize |operation|.
diff --git a/payload_consumer/filesystem_verifier_action.cc b/payload_consumer/filesystem_verifier_action.cc
index 634f03f..e3a3e34 100644
--- a/payload_consumer/filesystem_verifier_action.cc
+++ b/payload_consumer/filesystem_verifier_action.cc
@@ -167,7 +167,7 @@
   LOG(INFO) << "Hashing partition " << partition_index_ << " ("
             << partition.name << ") on device " << part_path;
   auto success = false;
-  if (dynamic_control_->GetVirtualAbCompressionFeatureFlag().IsEnabled() &&
+  if (dynamic_control_->UpdateUsesSnapshotCompression() &&
       dynamic_control_->IsDynamicPartition(partition.name) &&
       verifier_step_ == VerifierStep::kVerifyTargetHash) {
     success = InitializeFdVABC();
diff --git a/payload_consumer/filesystem_verifier_action_unittest.cc b/payload_consumer/filesystem_verifier_action_unittest.cc
index 658ebe1..d163ec2 100644
--- a/payload_consumer/filesystem_verifier_action_unittest.cc
+++ b/payload_consumer/filesystem_verifier_action_unittest.cc
@@ -415,14 +415,14 @@
 
   ON_CALL(dynamic_control, GetDynamicPartitionsFeatureFlag())
       .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH)));
-  ON_CALL(dynamic_control, GetVirtualAbCompressionFeatureFlag())
-      .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH)));
+  ON_CALL(dynamic_control, UpdateUsesSnapshotCompression())
+      .WillByDefault(Return(true));
   ON_CALL(dynamic_control, OpenCowReader(_, _, _))
       .WillByDefault(Return(nullptr));
   ON_CALL(dynamic_control, IsDynamicPartition(part.name))
       .WillByDefault(Return(true));
 
-  EXPECT_CALL(dynamic_control, GetVirtualAbCompressionFeatureFlag())
+  EXPECT_CALL(dynamic_control, UpdateUsesSnapshotCompression())
       .Times(AtLeast(1));
   EXPECT_CALL(dynamic_control, OpenCowReader(part.name, {part.source_path}, _))
       .Times(1);
diff --git a/payload_consumer/partition_writer_factory_android.cc b/payload_consumer/partition_writer_factory_android.cc
index 0c9f7ea..184e2d5 100644
--- a/payload_consumer/partition_writer_factory_android.cc
+++ b/payload_consumer/partition_writer_factory_android.cc
@@ -30,8 +30,7 @@
     size_t block_size,
     bool is_interactive,
     bool is_dynamic_partition) {
-  if (dynamic_control &&
-      dynamic_control->GetVirtualAbCompressionFeatureFlag().IsEnabled() &&
+  if (dynamic_control && dynamic_control->UpdateUsesSnapshotCompression() &&
       is_dynamic_partition) {
     LOG(INFO)
         << "Virtual AB Compression Enabled, using VABC Partition Writer for `"
diff --git a/payload_consumer/postinstall_runner_action.cc b/payload_consumer/postinstall_runner_action.cc
index 58d045b..e3e305b 100644
--- a/payload_consumer/postinstall_runner_action.cc
+++ b/payload_consumer/postinstall_runner_action.cc
@@ -76,7 +76,7 @@
   CHECK(dynamic_control);
 
   // Mount snapshot partitions for Virtual AB Compression Compression.
-  if (dynamic_control->GetVirtualAbCompressionFeatureFlag().IsEnabled()) {
+  if (dynamic_control->UpdateUsesSnapshotCompression()) {
     // Before calling MapAllPartitions to map snapshot devices, all CowWriters
     // must be closed, and MapAllPartitions() should be called.
     dynamic_control->UnmapAllPartitions();
