diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
index 16dd573..2555312 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
@@ -47,11 +47,10 @@
 
     public ContextHandler(final ServletContextHelperInfo info,
             final ServletContext webContext,
-            final PerContextEventListener eventListener,
             final Bundle bundle)
     {
         this.info = info;
-        this.eventListener = eventListener;
+        this.eventListener = new PerContextEventListener(bundle, this);
         this.bundle = bundle;
         this.sharedContext = new SharedServletContextImpl(webContext,
                 info.getName(),
@@ -147,4 +146,8 @@
         public ExtServletContext servletContext;
         public ServletContextHelper servletContextHelper;
     }
+
+    public PerContextEventListener getListenerRegistry() {
+        return this.eventListener;
+    }
 }
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ListenerRegistry.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ListenerRegistry.java
deleted file mode 100644
index d7411dd..0000000
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ListenerRegistry.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.felix.http.base.internal.whiteboard;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.annotation.Nonnull;
-
-import org.apache.felix.http.base.internal.runtime.HttpSessionAttributeListenerInfo;
-import org.apache.felix.http.base.internal.runtime.HttpSessionIdListenerInfo;
-import org.apache.felix.http.base.internal.runtime.HttpSessionListenerInfo;
-import org.apache.felix.http.base.internal.runtime.ServletContextAttributeListenerInfo;
-import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
-import org.apache.felix.http.base.internal.runtime.ServletContextListenerInfo;
-import org.apache.felix.http.base.internal.runtime.ServletRequestAttributeListenerInfo;
-import org.apache.felix.http.base.internal.runtime.ServletRequestListenerInfo;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-
-public final class ListenerRegistry
-{
-    private final Map<ServletContextHelperInfo, PerContextEventListener> registriesByContext = new TreeMap<ServletContextHelperInfo, PerContextEventListener>();
-
-    private final Bundle bundle;
-
-    public ListenerRegistry(final Bundle bundle)
-    {
-        this.bundle = bundle;
-    }
-
-    public PerContextEventListener addContext(ServletContextHelperInfo info)
-    {
-        if (registriesByContext.containsKey(info))
-        {
-            throw new IllegalArgumentException("Context with id " + info.getServiceId() + "is already registered");
-        }
-
-        PerContextEventListener contextRegistry = new PerContextEventListener(bundle);
-        registriesByContext.put(info, contextRegistry);
-        return contextRegistry;
-    }
-
-    public void removeContext(ServletContextHelperInfo info)
-    {
-        registriesByContext.remove(info);
-    }
-
-    public void initialized(@Nonnull final ServletContextListenerInfo listenerInfo,
-            ContextHandler contextHandler)
-    {
-        registriesByContext.get(contextHandler.getContextInfo()).initialized(listenerInfo, contextHandler);
-    }
-
-    public void destroyed(@Nonnull final ServletContextListenerInfo listenerInfo,
-            ContextHandler contextHandler)
-    {
-        registriesByContext.get(contextHandler.getContextInfo()).destroyed(listenerInfo, contextHandler);
-    }
-
-    void addListener(@Nonnull final ServletContextAttributeListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).addListener(info);
-    }
-
-    void removeListener(@Nonnull final ServletContextAttributeListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).removeListener(info);
-    }
-
-    void addListener(@Nonnull final HttpSessionAttributeListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).addListener(info);
-    }
-
-    void removeListener(@Nonnull final HttpSessionAttributeListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).removeListener(info);
-    }
-
-    void addListener(@Nonnull final HttpSessionIdListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).addListener(info);
-    }
-
-    void removeListener(@Nonnull final HttpSessionIdListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).removeListener(info);
-    }
-
-    void addListener(@Nonnull final HttpSessionListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).addListener(info);
-    }
-
-    void removeListener(@Nonnull final HttpSessionListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).removeListener(info);
-    }
-
-    void addListener(@Nonnull final ServletRequestListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).addListener(info);
-    }
-
-    void removeListener(@Nonnull final ServletRequestListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).removeListener(info);
-    }
-
-    void addListener(@Nonnull final ServletRequestAttributeListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).addListener(info);
-    }
-
-    void removeListener(@Nonnull final ServletRequestAttributeListenerInfo info,
-            final ContextHandler contextHandler)
-    {
-        getRegistryForContext(contextHandler).removeListener(info);
-    }
-
-    private PerContextEventListener getRegistryForContext(ContextHandler contextHandler)
-    {
-        PerContextEventListener contextRegistry = registriesByContext.get(contextHandler.getContextInfo());
-        if (contextRegistry == null)
-        {
-            throw new IllegalArgumentException("ContextHandler " + contextHandler.getContextInfo().getName() + " is not registered");
-        }
-        return contextRegistry;
-    }
-
-    public Map<Long, Collection<ServiceReference<?>>> getContextRuntimes()
-    {
-        Map<Long, Collection<ServiceReference<?>>> listenersByContext = new HashMap<Long, Collection<ServiceReference<?>>>();
-        for (ServletContextHelperInfo contextInfo : registriesByContext.keySet())
-        {
-            long serviceId = contextInfo.getServiceId();
-            listenersByContext.put(serviceId, registriesByContext.get(contextInfo).getRuntime());
-        }
-        return listenersByContext;
-    }
-}
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
index 30dcdc1..2b8fdba 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/PerContextEventListener.java
@@ -78,13 +78,15 @@
 
     private final Bundle bundle;
 
-    PerContextEventListener(final Bundle bundle)
+    private final ContextHandler contextHandler;
+
+    PerContextEventListener(final Bundle bundle, final ContextHandler contextHandler)
     {
         this.bundle = bundle;
+        this.contextHandler = contextHandler;
     }
 
-    void initialized(@Nonnull final ServletContextListenerInfo listenerInfo,
-            @Nonnull ContextHandler contextHandler)
+    void initialized(@Nonnull final ServletContextListenerInfo listenerInfo)
     {
         final ServletContextListener listener = listenerInfo.getService(bundle);
         if (listener != null)
@@ -99,8 +101,7 @@
         }
     }
 
-    void destroyed(@Nonnull final ServletContextListenerInfo listenerInfo,
-            @Nonnull ContextHandler contextHandler)
+    void destroyed(@Nonnull final ServletContextListenerInfo listenerInfo)
     {
         final ServiceReference<ServletContextListener> listenerRef = listenerInfo
                 .getServiceReference();
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
index 82020a5..025f0b8 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
@@ -104,8 +104,6 @@
 
     private final WhiteboardHttpService httpService;
 
-    private final ListenerRegistry listenerRegistry;
-
     private final Map<AbstractInfo<?>, Integer> serviceFailures = new ConcurrentSkipListMap<AbstractInfo<?>, Integer>();
 
     private volatile ServletContext webContext;
@@ -131,7 +129,6 @@
         this.bundleContext = bundleContext;
         this.httpServiceFactory = httpServiceFactory;
         this.httpService = new WhiteboardHttpService(this.bundleContext, registry);
-        this.listenerRegistry = new ListenerRegistry(bundleContext.getBundle());
         this.serviceRuntime = new HttpServiceRuntimeImpl(registry, this);
     }
 
@@ -288,7 +285,7 @@
         // context listeners first
         for(final ServletContextListenerInfo info : listeners.values())
         {
-            this.listenerRegistry.initialized(info, handler);
+            handler.getListenerRegistry().initialized(info);
         }
         // now register services
         for(final WhiteboardServiceInfo<?> info : services)
@@ -324,7 +321,7 @@
         }
         for(final ServletContextListenerInfo info : listeners.values())
         {
-            this.listenerRegistry.destroyed(info, handler);
+            handler.getListenerRegistry().destroyed(info);
         }
         handler.deactivate();
 
@@ -343,10 +340,8 @@
             {
                 synchronized ( this.contextMap )
                 {
-                    PerContextEventListener contextEventListener = listenerRegistry.addContext(info);
-                    ContextHandler handler = new ContextHandler(info,
+                    final ContextHandler handler = new ContextHandler(info,
                             this.webContext,
-                            contextEventListener,
                             this.bundleContext.getBundle());
 
                     List<ContextHandler> handlerList = this.contextMap.get(info.getName());
@@ -429,7 +424,6 @@
                             this.activate(newHead);
                             removeFailure(newHead.getContextInfo(), FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE);
                         }
-                        listenerRegistry.removeContext(info);
                     }
                 }
             }
@@ -540,27 +534,27 @@
 
             else if ( info instanceof ServletContextAttributeListenerInfo )
             {
-                this.listenerRegistry.addListener((ServletContextAttributeListenerInfo) info, handler);
+                handler.getListenerRegistry().addListener((ServletContextAttributeListenerInfo) info);
             }
             else if ( info instanceof HttpSessionListenerInfo )
             {
-                this.listenerRegistry.addListener((HttpSessionListenerInfo) info, handler);
+                handler.getListenerRegistry().addListener((HttpSessionListenerInfo) info);
             }
             else if ( info instanceof HttpSessionAttributeListenerInfo )
             {
-                this.listenerRegistry.addListener((HttpSessionAttributeListenerInfo) info, handler);
+                handler.getListenerRegistry().addListener((HttpSessionAttributeListenerInfo) info);
             }
             else if ( info instanceof HttpSessionIdListenerInfo )
             {
-                this.listenerRegistry.addListener((HttpSessionIdListenerInfo) info, handler);
+                handler.getListenerRegistry().addListener((HttpSessionIdListenerInfo) info);
             }
             else if ( info instanceof ServletRequestListenerInfo )
             {
-                this.listenerRegistry.addListener((ServletRequestListenerInfo) info, handler);
+                handler.getListenerRegistry().addListener((ServletRequestListenerInfo) info);
             }
             else if ( info instanceof ServletRequestAttributeListenerInfo )
             {
-                this.listenerRegistry.addListener((ServletRequestAttributeListenerInfo) info, handler);
+                handler.getListenerRegistry().addListener((ServletRequestAttributeListenerInfo) info);
             }
         }
         catch (final RegistrationFailureException e)
@@ -599,27 +593,27 @@
 
             else if ( info instanceof ServletContextAttributeListenerInfo )
             {
-                this.listenerRegistry.removeListener((ServletContextAttributeListenerInfo) info, handler);
+                handler.getListenerRegistry().removeListener((ServletContextAttributeListenerInfo) info);
             }
             else if ( info instanceof HttpSessionListenerInfo )
             {
-                this.listenerRegistry.removeListener((HttpSessionListenerInfo) info, handler);
+                handler.getListenerRegistry().removeListener((HttpSessionListenerInfo) info);
             }
             else if ( info instanceof HttpSessionAttributeListenerInfo )
             {
-                this.listenerRegistry.removeListener((HttpSessionAttributeListenerInfo) info, handler);
+                handler.getListenerRegistry().removeListener((HttpSessionAttributeListenerInfo) info);
             }
             else if ( info instanceof HttpSessionIdListenerInfo )
             {
-                this.listenerRegistry.removeListener((HttpSessionIdListenerInfo) info, handler);
+                handler.getListenerRegistry().removeListener((HttpSessionIdListenerInfo) info);
             }
             else if ( info instanceof ServletRequestListenerInfo )
             {
-                this.listenerRegistry.removeListener((ServletRequestListenerInfo) info, handler);
+                handler.getListenerRegistry().removeListener((ServletRequestListenerInfo) info);
             }
             else if ( info instanceof ServletRequestAttributeListenerInfo )
             {
-                this.listenerRegistry.removeListener((ServletRequestAttributeListenerInfo) info, handler);
+                handler.getListenerRegistry().removeListener((ServletRequestAttributeListenerInfo) info);
             }
         }
         catch (final RegistrationFailureException e)
@@ -697,7 +691,7 @@
     {
         Collection<ServletContextHelperRuntime> contextRuntimes = new TreeSet<ServletContextHelperRuntime>(ServletContextHelperRuntime.COMPARATOR);
         List<ContextRuntime> handlerRuntimes;
-        Map<Long, Collection<ServiceReference<?>>> listenerRuntimes;
+        final Map<Long, Collection<ServiceReference<?>>> listenerRuntimes = new HashMap<Long, Collection<ServiceReference<?>>>();
         FailureRuntime.Builder failureRuntime = FailureRuntime.builder();
         synchronized ( this.contextMap )
         {
@@ -705,11 +699,14 @@
             {
                 if ( !contextHandlerList.isEmpty() )
                 {
-                    contextRuntimes.add(contextHandlerList.get(0));
+                    final ContextHandler handler = contextHandlerList.get(0);
+                    contextRuntimes.add(handler);
+
+                    final long serviceId = handler.getContextInfo().getServiceId();
+                    listenerRuntimes.put(serviceId, handler.getListenerRegistry().getRuntime());
                 }
             }
             handlerRuntimes = registry.getRuntime(failureRuntime);
-            listenerRuntimes = listenerRegistry.getContextRuntimes();
             failureRuntime.add(serviceFailures);
         }
         return new RegistryRuntime(contextRuntimes, handlerRuntimes, listenerRuntimes, failureRuntime.build());
diff --git a/http/base/src/test/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilderTest.java b/http/base/src/test/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilderTest.java
index 4d1a59d..a107415 100644
--- a/http/base/src/test/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilderTest.java
+++ b/http/base/src/test/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilderTest.java
@@ -63,7 +63,6 @@
 import org.apache.felix.http.base.internal.runtime.ServletContextHelperInfo;
 import org.apache.felix.http.base.internal.runtime.ServletInfo;
 import org.apache.felix.http.base.internal.whiteboard.ContextHandler;
-import org.apache.felix.http.base.internal.whiteboard.ListenerRegistry;
 import org.apache.felix.http.base.internal.whiteboard.PerContextEventListener;
 import org.junit.Before;
 import org.junit.Rule;
@@ -138,14 +137,12 @@
 
     private RegistryRuntime registry;
     private Map<String, Object> runtimeAttributes;
-	private ListenerRegistry listenerRegistry;
 
     @Before
     public void setUp()
     {
         registry = null;
         runtimeAttributes = RUNTIME_ATTRIBUTES;
-        listenerRegistry = new ListenerRegistry(bundle);
     }
 
     public ServletContextHelperRuntime setupContext(ServletContext context, String name, long serviceId)
@@ -163,8 +160,8 @@
         Map<String, String> initParameters = createInitParameterMap();
         ServletContextHelperInfo contextInfo = createContextInfo(0, serviceId, name, path, initParameters);
 
-        PerContextEventListener eventListener = listenerRegistry.addContext(contextInfo);
-        ServletContextHelperRuntime contextHandler = new ContextHandler(contextInfo, context, eventListener, bundle);
+        ContextHandler contextHandler = new ContextHandler(contextInfo, context, bundle);
+        PerContextEventListener eventListener = contextHandler.getListenerRegistry();
 
         ServletContext sharedContext = contextHandler.getSharedContext();
         sharedContext.setAttribute("intAttr", 1);
