diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/ListenerQueue.java b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/ListenerQueue.java
new file mode 100644
index 0000000..436a30a
--- /dev/null
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/ListenerQueue.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.incubator.net.routing.impl;
+
+import org.onosproject.incubator.net.routing.RouteEvent;
+
+/**
+ * Queues updates for a route listener to ensure they are received in the
+ * correct order.
+ */
+interface ListenerQueue {
+
+    /**
+     * Posts an event to the listener.
+     *
+     * @param event event
+     */
+    void post(RouteEvent event);
+
+    /**
+     * Initiates event delivery to the listener.
+     */
+    void start();
+
+    /**
+     * Halts event delivery to the listener.
+     */
+    void stop();
+}
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
index 4957dad..004a550 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
@@ -114,7 +114,7 @@
     public void addListener(RouteListener listener) {
         synchronized (this) {
             log.debug("Synchronizing current routes to new listener");
-            ListenerQueue l = new ListenerQueue(listener);
+            ListenerQueue l = createListenerQueue(listener);
             routeStore.getRouteTables().forEach(table -> {
                 Collection<Route> routes = routeStore.getRoutes(table);
                 if (routes != null) {
@@ -234,10 +234,19 @@
     }
 
     /**
-     * Queues updates for a route listener to ensure they are received in the
-     * correct order.
+     * Creates a new listener queue.
+     *
+     * @param listener route listener
+     * @return listener queue
      */
-    private class ListenerQueue {
+    ListenerQueue createListenerQueue(RouteListener listener) {
+        return new DefaultListenerQueue(listener);
+    }
+
+    /**
+     * Default route listener queue.
+     */
+    private class DefaultListenerQueue implements ListenerQueue {
 
         private final ExecutorService executorService;
         private final BlockingQueue<RouteEvent> queue;
@@ -248,31 +257,23 @@
          *
          * @param listener route listener to queue updates for
          */
-        public ListenerQueue(RouteListener listener) {
+        public DefaultListenerQueue(RouteListener listener) {
             this.listener = listener;
             queue = new LinkedBlockingQueue<>();
             executorService = newSingleThreadExecutor(threadFactory);
         }
 
-        /**
-         * Posts and event to the listener.
-         *
-         * @param event event
-         */
+        @Override
         public void post(RouteEvent event) {
             queue.add(event);
         }
 
-        /**
-         * Initiates event delivery to the listener.
-         */
+        @Override
         public void start() {
             executorService.execute(this::poll);
         }
 
-        /**
-         * Halts event delivery to the listener.
-         */
+        @Override
         public void stop() {
             executorService.shutdown();
         }
