diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp
index 9ea837e..ca1278d 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/VtsHalGraphicsComposer3_TargetTest.cpp
@@ -81,6 +81,8 @@
         // assume the first displays are built-in and are never removed
         mDisplays = waitForDisplays();
 
+        mPrimaryDisplay = mDisplays[0].get();
+
         // explicitly disable vsync
         for (const auto& display : mDisplays) {
             EXPECT_TRUE(mComposerClient->setVsyncEnabled(display.get(), false).isOk());
@@ -318,7 +320,7 @@
         }
 
         mWriter->selectDisplay(display.get());
-        setPowerMode(display.get(), PowerMode::ON);
+        EXPECT_TRUE(mComposerClient->setPowerMode(display.get(), PowerMode::ON).isOk());
         EXPECT_TRUE(
                 mComposerClient
                         ->setColorMode(display.get(), ColorMode::NATIVE, RenderIntent::COLORIMETRIC)
@@ -484,13 +486,6 @@
         }
     }
 
-    void setPowerMode(int64_t display, PowerMode powerMode) {
-        ::ndk::ScopedAStatus error = mComposerClient->setPowerMode(display, powerMode);
-        ASSERT_TRUE(error.isOk() ||
-                    IComposerClient::EX_UNSUPPORTED == error.getServiceSpecificError())
-                << "failed to set power mode";
-    }
-
     // Keep track of all virtual displays and layers.  When a test fails with
     // ASSERT_*, the destructor will clean up the resources for the test.
     struct DisplayResource {
@@ -617,6 +612,7 @@
 TEST_P(GraphicsComposerAidlTest, setActiveConfigWithConstraints) {
     Test_setActiveConfigWithConstraints({.delayForChange = 0, .refreshMiss = false});
 }
+
 TEST_P(GraphicsComposerAidlTest, GetDisplayIdentificationData) {
     DisplayIdentification displayIdentification0;
 
@@ -826,17 +822,19 @@
     displayContentSamplingAttributes.format = static_cast<common::PixelFormat>(invalid);
     displayContentSamplingAttributes.dataspace = static_cast<common::Dataspace>(invalid);
     displayContentSamplingAttributes.componentMask = static_cast<FormatColorComponent>(invalid);
-    EXPECT_TRUE(mComposerClient
-                        ->getDisplayedContentSamplingAttributes(mPrimaryDisplay,
-                                                                &displayContentSamplingAttributes)
-                        .isOk());
+    auto error = mComposerClient->getDisplayedContentSamplingAttributes(
+            mPrimaryDisplay, &displayContentSamplingAttributes);
+    if (error.getServiceSpecificError() == IComposerClient::EX_UNSUPPORTED) {
+        SUCCEED() << "Sampling attributes aren't supported on this device, test skipped";
+        return;
+    }
 
     int64_t maxFrames = 10;
     int64_t timestamp = 0;
     int64_t frameCount = 0;
     DisplayContentSample displayContentSample;
-    auto error = mComposerClient->getDisplayedContentSample(mPrimaryDisplay, maxFrames, timestamp,
-                                                            &displayContentSample);
+    error = mComposerClient->getDisplayedContentSample(mPrimaryDisplay, maxFrames, timestamp,
+                                                       &displayContentSample);
     if (error.getServiceSpecificError() == IComposerClient::EX_UNSUPPORTED) {
         SUCCEED() << "Device does not support optional extension. Test skipped";
         return;
@@ -1197,7 +1195,7 @@
     modes.push_back(PowerMode::ON);
 
     for (auto mode : modes) {
-        setPowerMode(mPrimaryDisplay, mode);
+        EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
     }
 }
 
@@ -1208,7 +1206,7 @@
     modes.push_back(PowerMode::OFF);
 
     for (auto mode : modes) {
-        setPowerMode(mPrimaryDisplay, mode);
+        EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
     }
 
     modes.clear();
@@ -1217,7 +1215,7 @@
     modes.push_back(PowerMode::ON);
 
     for (auto mode : modes) {
-        setPowerMode(mPrimaryDisplay, mode);
+        EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
     }
 
     modes.clear();
@@ -1226,7 +1224,7 @@
     modes.push_back(PowerMode::ON_SUSPEND);
 
     for (auto mode : modes) {
-        setPowerMode(mPrimaryDisplay, mode);
+        EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
     }
 
     bool isDozeSupported = false;
@@ -1238,7 +1236,7 @@
         modes.push_back(PowerMode::DOZE);
 
         for (auto mode : modes) {
-            setPowerMode(mPrimaryDisplay, mode);
+            EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
         }
 
         modes.clear();
@@ -1247,7 +1245,7 @@
         modes.push_back(PowerMode::DOZE_SUSPEND);
 
         for (auto mode : modes) {
-            setPowerMode(mPrimaryDisplay, mode);
+            EXPECT_TRUE(mComposerClient->setPowerMode(mPrimaryDisplay, mode).isOk());
         }
     }
 }
@@ -1285,6 +1283,7 @@
     EXPECT_TRUE(
             mComposerClient->getDataspaceSaturationMatrix(common::Dataspace::SRGB_LINEAR, &matrix)
                     .isOk());
+
     // the last row is known
     ASSERT_EQ(0.0f, matrix[12]);
     ASSERT_EQ(0.0f, matrix[13]);
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp
index daf9924..307fe15 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp
@@ -125,12 +125,4 @@
     return ::ndk::ScopedAStatus::ok();
 }
 
-::ndk::SpAIBinder GraphicsComposerCallback::asBinder() {
-    return nullptr;
-}
-
-bool GraphicsComposerCallback::isRemote() {
-    return true;
-}
-
 }  // namespace aidl::android::hardware::graphics::composer3::vts
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/TestCommandReader.cpp b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/TestCommandReader.cpp
index 0346686..a5a84d9 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/TestCommandReader.cpp
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/TestCommandReader.cpp
@@ -37,15 +37,15 @@
     auto command = static_cast<Command>(commandRaw);
 
     switch (command) {
-        case Command::SET_CLIENT_TARGET_PROPERTY:
+        case Command::SET_CLIENT_TARGET_PROPERTY: {
             ASSERT_EQ(2, length);
             read();
             close(readFence());
-            break;
-        case Command::SELECT_DISPLAY:
+        } break;
+        case Command::SELECT_DISPLAY: {
             ASSERT_EQ(2, length);
             read64();  // display
-            break;
+        } break;
         case Command::SET_ERROR: {
             ASSERT_EQ(2, length);
             auto loc = read();
@@ -53,7 +53,7 @@
             std::pair<uint32_t, uint32_t> error(loc, err);
             mErrors.push_back(error);
         } break;
-        case Command::SET_CHANGED_COMPOSITION_TYPES:
+        case Command::SET_CHANGED_COMPOSITION_TYPES: {
             ASSERT_EQ(0, length % 3);
             for (uint16_t count = 0; count < length / 3; ++count) {
                 uint64_t layerId = read64();
@@ -62,8 +62,8 @@
                 std::pair<uint64_t, uint32_t> compositionChange(layerId, composition);
                 mCompositionChanges.push_back(compositionChange);
             }
-            break;
-        case Command::SET_DISPLAY_REQUESTS:
+        } break;
+        case Command::SET_DISPLAY_REQUESTS: {
             ASSERT_EQ(1, length % 3);
             read();  // displayRequests, ignored for now
             for (uint16_t count = 0; count < (length - 1) / 3; ++count) {
@@ -72,18 +72,18 @@
                 // client composition anyway
                 ASSERT_EQ(1u, read());
             }
-            break;
-        case Command::SET_PRESENT_FENCE:
+        } break;
+        case Command::SET_PRESENT_FENCE: {
             ASSERT_EQ(1, length);
             close(readFence());
-            break;
-        case Command::SET_RELEASE_FENCES:
+        } break;
+        case Command::SET_RELEASE_FENCES: {
             ASSERT_EQ(0, length % 3);
             for (uint16_t count = 0; count < length / 3; ++count) {
                 read64();
                 close(readFence());
             }
-            break;
+        } break;
         default:
             GTEST_FAIL() << "unexpected return command " << std::hex << static_cast<int>(command);
             break;
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h
index 02e5151..c359d5e 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h
@@ -19,7 +19,7 @@
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wconversion"
 
-#include <aidl/android/hardware/graphics/composer3/IComposerCallback.h>
+#include <aidl/android/hardware/graphics/composer3/BnComposerCallback.h>
 #include <android-base/thread_annotations.h>
 #include <mutex>
 #include <unordered_set>
@@ -29,8 +29,7 @@
 
 namespace aidl::android::hardware::graphics::composer3::vts {
 
-// IComposerCallback to be installed with IComposerClient::registerCallback.
-class GraphicsComposerCallback : public IComposerCallback {
+class GraphicsComposerCallback : public BnComposerCallback {
   public:
     void setVsyncAllowed(bool allowed);
 
@@ -59,9 +58,6 @@
             const ::aidl::android::hardware::graphics::composer3::VsyncPeriodChangeTimeline&
                     in_updatedTimeline) override;
 
-    ::ndk::SpAIBinder asBinder() override;
-    bool isRemote() override;
-
     mutable std::mutex mMutex;
     // the set of all currently connected displays
     std::unordered_set<int64_t> mDisplays GUARDED_BY(mMutex);
