diff --git a/karaf/assembly/src/main/distribution/text/etc/org.ops4j.pax.url.mvn.cfg b/karaf/assembly/src/main/distribution/text/etc/org.ops4j.pax.url.mvn.cfg
index 9eac0ec..8e0e435 100644
--- a/karaf/assembly/src/main/distribution/text/etc/org.ops4j.pax.url.mvn.cfg
+++ b/karaf/assembly/src/main/distribution/text/etc/org.ops4j.pax.url.mvn.cfg
@@ -55,7 +55,7 @@
 #
 # The following property value will add the system folder as a repo.
 #
-org.ops4j.pax.url.mvn.defaultRepositories=file:${karaf.home}/system@snapshots
+org.ops4j.pax.url.mvn.defaultRepositories=file:${karaf.home}/${karaf.default.repository}@snapshots
 
 #
 # Comma separated list of repositories scanned when resolving an artifact.
diff --git a/karaf/assembly/src/main/distribution/text/etc/system.properties b/karaf/assembly/src/main/distribution/text/etc/system.properties
index 42f026f..330c978 100644
--- a/karaf/assembly/src/main/distribution/text/etc/system.properties
+++ b/karaf/assembly/src/main/distribution/text/etc/system.properties
@@ -19,4 +19,5 @@
 
 org.ops4j.pax.logging.DefaultServiceLog.level=ERROR
 karaf.name=root
+karaf.default.repository=system
 xml.catalog.files=
diff --git a/karaf/assembly/src/main/filtered-resources/etc/config.properties b/karaf/assembly/src/main/filtered-resources/etc/config.properties
index 80439e4..56a1f94 100644
--- a/karaf/assembly/src/main/filtered-resources/etc/config.properties
+++ b/karaf/assembly/src/main/filtered-resources/etc/config.properties
@@ -22,8 +22,8 @@
 #
 karaf.framework=felix
 
-karaf.framework.equinox=system/org/eclipse/osgi/${equinox.version}/osgi-${equinox.version}.jar
-karaf.framework.felix=system/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar
+karaf.framework.equinox=${karaf.default.repository}/org/eclipse/osgi/${equinox.version}/osgi-${equinox.version}.jar
+karaf.framework.felix=${karaf.default.repository}/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar
 
 #
 # Framework config properties.
diff --git a/karaf/main/src/main/java/org/apache/felix/karaf/main/Bootstrap.java b/karaf/main/src/main/java/org/apache/felix/karaf/main/Bootstrap.java
index bbda543..6b9dd80 100644
--- a/karaf/main/src/main/java/org/apache/felix/karaf/main/Bootstrap.java
+++ b/karaf/main/src/main/java/org/apache/felix/karaf/main/Bootstrap.java
@@ -29,13 +29,8 @@
 
 public class Bootstrap {
 
-    public static final String FRAMEWORK_PROPERTIES_FILE_NAME = "config.properties";
-
-    public static final String KARAF_FRAMEWORK = "karaf.framework";
-
     public static void main(String[] args) {
         try {
-            updateClassLoader();
             Main.main(args);
         } catch (Throwable t) {
             t.printStackTrace();
@@ -44,46 +39,9 @@
     }
 
     public static Main launch(String[] args) throws Exception {
-        updateClassLoader();
         Main main = new Main(args);
         main.launch();
         return main;
     }
 
-    private static void updateClassLoader() throws Exception {
-        File home = Utils.getKarafHome();
-        File base = Utils.getKarafBase(home);
-        File file = new File(new File(base, "etc"), FRAMEWORK_PROPERTIES_FILE_NAME);
-        if (!file.exists()) {
-            file = new File(new File(home, "etc"), FRAMEWORK_PROPERTIES_FILE_NAME);
-        }
-        if (!file.exists()) {
-            throw new FileNotFoundException(file.getAbsolutePath());
-        }
-        Properties props = new Properties();
-        InputStream is = new FileInputStream(file);
-        props.load(is);
-        is.close();
-
-        String framework = props.getProperty(KARAF_FRAMEWORK);
-        if (framework == null) {
-            throw new IllegalArgumentException("Property " + KARAF_FRAMEWORK + " must be set in the etc/" + FRAMEWORK_PROPERTIES_FILE_NAME + " configuration file");
-        }
-        String bundle = props.getProperty(KARAF_FRAMEWORK + "." + framework);
-        if (bundle == null) {
-            throw new IllegalArgumentException("Property " + KARAF_FRAMEWORK + "." + framework + " must be set in the etc/" + FRAMEWORK_PROPERTIES_FILE_NAME + " configuration file");
-        }
-        File bundleFile = new File(base, bundle);
-        if (!bundleFile.exists()) {
-            bundleFile = new File(home, bundle);
-        }
-        if (!bundleFile.exists()) {
-            throw new FileNotFoundException(bundleFile.getAbsolutePath());
-        }
-
-        URLClassLoader classLoader = (URLClassLoader) Bootstrap.class.getClassLoader();
-        Method mth = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
-        mth.setAccessible(true);
-        mth.invoke(classLoader, bundleFile.toURL());
-    }
 }
diff --git a/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java b/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
index 736be97..7dfe7fb 100644
--- a/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
+++ b/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
@@ -133,6 +133,8 @@
     public static final String PROPERTY_LOCK_LEVEL = "karaf.lock.level";
 
     public static final String DEFAULT_REPO = "karaf.default.repository";
+    
+    public static final String KARAF_FRAMEWORK = "karaf.framework";
 
     public static final String PROPERTY_LOCK_CLASS_DEFAULT = SimpleFileLock.class.getName();
 
@@ -172,6 +174,8 @@
         configProps = loadConfigProperties();
         BootstrapLogManager.setProperties(configProps);
         LOG.addHandler(BootstrapLogManager.getDefaultHandler());
+        
+        updateClassLoader(configProps);
 
         // Copy framework properties from the system properties.
         Main.copySystemProperties(configProps);
@@ -731,7 +735,7 @@
         Properties configProps = loadPropertiesFile(configPropURL);
         Properties startupProps = loadPropertiesFile(startupPropURL);
 
-        String defaultRepo = configProps.getProperty(DEFAULT_REPO, "system");
+        String defaultRepo = System.getProperty(DEFAULT_REPO, "system");
 
         if (karafBase.equals(karafHome)) {
             bundleDirs.add(new File(karafHome, defaultRepo));
@@ -817,6 +821,30 @@
             }
         }
     }
+    
+    private void updateClassLoader(Properties configProps) throws Exception {
+    	String framework = configProps.getProperty(KARAF_FRAMEWORK);
+        if (framework == null) {
+            throw new IllegalArgumentException("Property " + KARAF_FRAMEWORK + " must be set in the etc/" + CONFIG_PROPERTIES_FILE_NAME + " configuration file");
+        }
+        String bundle = configProps.getProperty(KARAF_FRAMEWORK + "." + framework);
+        if (bundle == null) {
+            throw new IllegalArgumentException("Property " + KARAF_FRAMEWORK + "." + framework + " must be set in the etc/" + CONFIG_PROPERTIES_FILE_NAME + " configuration file");
+        }
+        File bundleFile = new File(karafBase, bundle);
+        if (!bundleFile.exists()) {
+            bundleFile = new File(karafHome, bundle);
+        }
+        if (!bundleFile.exists()) {
+            throw new FileNotFoundException(bundleFile.getAbsolutePath());
+        }
+
+        URLClassLoader classLoader = (URLClassLoader) Bootstrap.class.getClassLoader();
+        Method mth = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
+        mth.setAccessible(true);
+        mth.invoke(classLoader, bundleFile.toURL());
+
+    }
 
     /**
      * Process properties to customize default felix behavior
