diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java
index cbf89c0..d7e43db 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/AbstractInfo.java
@@ -119,7 +119,7 @@
     protected String getStringProperty(final ServiceReference<T> ref, final String key)
     {
         final Object value = ref.getProperty(key);
-        return (value instanceof String) ? (String) value : null;
+        return (value instanceof String) ? ((String) value).trim(): null;
     }
 
     protected String[] getStringArrayProperty(ServiceReference<T> ref, String key)
@@ -128,11 +128,18 @@
 
         if (value instanceof String)
         {
-            return new String[] { (String) value };
+            return new String[] { ((String) value).trim() };
         }
         else if (value instanceof String[])
         {
-            return (String[]) value;
+            final String[] arr = (String[]) value;
+            for(int i=0; i<arr.length; i++)
+            {
+                if ( arr[i] != null )
+                {
+                    arr[i] = arr[i].trim();
+                }
+            }
         }
         else if (value instanceof Collection<?>)
         {
@@ -142,7 +149,7 @@
             int i = 0;
             for (Object current : collectionValues)
             {
-                values[i++] = current != null ? String.valueOf(current) : null;
+                values[i++] = current != null ? String.valueOf(current).trim() : null;
             }
 
             return values;
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 9eaf2af..0df24f7 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
@@ -20,6 +20,7 @@
 
 import java.util.Map;
 
+import org.apache.felix.http.base.internal.util.PatternUtil;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.context.ServletContextHelper;
 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
@@ -68,7 +69,7 @@
     {
         if ( !this.isEmpty(path) )
         {
-        	if ( path.equals("/") ) 
+        	if ( path.equals("/") )
         	{
         		return true;
         	}
@@ -84,8 +85,9 @@
     @Override
     public boolean isValid()
     {
-        // TODO - check if name has valid value
-        return super.isValid() && !this.isEmpty(this.name) && isValidPath();
+        return super.isValid()
+                && PatternUtil.isValidSymbolicName(this.name)
+                && isValidPath();
     }
 
     public String getName()
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilder.java b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilder.java
index 80792e6..eb4dcc1 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilder.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/dto/RuntimeDTOBuilder.java
@@ -33,6 +33,12 @@
 import org.apache.felix.http.base.internal.whiteboard.ContextHandler;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.http.runtime.dto.ErrorPageDTO;
+import org.osgi.service.http.runtime.dto.FailedErrorPageDTO;
+import org.osgi.service.http.runtime.dto.FailedFilterDTO;
+import org.osgi.service.http.runtime.dto.FailedListenerDTO;
+import org.osgi.service.http.runtime.dto.FailedResourceDTO;
+import org.osgi.service.http.runtime.dto.FailedServletContextDTO;
+import org.osgi.service.http.runtime.dto.FailedServletDTO;
 import org.osgi.service.http.runtime.dto.FilterDTO;
 import org.osgi.service.http.runtime.dto.ListenerDTO;
 import org.osgi.service.http.runtime.dto.ResourceDTO;
@@ -64,12 +70,12 @@
         RuntimeDTO runtimeDTO = new RuntimeDTO();
         runtimeDTO.attributes = createAttributes();
         //TODO <**
-        runtimeDTO.failedErrorPageDTOs = null;
-        runtimeDTO.failedFilterDTOs = null;
-        runtimeDTO.failedListenerDTOs = null;
-        runtimeDTO.failedResourceDTOs = null;
-        runtimeDTO.failedServletContextDTOs = null;
-        runtimeDTO.failedServletDTOs = null;
+        runtimeDTO.failedErrorPageDTOs = new FailedErrorPageDTO[0];
+        runtimeDTO.failedFilterDTOs = new FailedFilterDTO[0];
+        runtimeDTO.failedListenerDTOs = new FailedListenerDTO[0];
+        runtimeDTO.failedResourceDTOs = new FailedResourceDTO[0];
+        runtimeDTO.failedServletContextDTOs = new FailedServletContextDTO[0];
+        runtimeDTO.failedServletDTOs = new FailedServletDTO[0];
         //**>
         runtimeDTO.servletContextDTOs = createContextDTOs();
         return runtimeDTO;
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/util/PatternUtil.java b/http/base/src/main/java/org/apache/felix/http/base/internal/util/PatternUtil.java
index 7ff1d32..708c628 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/util/PatternUtil.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/util/PatternUtil.java
@@ -18,9 +18,11 @@
  */
 package org.apache.felix.http.base.internal.util;
 
+import java.util.StringTokenizer;
+
 /**
  * Some convenience utilities to deal with path patterns.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public class PatternUtil
@@ -32,11 +34,81 @@
         // see Servlet 3.0, section 12.2
         // - replace '*.' prefixes with a regex that matches extensions...
         result = result.replaceFirst("^\\Q*.\\E(.*)$", "\\^(.*)(\\\\.\\\\Q$1\\\\E)\\$");
-        // - replace '/*' suffixes with a regex that matches paths (actually, 
-        //   the path should also start with a leading slash, but we're a bit 
+        // - replace '/*' suffixes with a regex that matches paths (actually,
+        //   the path should also start with a leading slash, but we're a bit
         //   more liberal on this one)...
         result = result.replaceFirst("^(.*)\\Q/*\\E$", "\\^($1)(|/.*)\\$");
         return result;
     }
 
+    // check for valid symbolic name
+    public static boolean isValidSymbolicName(final String name)
+    {
+        if ( name == null || name.isEmpty() )
+        {
+            return false;
+        }
+        boolean valid = true;
+        boolean expectToken = false;
+        boolean done = false;
+        final StringTokenizer st = new StringTokenizer(name, ".", true);
+        while ( !done && st.hasMoreTokens() )
+        {
+            final String token = st.nextToken();
+            if ( expectToken )
+            {
+                if ( !".".equals(token) )
+                {
+                    valid = false;
+                    done = true;
+                }
+                else
+                {
+                    expectToken = false;
+                }
+            }
+            else
+            {
+                if ( ".".equals(token) )
+                {
+                    valid = false;
+                    done = true;
+                }
+                else
+                {
+                    int i = 0;
+                    while ( i < token.length() && valid )
+                    {
+                        final char c = token.charAt(i);
+                        i++;
+                        if ( c >= 'a' && c <= 'z' )
+                        {
+                            continue;
+                        }
+                        if ( c >= 'A' && c <= 'Z' )
+                        {
+                            continue;
+                        }
+                        if ( c >= '0' && c <= '9' )
+                        {
+                            continue;
+                        }
+                        if ( c == '-' || c == '_' )
+                        {
+                            continue;
+                        }
+                        valid = false;
+                        done = true;
+                    }
+                }
+                expectToken = true;
+            }
+        }
+        if ( !expectToken )
+        {
+            valid = false;
+        }
+
+        return valid;
+    }
 }
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java
index a31484d..d756fe2 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ServletContextHelperManager.java
@@ -513,7 +513,10 @@
         {
             for (List<ContextHandler> contextHandlerList : this.contextMap.values())
             {
-                contextHandlers.addAll(contextHandlerList);
+                if ( !contextHandlerList.isEmpty() )
+                {
+                    contextHandlers.add(contextHandlerList.get(0));
+                }
             }
             handlerRuntimes = registry.getRuntime();
             listenerRuntimes = listenerRegistry.getContextRuntimes();
diff --git a/http/base/src/test/java/org/apache/felix/http/base/internal/util/PatternUtilTest.java b/http/base/src/test/java/org/apache/felix/http/base/internal/util/PatternUtilTest.java
index 5ebc971..602906e 100644
--- a/http/base/src/test/java/org/apache/felix/http/base/internal/util/PatternUtilTest.java
+++ b/http/base/src/test/java/org/apache/felix/http/base/internal/util/PatternUtilTest.java
@@ -29,7 +29,7 @@
 
 /**
  * Test cases for {@link PatternUtil}.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public class PatternUtilTest
@@ -71,4 +71,13 @@
         assertFalse(p6.matcher("/index.gz").matches());
     }
 
+    @Test
+    public void testSymbolicName()
+    {
+        assertTrue(PatternUtil.isValidSymbolicName("default"));
+        assertFalse(PatternUtil.isValidSymbolicName("$bad#"));
+        assertTrue(PatternUtil.isValidSymbolicName("abcdefghijklmnopqrstuvwyz"));
+        assertTrue(PatternUtil.isValidSymbolicName("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
+        assertTrue(PatternUtil.isValidSymbolicName("0123456789-_"));
+    }
 }
