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 07e9199..128a383 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
@@ -62,6 +62,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.lang.String.format;
+
 /**
  * The Features service implementation.
  * Adding a repository url will load the features contained in this repository and
@@ -630,7 +632,11 @@
         if (!loadState()) {
             if (uris != null) {
                 for (URI uri : uris) {
-                    internalAddRepository(uri);
+                    try {
+                        internalAddRepository(uri);
+                    } catch (Exception e) {
+                        LOGGER.warn(format("Unable to add features repository %s at startup", uri), e);    
+                    }
                 }
             }
             saveState();
diff --git a/karaf/features/core/src/test/java/org/apache/felix/karaf/features/internal/FeaturesServiceImplTest.java b/karaf/features/core/src/test/java/org/apache/felix/karaf/features/internal/FeaturesServiceImplTest.java
index 8c8cb10..6728358 100644
--- a/karaf/features/core/src/test/java/org/apache/felix/karaf/features/internal/FeaturesServiceImplTest.java
+++ b/karaf/features/core/src/test/java/org/apache/felix/karaf/features/internal/FeaturesServiceImplTest.java
@@ -21,6 +21,14 @@
 
 import junit.framework.TestCase;
 import org.apache.felix.karaf.features.Feature;
+import org.easymock.EasyMock;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+import org.osgi.service.prefs.PreferencesService;
+
+import static org.easymock.EasyMock.*;
 
 /**
  * Test cases for {@link FeaturesServiceImpl}
@@ -85,4 +93,25 @@
         assertSame("2.0.0", impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION).getVersion());
     }
 
+    public void testStartDoesNotFailWithOneInvalidUri() throws BackingStoreException {
+        PreferencesService preferencesService = createNiceMock(PreferencesService.class);
+        Preferences prefs = createNiceMock(Preferences.class);
+        Preferences emptyPrefs = createNiceMock(Preferences.class);
+        expect(preferencesService.getUserPreferences("FeaturesServiceState")).andStubReturn(prefs);
+        replay(preferencesService);
+
+        expect(prefs.node("repositories")).andReturn(emptyPrefs);
+        expect(prefs.node("features")).andReturn(emptyPrefs);
+        replay(prefs);
+
+        FeaturesServiceImpl service = new FeaturesServiceImpl();
+        service.setPreferences(preferencesService);
+
+        try {
+            service.setUrls("mvn:inexistent/features/1.0/xml/features");
+            service.start();
+        } catch (Exception e) {
+            fail(String.format("Service should not throw start-up exception but log the error instead: %s", e));
+        }
+    }
 }
