diff --git a/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java b/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java
new file mode 100644
index 0000000..ebb5217
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java
@@ -0,0 +1,37 @@
+package org.onlab.onos.net;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.onlab.onos.net.Device.Type.SWITCH;
+import static org.onlab.onos.net.DeviceId.deviceId;
+import static org.onlab.onos.net.PortNumber.portNumber;
+
+/**
+ * Test of the connetion point entity.
+ */
+public class ConnectPointTest {
+
+    public static final DeviceId DID1 = deviceId("1");
+    public static final DeviceId DID2 = deviceId("2");
+    public static final PortNumber P1 = portNumber(1);
+    public static final PortNumber P2 = portNumber(2);
+
+    @Test
+    public void basics() {
+        ConnectPoint p = new ConnectPoint(DID1, P2);
+        assertEquals("incorrect element id", DID1, p.deviceId());
+        assertEquals("incorrect element id", P2, p.port());
+    }
+
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(new ConnectPoint(DID1, P1), new ConnectPoint(DID1, P1))
+                .addEqualityGroup(new ConnectPoint(DID1, P2), new ConnectPoint(DID1, P2))
+                .addEqualityGroup(new ConnectPoint(DID2, P1), new ConnectPoint(DID2, P1))
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onlab/onos/net/DefaultAnnotationsTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultAnnotationsTest.java
new file mode 100644
index 0000000..274f4b8
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/DefaultAnnotationsTest.java
@@ -0,0 +1,68 @@
+package org.onlab.onos.net;
+
+import org.junit.Test;
+
+import static com.google.common.collect.ImmutableSet.of;
+import static org.junit.Assert.*;
+import static org.onlab.onos.net.DefaultAnnotations.builder;
+
+/**
+ * Tests of the default annotations.
+ */
+public class DefaultAnnotationsTest {
+
+    private DefaultAnnotations annotations;
+
+    @Test
+    public void basics() {
+        annotations = builder().set("foo", "1").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+        assertEquals("incorrect value", "1", annotations.value("foo"));
+        assertEquals("incorrect value", "2", annotations.value("bar"));
+    }
+
+    @Test
+    public void empty() {
+        annotations = builder().build();
+        assertTrue("incorrect keys", annotations.keys().isEmpty());
+    }
+
+    @Test
+    public void remove() {
+        annotations = builder().remove("foo").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+        assertNull("incorrect value", annotations.value("foo"));
+        assertEquals("incorrect value", "2", annotations.value("bar"));
+    }
+
+    @Test
+    public void merge() {
+        annotations = builder().set("foo", "1").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+
+        SparseAnnotations updates = builder().remove("foo").set("bar", "3").set("goo", "4").build();
+
+        annotations = DefaultAnnotations.merge(annotations, updates);
+        assertEquals("incorrect keys", of("goo", "bar"), annotations.keys());
+        assertNull("incorrect value", annotations.value("foo"));
+        assertEquals("incorrect value", "3", annotations.value("bar"));
+    }
+
+    @Test
+    public void noopMerge() {
+        annotations = builder().set("foo", "1").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+
+        SparseAnnotations updates = builder().build();
+        assertSame("same annotations expected", annotations,
+                   DefaultAnnotations.merge(annotations, updates));
+        assertSame("same annotations expected", annotations,
+                   DefaultAnnotations.merge(annotations, null));
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void badMerge() {
+        DefaultAnnotations.merge(null, null);
+    }
+
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
index ea1c8fd..f7bc617 100644
--- a/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
+++ b/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
@@ -40,6 +40,18 @@
     @Test
     public void basics() {
         Device device = new DefaultDevice(PID, DID1, SWITCH, MFR, HW, SW, SN1);
+        validate(device);
+    }
+
+    @Test
+    public void annotations() {
+        Device device = new DefaultDevice(PID, DID1, SWITCH, MFR, HW, SW, SN1,
+                                          DefaultAnnotations.builder().set("foo", "bar").build());
+        validate(device);
+        assertEquals("incorrect provider", "bar", device.annotations().value("foo"));
+    }
+
+    private void validate(Device device) {
         assertEquals("incorrect provider", PID, device.providerId());
         assertEquals("incorrect id", DID1, device.id());
         assertEquals("incorrect type", SWITCH, device.type());
@@ -50,4 +62,4 @@
         assertEquals("incorrect serial", SN1, device.serialNumber());
     }
 
-}
+}
\ No newline at end of file
