diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java
index 72d714c..4bc673a 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java
@@ -102,7 +102,7 @@
 
             BundleWebappLoader loader = new BundleWebappLoader(bundle, this.classLoaderCustomizer);
             context.setLoader(loader);
-            context.setResources(new BundleWebResourceRoot(bundle, docBase));
+            context.setResources(new BundleWebResourceRoot(bundle));
 
             ServletContext servletContext = context.getServletContext();
 
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java
index d645640..7360db0 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java
@@ -25,7 +25,6 @@
 import org.apache.catalina.Host;
 import org.apache.catalina.WebResource;
 import org.apache.catalina.WebResourceSet;
-import org.apache.catalina.webresources.EmptyResourceSet;
 import org.apache.catalina.webresources.StandardRoot;
 import org.osgi.framework.Bundle;
 
@@ -37,16 +36,9 @@
 
     private Path docBase;
 
-    public BundleWebResourceRoot(Bundle bundle, String docBaseStr) {
+    public BundleWebResourceRoot(Bundle bundle) {
         this.bundle = bundle;
         this.main = new BundleWebResource(this.bundle, this);
-
-        if (docBaseStr != null) {
-            this.docBase = Paths.get(docBaseStr);
-            if (!this.docBase.isAbsolute()) {
-                this.docBase = Paths.get(((Host) getContext().getParent()).getAppBaseFile().getPath()).resolve(this.docBase);
-            }
-        }
     }
 
     @Override
@@ -59,31 +51,18 @@
     public void createWebResourceSet(ResourceSetType type, String webAppMount, String base, String archivePath, String internalPath) {
         WebResourceSet resourceSet = null;
 
-        if (base.startsWith("bundleentry")) {
-            if (archivePath != null) {
-                if (archivePath.toLowerCase(Locale.ENGLISH).endsWith(".jar")) {
-                    resourceSet = new BundleJarResourceSet(this, webAppMount, base + archivePath, internalPath);
-                } else {
-                    WebResource entry = ((BundleWebResource) this.main).getNamedEntry(archivePath).getKey();
-                    if (entry != null) {
-                        resourceSet = new BundleWebResourceSet(entry, this, webAppMount, this.docBase.toAbsolutePath().toString() + archivePath,
-                            internalPath);
-                    }
-                }
-
-                if (type.equals(ResourceSetType.CLASSES_JAR) && resourceSet != null) {
-                    resourceSet.setClassLoaderOnly(true);
+        if (archivePath != null) {
+            if (archivePath.toLowerCase(Locale.ENGLISH).endsWith(".jar")) {
+                resourceSet = new BundleJarResourceSet(this, webAppMount, base + archivePath, internalPath);
+            } else {
+                WebResource entry = ((BundleWebResource) this.main).getNamedEntry(archivePath).getKey();
+                if (entry != null) {
+                    resourceSet = new BundleWebResourceSet(entry, this, webAppMount, base + archivePath, internalPath);
                 }
             }
-        } else {
-            // TODO need additional testing
-            WebResource entry = ((BundleWebResource) this.main).getNamedEntry(base).getKey();
-            if (entry != null) {
-                resourceSet = new BundleWebResourceSet(entry, this, webAppMount, base, internalPath);
 
-                if (type.equals(ResourceSetType.CLASSES_JAR)) {
-                    resourceSet.setClassLoaderOnly(true);
-                }
+            if (type.equals(ResourceSetType.CLASSES_JAR) && resourceSet != null) {
+                resourceSet.setClassLoaderOnly(true);
             }
         }
 
@@ -122,16 +101,15 @@
 
     @Override
     protected WebResourceSet createMainResourceSet() {
-        WebResourceSet mainResourceSet;
-
-        if (this.docBase == null) {
-            // TODO When we are in not Equinox case the docBase will be null
-            // we need to handle this case also
-            mainResourceSet = new EmptyResourceSet(this);
-        } else {
-            mainResourceSet = new BundleWebResourceSet(this.main, this, "/", this.docBase.toAbsolutePath().toString(), "/");
+        String docBaseStr = getContext().getDocBase();
+        if (docBaseStr != null) {
+            this.docBase = Paths.get(docBaseStr);
+            if (!this.docBase.isAbsolute()) {
+                this.docBase = Paths.get(((Host) getContext().getParent()).getAppBaseFile().getPath()).resolve(this.docBase);
+            }
         }
-        return mainResourceSet;
+
+        return new BundleWebResourceSet(this.main, this, "/", this.docBase != null ? this.docBase.toAbsolutePath().toString() : null, "/");
     }
 
     private static class BaseLocation {
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSet.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSet.java
index b44bd94..f6bfbe6 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSet.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSet.java
@@ -17,9 +17,6 @@
 package org.eclipse.gemini.web.tomcat.internal.bundleresources;
 
 import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map.Entry;
@@ -28,7 +25,6 @@
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.WebResource;
 import org.apache.catalina.WebResourceRoot;
-import org.apache.catalina.WebResourceRoot.ResourceSetType;
 import org.apache.catalina.util.ResourceSet;
 import org.apache.catalina.webresources.EmptyResource;
 
@@ -43,14 +39,6 @@
         setInternalPath(internalPath);
         this.bundleEntry = bundleEntry;
 
-        if (root.getContext().getAddWebinfClassesResources()) {
-            Path f = Paths.get(base, internalPath, "/WEB-INF/classes/META-INF/resources");
-
-            if (Files.isDirectory(f)) {
-                root.createWebResourceSet(ResourceSetType.RESOURCE_JAR, "/", f.toAbsolutePath().toString(), null, "/");
-            }
-        }
-
         if (getRoot().getState().isAvailable()) {
             try {
                 start();
diff --git a/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSetTests.java b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSetTests.java
index 5bf3be3..a2ec273 100644
--- a/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSetTests.java
+++ b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceSetTests.java
@@ -25,7 +25,6 @@
 
 import java.io.File;
 
-import org.apache.catalina.Context;
 import org.apache.catalina.LifecycleState;
 import org.apache.catalina.WebResource;
 import org.apache.catalina.WebResourceRoot;
@@ -46,8 +45,6 @@
 
     private WebResourceRoot root;
 
-    private Context context;
-
     @Before
     public void setUp() throws Exception {
         this.testBundle.addEntry("", new File("src/test/resources/").toURI().toURL());
@@ -56,15 +53,12 @@
         this.testBundle.setFindEntriesDelegate(new FindEntriesDelegateImpl(this.testBundle));
 
         this.root = createMock(WebResourceRoot.class);
-        this.context = createMock(Context.class);
-        expect(this.root.getContext()).andReturn(this.context);
-        expect(this.context.getAddWebinfClassesResources()).andReturn(false);
         expect(this.root.getState()).andReturn(LifecycleState.STARTED);
     }
 
     @Test
     public void testGetAttributesOfDirectory() {
-        replay(this.root, this.context);
+        replay(this.root);
 
         this.bundleWebResourceSet = new BundleWebResourceSet(new BundleWebResource(this.testBundle, this.root), this.root, "/", null, "/");
         WebResource webResource = this.bundleWebResourceSet.getResource(DIRECTORY_NAME);
@@ -78,12 +72,12 @@
 
         assertTrue(webResource.getContentLength() != -1);
 
-        verify(this.root, this.context);
+        verify(this.root);
     }
 
     @Test
     public void testGetAttributesOfFile() {
-        replay(this.root, this.context);
+        replay(this.root);
 
         this.bundleWebResourceSet = new BundleWebResourceSet(new BundleWebResource(this.testBundle, this.root), this.root, "/", null, "/");
         WebResource webResource = this.bundleWebResourceSet.getResource(FILE_NAME);
@@ -97,7 +91,7 @@
 
         assertTrue(webResource.getContentLength() != -1);
 
-        verify(this.root, this.context);
+        verify(this.root);
     }
 
 }
