diff --git a/net/api/src/test/java/org/onlab/onos/event/AbstractListenerManagerTest.java b/net/api/src/test/java/org/onlab/onos/event/AbstractListenerRegistryTest.java
similarity index 89%
rename from net/api/src/test/java/org/onlab/onos/event/AbstractListenerManagerTest.java
rename to net/api/src/test/java/org/onlab/onos/event/AbstractListenerRegistryTest.java
index effcc79..e41eb27 100644
--- a/net/api/src/test/java/org/onlab/onos/event/AbstractListenerManagerTest.java
+++ b/net/api/src/test/java/org/onlab/onos/event/AbstractListenerRegistryTest.java
@@ -8,13 +8,13 @@
 /**
  * Tests of the base listener manager.
  */
-public class AbstractListenerManagerTest {
+public class AbstractListenerRegistryTest {
 
     @Test
     public void basics() {
         TestListener listener = new TestListener();
         TestListener secondListener = new TestListener();
-        TestListenerManager manager = new TestListenerManager();
+        TestListenerRegistry manager = new TestListenerRegistry();
         manager.addListener(listener);
         manager.addListener(secondListener);
 
@@ -35,7 +35,7 @@
     public void badListener() {
         TestListener listener = new BrokenListener();
         TestListener secondListener = new TestListener();
-        TestListenerManager manager = new TestListenerManager();
+        TestListenerRegistry manager = new TestListenerRegistry();
         manager.addListener(listener);
         manager.addListener(secondListener);
 
diff --git a/net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkBrokerTest.java b/net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkBrokerTest.java
deleted file mode 100644
index f676325..0000000
--- a/net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkBrokerTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.onlab.onos.event;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests of the default event sink broker.
- */
-public class DefaultEventSinkBrokerTest {
-
-    private DefaultEventSinkBroker broker;
-
-    private static class FooEvent extends TestEvent {
-        public FooEvent(String subject) { super(Type.FOO, subject); }
-    }
-
-    private static class BarEvent extends TestEvent {
-        public BarEvent(String subject) { super(Type.BAR, subject); }
-    }
-
-    private static class FooSink implements EventSink<FooEvent> {
-        @Override public void process(FooEvent event) {}
-    }
-
-    private static class BarSink implements EventSink<BarEvent> {
-        @Override public void process(BarEvent event) {}
-    }
-
-    @Before
-    public void setUp() {
-        broker = new DefaultEventSinkBroker();
-    }
-
-    @Test
-    public void basics() {
-        FooSink fooSink = new FooSink();
-        BarSink barSink = new BarSink();
-        broker.addSink(FooEvent.class, fooSink);
-        broker.addSink(BarEvent.class, barSink);
-
-        assertEquals("incorrect sink count", 2, broker.getSinks().size());
-        assertEquals("incorrect sink", fooSink, broker.getSink(FooEvent.class));
-        assertEquals("incorrect sink", barSink, broker.getSink(BarEvent.class));
-
-        broker.removeSink(FooEvent.class);
-        assertNull("incorrect sink", broker.getSink(FooEvent.class));
-        assertEquals("incorrect sink", barSink, broker.getSink(BarEvent.class));
-
-    }
-}
diff --git a/net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkRegistryTest.java b/net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkRegistryTest.java
new file mode 100644
index 0000000..ff10b50
--- /dev/null
+++ b/net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkRegistryTest.java
@@ -0,0 +1,52 @@
+package org.onlab.onos.event;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests of the default event sink registry.
+ */
+public class DefaultEventSinkRegistryTest {
+
+    private DefaultEventSinkRegistry registry;
+
+    private static class FooEvent extends TestEvent {
+        public FooEvent(String subject) { super(Type.FOO, subject); }
+    }
+
+    private static class BarEvent extends TestEvent {
+        public BarEvent(String subject) { super(Type.BAR, subject); }
+    }
+
+    private static class FooSink implements EventSink<FooEvent> {
+        @Override public void process(FooEvent event) {}
+    }
+
+    private static class BarSink implements EventSink<BarEvent> {
+        @Override public void process(BarEvent event) {}
+    }
+
+    @Before
+    public void setUp() {
+        registry = new DefaultEventSinkRegistry();
+    }
+
+    @Test
+    public void basics() {
+        FooSink fooSink = new FooSink();
+        BarSink barSink = new BarSink();
+        registry.addSink(FooEvent.class, fooSink);
+        registry.addSink(BarEvent.class, barSink);
+
+        assertEquals("incorrect sink count", 2, registry.getSinks().size());
+        assertEquals("incorrect sink", fooSink, registry.getSink(FooEvent.class));
+        assertEquals("incorrect sink", barSink, registry.getSink(BarEvent.class));
+
+        registry.removeSink(FooEvent.class);
+        assertNull("incorrect sink", registry.getSink(FooEvent.class));
+        assertEquals("incorrect sink", barSink, registry.getSink(BarEvent.class));
+
+    }
+}
diff --git a/net/api/src/test/java/org/onlab/onos/event/TestListenerManager.java b/net/api/src/test/java/org/onlab/onos/event/TestListenerRegistry.java
similarity index 77%
rename from net/api/src/test/java/org/onlab/onos/event/TestListenerManager.java
rename to net/api/src/test/java/org/onlab/onos/event/TestListenerRegistry.java
index a9f6213..e676030 100644
--- a/net/api/src/test/java/org/onlab/onos/event/TestListenerManager.java
+++ b/net/api/src/test/java/org/onlab/onos/event/TestListenerRegistry.java
@@ -6,8 +6,8 @@
 /**
  * Test event listener manager fixture.
  */
-public class TestListenerManager
-        extends AbstractListenerManager<TestEvent, TestListener> {
+public class TestListenerRegistry
+        extends AbstractListenerRegistry<TestEvent, TestListener> {
 
     public final List<Throwable> errors = new ArrayList<>();
 
