diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
index abcfb22..a8a149f 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -16,11 +16,11 @@
 
 package android.net.cts;
 
-import dalvik.annotation.BrokenTest;
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
 import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestTargets;
+import dalvik.annotation.ToBeFixed;
 
 import android.content.Context;
 import android.net.ConnectivityManager;
@@ -45,7 +45,6 @@
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test getNetworkInfo(int networkType).",
         method = "getNetworkInfo",
         args = {int.class}
     )
@@ -77,13 +76,11 @@
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isNetworkTypeValid(int networkType).",
             method = "isNetworkTypeValid",
             args = {int.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test isNetworkTypeValid(int networkType).",
             method = "getAllNetworkInfo",
             args = {}
         )
@@ -105,33 +102,58 @@
             args = {}
         ),
         @TestTargetNew(
-            level = TestLevel.COMPLETE,
+            level = TestLevel.SUFFICIENT,
             method = "setNetworkPreference",
             args = {int.class}
         )
     })
-    @BrokenTest("Cannot write secure settings table")
     public void testAccessNetworkPreference() {
+        int initialSetting = mCm.getNetworkPreference();
 
-        final int expected = 1;
-        int per = mCm.getNetworkPreference();
-        mCm.setNetworkPreference(expected);
-        assertEquals(expected, mCm.getNetworkPreference());
+        // Changing the network preference requires android.permission.WRITE_SECURE_SETTINGS,
+        // which is only available to signed or system applications.
 
-        mCm.setNetworkPreference(0);
-        assertEquals(0, mCm.getNetworkPreference());
+        // Setting the same preference that is already set is a no-op and does not throw
+        // a SecurityException.
+        mCm.setNetworkPreference(initialSetting);
+        assertEquals(initialSetting, mCm.getNetworkPreference());
 
+        // find a valid setting that is different from the initial setting
+        int validSetting = -1;
+        NetworkInfo[] ni = mCm.getAllNetworkInfo();
+        for (NetworkInfo n : ni) {
+            int type = n.getType();
+            if (type != initialSetting) {
+                validSetting = type;
+                break;
+            }
+        }
+        if (validSetting >= 0) {
+            try {
+                mCm.setNetworkPreference(validSetting);
+                fail("Trying to change the network preference should throw SecurityException");
+            } catch (SecurityException expected) {
+                // expected
+            }
+        }
+
+        // find an invalid setting
+        int invalidSetting = -1;
+        for (int i = 0; i < 10; i++) {
+            if (!ConnectivityManager.isNetworkTypeValid(i)) {
+                invalidSetting = i;
+                break;
+            }
+        }
+        if (invalidSetting >= 0) {
+            // illegal setting should be ignored
+            mCm.setNetworkPreference(invalidSetting);
+            assertEquals(initialSetting, mCm.getNetworkPreference());
+        }
+
+        // illegal setting should be ignored
         mCm.setNetworkPreference(-1);
-        assertEquals(0, mCm.getNetworkPreference());
-
-        mCm.setNetworkPreference(2);
-        assertEquals(0, mCm.getNetworkPreference());
-
-        mCm.setNetworkPreference(1);
-
-        assertEquals(1, mCm.getNetworkPreference());
-
-        mCm.setNetworkPreference(per);
+        assertEquals(initialSetting, mCm.getNetworkPreference());
     }
 
     @TestTargetNew(
@@ -177,7 +199,6 @@
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test requestRouteToHost(int networkType, int hostAddress).",
         method = "requestRouteToHost",
         args = {int.class, int.class}
     )
@@ -193,18 +214,24 @@
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test getActiveNetworkInfo().",
         method = "getActiveNetworkInfo",
         args = {}
     )
+    @ToBeFixed(bug="1695243", explanation="No Javadoc")
     public void testGetActiveNetworkInfo() {
-
         NetworkInfo ni = mCm.getActiveNetworkInfo();
+
         if (ni != null) {
             assertTrue(ni.getType() >= 0);
-        } else {
-            fail("There is no active network connected, should be at least one kind of network");
         }
     }
 
+    @TestTargetNew(
+        level = TestLevel.SUFFICIENT,
+        method = "getBackgroundDataSetting",
+        args = {}
+    )
+    public void testTest() {
+        mCm.getBackgroundDataSetting();
+    }
 }
diff --git a/tests/cts/net/src/android/net/cts/CredentialsTest.java b/tests/cts/net/src/android/net/cts/CredentialsTest.java
index fe65805..6cf8c23 100644
--- a/tests/cts/net/src/android/net/cts/CredentialsTest.java
+++ b/tests/cts/net/src/android/net/cts/CredentialsTest.java
@@ -29,25 +29,21 @@
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test constructor of Credentials, and test getGid, getPid, getUid.",
             method = "Credentials",
             args = {int.class, int.class, int.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test constructor of Credentials, and test getGid, getPid, getUid.",
             method = "getGid",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test constructor of Credentials, and test getGid, getPid, getUid.",
             method = "getPid",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test constructor of Credentials, and test getGid, getPid, getUid.",
             method = "getUid",
             args = {}
         )
diff --git a/tests/cts/net/src/android/net/cts/DhcpInfoTest.java b/tests/cts/net/src/android/net/cts/DhcpInfoTest.java
index 1a1ad47..97bd27a 100644
--- a/tests/cts/net/src/android/net/cts/DhcpInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/DhcpInfoTest.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.
@@ -18,10 +18,9 @@
 
 import android.net.DhcpInfo;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
 
 @TestTargetClass(DhcpInfo.class)
 public class DhcpInfoTest extends AndroidTestCase {
diff --git a/tests/cts/net/src/android/net/cts/LocalServerSocketTest.java b/tests/cts/net/src/android/net/cts/LocalServerSocketTest.java
index 07f29c6..21c7d5e 100644
--- a/tests/cts/net/src/android/net/cts/LocalServerSocketTest.java
+++ b/tests/cts/net/src/android/net/cts/LocalServerSocketTest.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.
@@ -15,58 +15,50 @@
  */
 package android.net.cts;
 
-import java.io.FileDescriptor;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.Socket;
 import android.net.LocalServerSocket;
 import android.net.LocalSocket;
 import android.net.LocalSocketAddress;
-import android.os.ParcelFileDescriptor;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.ToBeFixed;
 
 @TestTargetClass(LocalServerSocket.class)
 public class LocalServerSocketTest extends AndroidTestCase {
+
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "test LocalServerSocket",
             method = "accept",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "test LocalServerSocket",
             method = "close",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "test LocalServerSocket",
             method = "getFileDescriptor",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "test LocalServerSocket",
             method = "getLocalSocketAddress",
             args = {}
         ),
         @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test LocalServerSocket",
+            level = TestLevel.NOT_FEASIBLE,
             method = "LocalServerSocket",
             args = {java.io.FileDescriptor.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "test LocalServerSocket",
             method = "LocalServerSocket",
             args = {java.lang.String.class}
         )
@@ -77,15 +69,6 @@
         LocalServerSocket localServerSocket = new LocalServerSocket(LocalSocketTest.mSockAddr);
         assertNotNull(localServerSocket.getLocalSocketAddress());
         commonFunctions(localServerSocket);
-
-        Socket socket = new Socket("www.google.com", 80);
-        ParcelFileDescriptor parcelFD = ParcelFileDescriptor.fromSocket(socket);
-        FileDescriptor fd = parcelFD.getFileDescriptor();
-
-        // enable the following after bug 1520987 fixed
-//        localServerSocket = new LocalServerSocket(fd);
-//        assertNull(localServerSocket.getLocalSocketAddress());
-//        commonFunctions(localServerSocket);
     }
 
     public void commonFunctions(LocalServerSocket localServerSocket) throws IOException {
diff --git a/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java b/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java
index 75232c4..e3141d5 100644
--- a/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java
+++ b/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java
@@ -27,11 +27,6 @@
 @TestTargetClass(LocalSocketAddress.class)
 public class LocalSocketAddressTest extends AndroidTestCase {
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
@@ -65,17 +60,17 @@
         assertEquals(Namespace.ABSTRACT, localSocketAddress.getNamespace());
 
         // specify the namespace
-        LocalSocketAddress localSocketAddress2 = 
+        LocalSocketAddress localSocketAddress2 =
                 new LocalSocketAddress("name2", Namespace.ABSTRACT);
         assertEquals("name2", localSocketAddress2.getName());
         assertEquals(Namespace.ABSTRACT, localSocketAddress2.getNamespace());
 
-        LocalSocketAddress localSocketAddress3 = 
+        LocalSocketAddress localSocketAddress3 =
                 new LocalSocketAddress("name3", Namespace.FILESYSTEM);
         assertEquals("name3", localSocketAddress3.getName());
         assertEquals(Namespace.FILESYSTEM, localSocketAddress3.getNamespace());
 
-        LocalSocketAddress localSocketAddress4 = 
+        LocalSocketAddress localSocketAddress4 =
                 new LocalSocketAddress("name4", Namespace.RESERVED);
         assertEquals("name4", localSocketAddress4.getName());
         assertEquals(Namespace.RESERVED, localSocketAddress4.getNamespace());
diff --git a/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.java b/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.java
index 5d29c81..fc9de5b 100644
--- a/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.java
+++ b/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.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.
@@ -18,19 +18,13 @@
 
 import android.net.LocalSocketAddress.Namespace;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
 import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
 
 @TestTargetClass(Namespace.class)
 public class LocalSocketAddress_NamespaceTest extends AndroidTestCase {
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
     @TestTargetNew(
         level = TestLevel.COMPLETE,
         notes = "Test valueOf(String name).",
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
index 2c3d73c..d2de4e4 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
@@ -53,16 +53,31 @@
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
+            method = "isRoaming",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
             method = "getType",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
+            method = "getSubtype",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
             method = "getTypeName",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
+            method = "getSubtypeName",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
             method = "setIsAvailable",
             args = {boolean.class}
         ),
@@ -116,25 +131,24 @@
         assertEquals(TYPE_MOBILE, ni[TYPE_MOBILE].getType());
         assertEquals(TYPE_WIFI, ni[TYPE_WIFI].getType());
 
+        // don't know the return value
+        ni[TYPE_MOBILE].getSubtype();
+        ni[TYPE_WIFI].getSubtype();
+
         assertEquals(MOBILE_TYPE_NAME, ni[TYPE_MOBILE].getTypeName());
         assertEquals(WIFI_TYPE_NAME, ni[TYPE_WIFI].getTypeName());
 
+        // don't know the return value
+        ni[TYPE_MOBILE].getSubtypeName();
+        ni[TYPE_WIFI].getSubtypeName();
+
         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());
-
-            // mobile state is undefined
-
-            assertEquals(DetailedState.IDLE, ni[TYPE_MOBILE].getDetailedState());
-            assertNull(ni[TYPE_MOBILE].getReason());
-            assertNull(ni[TYPE_MOBILE].getExtraInfo());
+            ni[TYPE_MOBILE].getReason();
+            ni[TYPE_MOBILE].getExtraInfo();
         }
 
         if(ni[TYPE_WIFI].isConnectedOrConnecting()) {
@@ -142,19 +156,13 @@
             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());
-
-            // wifi state is undefined
-
-            assertEquals(DetailedState.IDLE, ni[TYPE_WIFI].getDetailedState());
-            assertNull(ni[TYPE_WIFI].getReason());
-            assertNull(ni[TYPE_WIFI].getExtraInfo());
+            ni[TYPE_WIFI].getReason();
+            ni[TYPE_WIFI].getExtraInfo();
         }
 
+        assertFalse(ni[TYPE_MOBILE].isRoaming());
+        assertFalse(ni[TYPE_WIFI].isRoaming());
+
         assertNotNull(ni[TYPE_MOBILE].toString());
         assertNotNull(ni[TYPE_WIFI].toString());
     }
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.java b/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.java
index 0e05b28..196e102 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.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.
@@ -18,19 +18,13 @@
 
 import android.net.NetworkInfo.DetailedState;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
 
 @TestTargetClass(DetailedState.class)
 public class NetworkInfo_DetailedStateTest extends AndroidTestCase {
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
     @TestTargetNew(
         level = TestLevel.COMPLETE,
         notes = "Test valueOf(String name).",
@@ -38,23 +32,16 @@
         args = {java.lang.String.class}
     )
     public void testValueOf() {
-        assertEquals(DetailedState.AUTHENTICATING, DetailedState
-                .valueOf("AUTHENTICATING"));
-        assertEquals(DetailedState.CONNECTED, DetailedState
-                .valueOf("CONNECTED"));
-        assertEquals(DetailedState.CONNECTING, DetailedState
-                .valueOf("CONNECTING"));
-        assertEquals(DetailedState.DISCONNECTED, DetailedState
-                .valueOf("DISCONNECTED"));
-        assertEquals(DetailedState.DISCONNECTING, DetailedState
-                .valueOf("DISCONNECTING"));
+        assertEquals(DetailedState.AUTHENTICATING, DetailedState.valueOf("AUTHENTICATING"));
+        assertEquals(DetailedState.CONNECTED, DetailedState.valueOf("CONNECTED"));
+        assertEquals(DetailedState.CONNECTING, DetailedState.valueOf("CONNECTING"));
+        assertEquals(DetailedState.DISCONNECTED, DetailedState.valueOf("DISCONNECTED"));
+        assertEquals(DetailedState.DISCONNECTING, DetailedState.valueOf("DISCONNECTING"));
         assertEquals(DetailedState.FAILED, DetailedState.valueOf("FAILED"));
         assertEquals(DetailedState.IDLE, DetailedState.valueOf("IDLE"));
-        assertEquals(DetailedState.OBTAINING_IPADDR, DetailedState
-                .valueOf("OBTAINING_IPADDR"));
+        assertEquals(DetailedState.OBTAINING_IPADDR, DetailedState.valueOf("OBTAINING_IPADDR"));
         assertEquals(DetailedState.SCANNING, DetailedState.valueOf("SCANNING"));
-        assertEquals(DetailedState.SUSPENDED, DetailedState
-                .valueOf("SUSPENDED"));
+        assertEquals(DetailedState.SUSPENDED, DetailedState.valueOf("SUSPENDED"));
     }
 
     @TestTargetNew(
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.java b/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.java
index 249df4b..1a51acd 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.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,21 +16,15 @@
 
 package android.net.cts;
 
+import android.net.NetworkInfo.State;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
-import android.net.NetworkInfo.State;
+import dalvik.annotation.TestTargetNew;
 
 @TestTargetClass(State.class)
 public class NetworkInfo_StateTest extends AndroidTestCase {
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
     @TestTargetNew(
         level = TestLevel.COMPLETE,
         notes = "Test valueOf(String name).",
@@ -62,5 +56,4 @@
         assertEquals(State.DISCONNECTED, expected[4]);
         assertEquals(State.UNKNOWN, expected[5]);
     }
-
 }
diff --git a/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java b/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
index e9ae95c..0dd5db1 100644
--- a/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
+++ b/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
@@ -49,189 +49,168 @@
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test constructor(s) of {@link UrlQuerySanitizer}",
             method = "UrlQuerySanitizer",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test constructor(s) of {@link UrlQuerySanitizer}",
             method = "UrlQuerySanitizer",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: parseUrl",
             method = "parseUrl",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: parseQuery",
             method = "parseQuery",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: parseEntry",
             method = "parseEntry",
             args = {String.class, String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getValue",
             method = "getValue",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: addSanitizedEntry",
             method = "addSanitizedEntry",
             args = {String.class, String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: hasParameter",
             method = "hasParameter",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getParameterSet",
             method = "getParameterSet",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getParameterList",
             method = "getParameterList",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: setUnregisteredParameterValueSanitizer",
             method = "setUnregisteredParameterValueSanitizer",
             args = {ValueSanitizer.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getUnregisteredParameterValueSanitizer",
             method = "getUnregisteredParameterValueSanitizer",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getAllButNulAndAngleBracketsLegal",
             method = "getAllButNulAndAngleBracketsLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getAllButNulLegal",
             method = "getAllButNulLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getAllButWhitespaceLegal",
             method = "getAllButWhitespaceLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getAllIllegal",
             method = "getAllIllegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getAmpAndSpaceLegal",
             method = "getAmpAndSpaceLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getAmpLegal",
             method = "getAmpLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getSpaceLegal",
             method = "getSpaceLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getUrlAndSpaceLegal",
             method = "getUrlAndSpaceLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getUrlLegal",
             method = "getUrlLegal",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test mehtod: unescape",
             method = "unescape",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test mehtod: isHexDigit",
             method = "isHexDigit",
             args = {char.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test mehtod: decodeHexDigit",
             method = "decodeHexDigit",
             args = {char.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: setAllowUnregisteredParamaters",
             method = "setAllowUnregisteredParamaters",
             args = {boolean.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getAllowUnregisteredParamaters",
             method = "getAllowUnregisteredParamaters",
             args = {}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: registerParameter",
             method = "registerParameter",
             args = {String.class, ValueSanitizer.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: registerParameters",
             method = "registerParameters",
             args = {String[].class, ValueSanitizer.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getEffectiveValueSanitizer",
             method = "getEffectiveValueSanitizer",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: getValueSanitizer",
             method = "getValueSanitizer",
             args = {String.class}
         ),
         @TestTargetNew(
             level = TestLevel.COMPLETE,
-            notes = "Test method: clear",
             method = "clear",
             args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setPreferFirstRepeatedParameter",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getPreferFirstRepeatedParameter",
+            args = {}
         )
     })
     public void testUrlQuerySanitizer() {
@@ -377,6 +356,30 @@
         uqs.clear();
         assertEquals(0, urlSet.size());
         assertEquals(0, urlList.size());
+
+        uqs.setPreferFirstRepeatedParameter(true);
+        assertTrue(uqs.getPreferFirstRepeatedParameter());
+        uqs.setPreferFirstRepeatedParameter(false);
+        assertFalse(uqs.getPreferFirstRepeatedParameter());
+
+        UrlQuerySanitizer uq = new UrlQuerySanitizer();
+        uq.setPreferFirstRepeatedParameter(true);
+        final String PARA_ANSWER = "answer";
+        uq.registerParameter(PARA_ANSWER, new MockValueSanitizer());
+        uq.parseUrl("http://www.google.com/question?answer=13&answer=42");
+        assertEquals("13", uq.getValue(PARA_ANSWER));
+
+        uq.setPreferFirstRepeatedParameter(false);
+        uq.parseQuery("http://www.google.com/question?answer=13&answer=42");
+        assertEquals("42", uq.getValue(PARA_ANSWER));
+
+    }
+
+    private static class MockValueSanitizer implements ValueSanitizer{
+
+        public String sanitize(String value) {
+            return value;
+        }
     }
 
     class MockUrlQuerySanitizer extends UrlQuerySanitizer {
