diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
index b6b91e0..d76c28f 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
@@ -77,6 +77,9 @@ import static java.lang.String.format;
 public class FeaturesServiceImpl implements FeaturesService {
     private static final Logger LOGGER = LoggerFactory.getLogger(FeaturesServiceImpl.class);
 
+    private static final int KARAF_BUNDLE_START_LEVEL =
+            Integer.parseInt(System.getProperty("karaf.startlevel.bundle", "80"));
+
     private final BundleManager bundleManager;
     private final FeatureConfigInstaller configManager;
 
@@ -392,6 +395,7 @@ public class FeaturesServiceImpl implements FeaturesService {
                     state.bundles.addAll(s.bundles);
                     state.features.putAll(s.features);
                     state.installed.addAll(s.installed);
+                    state.bundleStartLevels.putAll(s.bundleStartLevels);
             	} catch (Exception e) {
                     failure.bundles.addAll(s.bundles);
                     failure.features.putAll(s.features);
@@ -410,8 +414,7 @@ public class FeaturesServiceImpl implements FeaturesService {
                 Collections.sort(bundlesSortedByStartLvl, new Comparator<Bundle>() {
                     @Override
                     public int compare(Bundle bundle, Bundle bundle1) {
-                        return state.bundleInfos.get(bundle.getBundleId()).getStartLevel() -
-                                state.bundleInfos.get(bundle1.getBundleId()).getStartLevel();
+                        return state.bundleStartLevels.get(bundle) - state.bundleStartLevels.get(bundle1);
                     }
                 });
             }
@@ -514,6 +517,7 @@ public class FeaturesServiceImpl implements FeaturesService {
             int startLevel = getBundleStartLevel(bInfo.getStartLevel(),feature.getStartLevel());
             BundleInstallerResult result = bundleManager.installBundleIfNeeded(bInfo.getLocation(), startLevel, feature.getRegion());
             state.bundles.add(result.bundle);
+            state.bundleStartLevels.put(result.bundle, startLevel);
             if (result.isNew) {
                 state.installed.add(result.bundle);
             }
@@ -531,7 +535,13 @@ public class FeaturesServiceImpl implements FeaturesService {
     }
 
     private int getBundleStartLevel(int bundleStartLevel, int featureStartLevel) {
-        return (bundleStartLevel > 0) ? bundleStartLevel : featureStartLevel;
+        if(bundleStartLevel > 0){
+            return bundleStartLevel;
+        }
+        if(featureStartLevel > 0){
+            return featureStartLevel;
+        }
+        return KARAF_BUNDLE_START_LEVEL;
     }
 
     protected void doInstallFeatureConditionals(InstallationState state, Feature feature,  boolean verbose) throws Exception {
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/InstallationState.java b/features/core/src/main/java/org/apache/karaf/features/internal/InstallationState.java
index b26ce1d..0594497 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/InstallationState.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/InstallationState.java
@@ -30,5 +30,6 @@ public class InstallationState {
     final Set<Bundle> installed = new HashSet<Bundle>();
     final Set<Bundle> bundles = new TreeSet<Bundle>();
     final Map<Long, BundleInfo> bundleInfos = new HashMap<Long, BundleInfo>();
+    final Map<Bundle,Integer> bundleStartLevels = new HashMap<Bundle, Integer>();
     final Map<Feature, Set<Long>> features = new HashMap<Feature, Set<Long>>();
 }
\ No newline at end of file
