diff --git a/karaf/deployer/features/src/main/java/org/apache/felix/karaf/deployer/features/FeatureDeploymentListener.java b/karaf/deployer/features/src/main/java/org/apache/felix/karaf/deployer/features/FeatureDeploymentListener.java
index 23a1ba3..6a7f256 100644
--- a/karaf/deployer/features/src/main/java/org/apache/felix/karaf/deployer/features/FeatureDeploymentListener.java
+++ b/karaf/deployer/features/src/main/java/org/apache/felix/karaf/deployer/features/FeatureDeploymentListener.java
@@ -17,6 +17,7 @@
 package org.apache.felix.karaf.deployer.features;
 
 import java.io.File;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.Arrays;
 import java.util.EnumSet;
@@ -115,22 +116,21 @@
     }
 
     public void bundleChanged(BundleEvent bundleEvent) {
-        try {
             Bundle bundle = bundleEvent.getBundle();
             if (bundleEvent.getType() == BundleEvent.RESOLVED) {
                 Enumeration featuresUrlEnumeration = bundle.findEntries("/META-INF/" + FEATURE_PATH + "/", "*.xml", false);
                 while (featuresUrlEnumeration != null && featuresUrlEnumeration.hasMoreElements()) {
                     URL url = (URL) featuresUrlEnumeration.nextElement();
-                    featuresService.addRepository(url.toURI());
-                    for (Repository repo : featuresService.listRepositories()) {
-                        if (repo.getURI().equals(url.toURI())) {
-                            Set<Feature> features = new HashSet<Feature>(Arrays.asList(repo.getFeatures()));
-                            try {
-                                featuresService.installFeatures(features, EnumSet.noneOf(FeaturesService.Option.class));
-                            } catch (Exception e) {
-                                LOGGER.error("Unable to install features", e);
+                    try {
+                        featuresService.addRepository(url.toURI());
+                        for (Repository repo : featuresService.listRepositories()) {
+                            if (repo.getURI().equals(url.toURI())) {
+                                Set<Feature> features = new HashSet<Feature>(Arrays.asList(repo.getFeatures()));
+                                    featuresService.installFeatures(features, EnumSet.noneOf(FeaturesService.Option.class));
                             }
                         }
+                    } catch (Exception e) {
+                        LOGGER.error("Unable to install features", e);
                     }
                 }
             } else if (bundleEvent.getType() == BundleEvent.UNINSTALLED) {
@@ -138,22 +138,27 @@
                 while (featuresUrlEnumeration != null && featuresUrlEnumeration.hasMoreElements()) {
                     URL url = (URL) featuresUrlEnumeration.nextElement();
                     for (Repository repo : featuresService.listRepositories()) {
-                        if (repo.getURI().equals(url.toURI())) {
-                            for (Feature f : repo.getFeatures()) {
-                                try {
-                                    featuresService.uninstallFeature(f.getName(), f.getVersion());
-                                } catch (Exception e) {
-                                    LOGGER.error("Unable to uninstall feature: " + f.getName(), e);
+                        try {
+                            if (repo.getURI().equals(url.toURI())) {
+                                for (Feature f : repo.getFeatures()) {
+                                    try {
+                                        featuresService.uninstallFeature(f.getName(), f.getVersion());
+                                    } catch (Exception e) {
+                                        LOGGER.error("Unable to uninstall feature: " + f.getName(), e);
+                                    }
                                 }
                             }
+                        } catch (Exception e) {
+                            LOGGER.error("Unable to uninstall features: " + url, e);
                         }
                     }
-                    featuresService.removeRepository(url.toURI());
+                    try {
+                        featuresService.removeRepository(url.toURI());
+                    } catch (URISyntaxException e) {
+                        LOGGER.error("Unable to remove repository: " + url, e);
+                    }
                 }
             }
-        } catch (Exception e) {
-            LOGGER.error("Unable to install / uninstall feature", e);
-        }
     }
 
     protected Document parse(File artifact) throws Exception {
diff --git a/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/AddUrlCommand.java b/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/AddUrlCommand.java
index 2a3141a..237ac50 100644
--- a/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/AddUrlCommand.java
+++ b/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/AddUrlCommand.java
@@ -31,7 +31,11 @@
 
     protected void doExecute(FeaturesService admin) throws Exception {
         for (String url : urls) {
-            admin.addRepository(new URI(url));
+            try {
+                admin.addRepository(new URI(url));
+            } catch (Exception e) {
+                System.out.println("Could not add Feature Repository:\n" + e );  
+            }
         }
     }
 }
diff --git a/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/RefreshUrlCommand.java b/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/RefreshUrlCommand.java
index de088b2..de67840 100644
--- a/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/RefreshUrlCommand.java
+++ b/karaf/features/command/src/main/java/org/apache/felix/karaf/features/command/RefreshUrlCommand.java
@@ -39,9 +39,13 @@
             }
         }
         for (String strUri : urls) {
-            URI uri = new URI(strUri);
-            admin.removeRepository(uri);
-            admin.addRepository(uri);
+            try {
+                URI uri = new URI(strUri);
+                admin.removeRepository(uri);
+                admin.addRepository(uri);
+            } catch (Exception e) {
+                System.out.println("Could not refresh Feature Repository:\n" + e.getMessage() );
+            }
         }
     }
 }
diff --git a/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java b/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
index 5a4da58..07e9199 100644
--- a/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
+++ b/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
@@ -163,16 +163,11 @@
 
     protected RepositoryImpl internalAddRepository(URI uri) throws Exception {
     	RepositoryImpl repo = null;
-        try {
-            repo = new RepositoryImpl(uri);
-            repo.load();
-            repositories.put(uri, repo);
-            callListeners(new RepositoryEvent(repo, RepositoryEvent.EventType.RepositoryAdded, false));
-            features = null;
-            
-        } catch (Exception e) {
-            LOGGER.warn(e.getMessage());
-        }
+        repo = new RepositoryImpl(uri);
+        repo.load();
+        repositories.put(uri, repo);
+        callListeners(new RepositoryEvent(repo, RepositoryEvent.EventType.RepositoryAdded, false));
+        features = null;
         return repo;
         
     }
diff --git a/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/RepositoryImpl.java b/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/RepositoryImpl.java
index 88f4c6e..374f3cf 100644
--- a/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/RepositoryImpl.java
+++ b/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/RepositoryImpl.java
@@ -21,6 +21,7 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLConnection;
+import java.rmi.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
@@ -33,6 +34,8 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -47,6 +50,7 @@
  */
 public class RepositoryImpl implements Repository {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(RepositoryImpl.class);
     private int unnamedRepoId = 0;
     private String name;
     private URI uri;
@@ -106,7 +110,12 @@
                 }
                 if ("repository".equals(node.getNodeName())) {
                     Element e = (Element) nodes.item(i);
-                    repositories.add(new URI(e.getTextContent()));
+                    try {
+                        URI newrepo = new URI(e.getTextContent());
+                        repositories.add(newrepo);
+                    } catch (URISyntaxException ex) {
+                        LOGGER.error("Could not load feature repository: " + ex.getMessage() + " in feature repository " + uri);
+                    }
                 } else if ("feature".equals(node.getNodeName())) {
                     Element e = (Element) nodes.item(i);
                     String name = e.getAttribute("name");
@@ -155,10 +164,10 @@
             throw (IOException) new IOException().initCause(e);
         } catch (ParserConfigurationException e) {
             throw (IOException) new IOException().initCause(e);
-        } catch (URISyntaxException e) {
-            throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
         } catch (IllegalArgumentException e) {
             throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
+        } catch (Exception e) {
+            throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
         }
     }
 
