diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/DispatcherServlet.java b/http/base/src/main/java/org/apache/felix/http/base/internal/DispatcherServlet.java
index 05b93a7..0bca9bc 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/DispatcherServlet.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/DispatcherServlet.java
@@ -54,6 +54,11 @@
         super.destroy();
     }
 
+    public boolean handleError(HttpServletRequest request, HttpServletResponse response, int errorCode, String exceptionType) throws IOException
+    {
+        return this.controller.getDispatcher().handleError(request, response, errorCode, exceptionType);
+    }
+
     @Override
     protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
     {
@@ -84,6 +89,7 @@
             this.listener = requestAttributeListener;
         }
 
+        @Override
         public void setAttribute(String name, Object value)
         {
             if (value == null)
@@ -106,6 +112,7 @@
             }
         }
 
+        @Override
         public void removeAttribute(String name)
         {
             Object oldValue = this.getAttribute(name);
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
index 60cb8b2..b1954bb 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
@@ -42,11 +42,6 @@
     private volatile HandlerMapping<FilterHandler> filterMapping = new HandlerMapping<FilterHandler>();
     private volatile ErrorsMapping errorsMapping = new ErrorsMapping();
 
-    public synchronized void addErrorServlet(String errorPage, ServletHandler handler) throws ServletException
-    {
-        this.errorsMapping.addErrorServlet(errorPage, handler);
-    }
-
     public synchronized void addFilter(FilterHandler handler) throws ServletException
     {
         if (this.filterMap.containsKey(handler.getFilter()))
@@ -85,6 +80,14 @@
             this.servletPatternMap.put(pattern, handler.getServlet());
         }
 
+        patterns = handler.getServletInfo().getErrorPage();
+        if ( patterns != null )
+        {
+            for(final String errorPage : patterns)
+            {
+                this.errorsMapping.addErrorServlet(errorPage, handler);
+            }
+        }
         handler.init();
         this.servletMap.put(handler.getServlet(), handler);
 
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java
index a520e21..ed2c6e9 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletInfo.java
@@ -116,7 +116,7 @@
     @Override
     public boolean isValid()
     {
-        return super.isValid() && !isEmpty(this.patterns);
+        return super.isValid() && (!isEmpty(this.patterns) || !isEmpty(this.errorPage));
     }
 
     public String getName()
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java
index f63c0e8..7497517 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/tracker/ServletTracker.java
@@ -34,9 +34,10 @@
     {
         try
         {
-            return btx.createFilter(String.format("(&(objectClass=%s)(%s=*))",
+            return btx.createFilter(String.format("(&(objectClass=%s)(|(%s=*)(%s=*)))",
                     Servlet.class.getName(),
-                    HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN));
+                    HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN,
+                    HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_ERROR_PAGE));
         }
         catch ( final InvalidSyntaxException ise)
         {
