diff a/test/jdk/java/lang/ScopedValue/ScopedValueAPI.java b/test/jdk/java/lang/ScopedValue/ScopedValueAPI.java
--- a/test/jdk/java/lang/ScopedValue/ScopedValueAPI.java
+++ b/test/jdk/java/lang/ScopedValue/ScopedValueAPI.java
@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.
@@ -46,85 +46,86 @@
     private static Stream<ThreadFactory> factories() {
         return Stream.of(Thread.ofPlatform().factory(), Thread.ofVirtual().factory());
     }
 
     /**
-     * Test that the run method is invoked.
+     * Test that runWhere invokes the Runnable's run method.
      */
     @ParameterizedTest
     @MethodSource("factories")
-    void testRun(ThreadFactory factory) throws Exception {
+    void testRunWhere(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             class Box { static boolean executed; }
             ScopedValue<String> name = ScopedValue.newInstance();
             ScopedValue.runWhere(name, "duke", () -> { Box.executed = true; });
             assertTrue(Box.executed);
         });
     }
 
     /**
-     * Test the run method throwing an exception.
+     * Test runWhere when the run method throws an exception.
      */
     @ParameterizedTest
     @MethodSource("factories")
-    void testRunThrows(ThreadFactory factory) throws Exception {
+    void testRunWhereThrows(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             class FooException extends RuntimeException {  }
             ScopedValue<String> name = ScopedValue.newInstance();
             Runnable op = () -> { throw new FooException(); };
             assertThrows(FooException.class, () -> ScopedValue.runWhere(name, "duke", op));
             assertFalse(name.isBound());
         });
     }
 
     /**
-     * Test that the call method is invoked.
+     * Test that callWhere invokes the Callable's call method.
      */
     @ParameterizedTest
     @MethodSource("factories")
-    void testCall(ThreadFactory factory) throws Exception {
+    void testCallWhere(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             ScopedValue<String> name = ScopedValue.newInstance();
             String result = ScopedValue.callWhere(name, "duke", name::get);
             assertEquals("duke", result);
         });
     }
 
     /**
-     * Test that the get method is invoked.
+     * Test callWhere when the call method throws an exception.
      */
     @ParameterizedTest
     @MethodSource("factories")
-    void testGetWhere(ThreadFactory factory) throws Exception {
+    void testCallWhereThrows(ThreadFactory factory) throws Exception {
         test(factory, () -> {
+            class FooException extends RuntimeException {  }
             ScopedValue<String> name = ScopedValue.newInstance();
-            String result = ScopedValue.getWhere(name, "duke", (Supplier<String>)(name::get));
-            assertEquals("duke", result);
+            Callable<Void> op = () -> { throw new FooException(); };
+            assertThrows(FooException.class, () -> ScopedValue.callWhere(name, "duke", op));
+            assertFalse(name.isBound());
         });
     }
 
+
     /**
-     * Test the call method throwing an exception.
+     * Test that getWhere invokes the Supplier's get method.
      */
     @ParameterizedTest
     @MethodSource("factories")
-    void testCallThrows(ThreadFactory factory) throws Exception {
+    void testGetWhere(ThreadFactory factory) throws Exception {
         test(factory, () -> {
-            class FooException extends RuntimeException {  }
             ScopedValue<String> name = ScopedValue.newInstance();
-            Callable<Void> op = () -> { throw new FooException(); };
-            assertThrows(FooException.class, () -> ScopedValue.callWhere(name, "duke", op));
-            assertFalse(name.isBound());
+            String result = ScopedValue.getWhere(name, "duke", name::get);
+            assertEquals("duke", result);
         });
     }
 
     /**
-     * Test the get(Supplier) method throwing an exception.
+     * Test getWhere when the get method throws an exception.
      */
     @ParameterizedTest
     @MethodSource("factories")
-    void testGetThrows(ThreadFactory factory) throws Exception {
+    void testGetWhereThrows(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             class FooException extends RuntimeException {  }
             ScopedValue<String> name = ScopedValue.newInstance();
             Supplier<Void> op = () -> { throw new FooException(); };
             assertThrows(FooException.class, () -> ScopedValue.getWhere(name, "duke", op));
@@ -142,29 +143,29 @@
             ScopedValue<String> name1 = ScopedValue.newInstance();
             ScopedValue<String> name2 = ScopedValue.newInstance();
             assertThrows(NoSuchElementException.class, name1::get);
             assertThrows(NoSuchElementException.class, name2::get);
 
-            // run
+            // runWhere
             ScopedValue.runWhere(name1, "duke", () -> {
                 assertEquals("duke", name1.get());
                 assertThrows(NoSuchElementException.class, name2::get);
 
             });
             assertThrows(NoSuchElementException.class, name1::get);
             assertThrows(NoSuchElementException.class, name2::get);
 
-            // call
+            // callWhere
             ScopedValue.callWhere(name1, "duke", () -> {
                 assertEquals("duke", name1.get());
                 assertThrows(NoSuchElementException.class, name2::get);
                 return null;
             });
             assertThrows(NoSuchElementException.class, name1::get);
             assertThrows(NoSuchElementException.class, name2::get);
 
-            // get
+            // getWhere
             ScopedValue.getWhere(name1, "duke", () -> {
                 assertEquals("duke", name1.get());
                 assertThrows(NoSuchElementException.class, name2::get);
                 return null;
             });
@@ -183,29 +184,29 @@
             ScopedValue<String> name1 = ScopedValue.newInstance();
             ScopedValue<String> name2 = ScopedValue.newInstance();
             assertFalse(name1.isBound());
             assertFalse(name2.isBound());
 
-            // run
+            // runWhere
             ScopedValue.runWhere(name1, "duke", () -> {
                 assertTrue(name1.isBound());
                 assertFalse(name2.isBound());
             });
             assertFalse(name1.isBound());
             assertFalse(name2.isBound());
 
-            // call
+            // callWhere
             ScopedValue.callWhere(name1, "duke", () -> {
                 assertTrue(name1.isBound());
                 assertFalse(name2.isBound());
                 return null;
             });
             assertFalse(name1.isBound());
             assertFalse(name2.isBound());
 
-            // call
-            ScopedValue.callWhere(name1, "duke", () -> {
+            // getWhere
+            ScopedValue.getWhere(name1, "duke", () -> {
                 assertTrue(name1.isBound());
                 assertFalse(name2.isBound());
                 return null;
             });
             assertFalse(name1.isBound());
@@ -222,22 +223,29 @@
         test(factory, () -> {
             ScopedValue<String> name = ScopedValue.newInstance();
             assertNull(name.orElse(null));
             assertEquals("default", name.orElse("default"));
 
-            // run
+            // runWhere
             ScopedValue.runWhere(name, "duke", () -> {
                 assertEquals("duke", name.orElse(null));
                 assertEquals("duke", name.orElse("default"));
             });
 
-            // call
+            // callWhere
             ScopedValue.callWhere(name, "duke", () -> {
                 assertEquals("duke", name.orElse(null));
                 assertEquals("duke", name.orElse("default"));
                 return null;
             });
+
+            // getWhere
+            ScopedValue.getWhere(name, "duke", () -> {
+                assertEquals("duke", name.orElse(null));
+                assertEquals("duke", name.orElse("default"));
+                return null;
+            });
         });
     }
 
     /**
      * Test orElseThrow method.
@@ -248,20 +256,26 @@
         test(factory, () -> {
             class FooException extends RuntimeException { }
             ScopedValue<String> name = ScopedValue.newInstance();
             assertThrows(FooException.class, () -> name.orElseThrow(FooException::new));
 
-            // run
+            // runWhere
             ScopedValue.runWhere(name, "duke", () -> {
                 assertEquals("duke", name.orElseThrow(FooException::new));
             });
 
-            // call
+            // callWhere
             ScopedValue.callWhere(name, "duke", () -> {
                 assertEquals("duke", name.orElseThrow(FooException::new));
                 return null;
             });
+
+            // getWhere
+            ScopedValue.getWhere(name, "duke", () -> {
+                assertEquals("duke", name.orElseThrow(FooException::new));
+                return null;
+            });
         });
     }
 
     /**
      * Test two bindings.
@@ -271,42 +285,42 @@
     void testTwoBindings(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             ScopedValue<String> name = ScopedValue.newInstance();
             ScopedValue<Integer> age = ScopedValue.newInstance();
 
-            // run
-            ScopedValue.where(name, "duke").where(age, 100).run(() -> {
+            // runWhere
+            var carrier = ScopedValue.where(name, "duke").where(age, 100);
+            ScopedValue.runWhere(carrier, () -> {
                 assertTrue(name.isBound());
                 assertTrue(age.isBound());
                 assertEquals("duke", name.get());
                 assertEquals(100, (int) age.get());
             });
             assertFalse(name.isBound());
             assertFalse(age.isBound());
 
-            // call
-            ScopedValue.where(name, "duke").where(age, 100).call(() -> {
+            // callWhere
+            ScopedValue.callWhere(carrier, () -> {
                 assertTrue(name.isBound());
                 assertTrue(age.isBound());
                 assertEquals("duke", name.get());
                 assertEquals(100, (int) age.get());
                 return null;
             });
             assertFalse(name.isBound());
             assertFalse(age.isBound());
 
-            // get
-            ScopedValue.where(name, "duke").where(age, 100).get(() -> {
+            // getWhere
+            ScopedValue.getWhere(carrier, () -> {
                 assertTrue(name.isBound());
                 assertTrue(age.isBound());
                 assertEquals("duke", name.get());
                 assertEquals(100, (int) age.get());
                 return null;
             });
             assertFalse(name.isBound());
             assertFalse(age.isBound());
-
         });
     }
 
     /**
      * Test rebinding.
@@ -315,11 +329,11 @@
     @MethodSource("factories")
     void testRebinding(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             ScopedValue<String> name = ScopedValue.newInstance();
 
-            // run
+            // runWhere
             ScopedValue.runWhere(name, "duke", () -> {
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
 
                 ScopedValue.runWhere(name, "duchess", () -> {
@@ -330,11 +344,11 @@
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
             });
             assertFalse(name.isBound());
 
-            // call
+            // callWhere
             ScopedValue.callWhere(name, "duke", () -> {
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
 
                 ScopedValue.callWhere(name, "duchess", () -> {
@@ -347,16 +361,16 @@
                 assertEquals("duke", name.get());
                 return null;
             });
             assertFalse(name.isBound());
 
-            // get
+            // getWhere
             ScopedValue.getWhere(name, "duke", () -> {
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
 
-                ScopedValue.where(name, "duchess").get(() -> {
+                ScopedValue.getWhere(name, "duchess", () -> {
                     assertTrue(name.isBound());
                     assertEquals("duchess", name.get());
                     return null;
                 });
 
@@ -375,11 +389,11 @@
     @MethodSource("factories")
     void testRebindingFromNull(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             ScopedValue<String> name = ScopedValue.newInstance();
 
-            // run
+            // runWhere
             ScopedValue.runWhere(name, null, () -> {
                 assertTrue(name.isBound());
                 assertNull(name.get());
 
                 ScopedValue.runWhere(name, "duchess", () -> {
@@ -390,11 +404,11 @@
                 assertTrue(name.isBound());
                 assertNull(name.get());
             });
             assertFalse(name.isBound());
 
-            // call
+            // callWhere
             ScopedValue.callWhere(name, null, () -> {
                 assertTrue(name.isBound());
                 assertNull(name.get());
 
                 ScopedValue.callWhere(name, "duchess", () -> {
@@ -435,11 +449,11 @@
     @MethodSource("factories")
     void testRebindingToNull(ThreadFactory factory) throws Exception {
         test(factory, () -> {
             ScopedValue<String> name = ScopedValue.newInstance();
 
-            // run
+            // runWhere
             ScopedValue.runWhere(name, "duke", () -> {
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
 
                 ScopedValue.runWhere(name, null, () -> {
@@ -450,11 +464,11 @@
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
             });
             assertFalse(name.isBound());
 
-            // call
+            // callWhere
             ScopedValue.callWhere(name, "duke", () -> {
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
 
                 ScopedValue.callWhere(name, null, () -> {
@@ -467,16 +481,16 @@
                 assertEquals("duke", name.get());
                 return null;
             });
             assertFalse(name.isBound());
 
-            // get
-            ScopedValue.where(name, "duke").get(() -> {
+            // getWhere
+            ScopedValue.getWhere(name, "duke", () -> {
                 assertTrue(name.isBound());
                 assertEquals("duke", name.get());
 
-                ScopedValue.where(name, null).get(() -> {
+                ScopedValue.getWhere(name, null, () -> {
                     assertTrue(name.isBound());
                     assertNull(name.get());
                     return null;
                 });
 
@@ -515,22 +529,26 @@
      */
     @Test
     void testNullPointerException() {
         ScopedValue<String> name = ScopedValue.newInstance();
 
-        assertThrows(NullPointerException.class, () -> ScopedValue.where(null, "value"));
-        assertThrows(NullPointerException.class, () -> ScopedValue.runWhere(null, "value", () -> { }));
-        assertThrows(NullPointerException.class, () -> ScopedValue.getWhere(null, "value", () -> null));
+        assertThrows(NullPointerException.class, () -> ScopedValue.where(null, "duke"));
+
+        assertThrows(NullPointerException.class, () -> ScopedValue.runWhere(null, "duke", () -> { }));
+        assertThrows(NullPointerException.class, () -> ScopedValue.runWhere(name, "duke", null));
+
+        assertThrows(NullPointerException.class, () -> ScopedValue.callWhere(null, "duke", () -> ""));
+        assertThrows(NullPointerException.class, () -> ScopedValue.callWhere(name, "duke", null));
+
+        assertThrows(NullPointerException.class, () -> ScopedValue.getWhere(null, "duke", () -> ""));
+        assertThrows(NullPointerException.class, () -> ScopedValue.getWhere(name, "duke", null));
 
         assertThrows(NullPointerException.class, () -> name.orElseThrow(null));
 
         var carrier = ScopedValue.where(name, "duke");
-        assertThrows(NullPointerException.class, () -> carrier.where(null, "value"));
+        assertThrows(NullPointerException.class, () -> carrier.where(null, "duke"));
         assertThrows(NullPointerException.class, () -> carrier.get((ScopedValue<?>)null));
-        assertThrows(NullPointerException.class, () -> carrier.get((Supplier<?>)null));
-        assertThrows(NullPointerException.class, () -> carrier.run(null));
-        assertThrows(NullPointerException.class, () -> carrier.call(null));
     }
 
     @FunctionalInterface
     private interface ThrowingRunnable {
         void run() throws Exception;
