diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
index e8697be..abcfb22 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2009 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
 
 package android.net.cts;
 
+import dalvik.annotation.BrokenTest;
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
 import dalvik.annotation.TestTargetNew;
@@ -31,13 +32,15 @@
 @TestTargetClass(ConnectivityManager.class)
 public class ConnectivityManagerTest extends AndroidTestCase {
 
+    public static final int TYPE_MOBILE = ConnectivityManager.TYPE_MOBILE;
+    public static final int TYPE_WIFI = ConnectivityManager.TYPE_WIFI;
     private static final int HOST_ADDRESS = 0x7f000001;// represent ip 127.0.0.1
     private ConnectivityManager mCm;
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        mCm = (ConnectivityManager) getContext().getSystemService(
-                Context.CONNECTIVITY_SERVICE);
+        mCm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
     }
 
     @TestTargetNew(
@@ -98,17 +101,16 @@
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "",
             method = "getNetworkPreference",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "",
             method = "setNetworkPreference",
             args = {int.class}
         )
     })
+    @BrokenTest("Cannot write secure settings table")
     public void testAccessNetworkPreference() {
 
         final int expected = 1;
@@ -150,15 +152,11 @@
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test startUsingNetworkFeature(int networkType, String feature)."
-                    + "Only test failure case.",
             method = "startUsingNetworkFeature",
             args = {int.class, java.lang.String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test stopUsingNetworkFeature(int networkType, String feature)."
-                    + "Only test failure case.",
             method = "stopUsingNetworkFeature",
             args = {int.class, java.lang.String.class}
         )
@@ -166,20 +164,15 @@
     public void testStartUsingNetworkFeature() {
 
         final String invalidateFeature = "invalidateFeature";
-        // TODO: MMS feature string is not public
         final String mmsFeature = "enableMMS";
         final int failureCode = -1;
 
-        assertEquals(failureCode, mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
-                invalidateFeature));
-        assertEquals(failureCode, mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
-                invalidateFeature));
+        assertEquals(failureCode, mCm.startUsingNetworkFeature(TYPE_MOBILE, invalidateFeature));
+        assertEquals(failureCode, mCm.stopUsingNetworkFeature(TYPE_MOBILE, invalidateFeature));
 
         // Should return failure(-1) because MMS is not supported on WIFI.
-        assertEquals(failureCode, 
-                mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_WIFI, mmsFeature));
-        assertEquals(failureCode, 
-                mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_WIFI, mmsFeature));
+        assertEquals(failureCode, mCm.startUsingNetworkFeature(TYPE_WIFI, mmsFeature));
+        assertEquals(failureCode, mCm.stopUsingNetworkFeature(TYPE_WIFI, mmsFeature));
     }
 
     @TestTargetNew(
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
index ea1e047..2c3d73c 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
@@ -73,7 +73,6 @@
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isConnectedOrConnecting().",
             method = "isConnected",
             args = {}
         ),
@@ -114,32 +113,47 @@
         assertFalse(ni[TYPE_WIFI].isFailover());
 
         // test environment:connect as TYPE_MOBILE, and connect to internet.
-        assertEquals(ni[TYPE_MOBILE].getType(), TYPE_MOBILE);
-        assertEquals(ni[TYPE_WIFI].getType(), TYPE_WIFI);
+        assertEquals(TYPE_MOBILE, ni[TYPE_MOBILE].getType());
+        assertEquals(TYPE_WIFI, ni[TYPE_WIFI].getType());
 
         assertEquals(MOBILE_TYPE_NAME, ni[TYPE_MOBILE].getTypeName());
         assertEquals(WIFI_TYPE_NAME, ni[TYPE_WIFI].getTypeName());
 
-        assertTrue(ni[TYPE_MOBILE].isConnectedOrConnecting());
-        assertFalse(ni[TYPE_WIFI].isConnectedOrConnecting());
+        if(ni[TYPE_MOBILE].isConnectedOrConnecting()) {
+            assertTrue(ni[TYPE_MOBILE].isAvailable());
+            assertTrue(ni[TYPE_MOBILE].isConnected());
+            assertEquals(State.CONNECTED, ni[TYPE_MOBILE].getState());
+            assertEquals(DetailedState.CONNECTED, ni[TYPE_MOBILE].getDetailedState());
+            assertNotNull(ni[TYPE_MOBILE].getReason());
+            assertNotNull(ni[TYPE_MOBILE].getExtraInfo());
+        } else {
+            assertFalse(ni[TYPE_MOBILE].isAvailable());
+            assertFalse(ni[TYPE_MOBILE].isConnected());
 
-        assertTrue(ni[TYPE_MOBILE].isAvailable());
-        assertFalse(ni[TYPE_WIFI].isAvailable());
+            // mobile state is undefined
 
-        assertTrue(ni[TYPE_MOBILE].isConnected());
-        assertFalse(ni[TYPE_WIFI].isConnected());
+            assertEquals(DetailedState.IDLE, ni[TYPE_MOBILE].getDetailedState());
+            assertNull(ni[TYPE_MOBILE].getReason());
+            assertNull(ni[TYPE_MOBILE].getExtraInfo());
+        }
 
-        assertEquals(State.CONNECTED, ni[TYPE_MOBILE].getState());
-        assertEquals(State.UNKNOWN, ni[TYPE_WIFI].getState());
+        if(ni[TYPE_WIFI].isConnectedOrConnecting()) {
+            assertTrue(ni[TYPE_WIFI].isAvailable());
+            assertTrue(ni[TYPE_WIFI].isConnected());
+            assertEquals(State.CONNECTED, ni[TYPE_WIFI].getState());
+            assertEquals(DetailedState.CONNECTED, ni[TYPE_WIFI].getDetailedState());
+            assertNotNull(ni[TYPE_WIFI].getReason());
+            assertNotNull(ni[TYPE_WIFI].getExtraInfo());
+        } else {
+            assertFalse(ni[TYPE_WIFI].isAvailable());
+            assertFalse(ni[TYPE_WIFI].isConnected());
 
-        assertEquals(DetailedState.CONNECTED, ni[TYPE_MOBILE].getDetailedState());
-        assertEquals(DetailedState.IDLE, ni[TYPE_WIFI].getDetailedState());
+            // wifi state is undefined
 
-        assertNotNull(ni[TYPE_MOBILE].getReason());
-        assertNull(ni[TYPE_WIFI].getReason());
-
-        assertNotNull(ni[TYPE_MOBILE].getExtraInfo());
-        assertNull(ni[TYPE_WIFI].getExtraInfo());
+            assertEquals(DetailedState.IDLE, ni[TYPE_WIFI].getDetailedState());
+            assertNull(ni[TYPE_WIFI].getReason());
+            assertNull(ni[TYPE_WIFI].getExtraInfo());
+        }
 
         assertNotNull(ni[TYPE_MOBILE].toString());
         assertNotNull(ni[TYPE_WIFI].toString());
diff --git a/tests/cts/net/src/android/net/cts/ProxyTest.java b/tests/cts/net/src/android/net/cts/ProxyTest.java
index fd25084..357935a 100644
--- a/tests/cts/net/src/android/net/cts/ProxyTest.java
+++ b/tests/cts/net/src/android/net/cts/ProxyTest.java
@@ -20,9 +20,9 @@
 import android.net.Proxy;
 import android.provider.Settings.Secure;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
+
+import dalvik.annotation.BrokenTest;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestTargetClass;
 import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestTargets;
@@ -31,31 +31,16 @@
 public class ProxyTest extends AndroidTestCase {
 
     private Context mContext;
-    private String mOriginHost;
-    private int mOriginPort;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
 
         mContext = getContext();
-        mOriginHost = Proxy.getHost(mContext);
-        mOriginPort = Proxy.getPort(mContext);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        // Secure.putString should run only on device
-        Secure.putString(mContext.getContentResolver(),
-                         Secure.HTTP_PROXY,
-                         mOriginHost + ":" + mOriginPort);
-
-        super.tearDown();
     }
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test constructor(s) of Proxy.",
         method = "Proxy",
         args = {}
     )
@@ -85,6 +70,7 @@
             args = {Context.class}
         )
     })
+    @BrokenTest("Cannot write secure settings table")
     public void testAccessProperties() {
         final int minValidPort = 0;
         final int maxValidPort = 65535;
@@ -98,7 +84,6 @@
         final String host = "proxy.example.com";
         final int port = 2008;
 
-        // Secure.putString should run only on device
         Secure.putString(mContext.getContentResolver(), Secure.HTTP_PROXY, host + ":" + port);
         assertEquals(host, Proxy.getHost(mContext));
         assertEquals(port, Proxy.getPort(mContext));
