diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java
index 1d87121..ea6d37e 100755
--- a/service/src/com/android/server/ConnectivityService.java
+++ b/service/src/com/android/server/ConnectivityService.java
@@ -79,8 +79,6 @@
 import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH;
-import static android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
 import static android.net.NetworkCapabilities.NET_ENTERPRISE_ID_1;
@@ -1925,8 +1923,6 @@
         final NetworkCapabilities netCap = new NetworkCapabilities();
         netCap.addCapability(NET_CAPABILITY_INTERNET);
         netCap.addCapability(NET_CAPABILITY_NOT_VCN_MANAGED);
-        netCap.addForbiddenCapability(NET_CAPABILITY_PRIORITIZE_LATENCY);
-        netCap.addForbiddenCapability(NET_CAPABILITY_PRIORITIZE_BANDWIDTH);
         netCap.setRequestorUidAndPackageName(Process.myUid(), mContext.getPackageName());
         if (transportType > TYPE_NONE) {
             netCap.addTransportType(transportType);
diff --git a/tests/unit/java/com/android/server/connectivityservice/CSDefaultNetworkTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSDefaultNetworkTest.kt
deleted file mode 100644
index 4d214d0..0000000
--- a/tests/unit/java/com/android/server/connectivityservice/CSDefaultNetworkTest.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.android.server.connectivityservice
-
-import android.net.NetworkCapabilities
-import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED
-import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED
-import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED
-import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
-import android.net.NetworkRequest
-import android.os.Build
-import com.android.server.CSTest
-import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
-import com.android.testutils.DevSdkIgnoreRunner
-import com.android.testutils.RecorderCallback.CallbackEntry.Lost
-import com.android.testutils.TestableNetworkCallback
-import org.junit.Test
-import org.junit.runner.RunWith
-import kotlin.test.assertNull
-import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET as NET_CAP_INTERNET
-import android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH as NET_CAP_PRIO_BW
-
-private fun netCaps(transport: Int, vararg cap: Int): NetworkCapabilities =
-        NetworkCapabilities.Builder().apply {
-            addTransportType(transport)
-            // Standard caps that everybody in this test file needs
-            addCapability(NET_CAPABILITY_NOT_SUSPENDED)
-            addCapability(NET_CAPABILITY_NOT_VCN_MANAGED)
-            addCapability(NET_CAPABILITY_NOT_RESTRICTED)
-            cap.forEach { addCapability(it) }
-        }.build()
-
-@RunWith(DevSdkIgnoreRunner::class)
-@IgnoreUpTo(Build.VERSION_CODES.R)
-class CSDefaultNetworkTest : CSTest() {
-    @Test
-    fun testSlicesAreNotDefault() {
-        val keepSliceUpRequest = NetworkRequest.Builder().clearCapabilities()
-                .addCapability(NET_CAP_PRIO_BW)
-                .build()
-        val keepSliceUpCb = TestableNetworkCallback()
-        cm.requestNetwork(keepSliceUpRequest, keepSliceUpCb)
-
-        val nonSlice = Agent(nc = netCaps(TRANSPORT_CELLULAR, NET_CAP_INTERNET))
-        val slice = Agent(nc = netCaps(TRANSPORT_CELLULAR, NET_CAP_INTERNET, NET_CAP_PRIO_BW))
-
-        val allCb = TestableNetworkCallback()
-        val bestCb = TestableNetworkCallback()
-        val defaultCb = TestableNetworkCallback()
-        val allNetRequest = NetworkRequest.Builder().clearCapabilities().build()
-        cm.registerNetworkCallback(allNetRequest, allCb)
-        cm.registerBestMatchingNetworkCallback(allNetRequest, bestCb, csHandler)
-        cm.registerDefaultNetworkCallback(defaultCb)
-        nonSlice.connect()
-
-        allCb.expectAvailableCallbacks(nonSlice.network, validated = false)
-        keepSliceUpCb.assertNoCallback()
-        bestCb.expectAvailableCallbacks(nonSlice.network, validated = false)
-        defaultCb.expectAvailableCallbacks(nonSlice.network, validated = false)
-
-        slice.connect()
-        allCb.expectAvailableCallbacks(slice.network, validated = false)
-        keepSliceUpCb.expectAvailableCallbacks(slice.network, validated = false)
-        bestCb.assertNoCallback()
-        defaultCb.assertNoCallback()
-
-        nonSlice.disconnect()
-        allCb.expect<Lost>(nonSlice.network)
-        bestCb.expect<Lost>(nonSlice.network)
-        bestCb.expectAvailableCallbacks(slice.network, validated = false)
-        defaultCb.expect<Lost>(nonSlice.network)
-
-        allCb.assertNoCallback()
-        keepSliceUpCb.assertNoCallback()
-        bestCb.assertNoCallback()
-        defaultCb.assertNoCallback()
-
-        assertNull(cm.activeNetwork)
-    }
-}
diff --git a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt
index 6f5c2ba..4f5cfc0 100644
--- a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt
+++ b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt
@@ -116,8 +116,7 @@
     init {
         if (!SdkLevel.isAtLeastS()) {
             throw UnsupportedApiLevelException("CSTest subclasses must be annotated to only " +
-                    "run on S+, e.g. @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R) and " +
-                    "@RunWith(DevSdkIgnoreRunner::class)")
+                    "run on S+, e.g. @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)")
         }
     }
 
