diff --git a/src/main/java/org/apache/sling/crankstart/launcher/BundlesInstaller.java b/src/main/java/org/apache/sling/crankstart/launcher/BundlesInstaller.java
index 929ca41..2436ca2 100644
--- a/src/main/java/org/apache/sling/crankstart/launcher/BundlesInstaller.java
+++ b/src/main/java/org/apache/sling/crankstart/launcher/BundlesInstaller.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Arrays;
 
 import org.apache.sling.provisioning.model.Artifact;
 import org.apache.sling.provisioning.model.ArtifactGroup;
@@ -36,9 +37,11 @@
 public class BundlesInstaller {
     private final Logger log = LoggerFactory.getLogger(getClass());
     private final Model model;
+    private final RunModeFilter rmFilter;
     
-    public BundlesInstaller(Model m) {
+    public BundlesInstaller(Model m, RunModeFilter rmFilter) {
         model = m;
+        this.rmFilter = rmFilter;
     }
     
     public void installBundles(BundleContext ctx, FeatureFilter filter) throws IOException, BundleException {
@@ -50,6 +53,10 @@
             
             log.info("Processing feature: {}", f.getName());
             for(RunMode rm : f.getRunModes()) {
+                if(!rmFilter.runModeActive(rm)) {
+                    log.info("RunMode is not active, ignored: {}", Arrays.asList(rm.getNames()));
+                    continue;
+                }
                 for(ArtifactGroup g : rm.getArtifactGroups()) {
                     final int startLevel = g.getStartLevel();
                     for(Artifact a : g) {
diff --git a/src/main/java/org/apache/sling/crankstart/launcher/Configurations.java b/src/main/java/org/apache/sling/crankstart/launcher/Configurations.java
index a0edf96..6da4b45 100644
--- a/src/main/java/org/apache/sling/crankstart/launcher/Configurations.java
+++ b/src/main/java/org/apache/sling/crankstart/launcher/Configurations.java
@@ -18,6 +18,7 @@
 
 import java.io.Closeable;
 import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
 import java.util.Dictionary;
 
 import org.apache.sling.provisioning.model.Configuration;
@@ -34,6 +35,7 @@
     private final Logger log = LoggerFactory.getLogger(getClass());
     public static final String CONFIG_ADMIN_CLASS = "org.osgi.service.cm.ConfigurationAdmin";
     private final Model model;
+    private final RunModeFilter rmFilter;
     private final ServiceTracker tracker;
     private ConfigAdminProxy proxy; 
     
@@ -78,8 +80,9 @@
         }
     }
     
-    public Configurations(BundleContext ctx, Model m) {
+    public Configurations(BundleContext ctx, Model m, RunModeFilter rmFilter) {
         model = m;
+        this.rmFilter = rmFilter;
         tracker = new ServiceTracker(ctx, CONFIG_ADMIN_CLASS, null);
         tracker.open();
     }
@@ -107,6 +110,10 @@
         log.info("Activating configurations from provisioning model");
         for(Feature f : model.getFeatures()) {
             for(RunMode r : f.getRunModes()) {
+                if(!rmFilter.runModeActive(r)) {
+                    log.info("RunMode is not active, ignored: {}", Arrays.asList(r.getNames()));
+                    continue;
+                }
                 for(Configuration c : r.getConfigurations()) {
                     try {
                         setConfig(c);
diff --git a/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java b/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java
index 456b8ba..d01f08e 100644
--- a/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java
+++ b/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java
@@ -58,12 +58,15 @@
         final FrameworkFactory factory = (FrameworkFactory)getClass().getClassLoader().loadClass("org.apache.felix.framework.FrameworkFactory").newInstance();
         final Framework framework = factory.newFramework(fprops);
         framework.start();
-        final Configurations cfg = new Configurations(framework.getBundleContext(), model);
+        
+        final RunModeFilter rmFilter = new RunModeFilter();
+        
+        final Configurations cfg = new Configurations(framework.getBundleContext(), model, rmFilter);
         setShutdownHook(framework, new Closeable[] { cfg });
         log.info("OSGi framework started");
         
         log.info("Installing bundles from provisioning model");
-        final BundlesInstaller bi = new BundlesInstaller(model);
+        final BundlesInstaller bi = new BundlesInstaller(model, rmFilter);
         final BundleContext bc = framework.getBundleContext();
         bi.installBundles(bc, Launcher.NOT_CRANKSTART_FILTER);
         cfg.maybeConfigure();
diff --git a/src/main/java/org/apache/sling/crankstart/launcher/RunModeFilter.java b/src/main/java/org/apache/sling/crankstart/launcher/RunModeFilter.java
new file mode 100644
index 0000000..bdd0a80
--- /dev/null
+++ b/src/main/java/org/apache/sling/crankstart/launcher/RunModeFilter.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.crankstart.launcher;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.sling.provisioning.model.RunMode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RunModeFilter {
+    private final Logger log = LoggerFactory.getLogger(getClass());
+    private final List<String> activeRunModes;
+    public static final String SLING_RUN_MODES = "sling.run.modes";
+
+    RunModeFilter() {
+        final String sysProp = System.getProperty(SLING_RUN_MODES, "");
+        activeRunModes = new ArrayList<String>(Arrays.asList(sysProp.split(",")));
+        log.info("Active run modes: {}", activeRunModes);
+    }
+    
+    public boolean runModeActive(RunMode m) {
+        // A RunMode is active if all its names are active
+        final String [] names = m.getNames();
+        if(names == null || names.length == 0) {
+            return true;
+        }
+        
+        boolean active = true;
+        for(String name : names) {
+            active &= activeRunModes.contains(name);
+        }
+        return active;
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/crankstart/launcher/RunModeATest.java b/src/test/java/org/apache/sling/crankstart/launcher/RunModeATest.java
index 8bb1e54..6b87871 100644
--- a/src/test/java/org/apache/sling/crankstart/launcher/RunModeATest.java
+++ b/src/test/java/org/apache/sling/crankstart/launcher/RunModeATest.java
@@ -27,7 +27,7 @@
     
     @BeforeClass
     public static void setupClass() throws IOException {
-        System.setProperty(U.SLING_RUN_MODES, RUN_MODES);
+        System.setProperty(RunModeFilter.SLING_RUN_MODES, RUN_MODES);
         C.setup();
         osgiConsole = new WebconsoleClient(C.getBaseUrl(), U.ADMIN, U.ADMIN);
     }
@@ -39,7 +39,7 @@
     
     @AfterClass
     public static void cleanupClass() {
-        System.clearProperty(U.SLING_RUN_MODES);
+        System.clearProperty(RunModeFilter.SLING_RUN_MODES);
     }
     
     @Test
@@ -54,8 +54,7 @@
         U.setAdminCredentials(client);
         U.assertHttpGet(C, client,
                 "/test/config/runmode.test", 
-                "runmode.test#mode=(String)That's B#service.pid=(String)runmode.test##EOC#");
-                // TODO should be "runmode.test#mode=(String)This is A##EOC#");
+                "runmode.test#mode=(String)This is A#service.pid=(String)runmode.test##EOC#");
     }
     
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/crankstart/launcher/RunModeBTest.java b/src/test/java/org/apache/sling/crankstart/launcher/RunModeBTest.java
new file mode 100644
index 0000000..412c60b
--- /dev/null
+++ b/src/test/java/org/apache/sling/crankstart/launcher/RunModeBTest.java
@@ -0,0 +1,60 @@
+package org.apache.sling.crankstart.launcher;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.sling.commons.testing.junit.Retry;
+import org.apache.sling.commons.testing.junit.RetryRule;
+import org.apache.sling.testing.tools.osgi.WebconsoleClient;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+
+/** Test our run modes support */ 
+public class RunModeBTest {
+    
+    private static CrankstartSetup C = new CrankstartSetup();
+    private static WebconsoleClient osgiConsole;
+    private DefaultHttpClient client;
+    private static final String RUN_MODES = "bala,B,laika,another";
+    
+    @Rule
+    public final RetryRule retryRule = new RetryRule();
+    
+    @BeforeClass
+    public static void setupClass() throws IOException {
+        System.setProperty(RunModeFilter.SLING_RUN_MODES, RUN_MODES);
+        C.setup();
+        osgiConsole = new WebconsoleClient(C.getBaseUrl(), U.ADMIN, U.ADMIN);
+    }
+    
+    @Before
+    public void setup() throws IOException {
+        client = new DefaultHttpClient();
+    }
+    
+    @AfterClass
+    public static void cleanupClass() {
+        System.clearProperty(RunModeFilter.SLING_RUN_MODES);
+    }
+    
+    @Test
+    @Retry(timeoutMsec=U.LONG_TIMEOUT_MSEC, intervalMsec=U.STD_INTERVAL)
+    public void testSlingApiVersionA() throws Exception {
+        assertEquals("2.0.6", osgiConsole.getBundleVersion(U.SLING_API_BUNDLE));
+    }
+    
+    @Test
+    @Retry(timeoutMsec=U.LONG_TIMEOUT_MSEC, intervalMsec=U.STD_INTERVAL)
+    public void testConfigA() throws Exception {
+        U.setAdminCredentials(client);
+        U.assertHttpGet(C, client,
+                "/test/config/runmode.test", 
+                "runmode.test#mode=(String)That's B + another#service.pid=(String)runmode.test##EOC#");
+    }
+    
+}
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/crankstart/launcher/U.java b/src/test/java/org/apache/sling/crankstart/launcher/U.java
index 42c6d94..626acc2 100644
--- a/src/test/java/org/apache/sling/crankstart/launcher/U.java
+++ b/src/test/java/org/apache/sling/crankstart/launcher/U.java
@@ -23,11 +23,10 @@
 public class U {
     
     public static final String ADMIN = "admin";
-    public static final int LONG_TIMEOUT_SECONDS = 10;
+    public static final int LONG_TIMEOUT_SECONDS = 2; // TODO 10
     public static final int LONG_TIMEOUT_MSEC = LONG_TIMEOUT_SECONDS * 1000;
     public static final int STD_INTERVAL = 250;
     public static final String SLING_API_BUNDLE = "org.apache.sling.api";
-    public static final String SLING_RUN_MODES = "sling.run.modes";
     
     static void setAdminCredentials(DefaultHttpClient c) {
         c.getCredentialsProvider().setCredentials(
diff --git a/src/test/resources/provisioning-model/crankstart-tests.txt b/src/test/resources/provisioning-model/crankstart-tests.txt
index e186d7f..b43499e 100644
--- a/src/test/resources/provisioning-model/crankstart-tests.txt
+++ b/src/test/resources/provisioning-model/crankstart-tests.txt
@@ -35,9 +35,9 @@
 [artifacts runModes=B]
   org.apache.sling/org.apache.sling.api/2.0.6
 
-[configurations runModes=B]
+[configurations runModes=B,another]
   runmode.test
-    mode="That's B"
+    mode="That's B + another"
 
 [configurations]
   org.apache.sling.crankstart.testservices.SingleConfigServlet
