diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminService.java b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminService.java
index ce214af..138f45b 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminService.java
+++ b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/AdminService.java
@@ -18,10 +18,9 @@
 
 public interface AdminService {
 
-    Instance createInstance(String name, int port, String location) throws Exception;
+    Instance createInstance(String name, InstanceSettings settings) throws Exception;
 
     Instance[] getInstances();
 
-    Instance getInstance(String name);
-
+    Instance getInstance(String name);    
 }
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/InstanceSettings.java b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/InstanceSettings.java
new file mode 100644
index 0000000..65e3197
--- /dev/null
+++ b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/InstanceSettings.java
@@ -0,0 +1,49 @@
+/*
+ * 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.felix.karaf.shell.admin;
+
+import java.util.List;
+
+public class InstanceSettings {
+    private final int port;
+    private final String location;
+    private final List<String> featureURLs;
+    private final List<String> features;
+
+    public InstanceSettings(int port, String location, List<String> featureURLs, List<String> features) {
+        this.port = port;
+        this.location = location;
+        this.featureURLs = featureURLs;
+        this.features = features;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public List<String> getFeatureURLs() {
+        return featureURLs;
+    }
+
+    public List<String> getFeatures() {
+        return features;
+    }
+}
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImpl.java b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImpl.java
index a541556..0a2b936 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImpl.java
+++ b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceImpl.java
@@ -17,27 +17,28 @@
 package org.apache.felix.karaf.shell.admin.internal;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintStream;
-import java.io.FileInputStream;
-import java.net.ServerSocket;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-import java.util.Scanner;
 import java.util.Properties;
+import java.util.Scanner;
 
 import org.apache.felix.karaf.shell.admin.AdminService;
 import org.apache.felix.karaf.shell.admin.Instance;
-import org.slf4j.LoggerFactory;
-import org.slf4j.Logger;
+import org.apache.felix.karaf.shell.admin.InstanceSettings;
 import org.fusesource.jansi.Ansi;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class AdminServiceImpl implements AdminService {
-
     public static final String STORAGE_FILE = "instance.properties";
+    private static final String FEATURES_CFG = "etc/org.apache.felix.karaf.features.cfg";
 
     private static final Logger LOGGER = LoggerFactory.getLogger(AdminServiceImpl.class);
 
@@ -69,11 +70,11 @@
         }
     }
 
-    private void saveStorage(Properties props, File location) throws IOException {
+    private void saveStorage(Properties props, File location, String comment) throws IOException {
         OutputStream os = null;
         try {
             os = new FileOutputStream(location);
-            props.store(os, "Admin Service storage");
+            props.store(os, comment);
         } finally {
             if (os != null) {
                 os.close();
@@ -116,16 +117,16 @@
         }
     }
 
-    public synchronized Instance createInstance(String name, int port, String location) throws Exception {
+    public synchronized Instance createInstance(String name, InstanceSettings settings) throws Exception {
         if (instances.get(name) != null) {
             throw new IllegalArgumentException("Instance '" + name + "' already exists");
         }
-        String loc = location != null ? location : name;
+        String loc = settings.getLocation() != null ? settings.getLocation() : name;
         File karafBase = new File(loc);
         if (!karafBase.isAbsolute()) {
             karafBase = new File(storageLocation, loc);
         }
-        int sshPort = port;
+        int sshPort = settings.getPort();
         if (sshPort <= 0) {
             sshPort = ++defaultPortStart;
         }
@@ -140,7 +141,7 @@
         copyResourceToDir(karafBase, "etc/config.properties", true);
         copyResourceToDir(karafBase, "etc/java.util.logging.properties", true);
         copyResourceToDir(karafBase, "etc/org.apache.felix.karaf.log.cfg", true);
-        copyResourceToDir(karafBase, "etc/org.apache.felix.karaf.features.cfg", true);
+        copyResourceToDir(karafBase, FEATURES_CFG, true);
         copyResourceToDir(karafBase, "etc/org.apache.felix.karaf.management.cfg", true);
         copyResourceToDir(karafBase, "etc/org.ops4j.pax.logging.cfg", true);
         copyResourceToDir(karafBase, "etc/org.ops4j.pax.url.mvn.cfg", true);
@@ -163,12 +164,37 @@
             chmod(new File(karafBase, "bin/start"), "a+x");
             chmod(new File(karafBase, "bin/stop"), "a+x");
         }
+        
+        handleFeatures(new File(karafBase, FEATURES_CFG), settings);
+        
         Instance instance = new InstanceImpl(this, name, karafBase.toString());
         instances.put(name, instance);
         saveState();
         return instance;
     }
 
+    private void handleFeatures(File featuresCfg, InstanceSettings settings) throws IOException {
+        Properties p = loadStorage(featuresCfg);
+
+        appendToPropList(p, "featuresBoot", settings.getFeatures());
+        appendToPropList(p, "featuresRepositories", settings.getFeatureURLs());
+        saveStorage(p, featuresCfg, "Features Configuration");
+    }
+
+    private void appendToPropList(Properties p, String key, List<String> elements) {
+        if (elements == null) {
+            return;
+        }
+        StringBuilder sb = new StringBuilder(p.getProperty(key));
+        for (String f : elements) {
+            if (sb.length() > 0) {
+                sb.append(',');
+            }
+            sb.append(f);
+        }
+        p.setProperty(key, sb.toString());
+    }
+    
     public synchronized Instance[] getInstances() {
         return instances.values().toArray(new Instance[0]);
     }
@@ -191,7 +217,7 @@
             storage.setProperty("item." + i + ".loc", data[i].getLocation());
             storage.setProperty("item." + i + ".pid", Integer.toString(data[i].getPid()));
         }
-        saveStorage(storage, new File(storageLocation, STORAGE_FILE));
+        saveStorage(storage, new File(storageLocation, STORAGE_FILE), "Admin Service storage");
     }
 
     private void copyResourceToDir(File target, String resource, boolean text) throws Exception {
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceMBeanImpl.java b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceMBeanImpl.java
index 9cbf90f..f2ebabd 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceMBeanImpl.java
+++ b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/AdminServiceMBeanImpl.java
@@ -16,9 +16,12 @@
  */
 package org.apache.felix.karaf.shell.admin.internal;
 
+import java.util.Collections;
+
 import org.apache.felix.karaf.shell.admin.AdminService;
 import org.apache.felix.karaf.shell.admin.AdminServiceMBean;
 import org.apache.felix.karaf.shell.admin.Instance;
+import org.apache.felix.karaf.shell.admin.InstanceSettings;
 
 public class AdminServiceMBeanImpl implements AdminServiceMBean {
 
@@ -33,7 +36,9 @@
     }
 
     public void createInstance(String name, int port, String location) throws Exception {
-        adminService.createInstance(name, port, location);
+        InstanceSettings settings = new InstanceSettings(port, location, 
+                Collections.<String>emptyList(), Collections.<String>emptyList());
+        adminService.createInstance(name, settings);
     }
 
     public String[] getInstances() {
diff --git a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommand.java b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommand.java
index 277a0cb..a8d3a40 100644
--- a/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommand.java
+++ b/karaf/shell/admin/src/main/java/org/apache/felix/karaf/shell/admin/internal/commands/CreateCommand.java
@@ -16,9 +16,12 @@
  */
 package org.apache.felix.karaf.shell.admin.internal.commands;
 
+import java.util.List;
+
 import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
 import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+import org.apache.felix.karaf.shell.admin.InstanceSettings;
 
 
 /**
@@ -29,17 +32,26 @@
 @Command(scope = "admin", name = "create", description = "Creates a new container instance.")
 public class CreateCommand extends AdminCommandSupport
 {
-    @Option(name = "-p", aliases = { "--port"}, description = "Port number for remote shell connection", required = false, multiValued = false)
+    @Option(name = "-p", aliases = {"--port"}, description = "Port number for remote shell connection", required = false, multiValued = false)
     private int port = 0;
 
-    @Option(name = "-l", aliases = { "--location"}, description = "Location of the new container instance in the file system", required = false, multiValued = false)
+    @Option(name = "-l", aliases = {"--location"}, description = "Location of the new container instance in the file system", required = false, multiValued = false)
     private String location;
+    
+    @Option(name = "-f", aliases = {"--feature"}, 
+            description = "Initial features. This option can be specified multiple times to enable multiple initial features", required = false, multiValued = true)
+    List<String> features;
+    
+    @Option(name = "-furl", aliases = {"--featureURL"}, 
+            description = "Additional feature descriptor URLs. This option can be specified multiple times to add multiple URLs", required = false, multiValued = true)
+    List<String> featureURLs;
 
     @Argument(index = 0, name = "name", description="The name of the new container instance", required = true, multiValued = false)
     private String instance = null;
 
     protected Object doExecute() throws Exception {
-        getAdminService().createInstance(instance, port, location);
+        InstanceSettings settings = new InstanceSettings(port, location, featureURLs, features);
+        getAdminService().createInstance(instance, settings);
         return null;
     }
 
diff --git a/karaf/webconsole/admin/src/main/java/org/apache/felix/karaf/webconsole/admin/AdminPlugin.java b/karaf/webconsole/admin/src/main/java/org/apache/felix/karaf/webconsole/admin/AdminPlugin.java
index 44fdef1..cf2ddf1 100644
--- a/karaf/webconsole/admin/src/main/java/org/apache/felix/karaf/webconsole/admin/AdminPlugin.java
+++ b/karaf/webconsole/admin/src/main/java/org/apache/felix/karaf/webconsole/admin/AdminPlugin.java
@@ -20,19 +20,23 @@
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.net.URL;
+import java.util.Collections;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import org.apache.felix.karaf.shell.admin.AdminService;
-import org.apache.felix.karaf.shell.admin.Instance;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.json.JSONException;
-import org.osgi.framework.BundleContext;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.felix.karaf.shell.admin.AdminService;
+import org.apache.felix.karaf.shell.admin.Instance;
+import org.apache.felix.karaf.shell.admin.InstanceSettings;
+import org.apache.felix.webconsole.AbstractWebConsolePlugin;
+import org.json.JSONException;
 import org.json.JSONWriter;
+import org.osgi.framework.BundleContext;
 
 /**
  * Felix Web Console plugin for interacting with the {@link AdminService}
@@ -271,7 +275,9 @@
 
     private boolean createInstance(String name, int port, String location) {
         try {
-            adminService.createInstance(name, port, location);
+            InstanceSettings settings = new InstanceSettings(port, location, 
+                    Collections.<String>emptyList(), Collections.<String>emptyList());
+            adminService.createInstance(name, settings);
             return true;
         } catch (Exception ex) {
             Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
