diff --git a/utils/misc/src/test/java/org/onlab/util/ExtendedSetTest.java b/utils/misc/src/test/java/org/onlab/util/ExtendedSetTest.java
index b647cb9..f1573d0 100644
--- a/utils/misc/src/test/java/org/onlab/util/ExtendedSetTest.java
+++ b/utils/misc/src/test/java/org/onlab/util/ExtendedSetTest.java
@@ -78,7 +78,7 @@
     public void testIsEmpty() {
         ExtendedSet<TestValue> nonemptyset = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(nonemptyset.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(nonemptyset.add(val));
         assertTrue(nonemptyset.contains(val));
         assertFalse(nonemptyset.isEmpty());
 
@@ -91,7 +91,7 @@
     public void testClear() {
         ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(set.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(set.add(val));
         assertTrue(set.contains(val));
         set.clear();
         assertFalse(set.contains(val));
@@ -101,11 +101,11 @@
     public void testSize() {
         ExtendedSet<TestValue> nonemptyset = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(nonemptyset.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(nonemptyset.add(val));
         assertTrue(nonemptyset.contains(val));
         assertEquals(1, nonemptyset.size());
         TestValue secval = new TestValue("goo", 2);
-        assertTrue(nonemptyset.insertOrReplace(secval, existing -> existing.value2() < secval.value2()));
+        assertTrue(nonemptyset.add(secval));
         assertTrue(nonemptyset.contains(secval));
         assertEquals(2, nonemptyset.size());
 
@@ -117,9 +117,9 @@
     public void testIterator() {
         ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(set.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(set.add(val));
         TestValue nextval = new TestValue("goo", 2);
-        assertTrue(set.insertOrReplace(nextval, existing -> existing.value2() < nextval.value2()));
+        assertTrue(set.add(nextval));
         assertTrue(set.contains(nextval));
         Iterator<TestValue> iterator = set.iterator();
         assertEquals(val, iterator.next());
@@ -131,9 +131,9 @@
     public void testToArray() {
         ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(set.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(set.add(val));
         TestValue nextval = new TestValue("goo", 2);
-        assertTrue(set.insertOrReplace(nextval, existing -> existing.value2() < nextval.value2()));
+        assertTrue(set.add(nextval));
         Object[] array = set.toArray();
         TestValue[] valarray = {val, nextval};
         assertArrayEquals(valarray, array);
@@ -145,9 +145,9 @@
     public void testContainsAll() {
         ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(set.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(set.add(val));
         TestValue nextval = new TestValue("goo", 2);
-        assertTrue(set.insertOrReplace(nextval, existing -> existing.value2() < nextval.value2()));
+        assertTrue(set.add(nextval));
         ArrayList<TestValue> vals = new ArrayList<TestValue>();
         vals.add(val);
         vals.add(nextval);
@@ -158,9 +158,9 @@
     public void testRemove() {
         ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(set.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(set.add(val));
         TestValue nextval = new TestValue("goo", 2);
-        assertTrue(set.insertOrReplace(nextval, existing -> existing.value2() < nextval.value2()));
+        assertTrue(set.add(nextval));
         assertTrue(set.remove(val));
         assertFalse(set.contains(val));
         assertTrue(set.remove(nextval));
@@ -171,12 +171,15 @@
     public void testAddAll() {
         ExtendedSet<TestValue> nonemptyset = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(nonemptyset.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(nonemptyset.add(val));
         TestValue nextval = new TestValue("goo", 2);
         TestValue finalval = new TestValue("shoo", 3);
+        TestValue extremeval = new TestValue("who", 4);
+        assertTrue(nonemptyset.add(extremeval));
         ArrayList<TestValue> vals = new ArrayList<TestValue>();
         vals.add(nextval);
         vals.add(finalval);
+        vals.add(extremeval);
         assertTrue(nonemptyset.addAll(vals));
         assertTrue(nonemptyset.contains(nextval));
         assertTrue(nonemptyset.contains(finalval));
@@ -196,14 +199,15 @@
     public void testRemoveAll() {
         ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue val = new TestValue("foo", 1);
-        assertTrue(set.insertOrReplace(val, existing -> existing.value2() < val.value2()));
+        assertTrue(set.add(val));
         TestValue nextval = new TestValue("goo", 2);
-        assertTrue(set.insertOrReplace(nextval, existing -> existing.value2() < nextval.value2()));
+        assertTrue(set.add(nextval));
         TestValue finalval = new TestValue("shoo", 3);
-        assertTrue(set.insertOrReplace(finalval, existing -> existing.value2() < finalval.value2()));
+        assertTrue(set.add(finalval));
         ArrayList<TestValue> vals = new ArrayList<TestValue>();
         vals.add(nextval);
         vals.add(finalval);
+        vals.add(new TestValue("who", 4));
         assertTrue(set.removeAll(vals));
         assertFalse(set.contains(nextval));
         assertFalse(set.contains(finalval));
@@ -215,13 +219,13 @@
     public void testRetainAll() {
         ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
         TestValue small = new TestValue("foo", 1);
-        assertTrue(set.insertOrReplace(small, existing -> existing.value2() < small.value2()));
+        assertTrue(set.add(small));
         TestValue medium = new TestValue("goo", 2);
-        assertTrue(set.insertOrReplace(medium, existing -> existing.value2() < medium.value2()));
+        assertTrue(set.add(medium));
         TestValue large = new TestValue("shoo", 3);
-        assertTrue(set.insertOrReplace(large, existing -> existing.value2() < large.value2()));
+        assertTrue(set.add(large));
         TestValue extreme = new TestValue("who", 4);
-        assertTrue(set.insertOrReplace(extreme, existing -> existing.value2() < extreme.value2()));
+        assertTrue(set.add(extreme));
         ArrayList<TestValue> firstvals = new ArrayList<TestValue>();
         firstvals.add(medium);
         firstvals.add(extreme);
@@ -237,6 +241,21 @@
         assertTrue(set.contains(medium));
     }
 
+    @Test
+    public void testAddFailure() {
+        ExtendedSet<TestValue> set = new ExtendedSet<>(Maps.newConcurrentMap());
+        TestValue val = new TestValue("foo", 1);
+        assertTrue(set.add(val));
+        assertFalse(set.add(val));
+    }
+
+    @Test
+    public void testRemoveFailure() {
+        ExtendedSet<TestValue> set = new ExtendedSet<TestValue>(Maps.newConcurrentMap());
+        TestValue val = new TestValue("foo", 1);
+        assertFalse(set.remove(val));
+    }
+
     private class TestValue {
         private String value1;
         private int value2;
