diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
index a2f4138..a08b1ba 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
@@ -49,8 +49,8 @@
     private final String prefixPath;
 
     public PerContextHandlerRegistry() {
-        this.serviceId = -1;
-        this.ranking = Integer.MIN_VALUE;
+        this.serviceId = 0;
+        this.ranking = Integer.MAX_VALUE;
         this.prefixPath = "/";
     }
 
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
index 9545d4c..f8c7edf 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/FilterInfo.java
@@ -143,31 +143,38 @@
         return super.isValid() && (!isEmpty(this.patterns) || !isEmpty(this.regexs) || !isEmpty(this.servletNames));
     }
 
-    public String getName() {
+    public String getName()
+    {
         return name;
     }
 
-    public String[] getPatterns() {
+    public String[] getPatterns()
+    {
         return patterns;
     }
 
-    public String[] getServletNames() {
+    public String[] getServletNames()
+    {
         return servletNames;
     }
 
-    public String[] getRegexs() {
+    public String[] getRegexs()
+    {
         return regexs;
     }
 
-    public boolean isAsyncSupported() {
+    public boolean isAsyncSupported()
+    {
         return asyncSupported;
     }
 
-    public DispatcherType[] getDispatcher() {
+    public DispatcherType[] getDispatcher()
+    {
         return dispatcher;
     }
 
-    public Map<String, String> getInitParams() {
+    public Map<String, String> getInitParams()
+    {
         return initParams;
     }
 }
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
index a6929e8..38a064c 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
@@ -18,6 +18,8 @@
  */
 package org.apache.felix.http.base.internal.runtime;
 
+import java.util.Map;
+
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.context.ServletContextHelper;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
@@ -25,7 +27,13 @@
 /**
  * Provides registration information for a {@link ServletContextHelper}
  */
-public final class ServletContextHelperInfo extends AbstractInfo<ServletContextHelper> {
+public final class ServletContextHelperInfo extends AbstractInfo<ServletContextHelper>
+{
+
+    /**
+     * Properties starting with this prefix are passed as context init parameters.
+     */
+    private static final String CONTEXT_INIT_PREFIX = "context.init.";
 
     private final String name;
 
@@ -33,6 +41,11 @@
 
     private final String prefix;
 
+    /**
+     * The filter initialization parameters as provided during registration of the filter.
+     */
+    private final Map<String, String> initParams;
+
     public ServletContextHelperInfo(final ServiceReference<ServletContextHelper> ref) {
         super(ref);
         this.name = this.getStringProperty(ref, HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME);
@@ -46,6 +59,7 @@
             }
         }
         this.prefix = prefix;
+        this.initParams = getInitParams(ref, CONTEXT_INIT_PREFIX);
     }
 
     private boolean isValidPath()
@@ -91,4 +105,9 @@
         }
         return this.prefix.concat(path);
     }
+
+    public Map<String, String> getInitParams()
+    {
+        return initParams;
+    }
 }
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 de67424..2090bcc 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
@@ -69,6 +69,7 @@
         this.sharedContext = new SharedServletContextImpl(webContext,
                 info.getPrefix(),
                 info.getName(),
+                info.getInitParams(),
                 new ServletContextAttributeListener() {
 
                     @Override
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java
index e052ae2..c7cf81b 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java
@@ -22,6 +22,7 @@
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.EventListener;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -55,10 +56,12 @@
     private final String contextPath;
     private final String name;
     private final ServletContextAttributeListener attributeListener;
+    private final Map<String, String> initParameters = new HashMap<String, String>();
 
     public SharedServletContextImpl(final ServletContext webContext,
             final String name,
             final String prefix,
+            final Map<String, String> initParameters,
             final ServletContextAttributeListener servletContextAttributeListener)
     {
         this.context = webContext;
@@ -71,6 +74,10 @@
             this.contextPath = webContext.getContextPath() + prefix;
         }
         this.name = name;
+        if ( initParameters != null )
+        {
+            this.initParameters.putAll(initParameters);
+        }
         this.attributeListener = servletContextAttributeListener;
     }
 
@@ -258,15 +265,13 @@
     @Override
     public String getInitParameter(final String name)
     {
-        // TODO
-        return this.context.getInitParameter(name);
+        return this.initParameters.get(name);
     }
 
     @Override
     public Enumeration getInitParameterNames()
     {
-        // TODO
-        return this.context.getInitParameterNames();
+        return Collections.enumeration(this.initParameters.keySet());
     }
 
     @Override
