diff --git a/core/api/src/main/java/org/onosproject/event/ListenerTracker.java b/core/api/src/main/java/org/onosproject/event/ListenerTracker.java
new file mode 100644
index 0000000..aa42460
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/event/ListenerTracker.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016 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.event;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.concurrent.NotThreadSafe;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.Lists;
+
+/**
+ * Utility to keeps track of registered Listeners.
+ * <p>
+ * Usage Example:
+ * <pre>
+ * <code>
+    private ListenerTracker listeners;
+
+    {@code @Activate}
+    protected void activate() {
+        listeners = new ListenerTracker();
+        listeners.addListener(mastershipService, new InternalMastershipListener())
+                 .addListener(deviceService, new InternalDeviceListener())
+                 .addListener(linkService, new InternalLinkListener())
+                 .addListener(topologyService, new InternalTopologyListener())
+                 .addListener(hostService, new InternalHostListener());
+    }
+
+    {@code @Deactivate}
+    protected void deactivate() {
+        listeners.removeListeners();
+    }
+ * </code>
+ * </pre>
+ */
+@Beta
+@NotThreadSafe
+public class ListenerTracker {
+
+    @SuppressWarnings("rawtypes")
+    private List<Pair<ListenerService, EventListener>> listeners = new ArrayList<>();
+
+    /**
+     * Adds {@link EventListener} to specified {@link ListenerService}.
+     *
+     * @param service {@link ListenerService}
+     * @param listener {@link EventListener}
+     * @return self
+     */
+    public <E extends Event<?, ?>, L extends EventListener<E>>
+    ListenerTracker addListener(ListenerService<E, L> service, L listener) {
+        service.addListener(listener);
+        listeners.add(Pair.of(service, listener));
+        return this;
+    }
+
+    /**
+     * Removes all listeners in reverse order they have been registered.
+     */
+    public void removeListeners() {
+        Lists.reverse(listeners)
+            .forEach(r -> r.getLeft().removeListener(r.getRight()));
+        listeners.clear();
+    }
+}
