diff --git a/jetty-distribution/src/main/resources/modules/setuid.mod b/jetty-distribution/src/main/resources/modules/setuid.mod
new file mode 100644
index 0000000..f939eb1
--- /dev/null
+++ b/jetty-distribution/src/main/resources/modules/setuid.mod
@@ -0,0 +1,9 @@
+DEPEND=server
+LIB=jetty-setuid-java-1.0.1.jar
+
+etc/jetty-setuid.xml
+
+INI=# jetty.startServerAsPrivileged=false
+INI=# jetty.username=jetty
+INI=# jetty.groupname=jetty
+INI=# jetty.umask=002
diff --git a/jetty-distribution/src/main/resources/start.ini b/jetty-distribution/src/main/resources/start.ini
index 94f1ac6..70f9440 100644
--- a/jetty-distribution/src/main/resources/start.ini
+++ b/jetty-distribution/src/main/resources/start.ini
@@ -31,122 +31,10 @@
 #===========================================================
 
 
-#===========================================================
-# Configure JVM arguments.
-# If JVM args are include in an ini file then --exec is needed
-# to start a new JVM from start.jar with the extra args.
-# If you wish to avoid an extra JVM running, place JVM args
-# on the normal command line and do not use --exec
-#-----------------------------------------------------------
-# --exec
-# -Xmx2000m
-# -Xmn512m
-# -XX:+UseConcMarkSweepGC
-# -XX:ParallelCMSThreads=2
-# -XX:+CMSClassUnloadingEnabled  
-# -XX:+UseCMSCompactAtFullCollection
-# -XX:CMSInitiatingOccupancyFraction=80
-# -verbose:gc
-# -XX:+PrintGCDateStamps
-# -XX:+PrintGCTimeStamps
-# -XX:+PrintGCDetails
-# -XX:+PrintTenuringDistribution
-# -XX:+PrintCommandLineFlags
-# -XX:+DisableExplicitGC
-# -Dorg.apache.jasper.compiler.disablejsr199=true
-
-#===========================================================
-# Default Server Options
-# Use the core server jars with websocket on the classpath
-# Add the contents of the resources directory to the classpath
-# Add jars discovered in lib/ext to the classpath
-# Include the core jetty configuration file
-#-----------------------------------------------------------
-threads.min=10
-threads.max=200
-threads.timeout=60000
-#jetty.host=myhost.com
-jetty.dump.start=false
-jetty.dump.stop=false
-
-#===========================================================
-# JMX Management
-# To enable remote JMX access uncomment jmxremote and
-# enable --exec 
-#-----------------------------------------------------------
-# jetty.jmxrmihost=localhost
-# jetty.jmxrmiport=1099
-# -Dcom.sun.management.jmxremote
-
-#===========================================================
-# Request logger
-# Will add a handler to log all HTTP requests to a standard
-# request log format file.
-#-----------------------------------------------------------
-# requestlog.retain=90
-# requestlog.append=true
-# requestlog.extended=true
 
 
-#===========================================================
-# stderr/stdout logging.
-# The following configuration will redirect stderr and stdout
-# to file which is rolled over daily.
-#-----------------------------------------------------------
-# jetty.log.retain=90
-
-#===========================================================
-# Enable SetUID
-# The default user and group is 'jetty' and if you are
-# starting as root you must change the run privledged to true
-#-----------------------------------------------------------
-# jetty.startServerAsPrivileged=false
-# jetty.username=jetty
-# jetty.groupname=jetty
-# jetty.umask=002
-
-#===========================================================
-# HTTP Connector
-#-----------------------------------------------------------
-jetty.port=8080
-http.timeout=30000
 
 
-#===========================================================
-# SSL Context 
-# Create the keystore and trust store for use by
-# HTTPS and SPDY
-#-----------------------------------------------------------
-# jetty.keystore=etc/keystore
-# jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
-# jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g
-# jetty.truststore=etc/keystore
-# jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
-# jetty.secure.port=8443
 
 
-#===========================================================
-# HTTPS Connector
-#-----------------------------------------------------------
-# jetty.https.port=8443
-
-#===========================================================
-# SPDY Connector
-#-----------------------------------------------------------
-# jetty.spdy.port=8443
-
-# ===========================================================
-# JAAS
-# -----------------------------------------------------------
-# jaas.login.conf=etc/login.conf
-
-#===========================================================
-# Low resource managment
-#-----------------------------------------------------------
-# lowresources.period=1050
-# lowresources.lowResourcesIdleTimeout=200
-# lowresources.monitorThreads=true
-# lowresources.maxConnections=0
-# lowresources.maxMemory=0
-# lowresources.maxLowResourcesTime=5000
 
diff --git a/jetty-jaas/src/main/config/modules/jaas.mod b/jetty-jaas/src/main/config/modules/jaas.mod
index 2a608c7..8fdba5a 100644
--- a/jetty-jaas/src/main/config/modules/jaas.mod
+++ b/jetty-jaas/src/main/config/modules/jaas.mod
@@ -9,3 +9,5 @@
 
 # JAAS configuration
 etc/jetty-jaas.xml
+
+INI=jaas.login.conf=etc/login.conf
\ No newline at end of file
diff --git a/jetty-jmx/src/main/config/modules/jmx.mod b/jetty-jmx/src/main/config/modules/jmx.mod
index 2a79226..11224a2 100644
--- a/jetty-jmx/src/main/config/modules/jmx.mod
+++ b/jetty-jmx/src/main/config/modules/jmx.mod
@@ -7,3 +7,7 @@
 
 # JMX configuration
 etc/jetty-jmx.xml
+
+INI=# jetty.jmxrmihost=localhost
+INI=# jetty.jmxrmiport=1099
+INI=# -Dcom.sun.management.jmxremote
\ No newline at end of file
diff --git a/jetty-server/src/main/config/etc/jetty-ipaccess.xml b/jetty-server/src/main/config/etc/jetty-ipaccess.xml
index deef173..85f6b9c 100644
--- a/jetty-server/src/main/config/etc/jetty-ipaccess.xml
+++ b/jetty-server/src/main/config/etc/jetty-ipaccess.xml
@@ -15,17 +15,16 @@
       <Set name="handler"><Ref refid="oldhandler"/></Set>
       <Set name="white">
         <Array type="String">
-	  <Item>127.0.0.1</Item>
-	  <Item>127.0.0.2/*.html</Item>
-	</Array>
+	      <Item>127.0.0.1</Item>
+	      <Item>127.0.0.2/*.html</Item>
+	    </Array>
       </Set>
       <Set name="black">
         <Array type="String">
-	  <Item>127.0.0.1/blacklisted</Item>
-	  <Item>127.0.0.2/black.html</Item>
-	</Array>
+	      <Item>127.0.0.1/blacklisted</Item>
+	      <Item>127.0.0.2/black.html</Item>
+	    </Array>
       </Set>
      </New>
     </Set>
-
 </Configure>
diff --git a/jetty-server/src/main/config/modules/http.mod b/jetty-server/src/main/config/modules/http.mod
index 94eed96..e1feadc 100644
--- a/jetty-server/src/main/config/modules/http.mod
+++ b/jetty-server/src/main/config/modules/http.mod
@@ -1,7 +1,10 @@
 #
-# Jetty HTTP Server
+# Jetty HTTP Connector
 #
 
 DEPEND=server
 
 etc/jetty-http.xml
+
+INI=jetty.port=8080
+INI=http.timeout=30000
\ No newline at end of file
diff --git a/jetty-server/src/main/config/modules/https.mod b/jetty-server/src/main/config/modules/https.mod
index 5e930e9..3b087d3 100644
--- a/jetty-server/src/main/config/modules/https.mod
+++ b/jetty-server/src/main/config/modules/https.mod
@@ -1,8 +1,9 @@
 #
-# Jetty HTTP Server
+# Jetty HTTPS Connector
 #
 
-DEPEND=server
+DEPEND=ssl
 
-etc/jetty-ssl.xml
 etc/jetty-https.xml
+
+INI=# jetty.https.port=8443
\ No newline at end of file
diff --git a/jetty-server/src/main/config/modules/jvm.mod b/jetty-server/src/main/config/modules/jvm.mod
new file mode 100644
index 0000000..cfec783
--- /dev/null
+++ b/jetty-server/src/main/config/modules/jvm.mod
@@ -0,0 +1,24 @@
+
+INI=#===========================================================
+INI=# Configure JVM arguments.
+INI=# If JVM args are include in an ini file then --exec is needed
+INI=# to start a new JVM from start.jar with the extra args.
+INI=# If you wish to avoid an extra JVM running, place JVM args
+INI=# on the normal command line and do not use --exec
+INI=#-----------------------------------------------------------
+INI=# --exec
+INI=# -Xmx2000m
+INI=# -Xmn512m
+INI=# -XX:+UseConcMarkSweepGC
+INI=# -XX:ParallelCMSThreads=2
+INI=# -XX:+CMSClassUnloadingEnabled  
+INI=# -XX:+UseCMSCompactAtFullCollection
+INI=# -XX:CMSInitiatingOccupancyFraction=80
+INI=# -verbose:gc
+INI=# -XX:+PrintGCDateStamps
+INI=# -XX:+PrintGCTimeStamps
+INI=# -XX:+PrintGCDetails
+INI=# -XX:+PrintTenuringDistribution
+INI=# -XX:+PrintCommandLineFlags
+INI=# -XX:+DisableExplicitGC
+INI=# -Dorg.apache.jasper.compiler.disablejsr199=true
\ No newline at end of file
diff --git a/jetty-server/src/main/config/modules/lowresources.mod b/jetty-server/src/main/config/modules/lowresources.mod
index 578d816..101f638 100644
--- a/jetty-server/src/main/config/modules/lowresources.mod
+++ b/jetty-server/src/main/config/modules/lowresources.mod
@@ -5,3 +5,10 @@
 DEPEND=server
 
 etc/jetty-lowresources.xml
+
+INI=# lowresources.period=1050
+INI=# lowresources.lowResourcesIdleTimeout=200
+INI=# lowresources.monitorThreads=true
+INI=# lowresources.maxConnections=0
+INI=# lowresources.maxMemory=0
+INI=# lowresources.maxLowResourcesTime=5000
\ No newline at end of file
diff --git a/jetty-server/src/main/config/modules/requestlog.mod b/jetty-server/src/main/config/modules/requestlog.mod
index 060ca9f..03c726c 100644
--- a/jetty-server/src/main/config/modules/requestlog.mod
+++ b/jetty-server/src/main/config/modules/requestlog.mod
@@ -5,3 +5,7 @@
 DEPEND=server
 
 etc/jetty-requestlog.xml
+
+INI=# requestlog.retain=90
+INI=# requestlog.append=true
+INI=# requestlog.extended=true
diff --git a/jetty-server/src/main/config/modules/server.mod b/jetty-server/src/main/config/modules/server.mod
index aa6cad6..ea6321a 100644
--- a/jetty-server/src/main/config/modules/server.mod
+++ b/jetty-server/src/main/config/modules/server.mod
@@ -4,6 +4,7 @@
 
 DEPEND=base
 DEPEND=xml
+OPTIONAL=jvm
 
 LIB=lib/servlet-api-3.1.jar
 LIB=lib/jetty-schemas-3.1.jar
@@ -13,3 +14,10 @@
 
 # Annotations needs annotations configuration
 etc/jetty.xml
+
+INI=threads.min=10
+INI=threads.max=200
+INI=threads.timeout=60000
+INI=#jetty.host=myhost.com
+INI=jetty.dump.start=false
+INI=jetty.dump.stop=false
\ No newline at end of file
diff --git a/jetty-server/src/main/config/modules/ssl.mod b/jetty-server/src/main/config/modules/ssl.mod
new file mode 100644
index 0000000..2bfc167
--- /dev/null
+++ b/jetty-server/src/main/config/modules/ssl.mod
@@ -0,0 +1,12 @@
+
+# SSL Keystore module
+
+DEPEND=server
+etc/jetty-ssl.xml
+
+INI=jetty.keystore=etc/keystore
+INI=jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
+INI=jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g
+INI=jetty.truststore=etc/keystore
+INI=jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
+INI=jetty.secure.port=8443
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java
index e8d7806..e2891a9 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java
@@ -28,6 +28,8 @@
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.ConnectException;
@@ -41,6 +43,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
+import java.util.regex.Pattern;
 
 import org.eclipse.jetty.start.StartArgs.DownloadArg;
 
@@ -505,14 +508,10 @@
             }
         }
 
-        // Enables/Disable
-        for (String module : args.getDisable())
+        // Initialize
+        for (String module : args.getInitialize())
         {
-            disable(args,module,true);
-        }
-        for (String module : args.getEnable())
-        {
-            enable(args,module,true);
+            initialize(args,module,true);
         }
         
         // Informational command line, don't run jetty
@@ -635,100 +634,59 @@
         }
     }
 
-    private void enable(StartArgs args, String name, boolean verbose) throws IOException
+    private void initialize(StartArgs args, String name, boolean topLevel) throws IOException
     {
         File start_d=baseHome.getFile("start.d");
-        File ini=new File(start_d,name+".ini");
-        
-        // Is it already enabled
-        if (ini.exists())
+
+        // Is this a module?
+        Module module=args.getAllModules().get(name);
+        if (module==null)
         {
-            if (verbose)
-                StartLog.warn("Module %s already enabled by: %s",name,baseHome.toShortForm(ini));
+            StartLog.warn("ERROR: No known module for %s",name);
             return;
         }
-        
-        // Is there a disabled ini?
-        File disabled=new File(start_d,name+".ini.disabled");
-        boolean copy=false;
-        if (!disabled.exists() && baseHome.isBaseDifferent())
+
+        // Is it already enabled
+        File ini=new File(start_d,name+".ini");
+        if (ini.exists())
         {
-            copy=true;
-            disabled=new File(new File(baseHome.getHomeDir(),"start.d"),name+".ini.disabled");
-            if (!disabled.exists())
-                disabled=new File(new File(baseHome.getHomeDir(),"start.d"),name+".ini");
-        }
-            
-        if (disabled.exists())
-        {
-            // enable module by renaming/copying ini template
-            System.err.printf("Enabling %s in %s from %s%n",name,baseHome.toShortForm(ini),baseHome.toShortForm(disabled));
-            if (copy)
-                Files.copy(disabled.toPath(),ini.toPath());
+            if (new StartIni(ini).getLineMatches(Pattern.compile("--module=(.*, *)*"+name)).size()==0)
+                StartLog.warn("ERROR: %s not initialised in %s!",name,baseHome.toShortForm(ini));
             else
-                disabled.renameTo(ini);
-            args.parse(baseHome, new StartIni(ini));
-        }
-        else if (args.getAllModules().resolveEnabled().contains(args.getAllModules().get(name)))
-        {
-            // No ini template and module is already enabled
-            List<String> sources=args.getSources(name);
-            if (sources!=null && sources.size()>0)
-                for (String s: args.getSources(name))
-                    StartLog.warn("Module %s is enabled in %s",name,s);
-            else
-                StartLog.warn("Module %s is already enabled (see --list-modules)",name);
-                
-        }
-        else if (ini.createNewFile())
-        {
-            System.err.printf("Enabling %s in %s%n",name,baseHome.toShortForm(ini));
-            // Create an ini
-            try(FileOutputStream out = new FileOutputStream(ini);)
-            {
-                out.write(("--module="+name+"\n").getBytes("ISO-8859-1"));
-            }
-            args.parse(baseHome, new StartIni(ini));
+                StartLog.warn("%-15s initialised in %s",name,baseHome.toShortForm(ini));
+            return;
         }
         else
         {
-            StartLog.warn("ERROR: Module %s cannot be enabled! ",name);
-            return;
+            // Should we create an ini file?
+            if (topLevel || module.getInitialise().size()>0)
+            {
+                if (ini.createNewFile())
+                {
+                    StartLog.warn("%-15s initialised in %s (created)",name,baseHome.toShortForm(ini));
+
+                    // Create an ini
+                    try(PrintWriter out = new PrintWriter(ini))
+                    {
+                        out.println("# Initialize module "+name);
+                        out.println("--module="+name);
+                        for (String line : module.getInitialise())
+                            out.println(line);
+                    }
+                    args.parse(baseHome, new StartIni(ini));
+                }
+                else
+                {
+                    StartLog.warn("ERROR: %s cannot be initialised in %s! ",name,baseHome.toShortForm(ini));
+                    return;
+                }
+            }
         }
-    
+
         // Process dependencies
-        Modules modules = args.getAllModules();
-        Module module=modules.get(name);
         if (module!=null)
             for (String parent:module.getParentNames())
-                enable(args,parent,false);
-    }
-
-    private void disable(StartArgs args, String name, boolean verbose) throws IOException
-    {
-        File start_d=baseHome.getFile("start.d");
-        File ini=new File(start_d,name+".ini");
-        
-        // Is it enabled?
-        if (ini.exists())
-        {
-            File disabled=new File(start_d,name+".ini.disabled");
-            
-            if (disabled.exists())
-            {
-                StartLog.warn("ERROR: Disabled ini already exists: %s",baseHome.toShortForm(disabled));
-                return;
-            }
-
-            StartLog.warn("Disabling %s from %s",name,baseHome.toShortForm(ini));
-            ini.renameTo(disabled);
-            
-            return;
-        }
-
-        if (verbose)
-            StartLog.warn("Module %s, ini file already disabled: %s",name,baseHome.toShortForm(ini));
-        
+                initialize(args,parent,false);
     }
     
     public void usage(boolean exit)
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java
index baf7d0e..99c6de4 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java
@@ -73,6 +73,8 @@
 
     /** The name of this Module */
     private String name;
+    /** The depth of the module in the tree */
+    private int depth = 0;
     /** List of Modules, by name, that this Module depends on */
     private Set<String> parentNames;
     /** List of Modules, by name, that this Module optionally depend on */
@@ -81,10 +83,10 @@
     private Set<Module> parentEdges;
     /** The Edges to child modules */
     private Set<Module> childEdges;
-    /** The depth of the module in the tree */
-    private int depth = 0;
     /** List of xml configurations for this Module */
     private List<String> xmls;
+    /** List of ini template lines */
+    private List<String> initialise;
     /** List of library options for this Module */
     private List<String> libs;
     /** List of downloads for this Module */
@@ -197,6 +199,11 @@
     {
         return xmls;
     }
+
+    public List<String> getInitialise()
+    {
+        return initialise;
+    }
     
     public List<String> getDownloads()
     {
@@ -225,14 +232,15 @@
         // Strip .ini
         this.name = Pattern.compile(".mod$",Pattern.CASE_INSENSITIVE).matcher(name).replaceFirst("");
 
-        this.parentNames = new HashSet<>();
-        this.optionalParentNames = new HashSet<>();
-        this.parentEdges = new HashSet<>();
-        this.childEdges = new HashSet<>();
-        this.xmls = new ArrayList<>();
-        this.libs = new ArrayList<>();
-        this.downloads = new ArrayList<>();
-        this.bootlibs = new ArrayList<>();
+        parentNames=new HashSet<>();
+        optionalParentNames=new HashSet<>();
+        parentEdges=new HashSet<>();
+        childEdges=new HashSet<>();
+        xmls=new ArrayList<>();
+        initialise=new ArrayList<>();
+        libs=new ArrayList<>();
+        downloads=new ArrayList<>();
+        bootlibs=new ArrayList<>();
     }
 
     public boolean isEnabled()
@@ -279,6 +287,10 @@
                     bootlibs.add(value);
                     handled = true;
                     break;
+                case "INI":
+                    initialise.add(value);
+                    handled = true;
+                    break;
             }
         }
 
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
index 1020ca7..1a36c1c 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
@@ -146,8 +146,7 @@
     private Properties properties = new Properties();
     private Set<String> systemPropertyKeys = new HashSet<>();
     private List<String> jvmArgs = new ArrayList<>();
-    private List<String> enable = new ArrayList<>();
-    private List<String> disable = new ArrayList<>();
+    private List<String> initialize = new ArrayList<>();
     private List<String> modulePersistEnable = new ArrayList<>();
     private List<String> modulePersistDisable = new ArrayList<>();
     private Modules allModules;
@@ -455,14 +454,9 @@
         return this.commandLine;
     }
 
-    public List<String> getEnable()
+    public List<String> getInitialize()
     {
-        return enable;
-    }
-
-    public List<String> getDisable()
-    {
-        return disable;
+        return initialize;
     }
 
     public List<DownloadArg> getDownloads()
@@ -765,20 +759,11 @@
             return;
         }
 
-        if (arg.startsWith("--enable="))
+        if (arg.startsWith("--initialize=") || arg.startsWith("--initialise=") || arg.startsWith("--ini="))
         {
             if (!CMD_LINE_SOURCE.equals(source))
                 throw new UsageException(ERR_BAD_ARG,"%s not allowed in %s",arg,source);
-            enable.addAll(getValues(arg));
-            run = false;
-            return;
-        }
-
-        if (arg.startsWith("--disable="))
-        {
-            if (!CMD_LINE_SOURCE.equals(source))
-                throw new UsageException(ERR_BAD_ARG,"%s not allowed in %s",arg,source);
-            disable.addAll(getValues(arg));
+            initialize.addAll(getValues(arg));
             run = false;
             return;
         }
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/TextFile.java b/jetty-start/src/main/java/org/eclipse/jetty/start/TextFile.java
index d14fb23..4da2951 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/TextFile.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/TextFile.java
@@ -67,6 +67,7 @@
                         continue;
                     }
 
+                    // TODO - bad form calling derived method from base class constructor
                     process(line.trim());
                 }
             }
diff --git a/jetty-util/src/main/config/modules/logging.mod b/jetty-util/src/main/config/modules/logging.mod
new file mode 100644
index 0000000..82d7bbd
--- /dev/null
+++ b/jetty-util/src/main/config/modules/logging.mod
@@ -0,0 +1,7 @@
+#
+# Jetty std err/out logging
+#
+
+etc/jetty-logging.xml
+
+INI=# jetty.log.retain=90
\ No newline at end of file
diff --git a/tests/test-webapps/test-jetty-webapp/src/main/config/modules/demo.mod b/tests/test-webapps/test-jetty-webapp/src/main/config/modules/demo.mod
index 77dfd0b..9312d07 100644
--- a/tests/test-webapps/test-jetty-webapp/src/main/config/modules/demo.mod
+++ b/tests/test-webapps/test-jetty-webapp/src/main/config/modules/demo.mod
@@ -14,3 +14,6 @@
 
 demo/test-realm.xml
 demo/jetty-demo.xml
+
+INI=demo.realm=demo/realm.properties
+INI=jaas.login.conf=demo/login.conf
