diff --git a/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java b/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
index c09725e..d3f3c8e 100644
--- a/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
+++ b/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
@@ -512,13 +512,7 @@
 
         if (path.trim().equals("/"))
         {
-            return new URLConnection(url) 
-            {
-                public void connect() throws IOException 
-                {
-                    throw new IOException("Resource not provided by any extension!");
-                }
-            };
+            return new URLHandlersBundleURLConnection(url);
         }
 
         for (Iterator iter = m_extensions.iterator(); iter.hasNext();)
diff --git a/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java b/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
index 69a3d7e..ac8cc82 100644
--- a/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
+++ b/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
@@ -37,6 +37,11 @@
     private String m_contentType;
     private InputStream m_is;
 
+    public URLHandlersBundleURLConnection(URL url)
+    {
+        super(url);
+    }
+
     public URLHandlersBundleURLConnection(URL url, Felix framework)
         throws IOException
     {
@@ -92,7 +97,7 @@
         }
     }
 
-    public void connect() throws IOException
+    public synchronized void connect() throws IOException
     {
         if (!connected)
         {
@@ -112,42 +117,36 @@
     public InputStream getInputStream()
         throws IOException
     {
-        if (!connected)
-        {
-            connect();
-        }
+        connect();
+
         return m_is;
     }
 
     public int getContentLength()
     {
-        if (!connected)
+        try
         {
-            try
-            {
-                connect();
-            }
-            catch(IOException ex)
-            {
-                return -1;
-            }
+            connect();
         }
+        catch(IOException ex)
+        {
+            return -1;
+        }
+
         return m_contentLength;
     }
 
     public long getLastModified()
     {
-        if (!connected)
+        try
         {
-            try
-            {
-                connect();
-            }
-            catch(IOException ex)
-            {
-                return 0;
-            }
+            connect();
         }
+        catch(IOException ex)
+        {
+            return 0;
+        }
+
         if (m_contentTime != -1L)
         {
             return m_contentTime;
@@ -160,17 +159,15 @@
 
     public String getContentType()
     {
-        if (!connected)
+        try
         {
-            try
-            {
-                connect();
-            }
-            catch (IOException ex)
-            {
-                return null;
-            }
+            connect();
         }
+        catch (IOException ex)
+        {
+            return null;
+        }
+
         return m_contentType;
     }
 
