diff --git a/gnss/V2_1/target/AndroidTest.xml b/gnss/V2_1/target/AndroidTest.xml
index 9efcfe3..b91c23a 100644
--- a/gnss/V2_1/target/AndroidTest.xml
+++ b/gnss/V2_1/target/AndroidTest.xml
@@ -26,6 +26,6 @@
         <option name="binary-test-type" value="gtest"/>
         <option name="binary-test-disable-framework" value="true"/>
         <option name="binary-test-stop-native-servers" value="true"/>
-        <option name="test-timeout" value="1m"/>
+        <option name="test-timeout" value="15m"/>
     </test>
 </configuration>
diff --git a/neuralnetworks/V1_2/benchmark/java/src/com/android/nn/benchmark/vts/v1_2/NNAccuracyTest.java b/neuralnetworks/V1_2/benchmark/java/src/com/android/nn/benchmark/vts/v1_2/NNAccuracyTest.java
index 17ca0ba..6c1aaf6 100644
--- a/neuralnetworks/V1_2/benchmark/java/src/com/android/nn/benchmark/vts/v1_2/NNAccuracyTest.java
+++ b/neuralnetworks/V1_2/benchmark/java/src/com/android/nn/benchmark/vts/v1_2/NNAccuracyTest.java
@@ -117,17 +117,18 @@
     @Test
     @LargeTest
     public void testDriver() throws BenchmarkException, IOException {
-        NNTestBase test = mModel.mEntry.createNNTestBase();
-        test.useNNApi();
-        test.setNNApiDeviceName(mModel.mInstance);
-        if (!test.setupModel(mActivity)) {
-            throw new AssumptionViolatedException("The driver rejected the model.");
+        try (NNTestBase test = mModel.mEntry.createNNTestBase()) {
+            test.useNNApi();
+            test.setNNApiDeviceName(mModel.mInstance);
+            if (!test.setupModel(mActivity)) {
+                throw new AssumptionViolatedException("The driver rejected the model.");
+            }
+            Pair<List<InferenceInOutSequence>, List<InferenceResult>> inferenceResults =
+                    test.runBenchmarkCompleteInputSet(/*setRepeat=*/1, /*timeoutSec=*/3600);
+            BenchmarkResult benchmarkResult = BenchmarkResult.fromInferenceResults(
+                    mModel.mEntry.mModelName, BenchmarkResult.BACKEND_TFLITE_NNAPI,
+                    inferenceResults.first, inferenceResults.second, test.getEvaluator());
+            assertFalse(benchmarkResult.hasValidationErrors());
         }
-        Pair<List<InferenceInOutSequence>, List<InferenceResult>> inferenceResults =
-                test.runBenchmarkCompleteInputSet(/*setRepeat=*/1, /*timeoutSec=*/3600);
-        BenchmarkResult benchmarkResult = BenchmarkResult.fromInferenceResults(
-                mModel.mEntry.mModelName, BenchmarkResult.BACKEND_TFLITE_NNAPI,
-                inferenceResults.first, inferenceResults.second, test.getEvaluator());
-        assertFalse(benchmarkResult.hasValidationErrors());
     }
 }
diff --git a/neuralnetworks/V1_3/benchmark/java/src/com/android/nn/benchmark/vts/v1_3/NNAccuracyTest.java b/neuralnetworks/V1_3/benchmark/java/src/com/android/nn/benchmark/vts/v1_3/NNAccuracyTest.java
index bdc4311..d4a05fc 100644
--- a/neuralnetworks/V1_3/benchmark/java/src/com/android/nn/benchmark/vts/v1_3/NNAccuracyTest.java
+++ b/neuralnetworks/V1_3/benchmark/java/src/com/android/nn/benchmark/vts/v1_3/NNAccuracyTest.java
@@ -117,17 +117,18 @@
     @Test
     @LargeTest
     public void testDriver() throws BenchmarkException, IOException {
-        NNTestBase test = mModel.mEntry.createNNTestBase();
-        test.useNNApi();
-        test.setNNApiDeviceName(mModel.mInstance);
-        if (!test.setupModel(mActivity)) {
-            throw new AssumptionViolatedException("The driver rejected the model.");
+        try (NNTestBase test = mModel.mEntry.createNNTestBase()) {
+            test.useNNApi();
+            test.setNNApiDeviceName(mModel.mInstance);
+            if (!test.setupModel(mActivity)) {
+                throw new AssumptionViolatedException("The driver rejected the model.");
+            }
+            Pair<List<InferenceInOutSequence>, List<InferenceResult>> inferenceResults =
+                    test.runBenchmarkCompleteInputSet(/*setRepeat=*/1, /*timeoutSec=*/3600);
+            BenchmarkResult benchmarkResult = BenchmarkResult.fromInferenceResults(
+                    mModel.mEntry.mModelName, BenchmarkResult.BACKEND_TFLITE_NNAPI,
+                    inferenceResults.first, inferenceResults.second, test.getEvaluator());
+            assertFalse(benchmarkResult.hasValidationErrors());
         }
-        Pair<List<InferenceInOutSequence>, List<InferenceResult>> inferenceResults =
-                test.runBenchmarkCompleteInputSet(/*setRepeat=*/1, /*timeoutSec=*/3600);
-        BenchmarkResult benchmarkResult = BenchmarkResult.fromInferenceResults(
-                mModel.mEntry.mModelName, BenchmarkResult.BACKEND_TFLITE_NNAPI,
-                inferenceResults.first, inferenceResults.second, test.getEvaluator());
-        assertFalse(benchmarkResult.hasValidationErrors());
     }
 }
diff --git a/radio/V1_4/target/radio/AndroidTest.xml b/radio/V1_4/target/radio/AndroidTest.xml
index b42c568..1552046 100644
--- a/radio/V1_4/target/radio/AndroidTest.xml
+++ b/radio/V1_4/target/radio/AndroidTest.xml
@@ -30,14 +30,5 @@
         <option name="binary-test-type" value="gtest"/>
         <option name="binary-test-disable-framework" value="true"/>
         <option name="test-timeout" value="15m"/>
-        <!-- b/137298570: a known modem issue with new tests (waiver) -->
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_InvalidInterval1" />
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_InvalidInterval2" />
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_InvalidMaxSearchTime1" />
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_InvalidMaxSearchTime2" />
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_InvalidPeriodicity1" />
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_InvalidPeriodicity2" />
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_GoodRequest1" />
-        <option name="exclude-filter" value="RadioHidlTest_v1_4.startNetworkScan_GoodRequest2" />
     </test>
 </configuration>
