diff --git a/karaf/assembly/src/main/filtered-resources/etc/config.properties b/karaf/assembly/src/main/filtered-resources/etc/config.properties
index 56a1f94..2472ed4 100644
--- a/karaf/assembly/src/main/filtered-resources/etc/config.properties
+++ b/karaf/assembly/src/main/filtered-resources/etc/config.properties
@@ -57,6 +57,7 @@
 felix.fileinstall.dir    = ${karaf.base}/etc
 felix.fileinstall.filter = .*\\.cfg
 felix.fileinstall.poll   = 1000
+felix.fileinstall.noInitialDelay = true
 
 #
 # Hack for FELIX-1628
diff --git a/karaf/assembly/src/main/filtered-resources/etc/startup.properties b/karaf/assembly/src/main/filtered-resources/etc/startup.properties
index aec67b6..b1b679b 100644
--- a/karaf/assembly/src/main/filtered-resources/etc/startup.properties
+++ b/karaf/assembly/src/main/filtered-resources/etc/startup.properties
@@ -23,13 +23,13 @@
 #
 # Startup core services like logging
 #
-org/apache/felix/org.apache.felix.fileinstall/${felix.fileinstall.version}/org.apache.felix.fileinstall-${felix.fileinstall.version}.jar=5
 org/ops4j/pax/url/pax-url-mvn/${pax.url.version}/pax-url-mvn-${pax.url.version}.jar=5
 org/ops4j/pax/url/pax-url-wrap/${pax.url.version}/pax-url-wrap-${pax.url.version}.jar=5
 org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar=8
 org/ops4j/pax/logging/pax-logging-service/${pax.logging.version}/pax-logging-service-${pax.logging.version}.jar=8
 org/apache/felix/org.apache.felix.configadmin/${felix.configadmin.version}/org.apache.felix.configadmin-${felix.configadmin.version}.jar=10
 org/apache/felix/org.apache.felix.prefs/${felix.prefs.version}/org.apache.felix.prefs-${felix.prefs.version}.jar=10
+org/apache/felix/org.apache.felix.fileinstall/${felix.fileinstall.version}/org.apache.felix.fileinstall-${felix.fileinstall.version}.jar=11
 
 #
 # The rest of the services..
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 7dfe7fb..8f864bb 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
@@ -470,7 +470,6 @@
                                 Bundle b = context.installBundle(parts[0], new URL(parts[1]).openStream());
                                 if (b != null) {
                                     b.start();
-                                    checkCmProperties(b);
                                 }
                             }
                             catch (Exception ex) {
@@ -484,59 +483,6 @@
         }
     }
 
-    /**
-     * TODO: remove this hack when FELIX-1628 is properly implemented
-     * Hack for FELIX-1626.
-     * FileInstall has some delay before installing the configurations which can cause some problems
-     *
-     * @param b
-     */
-    private void checkCmProperties(final Bundle b) {
-        final String cmDir = (String) configProps.get(PROPERTY_CM_DIRECTORY);
-        if (cmProcessed || cmDir == null) {
-            return;
-        }
-        try {
-            // Try to load fileinstall internal classes.
-            // Those are not exported, so this mean if the load succeeds, we have the fileinstall bundle
-            final Class ciClass = b.loadClass("org.apache.felix.fileinstall.internal.ConfigInstaller");
-            final Class fiClass = b.loadClass("org.apache.felix.fileinstall.internal.FileInstall");
-            // If we have been able to load the classes, start a thread that will wait until
-            // fileinstall is correctly configured using config admin and push all configs.
-            new Thread() {
-                public void run() {
-                    for (int i = 0; !cmProcessed && i < 100; i++) {
-                        try {
-                            Thread.sleep(50);
-                            Method mth = fiClass.getDeclaredMethod("getConfigurationAdmin", long.class);
-                            mth.setAccessible(true);
-                            if (mth.invoke(null, 0) != null) {
-                                Constructor cns = ciClass.getDeclaredConstructor(BundleContext.class);
-                                cns.setAccessible(true);
-                                Object ci = cns.newInstance(b.getBundleContext());
-                                mth = ciClass.getDeclaredMethod("setConfig", File.class);
-                                mth.setAccessible(true);
-                                cmProcessed = true;
-//                                System.err.println("Found ready FileInstall");
-                                for (File f : new File(cmDir).listFiles()) {
-                                    if (f.getName().endsWith(".cfg")) {
-//                                        System.err.println("Processing: " + f.getName());
-                                        mth.invoke(ci, f);
-                                    }
-                                }
-                            }
-                        } catch (Throwable t) {
-                            if (cmProcessed) {
-                                t.printStackTrace();
-                            }
-                        }
-                    }
-                }
-            }.start();
-        } catch (Throwable t) {
-        }
-    }
-
     private static String[] convertToMavenUrlsIfNeeded(String location, boolean convertToMavenUrls) {
         String[] parts = location.split("\\|");
         if (convertToMavenUrls) {
