diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
index 07b68d3..8d73570 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
@@ -568,6 +568,10 @@
             this.whiteboardService.sessionDestroyed(session, ids);
         }
         String requestURI = getRequestURI(req);
+        if ( requestURI == null )
+        {
+            requestURI = "";
+        }
 
         // Determine which servlets we should forward the request to...
         final ServletHandler servletHandler = this.handlerRegistry.getServletHander(requestURI);
@@ -641,6 +645,10 @@
         }
         // TODO remove path parameters...
         String requestURI = decodePath(removeDotSegments(path));
+        if ( requestURI == null )
+        {
+            requestURI = "";
+        }
 
         ServletHandler handler = this.handlerRegistry.getServletHander(requestURI);
         if (handler == null)
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 d1461c6..15c344a 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
@@ -203,13 +203,23 @@
             if ( holder != null )
             {
                 holder.counter--;
-                if ( holder.counter <= 0 )
+                if ( holder.counter == 0 )
                 {
                     this.perBundleContextMap.remove(key);
-                    final ServiceObjects<ServletContextHelper> so = bundle.getBundleContext().getServiceObjects(this.info.getServiceReference());
-                    if ( so != null )
+                    if ( holder.servletContextHelper != null )
                     {
-                        so.ungetService(holder.servletContextHelper);
+                        final ServiceObjects<ServletContextHelper> so = bundle.getBundleContext().getServiceObjects(this.info.getServiceReference());
+                        if ( so != null )
+                        {
+                            try
+                            {
+                                so.ungetService(holder.servletContextHelper);
+                            }
+                            catch ( final IllegalArgumentException iae)
+                            {
+                                // this seems to be thrown sometimes on shutdown; we have to evaluate
+                            }
+                        }
                     }
                 }
             }
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardHttpService.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardHttpService.java
index 002213f..918ea9e 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardHttpService.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardHttpService.java
@@ -327,12 +327,16 @@
     {
         for(final Long contextId : contextIds)
         {
-            final ContextHandler handler = this.contextManager.getContextHandler(contextId);
-            if ( handler != null )
+            // TODO - on shutdown context manager is already NULL which shouldn't be the case
+            if ( this.contextManager != null )
             {
-                final ExtServletContext context = handler.getServletContext(this.bundleContext.getBundle());
-                new HttpSessionWrapper(contextId, session, context, true).invalidate();
-                handler.ungetServletContext(this.bundleContext.getBundle());
+                final ContextHandler handler = this.contextManager.getContextHandler(contextId);
+                if ( handler != null )
+                {
+                    final ExtServletContext context = handler.getServletContext(this.bundleContext.getBundle());
+                    new HttpSessionWrapper(contextId, session, context, true).invalidate();
+                    handler.ungetServletContext(this.bundleContext.getBundle());
+                }
             }
         }
     }
