diff --git a/sigil/common/runtime/.classpath b/sigil/common/runtime/.classpath
new file mode 100644
index 0000000..ef51f6b
--- /dev/null
+++ b/sigil/common/runtime/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java 1.6.0"/>
+	<classpathentry kind="con" path="org.apache.felix.sigil.classpathContainer"/>
+	<classpathentry kind="output" path="build/classes"/>
+</classpath>
diff --git a/sigil/common/runtime/.project b/sigil/common/runtime/.project
new file mode 100644
index 0000000..7ce9ec8
--- /dev/null
+++ b/sigil/common/runtime/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.apache.felix.sigil.common.runtime</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.apache.felix.sigil.eclipse.core.sigilBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.apache.felix.sigil.sigilnature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/sigil/common/runtime/sigil.properties b/sigil/common/runtime/sigil.properties
new file mode 100644
index 0000000..2488647
--- /dev/null
+++ b/sigil/common/runtime/sigil.properties
@@ -0,0 +1,15 @@
+
+# sigil project file, saved by plugin.
+
+-bundles: \
+	org.apache.felix.sigil.common.runtime, \
+
+-sourcedirs: \
+	src, \
+
+-imports: \
+	org.apache.commons.cli;version=1.2.0, \
+	org.osgi.framework, \
+	org.osgi.framework.launch;version=1.0.0, \
+
+# end
diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/Main.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/Main.java
new file mode 100644
index 0000000..c7ddab3
--- /dev/null
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/Main.java
@@ -0,0 +1,87 @@
+package org.apache.felix.sigil.common.runtime;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.ServiceLoader;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.Parser;
+import org.apache.commons.cli.PosixParser;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.launch.Framework;
+import org.osgi.framework.launch.FrameworkFactory;
+
+public class Main
+{
+    private static final String COMMAND_LINE_SYNTAX = "java -jar org.apache.felix.sigil.common.runtime";
+    
+    private static Framework framework;
+    private static final Options options;
+    
+    static {
+        options = new Options();
+        options.addOption( "?", "help", false, "Print help for the Sigil launcher" );
+    }
+
+    public static void main( String[] args )
+    {
+        try {
+            Parser parser = new PosixParser();
+            CommandLine cl = parser.parse( options, args );
+            
+            if ( cl.hasOption( '?' ) ) {
+                printHelp();
+            }
+            else {
+                ServiceLoader<FrameworkFactory> loader = ServiceLoader.load( FrameworkFactory.class );
+                FrameworkFactory factory = loader.iterator().next();
+                
+                Map<String, String> config = buildConfig( cl );
+                
+                framework = factory.newFramework( config );
+                framework.init();
+                
+                launch( args );
+                
+                framework.waitForStop( 0 );
+            }
+        }
+        catch (NoSuchElementException e) {
+            System.err.println( "No " + FrameworkFactory.class.getName() + " found on classpath" );
+            System.exit( 1 );
+        }
+        catch ( BundleException e )
+        {
+            e.printStackTrace();
+        }
+        catch ( InterruptedException e )
+        {
+            System.err.println( "Interrupted prior to framework stop" );
+        }
+        catch ( ParseException e )
+        {
+            printHelp();
+        }
+    }
+
+    private static Map<String, String> buildConfig( CommandLine cl )
+    {
+        HashMap<String, String> config = new HashMap<String, String>();
+        return config;
+    }
+
+    private static void launch( String[] args ) throws ParseException
+    {
+    }
+    
+    private static void printHelp()
+    {
+        HelpFormatter f = new HelpFormatter();
+        f.printHelp( COMMAND_LINE_SYNTAX, options );
+    }
+}
