diff --git a/sigil/eclipse/runtime/.classpath b/sigil/eclipse/runtime/.classpath
new file mode 100644
index 0000000..fce9fdb
--- /dev/null
+++ b/sigil/eclipse/runtime/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.apache.felix.sigil.classpathContainer"/>
+	<classpathentry kind="lib" path="lib/org.eclipse.swt.carbon.macosx.jar"/>
+	<classpathentry kind="output" path="build/classes"/>
+</classpath>
diff --git a/sigil/eclipse/runtime/.project b/sigil/eclipse/runtime/.project
new file mode 100644
index 0000000..7145f7e
--- /dev/null
+++ b/sigil/eclipse/runtime/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.apache.felix.sigil.eclipse.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/eclipse/runtime/build.xml b/sigil/eclipse/runtime/build.xml
new file mode 100644
index 0000000..c5435a0
--- /dev/null
+++ b/sigil/eclipse/runtime/build.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+  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.
+-->
+<project name="eclipse.runtime" default="build"
+	  xmlns:ivy="antlib:org.apache.ivy.ant">
+  <import file="../build.xml"/>
+  <target name="init">
+    <ivy:retrieve organisation="org.eclipse" module="org.eclipse.swt.carbon.macosx" revision="3.4.1.v3452b" inline="true" pattern="lib/[artifact].[ext]" transitive="false"/>
+  </target>
+</project>
diff --git a/sigil/eclipse/runtime/ivy.xml b/sigil/eclipse/runtime/ivy.xml
new file mode 100644
index 0000000..a428817
--- /dev/null
+++ b/sigil/eclipse/runtime/ivy.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!--
+  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.
+-->
+<ivy-module version="1.0">
+  <info 
+        organisation="org.apache"
+        module="felix.sigil.eclipse.runtime"
+        status="integration"/>
+   <publications>
+     <artifact name="org.apache.felix.sigil.eclipse.runtime" />
+   </publications>
+</ivy-module>
diff --git a/sigil/eclipse/runtime/plugin.xml b/sigil/eclipse/runtime/plugin.xml
new file mode 100644
index 0000000..49d9878
--- /dev/null
+++ b/sigil/eclipse/runtime/plugin.xml
@@ -0,0 +1,534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<?eclipse version="3.2"?>
+<plugin>
+   <extension point = "org.eclipse.debug.core.launchConfigurationTypes">
+	   <launchConfigurationType
+	   	   id="org.apache.felix.sigil.eclipse.runtime.OSGi"
+		   name="OSGi Application"
+		   delegate="org.apache.felix.sigil.eclipse.runtime.OSGiLauncher"
+		   modes= "run, debug"
+		   sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
+	       sourcePathComputerId="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer">
+		</launchConfigurationType>
+	</extension>
+   <extension
+         point="org.eclipse.debug.ui.launchConfigurationTabGroups">
+      <launchConfigurationTabGroup
+            class="org.apache.felix.sigil.eclipse.runtime.config.OSGiLaunchConfigurationTabGroup"
+            id="org.apache.felix.sigil.eclipse.runtime.config.OSGiLaunchConfigurationTabGroup"
+            type="org.apache.felix.sigil.eclipse.runtime.OSGi"/>
+   </extension>
+   <extension
+         point="org.eclipse.debug.ui.launchShortcuts">
+      <shortcut
+            class="org.apache.felix.sigil.eclipse.runtime.shortcut.OSGiLaunchShortCut"
+            icon="etc/images/newton.png"
+            id="org.cauldron.sigil.launching.shortcut"
+            label="OSGi Application"
+            modes="run,debug">
+         <contextualLaunch>
+            <enablement>
+               <with variable="selection">
+                  <count value="1"/>
+                  <iterate>
+                     <or>
+	                     <instanceof value="org.eclipse.jdt.core.IJavaProject"/>
+                         <test
+                               property="org.apache.felix.sigil.isSigilProject"
+                               value="true"/>
+	                 </or>
+                  </iterate>
+               </with>
+            </enablement>
+         </contextualLaunch>
+      </shortcut>
+   </extension>
+   <extension
+         point="org.eclipse.jdt.launching.classpathProviders">
+      <classpathProvider
+            class="org.cauldron.sigil.runtime.launch.NewtonSourcePathProvider"
+            id="org.cauldron.sigil.classpath.Provider"/>
+   </extension>
+   <extension
+         point="org.eclipse.debug.ui.launchConfigurationTypeImages">
+      <launchConfigurationTypeImage
+            configTypeID="org.apache.felix.sigil.eclipse.runtime.OSGi"
+            icon="etc/images/newton.png"
+            id="org.apache.felix.sigil.eclipse.runtime.OSGi">
+      </launchConfigurationTypeImage>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            id="org.apache.felix.sigil.runtime.commands.installProject"
+            name="%commandInstallProject">
+      </command>
+      <command
+            id="org.apache.felix.sigil.runtime.commands.uninstallProject"
+            name="%commandUninstallProject">
+      </command>
+      <command
+            id="org.apache.felix.sigil.runtime.commands.reinstallProject"
+            name="%commandReinstallProject">
+      </command>
+      <command
+            id="org.apache.felix.sigil.runtime.commands.startProject"
+            name="%commandStartProject">
+      </command>
+      <command
+            id="org.apache.felix.sigil.runtime.commands.stopProject"
+            name="%commandStopProject">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commandImages">
+      <image
+            commandId="org.apache.felix.sigil.runtime.commands.installProject"
+            icon="etc/images/installBundle.png">
+      </image>
+      <image
+            commandId="org.apache.felix.sigil.runtime.commands.uninstallProject"
+            icon="etc/images/uninstallBundle.png">
+      </image>
+      <image
+            commandId="org.apache.felix.sigil.runtime.commands.reinstallProject"
+            icon="etc/images/refreshBundle.png">
+      </image>
+      <image
+            commandId="org.apache.felix.sigil.runtime.commands.startProject"
+            icon="etc/images/startBundle.png">
+      </image>
+      <image
+            commandId="org.apache.felix.sigil.runtime.commands.stopProject"
+            icon="etc/images/stopBundle.png">
+      </image>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.cauldron.sigil.runtime.handlers.project.SelectionProjectHandler:install"
+            commandId="org.apache.felix.sigil.runtime.commands.installProject">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     ifEmpty="false"
+                     operator="or">
+                  <and>
+                     <or>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IFile">
+	                     </instanceof>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IProject">
+	                     </instanceof>
+	                 </or>
+                     <test
+                           property="org.cauldron.sigil.isSigilProject"
+                           value="true">
+                     </test>
+                  </and>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>      
+      <handler
+            class="org.cauldron.sigil.runtime.handlers.project.SelectionProjectHandler:start"
+            commandId="org.apache.felix.sigil.runtime.commands.startProject">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     ifEmpty="false"
+                     operator="or">
+                  <and>
+                     <or>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IFile">
+	                     </instanceof>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IProject">
+	                     </instanceof>
+	                 </or>
+                     <test
+                           property="org.cauldron.sigil.isSigilProject"
+                           value="true">
+                     </test>
+                  </and>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>  
+                <handler
+            class="org.cauldron.sigil.runtime.handlers.project.SelectionProjectHandler:stop"
+            commandId="org.apache.felix.sigil.runtime.commands.stopProject">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     ifEmpty="false"
+                     operator="or">
+                  <and>
+                     <or>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IFile">
+	                     </instanceof>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IProject">
+	                     </instanceof>
+	                 </or>
+                     <test
+                           property="org.cauldron.sigil.isSigilProject"
+                           value="true">
+                     </test>
+                  </and>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>      
+      <handler
+            class="org.cauldron.sigil.runtime.handlers.project.SelectionProjectHandler:uninstall"
+            commandId="org.apache.felix.sigil.runtime.commands.uninstallProject">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     ifEmpty="false"
+                     operator="or">
+                  <and>
+                     <or>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IFile">
+	                     </instanceof>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IProject">
+	                     </instanceof>
+	                 </or>
+                     <test
+                           property="org.cauldron.sigil.isSigilProject"
+                           value="true">
+                     </test>
+                  </and>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>      
+      <handler
+            class="org.cauldron.sigil.runtime.handlers.project.SelectionProjectHandler:reinstall"
+            commandId="org.apache.felix.sigil.runtime.commands.reinstallProject">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     ifEmpty="false"
+                     operator="or">
+                  <and>
+                     <or>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IFile">
+	                     </instanceof>
+	                     <instanceof
+	                           value="org.eclipse.core.resources.IProject">
+	                     </instanceof>
+	                 </or>
+                     <test
+                           property="org.cauldron.sigil.isSigilProject"
+                           value="true">
+                     </test>
+                  </and>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>      
+      <handler
+            class="org.cauldron.sigil.runtime.handlers.project.EditorProjectHandler:install"
+            commandId="org.apache.felix.sigil.runtime.commands.installProject">
+         <activeWhen>
+            <with
+                  variable="activePartId">
+               <equals
+                     value="org.cauldron.sigil.editors.SigilProjectEditor">
+               </equals>
+            </with>
+         </activeWhen>
+      </handler>
+      <handler
+            class="org.cauldron.sigil.runtime.handlers.project.EditorProjectHandler:uninstall"
+            commandId="org.apache.felix.sigil.runtime.commands.uninstallProject">
+         <activeWhen>
+            <with
+                  variable="activePartId">
+               <equals
+                     value="org.cauldron.sigil.editors.SigilProjectEditor">
+               </equals>
+            </with>
+         </activeWhen>
+      </handler>
+      <handler
+            class="org.cauldron.sigil.runtime.handlers.project.EditorProjectHandler:reinstall"
+            commandId="org.apache.felix.sigil.runtime.commands.reinstallProject">
+         <activeWhen>
+            <with
+                  variable="activePartId">
+               <equals
+                     value="org.cauldron.sigil.editors.SigilProjectEditor">
+               </equals>
+            </with>
+         </activeWhen>
+      </handler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="popup:org.eclipse.ui.popup.any">
+         <separator
+               name="org.cauldron.sigil.runtime.separator"
+               visible="true">
+         </separator>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.installProject"
+                  label="Install Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.uninstallProject"
+                  label="Uninstall Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.reinstallProject"
+                  label="Reinstall Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.startProject"
+                  label="Start Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.stopProject"
+                  label="Stop Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+               </visibleWhen>
+            </command>
+      </menuContribution>
+      <menuContribution
+            locationURI="toolbar:org.eclipse.ui.main.toolbar">
+         <toolbar
+               id="org.cauldron.sigil.runtime.toolbar1">
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.installProject"
+                  label="Install Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+                  <with
+                        variable="activePartId">
+                     <equals
+                           value="org.cauldron.sigil.editors.SigilProjectEditor">
+                     </equals>
+                  </with>
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.uninstallProject"
+                  label="Uninstall Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+                  <with
+                        variable="activePartId">
+                     <equals
+                           value="org.cauldron.sigil.editors.SigilProjectEditor">
+                     </equals>
+                  </with>
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.reinstallProject"
+                  label="Re Install Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+                  <with
+                        variable="activePartId">
+                     <equals
+                           value="org.cauldron.sigil.editors.SigilProjectEditor">
+                     </equals>
+                  </with>
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.startProject"
+                  label="Start Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+                  <with
+                        variable="activePartId">
+                     <equals
+                           value="org.cauldron.sigil.editors.SigilProjectEditor">
+                     </equals>
+                  </with>
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="org.apache.felix.sigil.runtime.commands.stopProject"
+                  label="Stop Project"
+                  style="push">
+               <visibleWhen
+                     checkEnabled="true">
+                  <with
+                        variable="activePartId">
+                     <equals
+                           value="org.cauldron.sigil.editors.SigilProjectEditor">
+                     </equals>
+                  </with>
+               </visibleWhen>
+            </command>
+         </toolbar>
+      </menuContribution>
+   </extension>
+   <!-- extension
+         point="org.eclipse.ui.contexts">
+      <context
+            id="org.cauldron.sigil.runtime.contexts.compositeEditor"
+            name="Composite Editor"
+            parentId="org.eclipse.ui.textEditorScope">
+      </context>
+   </extension>
+   <extension
+         point="org.eclipse.ui.bindings">
+      <key
+            commandId="org.apache.felix.sigil.runtime.commands.installComposite"
+            contextId="org.cauldron.sigil.runtime.contexts.compositeEditor"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+I">
+      </key>
+      <key
+            commandId="org.apache.felix.sigil.runtime.commands.uninstallComposite"
+            contextId="org.cauldron.sigil.runtime.contexts.compositeEditor"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+U">
+      </key>
+      <key
+            commandId="org.apache.felix.sigil.runtime.commands.reinstallComposite"
+            contextId="org.cauldron.sigil.runtime.contexts.compositeEditor"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+M2+I">
+      </key>
+   </extension -->
+   <!-- extension
+         point="org.eclipse.ui.views">
+      <view
+            category="org.cauldron.sigil.ui.views"
+            class="org.cauldron.sigil.runtime.views.NewtonInstancesView"
+            icon="etc/images/newton.png"
+            id="org.cauldron.sigil.runtime.newtonInstancesView"
+            name="Newton Instances"
+            restorable="true">
+      </view>
+   </extension -->
+   <!-- extension
+         point="org.eclipse.core.runtime.adapters">
+      <factory
+            adaptableType="org.cauldron.sigil.runtime.registry.INewtonRegistry"
+            class="org.cauldron.sigil.runtime.views.DeferredAdapterFactory">
+         <adapter
+               type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter">
+         </adapter>
+      </factory>
+      <factory
+            adaptableType="org.cauldron.sigil.runtime.registry.INewtonInstance"
+            class="org.cauldron.sigil.runtime.views.DeferredAdapterFactory">
+         <adapter
+               type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter">
+         </adapter>
+      </factory>
+      <factory
+            adaptableType="org.cauldron.sigil.runtime.model.IBundleState"
+            class="org.cauldron.sigil.runtime.views.DeferredAdapterFactory">
+         <adapter
+               type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter">
+         </adapter>
+      </factory>
+   </extension -->
+   <!-- extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.cauldron.sigil.ui.perspective1">
+         <viewShortcut
+               id="org.cauldron.sigil.runtime.newtonInstancesView">
+         </viewShortcut>
+      </perspectiveExtension>
+   </extension -->
+   <!-- extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer
+            class="org.cauldron.sigil.runtime.prefs.PreferenceInitializer">
+      </initializer>
+   </extension -->
+   <!-- extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.cauldron.sigil.ui.preferences.SigilPreferencePage"
+            class="org.cauldron.sigil.runtime.prefs.RuntimePreferencesPage"
+            id="org.cauldron.sigil.runtime.preferences.RuntimePreferencesPage"
+            name="Runtime">
+      </page>
+   </extension -->
+   <!-- extension
+         point="org.cauldron.sigil.installbuilder">
+      <builder
+            class="org.cauldron.sigil.runtime.install.NewtonV1_2InstallBuilder">
+      </builder>
+      <builder
+            class="org.cauldron.sigil.runtime.install.NewtonV1_3InstallBuilder">
+      </builder>
+      <builder
+            class="org.cauldron.sigil.runtime.install.NewtonV1_4InstallBuilder">
+      </builder>
+   </extension -->
+   <!-- extension
+         point="org.cauldron.sigil.repositoryprovider">
+      <provider
+            class="org.cauldron.sigil.runtime.repository.PlatformRepositoryProvider"
+            defaultLevel="-2"
+            dynamic="false"
+            id="org.cauldron.sigil.runtime.provider"
+            type="OSGi Platform Repository">
+      </provider>
+   </extension -->
+</plugin>
diff --git a/sigil/eclipse/runtime/sigil.properties b/sigil/eclipse/runtime/sigil.properties
new file mode 100644
index 0000000..4c4738e
--- /dev/null
+++ b/sigil/eclipse/runtime/sigil.properties
@@ -0,0 +1,33 @@
+
+# sigil project file, saved by plugin.
+
+-singleton: true
+
+-bundles: \
+	org.apache.felix.sigil.eclipse.runtime, \
+
+-resources: \
+	plugin.xml, \
+
+-sourcedirs: \
+	src, \
+
+-imports: \
+	org.apache.felix.sigil.common.runtime;version=0.9.0, \
+	org.apache.felix.sigil.eclipse;version=0.9.0, \
+	org.apache.felix.sigil.eclipse.install, \
+	org.eclipse.core.resources, \
+	org.eclipse.jdt.debug.ui.launchConfigurations, \
+	org.eclipse.jface.viewers, \
+	org.eclipse.swt.graphics, \
+	org.eclipse.swt.widgets, \
+
+-requires: \
+	org.eclipse.core.runtime;version=3.4.0, \
+	org.eclipse.debug.core;version=3.4.1, \
+	org.eclipse.debug.ui;version=3.4.2, \
+	org.eclipse.equinox.common;version=3.4.0, \
+	org.eclipse.jdt.launching;version=3.4.1, \
+	org.eclipse.ui.workbench;version=3.4.2, \
+
+# end
diff --git a/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/LaunchHelper.java b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/LaunchHelper.java
new file mode 100644
index 0000000..5a86712
--- /dev/null
+++ b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/LaunchHelper.java
@@ -0,0 +1,62 @@
+/*
+ * 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.sigil.eclipse.runtime;
+
+import java.util.Properties;
+
+import org.apache.felix.sigil.common.runtime.Runtime;
+import org.apache.felix.sigil.eclipse.install.IOSGiInstall;
+import org.eclipse.debug.core.ILaunchConfiguration;
+
+public class LaunchHelper {
+
+	public static IOSGiInstall getInstall(ILaunchConfiguration config) {
+//	    OSGiInstall install = new OSGiInstall( "felix" );
+//	    OSGiInstallType type = new OSGiInstallType();
+//	    type.setMainClass( "org.apache.felix.main.Main" );
+//	    type.setClassPath( new String[] { "/Users/dave/development/felix-trunk/main/target/org.apache.felix.main-1.9.0-SNAPSHOT.jar" } );
+//	    install.setType( type );
+//		return install;
+	    return null;
+	}
+
+    public static int getRetries( ILaunchConfiguration config )
+    {
+        return 5;
+    }
+
+    public static Properties buildClientProps( ILaunchConfiguration config )
+    {
+        Properties props = new Properties();
+        props.put( Runtime.ADDRESS_PROPERTY, "localhost" );
+        props.put( Runtime.PORT_PROPERTY, "9090" );
+        return props;
+    }
+
+    public static String[] getProgramArgs( ILaunchConfiguration config )
+    {
+        return new String[] { "-p", "9090", "-a", "localhost" };
+    }
+
+    public static long getBackoff( ILaunchConfiguration config )
+    {
+        return 1000;
+    }
+}
diff --git a/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/OSGiLauncher.java b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/OSGiLauncher.java
new file mode 100644
index 0000000..7b8b98c
--- /dev/null
+++ b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/OSGiLauncher.java
@@ -0,0 +1,177 @@
+/*
+ * 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.sigil.eclipse.runtime;
+
+
+import java.io.IOException;
+import java.net.ConnectException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Properties;
+
+import org.apache.felix.sigil.common.runtime.Client;
+import org.apache.felix.sigil.common.runtime.Main;
+import org.apache.felix.sigil.eclipse.SigilCore;
+import org.apache.felix.sigil.eclipse.install.IOSGiInstall;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
+import org.eclipse.debug.core.model.ILaunchConfigurationDelegate2;
+import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMRunner;
+import org.eclipse.jdt.launching.VMRunnerConfiguration;
+
+
+public class OSGiLauncher extends AbstractJavaLaunchConfigurationDelegate implements ILaunchConfigurationDelegate,
+    ILaunchConfigurationDelegate2
+{
+
+    public void launch( ILaunchConfiguration config, String mode, ILaunch launch, IProgressMonitor monitor )
+        throws CoreException
+    {
+        IOSGiInstall osgi = LaunchHelper.getInstall( config );
+
+        VMRunnerConfiguration vmconfig = new VMRunnerConfiguration( Main.class.getName(), buildClasspath( osgi, config ) );
+
+        String vm = getVMArguments( config );
+        if ( vm != null && vm.trim().length() > 0 )
+            vmconfig.setVMArguments( vm.split( " " ) );
+                
+        IPath path = getWorkingDirectoryPath( config );
+        vmconfig.setWorkingDirectory( path == null ? null : path.toOSString() );
+        
+        vmconfig.setBootClassPath( getBootpath( config ) );
+        vmconfig.setEnvironment( getEnvironment( config ) );
+        vmconfig.setProgramArguments( LaunchHelper.getProgramArgs( config ) );
+
+        IVMInstall install = getVMInstall( config );
+
+        IVMRunner runner = install.getVMRunner( mode );
+
+        setDefaultSourceLocator( launch, config );
+
+        SigilCore.log( "VM=" + install.getName() );
+        SigilCore.log( "Main=" + vmconfig.getClassToLaunch() );
+        SigilCore.log( "VMArgs=" + Arrays.asList( vmconfig.getVMArguments() ) );
+        SigilCore.log( "Classpath=" + Arrays.asList( vmconfig.getClassPath() ) );
+        SigilCore.log( "Args=" + Arrays.asList( vmconfig.getProgramArguments() ) );
+        SigilCore.log( "Working Dir=" + vmconfig.getWorkingDirectory() );
+
+        runner.run( vmconfig, launch, monitor );
+
+        Client client = connect( config );
+
+        SigilCore.log( "Connected " + client.isConnected() );
+    }
+
+
+    private Client connect( ILaunchConfiguration config ) throws CoreException
+    {
+        Properties props = LaunchHelper.buildClientProps( config );
+
+        int retry = LaunchHelper.getRetries( config );
+
+        Client client = null;
+
+        for ( int i = 0; i < retry; i++ )
+        {
+            client = new Client();
+            try
+            {
+                client.connect( props );
+                break;
+            }
+            catch ( ConnectException e )
+            {
+                SigilCore.log( "Failed to connect to client: " + e.getMessage() );
+            }
+            catch ( IOException e )
+            {
+                throw SigilCore.newCoreException( "Failed to connect client", e );
+            }
+
+            try
+            {
+                Thread.sleep( LaunchHelper.getBackoff( config ) );
+            }
+            catch ( InterruptedException e )
+            {
+                SigilCore.log( "Interrupted during backoff" );
+            }
+        }
+
+        if ( client == null )
+        {
+            throw SigilCore.newCoreException( "Failed to connect client after retries, check error log for details",
+                null );
+        }
+
+        return client;
+    }
+
+
+    public String[] getBootpath( ILaunchConfiguration configuration ) throws CoreException
+    {
+        String[] bootpath = super.getBootpath( configuration );
+
+        ArrayList<String> filtered = new ArrayList<String>();
+
+        if ( bootpath != null )
+        {
+            for ( String bp : bootpath )
+            {
+                if ( !SigilCore.isBundledPath( bp ) )
+                {
+                    filtered.add( bp );
+                }
+            }
+        }
+
+        return filtered.toArray( new String[filtered.size()] );
+    }
+
+
+    private String[] buildClasspath( IOSGiInstall osgi, ILaunchConfiguration config ) throws CoreException
+    {
+        ArrayList<String> cp = new ArrayList<String>();
+
+        cp.add( Main.class.getProtectionDomain().getCodeSource().getLocation().getFile() );
+
+        for ( String c : getClasspath( config ) )
+        {
+            cp.add( c );
+        }
+
+        if ( osgi != null )
+        {
+            for ( String c : osgi.getType().getClassPath() )
+            {
+                cp.add( c );
+            }
+        }
+
+        return cp.toArray( new String[cp.size()] );
+    }
+
+}
diff --git a/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiConfigurationView.java b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiConfigurationView.java
new file mode 100644
index 0000000..0af9ba6
--- /dev/null
+++ b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiConfigurationView.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.felix.sigil.eclipse.runtime.config;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author dave
+ *
+ */
+public class OSGiConfigurationView extends Composite
+{
+
+    /**
+     * @param parent
+     * @param osGiLaunchConfigurationTab
+     */
+    public OSGiConfigurationView( Composite parent, OSGiLaunchConfigurationTab osGiLaunchConfigurationTab )
+    {
+        super(parent, SWT.NONE);
+        initLayout();
+    }
+
+    /**
+     * 
+     */
+    private void initLayout()
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+}
diff --git a/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiLaunchConfigurationTab.java b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiLaunchConfigurationTab.java
new file mode 100644
index 0000000..abff591
--- /dev/null
+++ b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiLaunchConfigurationTab.java
@@ -0,0 +1,80 @@
+/*
+ * 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.sigil.eclipse.runtime.config;
+
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author dave
+ *
+ */
+public class OSGiLaunchConfigurationTab extends AbstractLaunchConfigurationTab
+{
+
+    private OSGiConfigurationView configurationView;
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
+     */
+    public String getName()
+    {
+        return "OSGi";
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        configurationView = new OSGiConfigurationView(parent, this);
+        setControl(configurationView);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
+     */
+    public void initializeFrom( ILaunchConfiguration config )
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
+     */
+    public void performApply( ILaunchConfigurationWorkingCopy config )
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
+     */
+    public void setDefaults( ILaunchConfigurationWorkingCopy config )
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+}
diff --git a/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiLaunchConfigurationTabGroup.java b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiLaunchConfigurationTabGroup.java
new file mode 100644
index 0000000..77834a0
--- /dev/null
+++ b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/config/OSGiLaunchConfigurationTabGroup.java
@@ -0,0 +1,52 @@
+/*
+ * 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.sigil.eclipse.runtime.config;
+
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
+import org.eclipse.debug.ui.CommonTab;
+import org.eclipse.debug.ui.EnvironmentTab;
+import org.eclipse.debug.ui.ILaunchConfigurationDialog;
+import org.eclipse.debug.ui.ILaunchConfigurationTab;
+import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab;
+import org.eclipse.jdt.debug.ui.launchConfigurations.JavaClasspathTab;
+
+/**
+ * @author dave
+ *
+ */
+public class OSGiLaunchConfigurationTabGroup extends AbstractLaunchConfigurationTabGroup
+{
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#createTabs(org.eclipse.debug.ui.ILaunchConfigurationDialog, java.lang.String)
+     */
+    public void createTabs( ILaunchConfigurationDialog arg0, String arg1 )
+    {
+        ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
+            new OSGiLaunchConfigurationTab(),
+            new CommonTab(),
+            new JavaArgumentsTab(),
+            new JavaClasspathTab(),
+            new EnvironmentTab()
+        };
+        setTabs(tabs);    
+    }
+
+}
diff --git a/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/shortcut/OSGiLaunchShortCut.java b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/shortcut/OSGiLaunchShortCut.java
new file mode 100644
index 0000000..8b83917
--- /dev/null
+++ b/sigil/eclipse/runtime/src/org/apache/felix/sigil/eclipse/runtime/shortcut/OSGiLaunchShortCut.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.felix.sigil.eclipse.runtime.shortcut;
+
+import org.eclipse.debug.ui.ILaunchShortcut;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * @author dave
+ *
+ */
+public class OSGiLaunchShortCut implements ILaunchShortcut
+{
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.jface.viewers.ISelection, java.lang.String)
+     */
+    public void launch( ISelection arg0, String arg1 )
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.ui.IEditorPart, java.lang.String)
+     */
+    public void launch( IEditorPart arg0, String arg1 )
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+}
