diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java
index 360257a..2b7dd39 100644
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java
@@ -76,11 +76,12 @@
     protected ConnectivityManager mCm;
     protected WifiManager mWfm;
     protected int mUid;
-    private boolean mResetMeteredWifi = false;
+    private String mMeteredWifi;
 
     @Override
     public void setUp() throws Exception {
         super.setUp();
+
         mInstrumentation = getInstrumentation();
         mContext = mInstrumentation.getContext();
         mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -93,15 +94,6 @@
                 + "\tapp2: uid=" + mUid + ", state=" + getProcessStateByUid(mUid));
    }
 
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-
-        if (mResetMeteredWifi) {
-            setWifiMeteredStatus(false);
-        }
-    }
-
     protected int getUid(String packageName) throws Exception {
         return mContext.getPackageManager().getPackageUid(packageName, 0);
     }
@@ -289,12 +281,21 @@
         final String netId = setWifiMeteredStatus(true);
         assertTrue("Could not set wifi '" + netId + "' as metered ("
                 + mCm.getActiveNetworkInfo() +")", mCm.isActiveNetworkMetered());
-        // Set flag so status is reverted on teardown.
-        mResetMeteredWifi = true;
+        // Set flag so status is reverted on resetMeteredNetwork();
+        mMeteredWifi = netId;
         // Sanity check.
         assertMeteredNetwork(netId, true);
     }
 
+    protected void resetMeteredNetwork() throws Exception {
+        if (mMeteredWifi == null) {
+            Log.d(TAG, "resetMeteredNetwork(): wifi not set as metered");
+            return;
+        }
+        Log.i(TAG, "resetMeteredNetwork(): resetting " + mMeteredWifi);
+        setWifiMeteredStatus(mMeteredWifi, false);
+    }
+
     private String setWifiMeteredStatus(boolean metered) throws Exception {
         // We could call setWifiEnabled() here, but it might take sometime to be in a consistent
         // state (for example, if one of the saved network is not properly authenticated), so it's
@@ -303,6 +304,10 @@
         // TODO: if it's not guaranteed the device has wi-fi, we need to change the tests
         // to make the actual verification of restrictions optional.
         final String ssid = mWfm.getConnectionInfo().getSSID();
+        return setWifiMeteredStatus(ssid, metered);
+    }
+
+    private String setWifiMeteredStatus(String ssid, boolean metered) throws Exception {
         assertNotNull("null SSID", ssid);
         final String netId = ssid.trim().replaceAll("\"", ""); // remove quotes, if any.
         assertFalse("empty SSID", ssid.isEmpty());
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java
index 6a8540a..d1217b4 100644
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java
@@ -33,7 +33,11 @@
     protected void tearDown() throws Exception {
         super.tearDown();
 
-        setPowerSaveMode(false);
+        try {
+            resetMeteredNetwork();
+        } finally {
+            setPowerSaveMode(false);
+        }
     }
 
     public void testBackgroundNetworkAccess_enabled() throws Exception {
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java
index ff68090..62f670e 100644
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java
@@ -44,7 +44,11 @@
     protected void tearDown() throws Exception {
         super.tearDown();
 
-        setRestrictBackground(false);
+        try {
+            resetMeteredNetwork();
+        } finally {
+            setRestrictBackground(false);
+        }
     }
 
     public void testGetRestrictBackgroundStatus_disabled() throws Exception {
diff --git a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
index ab1b7d6..39b5652 100644
--- a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
+++ b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
@@ -63,7 +63,7 @@
         assertNotNull(mAbi);
         assertNotNull(mCtsBuild);
 
-        assertTrue("device not connected to network", getDevice().checkConnectivity());
+        assertTrue("wi-fi not enabled", getDevice().isWifiEnabled());
 
         uninstallPackage(TEST_PKG, false);
         installPackage(TEST_APK);
