diff --git a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/AbstractOBRBundleRepository.java b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/AbstractOBRBundleRepository.java
index 3a9e07d..6b5484c 100644
--- a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/AbstractOBRBundleRepository.java
+++ b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/AbstractOBRBundleRepository.java
@@ -29,10 +29,12 @@
 import java.net.URL;
 import java.net.URLConnection;
 
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
 import org.apache.felix.sigil.repository.AbstractBundleRepository;
+import org.xml.sax.SAXException;
 
 
 public abstract class AbstractOBRBundleRepository extends AbstractBundleRepository
@@ -61,64 +63,86 @@
     }
 
 
-    protected void readBundles( OBRListener listener ) throws Exception
+    protected void readBundles( OBRListener listener ) 
     {
-        syncOBRIndex();
+        File index = syncOBRIndex();
         OBRHandler handler = new OBRHandler( getObrURL(), getBundleCache(), listener );
-        SAXParser parser = factory.newSAXParser();
-        parser.parse( findLocalOBR(), handler );
+        try
+        {
+            SAXParser parser = factory.newSAXParser();
+            parser.parse( index, handler );
+        }
+        catch ( ParserConfigurationException e )
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        catch ( SAXException e )
+        {
+            System.out.println( "Failed to parse " + index );
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        catch ( IOException e )
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
     }
 
 
-    private File findLocalOBR()
+    private File syncOBRIndex()
     {
+        File file = null;
         if ( "file".equals( getObrURL().getProtocol() ) ) {
             try
             {
-               return new File( getObrURL().toURI() );
+               file = new File( getObrURL().toURI() );
             }
             catch ( URISyntaxException e )
             {
                 // should be impossible ?
                 throw new IllegalStateException( "Failed to convert file url to uri", e );
-            }
+            }            
         }
         else {
-            return getObrlCache();
+            file = getObrlCache();
+            if ( isUpdated() )
+            {
+                cacheIndex(file);
+            }
         }
+        
+        return file;
     }
 
 
-    private void syncOBRIndex()
+    private void cacheIndex(File file)
     {
-        if ( !"file".equals( getObrURL().getProtocol() ) && isUpdated() )
-        {
-            InputStream in = null;
-            OutputStream out = null;
+        InputStream in = null;
+        OutputStream out = null;
 
-            try
+        try
+        {
+            URLConnection c = getObrURL().openConnection();
+            c.connect();
+            in = c.getInputStream();
+            if ( !file.getParentFile().exists() && !file.getParentFile().mkdirs() )
             {
-                URLConnection c = getObrURL().openConnection();
-                c.connect();
-                in = c.getInputStream();
-                File file = getObrlCache();
-                if ( !file.getParentFile().exists() && !file.getParentFile().mkdirs() )
-                {
-                    throw new IOException( "Failed to create obr cache dir " + file.getParentFile() );
-                }
-                out = new FileOutputStream( file );
-                stream( in, out );
+                throw new IOException( "Failed to create obr cache dir " + file.getParentFile() );
             }
-            catch ( IOException e )
-            {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-                getObrlCache().setLastModified( 0 );
-            }
-            finally
-            {
-                close( in, out );
-            }
+            out = new FileOutputStream( file );
+            stream( in, out );
+        }
+        catch ( IOException e )
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            getObrlCache().setLastModified( 0 );
+        }
+        finally
+        {
+            close( in, out );
         }
     }
 
diff --git a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/CachingOBRBundleRepository.java b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/CachingOBRBundleRepository.java
index eb438ff..8fb7dea 100644
--- a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/CachingOBRBundleRepository.java
+++ b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/CachingOBRBundleRepository.java
@@ -71,24 +71,16 @@
         List<ISigilBundle> cached = bundles == null ? null : bundles.get();
         if ( cached == null )
         {
-            try
+            final LinkedList<ISigilBundle> read = new LinkedList<ISigilBundle>();
+            readBundles( new OBRListener()
             {
-                final LinkedList<ISigilBundle> read = new LinkedList<ISigilBundle>();
-                readBundles( new OBRListener()
+                public void handleBundle( ISigilBundle bundle )
                 {
-                    public void handleBundle( ISigilBundle bundle )
-                    {
-                        read.add( bundle );
-                    }
-                } );
-                cached = read;
-                bundles = new SoftReference<List<ISigilBundle>>( cached );
-            }
-            catch ( Exception e )
-            {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
+                    read.add( bundle );
+                }
+            } );
+            cached = read;
+            bundles = new SoftReference<List<ISigilBundle>>( cached );
         }
 
         return cached;
diff --git a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/NonCachingOBRBundleRepository.java b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/NonCachingOBRBundleRepository.java
index a5bd2e4..8e34224 100644
--- a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/NonCachingOBRBundleRepository.java
+++ b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/NonCachingOBRBundleRepository.java
@@ -55,27 +55,19 @@
     @Override
     public void accept( final IRepositoryVisitor visitor, int options )
     {
-        try
+        readBundles( new OBRListener()
         {
-            readBundles( new OBRListener()
+            boolean visit = true;
+
+
+            public void handleBundle( ISigilBundle bundle )
             {
-                boolean visit = true;
-
-
-                public void handleBundle( ISigilBundle bundle )
+                if ( visit )
                 {
-                    if ( visit )
-                    {
-                        visit = visitor.visit( bundle );
-                    }
+                    visit = visitor.visit( bundle );
                 }
-            } );
-        }
-        catch ( Exception e )
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+            }
+        } );
     }
 
 }
