463462 - Adds formerly ignored "bin" folders
diff --git a/.gitignore b/.gitignore
index 3fbb103..99fa979 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,6 @@
 ivy-cache
 .ant-targets-build.xml
 user-ivy.properties
-bin/
 build/
 .settings/
 .project
diff --git a/jetty-server/org.eclipse.virgo.jetty.sample.tags/.gitignore b/jetty-server/org.eclipse.virgo.jetty.sample.tags/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/jetty-server/org.eclipse.virgo.jetty.sample.tags/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/jetty-server/org.eclipse.virgo.jetty.smoketest/.gitignore b/jetty-server/org.eclipse.virgo.jetty.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/jetty-server/org.eclipse.virgo.jetty.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/jetty-server/src/main/dist/bin/checkJava.bat b/jetty-server/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%CLASSPATH%" == "" (
+  echo The CLASSPATH environment variable is not defined.
+  exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/jetty-server/src/main/dist/bin/checkJava.sh b/jetty-server/src/main/dist/bin/checkJava.sh
new file mode 100644
index 0000000..a06ecd5
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+    CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+  	JAVA_EXECUTABLE=java
+else
+  	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+	-classpath "$CLASSPATH" \
+	org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+	exit 1
+fi
diff --git a/jetty-server/src/main/dist/bin/dmk.bat b/jetty-server/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..dd54fec
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/dmk.bat
@@ -0,0 +1,281 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Select command we are to run
+
+  rem First parm is command
+    set COMMAND=%~1
+    rem Rest are parameters - shift done in subroutines
+   
+  rem Switch on COMMAND in {"start","stop"}
+
+    if "%COMMAND%" == "start" (
+      call :doStartCommand %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    if "%COMMAND%" == "stop"  (
+      call :doStopCommand  %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    echo Unknown command: %COMMAND%
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+  shift
+  rem The shift must be here :()
+
+  rem Check further file that needs to exist
+  for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required to continue.
+    exit /B 1
+  )
+
+  rem Set defaults
+    set CONFIG_DIR=%KERNEL_HOME%\configuration
+    set CLEAN_FLAG=
+    set NO_START_FLAG=
+    set DEBUG_FLAG=
+    set DEBUG_PORT=8000
+    set SUSPEND=n
+    if not defined JMX_PORT set JMX_PORT=9875
+    if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+    set ADDITIONAL_ARGS=
+
+  rem Loop through options
+
+  :startOptionLoop
+  if "%~1"=="" goto endStartOptionLoop
+  if "%~1"=="-debug"             goto debug
+  if "%~1"=="-clean"             goto clean
+  if "%~1"=="-configDir"         goto configDir
+  if "%~1"=="-jmxport"           goto jmxport
+  if "%~1"=="-keystore"          goto keystore
+  if "%~1"=="-keystorePassword"  goto keystorePassword
+  if "%~1"=="-noStart"           goto noStart
+  if "%~1"=="-suspend"           goto suspend
+  if "%~1"=="-shell"             goto shell
+
+  set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+  :continueStartOptionLoop
+    shift
+    goto startOptionLoop
+
+  :debug
+    set DEBUG_FLAG=1
+    set PORT_CANDIDATE=%~2
+    if not "%PORT_CANDIDATE:~0,1%"=="-" (
+      set DEBUG_PORT=%PORT_CANDIDATE%
+      shift
+    )
+    goto continueStartOptionLoop
+  :clean
+    set CLEAN_FLAG=1
+    goto continueStartOptionLoop
+  :configDir
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDir
+    shift
+    goto continueStartOptionLoop
+  :jmxport
+    set JMX_PORT=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystore
+    set KEYSTORE_PATH=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystorePassword
+    set KEYSTORE_PASSWORD=%~2
+    shift
+    goto continueStartOptionLoop
+  :noStart
+    set NO_START_FLAG=1
+    goto continueStartOptionLoop
+  :suspend
+    set SUSPEND=y
+    goto continueStartOptionLoop
+  :shell
+    set SHELL_FLAG=1
+    goto continueStartOptionLoop
+
+  :endStartOptionLoop
+
+  
+  rem Adjust permissions if necessary
+    cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+  rem Adjust options now all are known
+    if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+    if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+  rem do Clean work:
+    if not "%CLEAN_FLAG%"=="" (
+      rmdir /Q /S "%KERNEL_HOME%\serviceability"
+      rmdir /Q /S "%KERNEL_HOME%\work"
+      
+      set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+    )
+
+  rem do Shell work:
+    if not "%SHELL_FLAG%"=="" ( 
+      echo "Warning: Kernel shell not supported; -shell option ignored."
+      rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+    )
+
+  rem Set JMX options
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+    if not "%NO_START_FLAG%"=="" goto :eof
+    rem ensure that the tmp directory exists:
+      set TMP_DIR="%KERNEL_HOME%\work\tmp"
+      if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+       set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+    rem Run the server
+  
+      rem Marshall parameters
+      set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djetty.home="%KERNEL_HOME%\jetty"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+      rem Now run it
+        PUSHD %KERNEL_HOME%
+        "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+        POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+  
+  shift
+  rem The shift must be here :()
+
+  rem Set defaults
+  set CONFIG_DIR=%KERNEL_HOME%\configuration
+  if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+  if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+  if not defined JMX_PORT set JMX_PORT=9875
+  set OTHER_ARGS=
+
+  rem Loop through options
+  :stopOptionLoop
+
+  if "%~1"=="" goto endStopOptionLoop  
+  if "%~1"=="-truststore" goto truststoreStop
+  if "%~1"=="-truststorePassword" goto truststorePasswordStop
+  if "%~1"=="-configDir" goto configDirStop 
+  if "%~1"=="-jmxport" goto jmxportStop
+  
+  set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    
+  :continueStopOptionLoop
+  shift
+  goto stopOptionLoop
+
+  :truststoreStop
+  set TRUSTSTORE_PATH=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :truststorePasswordStop
+  set TRUSTSTORE_PASSWORD=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :configDirStop
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDirStop
+    shift
+    goto continueStopOptionLoop
+
+  :jmxportStop
+  set JMX_PORT=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :endStopOptionLoop
+
+  rem Call shutdown client
+
+    rem Extend JMX options
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+    set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+    rem Marshall parameters
+    set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+    rem Run Java program
+    PUSHD %KERNEL_HOME%
+    "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+    POPD
+
+goto :eof
diff --git a/jetty-server/src/main/dist/bin/dmk.sh b/jetty-server/src/main/dist/bin/dmk.sh
new file mode 100644
index 0000000..ff277fa
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/dmk.sh
@@ -0,0 +1,292 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+# determine kernel home
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+
+# make KERNEL_HOME absolute
+KERNEL_HOME=`cd "$KERNEL_HOME"; pwd`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+	. $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# Run java version check with the discovered java jvm.
+. "$KERNEL_HOME/bin/checkJava.sh"
+
+shopt -s extglob
+	
+# parse the command we executing
+COMMAND=$1
+shift;
+	
+if [ "$COMMAND" = "start" ]
+then
+	
+	# parse the standard arguments 
+    JETTY_HOME=$KERNEL_HOME/jetty
+	CONFIG_DIR=$KERNEL_HOME/configuration
+	CLEAN_FLAG=
+	NO_START_FLAG=
+
+	SHELL_FLAG=
+	
+	DEBUG_FLAG=
+	DEBUG_PORT=8000
+	SUSPEND=n
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+	
+	if [ -z "$KEYSTORE_PASSWORD" ]
+	then
+		KEYSTORE_PASSWORD=changeit
+	fi
+	
+	ADDITIONAL_ARGS=
+
+	while (($# > 0))
+		do
+		case $1 in
+		-debug)
+				DEBUG_FLAG=1
+				if [[ "$2" == +([0-9]) ]]
+				then
+					DEBUG_PORT=$2
+					shift;
+				fi
+				;;
+		-clean)
+				CLEAN_FLAG=1
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		-keystore)
+				KEYSTORE_PATH=$2
+				shift;
+				;;
+		-keystorePassword)
+				KEYSTORE_PASSWORD=$2
+				shift;
+				;;
+		-noStart)
+				NO_START_FLAG=1
+				;;
+				
+		-suspend)
+				SUSPEND=y
+				;;
+		-shell)
+				SHELL_FLAG=1
+				;;
+		*)
+				ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
+				;;
+		esac
+		shift
+	done
+	
+	# start the kernel
+	if [[ "$CONFIG_DIR" != /* ]]
+	then
+	    CONFIG_DIR=$KERNEL_HOME/$CONFIG_DIR
+	fi
+
+	if [ -z "$KEYSTORE_PATH" ]
+	then
+	    KEYSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+
+	if [ "$DEBUG_FLAG" ]
+	then
+		DEBUG_OPTS=" \
+			-Xdebug \
+			-Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$SUSPEND"
+	fi
+
+	if [ "$CLEAN_FLAG" ]
+	then
+        rm -rf $KERNEL_HOME/work
+        rm -rf $KERNEL_HOME/serviceability
+
+        LAUNCH_OPTS="$LAUNCH_OPTS -clean" #equivalent to setting osgi.clean to "true"
+	fi
+	
+	if [ "$SHELL_FLAG" ]
+	then
+	    echo "Warning: Kernel shell not supported; -shell option ignored."
+		# LAUNCH_OPTS="$LAUNCH_OPTS -Forg.eclipse.virgo.kernel.shell.local=true"
+	fi
+
+    ACCESS_PROPERTIES=$CONFIG_DIR/org.eclipse.virgo.kernel.jmxremote.access.properties
+    AUTH_LOGIN=$CONFIG_DIR/org.eclipse.virgo.kernel.authentication.config
+    AUTH_FILE=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties
+    CONFIG_AREA=$KERNEL_HOME/work
+    JAVA_PROFILE=$KERNEL_HOME/configuration/java6-server.profile
+
+    if $cygwin; then
+        ACCESS_PROPERTIES=$(cygpath -wp $ACCESS_PROPERTIES)
+        AUTH_LOGIN=$(cygpath -wp $AUTH_LOGIN)
+        AUTH_FILE=$(cygpath -wp $AUTH_FILE)
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+        CONFIG_AREA=$(cygpath -wp $CONFIG_AREA)
+        JAVA_PROFILE=$(cygpath -wp $JAVA_PROFILE)
+    fi
+	
+	# Set the required permissions on the JMX configuration files
+	chmod 600 "$ACCESS_PROPERTIES"
+
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Dcom.sun.management.jmxremote.port=$JMX_PORT \
+		-Dcom.sun.management.jmxremote.authenticate=true \
+		-Dcom.sun.management.jmxremote.login.config=virgo-kernel \
+		-Dcom.sun.management.jmxremote.access.file="$ACCESS_PROPERTIES" \
+		-Djavax.net.ssl.keyStore=$KEYSTORE_PATH \
+		-Djavax.net.ssl.keyStorePassword=$KEYSTORE_PASSWORD \
+		-Dcom.sun.management.jmxremote.ssl=true \
+		-Dcom.sun.management.jmxremote.ssl.need.client.auth=false"
+
+   	if [ -z "$JAVA_HOME" ]
+    then
+      	JAVA_EXECUTABLE=java
+    else
+     	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+    fi
+
+	# If we get here we have the correct Java version.
+	
+	if [ -z "$NO_START_FLAG" ]
+	then
+		TMP_DIR=$KERNEL_HOME/work/tmp
+		# Ensure that the tmp directory exists
+		mkdir -p $TMP_DIR
+
+        JAVA_OPTS="-Xmx512m \
+                    -XX:MaxPermSize=512m $JAVA_OPTS"
+
+		cd $KERNEL_HOME; exec $JAVA_EXECUTABLE \
+			$JAVA_OPTS \
+			$DEBUG_OPTS \
+			$JMX_OPTS \
+			-XX:+HeapDumpOnOutOfMemoryError \
+			-XX:ErrorFile=$KERNEL_HOME/serviceability/error.log \
+			-XX:HeapDumpPath=$KERNEL_HOME/serviceability/heap_dump.hprof \
+			-Djava.security.auth.login.config=$AUTH_LOGIN \
+			-Dorg.eclipse.virgo.kernel.authentication.file=$AUTH_FILE \
+			-Djetty.home=$JETTY_HOME \
+       -Djava.io.tmpdir=$TMP_DIR \
+			-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+			-Dorg.eclipse.virgo.kernel.config=$CONFIG_DIR \
+			-Dosgi.sharedConfiguration.area=$CONFIG_DIR \
+			-Dosgi.java.profile="file:$JAVA_PROFILE" \
+            -Declipse.ignoreApp=true \
+            -Dosgi.install.area=$KERNEL_HOME \
+            -Dosgi.configuration.area=$CONFIG_AREA \
+            -Dssh.server.keystore="$CONFIG_DIR/hostkey.ser" \
+            -Dosgi.frameworkClassPath=$FWCLASSPATH \
+            -Djava.endorsed.dirs="$KERNEL_HOME/lib/endorsed" \
+            -classpath $CLASSPATH \
+			org.eclipse.equinox.launcher.Main \
+            -noExit \
+			$LAUNCH_OPTS \
+			$ADDITIONAL_ARGS
+	fi
+elif [ "$COMMAND" = "stop" ]
+then
+
+	CONFIG_DIR=$KERNEL_HOME/configuration
+
+	#parse args for the script
+	if [ -z "$TRUSTSTORE_PATH" ]
+	then
+		TRUSTSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+	
+	if [ -z "$TRUSTSTORE_PASSWORD" ]	
+	then
+		TRUSTSTORE_PASSWORD=changeit
+	fi
+
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+
+	shopt -s extglob
+
+	while (($# > 0))
+		do
+		case $1 in
+		-truststore)
+				TRUSTSTORE_PATH=$2
+				shift;
+				;;
+		-truststorePassword)
+				TRUSTSTORE_PASSWORD=$2
+				shift;
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		*)
+			OTHER_ARGS+=" $1"
+			;;
+		esac
+		shift
+	done
+	
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+		-Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+	OTHER_ARGS+=" -jmxport $JMX_PORT"
+
+    if $cygwin; then
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+    fi
+
+	exec $JAVA_EXECUTABLE $JAVA_OPTS $JMX_OPTS \
+		-classpath $CLASSPATH \
+		-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+		-Dorg.eclipse.virgo.kernel.authentication.file=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties \
+		org.eclipse.virgo.nano.shutdown.ShutdownClient $OTHER_ARGS
+	
+else
+	echo "Unknown command: ${COMMAND}"
+fi
+
diff --git a/jetty-server/src/main/dist/bin/jconsole.bat b/jetty-server/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Set defaults
+  set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+  set TRUSTSTORE_PASSWORD=changeit
+  set OTHER_ARGS=
+  
+:Loop
+  if "%~1"=="" goto EndLoop
+
+  if "%~1"=="-truststore" (
+    set TRUSTSTORE_PATH=%~2
+    shift
+    shift
+    goto Loop
+  ) 
+  if "%~1"=="-truststorePassword" (
+    set TRUSTSTORE_PASSWORD=%~2
+    shift
+    shift
+    goto Loop
+  )
+  rem Accumulate extra parameters.
+    set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    shift
+  goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%" 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/jetty-server/src/main/dist/bin/jconsole.sh b/jetty-server/src/main/dist/bin/jconsole.sh
new file mode 100644
index 0000000..0dfbcbf
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+    echo The JAVA_HOME environment variable is not defined
+    exit 1
+fi
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do 
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+ 
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+	do
+	case $1 in
+	-truststore)
+			TRUSTSTORE_PATH=$2
+			shift;
+			;;
+	-truststorePassword)
+			TRUSTSTORE_PASSWORD=$2
+			shift;
+			;;
+	esac
+	shift
+done
+
+JMX_OPTS=" \
+	$JMX_OPTS \
+	-J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+	-J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+	-J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/jetty-server/src/main/dist/bin/jmxPermissions.vbs b/jetty-server/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+	updateInheritance(configFolder & file)
+	updateOwnership(configFolder & file)
+	updatePermissions(configFolder & file)
+Next 
+
+Sub updateInheritance(file)
+	'WScript.Echo "Updating inheritance of " & file
+	
+	Const SE_DACL_PRESENT = 4
+	Const SE_DACL_PROTECTED = 4096
+	Const SE_SELF_RELATIVE = 32768
+
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+	Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+	objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+	objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+	
+	'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+	'WScript.Echo "Updating ownership of " & file
+	Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+	Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+	objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+	'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)	
+	'WScript.Echo "Updating permissions of " & file
+	
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	Set WshNetwork = WScript.CreateObject("WScript.Network")
+	
+	Dim foundAce
+	foundAce = "false"
+	
+	'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+	Dim specificAce(0)
+	For Each ace in objSecurityDescriptor.DACL
+		If ace.Trustee.Name = WshNetwork.UserName Then
+			Set specificAce(0) = ace
+			foundAce = "true"
+		End If
+	Next
+	
+	If foundAce = "true" Then
+		objSecurityDescriptor.DACL = specificAce
+
+		Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+		Set objInParam = objMethod.inParameters.SpawnInstance_()
+		objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+		objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+		
+		'WScript.Echo "Updated permissions of " & file
+	Else
+		WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+	End If
+	
+End Sub
diff --git a/jetty-server/src/main/dist/bin/setupClasspath.bat b/jetty-server/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+  echo The KERNEL_HOME environment variable is not defined.
+  exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+  echo No JAR files found in %KERNEL_HOME%\lib
+  exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+  set CLASSPATH=%CLASSPATH%;%~1
+  set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+  goto :eof
diff --git a/jetty-server/src/main/dist/bin/setupClasspath.sh b/jetty-server/src/main/dist/bin/setupClasspath.sh
new file mode 100644
index 0000000..741e0e3
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+	echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+#  Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+	if [[ $file == *.jar ]]
+	then
+		CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+		FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+	fi
+done
+
+#  Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+	FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+#  Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+	echo No JAR files found in $KERNEL_HOME/lib
+	exit 1
+fi
diff --git a/jetty-server/src/main/dist/bin/setupVars.bat b/jetty-server/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+  echo Called setupVars.bat out of context.
+  exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+  for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+  set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+  for %%I in (%ChkLst%) do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required.
+    exit /B 1
+  )
+
+rem set up the classpath (check result)
+  call "%KERNEL_HOME%\bin\setupClasspath.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+  call "%KERNEL_HOME%\bin\checkJava.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+	
+rem Execute user setenv script if needed (ignore result)
+  if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/jetty-server/src/main/dist/bin/shutdown.bat b/jetty-server/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/jetty-server/src/main/dist/bin/shutdown.sh b/jetty-server/src/main/dist/bin/shutdown.sh
new file mode 100644
index 0000000..1960446
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/jetty-server/src/main/dist/bin/startup.bat b/jetty-server/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/jetty-server/src/main/dist/bin/startup.sh b/jetty-server/src/main/dist/bin/startup.sh
new file mode 100644
index 0000000..69e43b7
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/kernel/org.eclipse.virgo.kernel.smoketest/.gitignore b/kernel/org.eclipse.virgo.kernel.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/kernel/org.eclipse.virgo.kernel.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/kernel/src/main/dist/bin/checkJava.bat b/kernel/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/kernel/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%CLASSPATH%" == "" (
+  echo The CLASSPATH environment variable is not defined.
+  exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/kernel/src/main/dist/bin/checkJava.sh b/kernel/src/main/dist/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/kernel/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+    CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+  	JAVA_EXECUTABLE=java
+else
+  	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+	-classpath "$CLASSPATH" \
+	org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+	exit 1
+fi
diff --git a/kernel/src/main/dist/bin/dmk.bat b/kernel/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/kernel/src/main/dist/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Select command we are to run
+
+  rem First parm is command
+    set COMMAND=%~1
+    rem Rest are parameters - shift done in subroutines
+   
+  rem Switch on COMMAND in {"start","stop"}
+
+    if "%COMMAND%" == "start" (
+      call :doStartCommand %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    if "%COMMAND%" == "stop"  (
+      call :doStopCommand  %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    echo Unknown command: %COMMAND%
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+  shift
+  rem The shift must be here :()
+
+  rem Check further file that needs to exist
+  for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required to continue.
+    exit /B 1
+  )
+
+  rem Set defaults
+    set CONFIG_DIR=%KERNEL_HOME%\configuration
+    set CLEAN_FLAG=
+    set NO_START_FLAG=
+    set DEBUG_FLAG=
+    set DEBUG_PORT=8000
+    set SUSPEND=n
+    if not defined JMX_PORT set JMX_PORT=9875
+    if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+    set ADDITIONAL_ARGS=
+
+  rem Loop through options
+
+  :startOptionLoop
+  if "%~1"=="" goto endStartOptionLoop
+  if "%~1"=="-debug"             goto debug
+  if "%~1"=="-clean"             goto clean
+  if "%~1"=="-configDir"         goto configDir
+  if "%~1"=="-jmxport"           goto jmxport
+  if "%~1"=="-keystore"          goto keystore
+  if "%~1"=="-keystorePassword"  goto keystorePassword
+  if "%~1"=="-noStart"           goto noStart
+  if "%~1"=="-suspend"           goto suspend
+  if "%~1"=="-shell"             goto shell
+
+  set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+  :continueStartOptionLoop
+    shift
+    goto startOptionLoop
+
+  :debug
+    set DEBUG_FLAG=1
+    set PORT_CANDIDATE=%~2
+    if not "%PORT_CANDIDATE:~0,1%"=="-" (
+      set DEBUG_PORT=%PORT_CANDIDATE%
+      shift
+    )
+    goto continueStartOptionLoop
+  :clean
+    set CLEAN_FLAG=1
+    goto continueStartOptionLoop
+  :configDir
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDir
+    shift
+    goto continueStartOptionLoop
+  :jmxport
+    set JMX_PORT=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystore
+    set KEYSTORE_PATH=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystorePassword
+    set KEYSTORE_PASSWORD=%~2
+    shift
+    goto continueStartOptionLoop
+  :noStart
+    set NO_START_FLAG=1
+    goto continueStartOptionLoop
+  :suspend
+    set SUSPEND=y
+    goto continueStartOptionLoop
+  :shell
+    set SHELL_FLAG=1
+    goto continueStartOptionLoop
+
+  :endStartOptionLoop
+
+  
+  rem Adjust permissions if necessary
+    cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+  rem Adjust options now all are known
+    if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+    if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+  rem do Clean work:
+    if not "%CLEAN_FLAG%"=="" (
+      rmdir /Q /S "%KERNEL_HOME%\serviceability"
+      rmdir /Q /S "%KERNEL_HOME%\work"
+      
+      set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+    )
+
+  rem do Shell work:
+    if not "%SHELL_FLAG%"=="" ( 
+      echo "Warning: Kernel shell not supported; -shell option ignored."
+      rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+    )
+
+  rem Set JMX options
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+    if not "%NO_START_FLAG%"=="" goto :eof
+    rem ensure that the tmp directory exists:
+      set TMP_DIR="%KERNEL_HOME%\work\tmp"
+      if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+       set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+    rem Run the server
+  
+      rem Marshall parameters
+      set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+      rem Now run it
+        PUSHD %KERNEL_HOME%
+        "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+        POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+  
+  shift
+  rem The shift must be here :()
+
+  rem Set defaults
+  set CONFIG_DIR=%KERNEL_HOME%\configuration
+  if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+  if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+  if not defined JMX_PORT set JMX_PORT=9875
+  set OTHER_ARGS=
+
+  rem Loop through options
+  :stopOptionLoop
+
+  if "%~1"=="" goto endStopOptionLoop  
+  if "%~1"=="-truststore" goto truststoreStop
+  if "%~1"=="-truststorePassword" goto truststorePasswordStop
+  if "%~1"=="-configDir" goto configDirStop 
+  if "%~1"=="-jmxport" goto jmxportStop
+  
+  set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    
+  :continueStopOptionLoop
+  shift
+  goto stopOptionLoop
+
+  :truststoreStop
+  set TRUSTSTORE_PATH=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :truststorePasswordStop
+  set TRUSTSTORE_PASSWORD=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :configDirStop
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDirStop
+    shift
+    goto continueStopOptionLoop
+
+  :jmxportStop
+  set JMX_PORT=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :endStopOptionLoop
+
+  rem Call shutdown client
+
+    rem Extend JMX options
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+    set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+    rem Marshall parameters
+    set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+    rem Run Java program
+    PUSHD %KERNEL_HOME%
+    "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+    POPD
+
+goto :eof
diff --git a/kernel/src/main/dist/bin/dmk.sh b/kernel/src/main/dist/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/kernel/src/main/dist/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+# determine kernel home
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+
+# make KERNEL_HOME absolute
+KERNEL_HOME=`cd "$KERNEL_HOME"; pwd`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+	. $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# Run java version check with the discovered java jvm.
+. "$KERNEL_HOME/bin/checkJava.sh"
+
+shopt -s extglob
+	
+# parse the command we executing
+COMMAND=$1
+shift;
+	
+if [ "$COMMAND" = "start" ]
+then
+	
+	# parse the standard arguments
+	CONFIG_DIR=$KERNEL_HOME/configuration
+	CLEAN_FLAG=
+	NO_START_FLAG=
+
+	SHELL_FLAG=
+	
+	DEBUG_FLAG=
+	DEBUG_PORT=8000
+	SUSPEND=n
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+	
+	if [ -z "$KEYSTORE_PASSWORD" ]
+	then
+		KEYSTORE_PASSWORD=changeit
+	fi
+	
+	ADDITIONAL_ARGS=
+
+	while (($# > 0))
+		do
+		case $1 in
+		-debug)
+				DEBUG_FLAG=1
+				if [[ "$2" == +([0-9]) ]]
+				then
+					DEBUG_PORT=$2
+					shift;
+				fi
+				;;
+		-clean)
+				CLEAN_FLAG=1
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		-keystore)
+				KEYSTORE_PATH=$2
+				shift;
+				;;
+		-keystorePassword)
+				KEYSTORE_PASSWORD=$2
+				shift;
+				;;
+		-noStart)
+				NO_START_FLAG=1
+				;;
+				
+		-suspend)
+				SUSPEND=y
+				;;
+		-shell)
+				SHELL_FLAG=1
+				;;
+		*)
+				ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
+				;;
+		esac
+		shift
+	done
+	
+	# start the kernel
+	if [[ "$CONFIG_DIR" != /* ]]
+	then
+	    CONFIG_DIR=$KERNEL_HOME/$CONFIG_DIR
+	fi
+
+	if [ -z "$KEYSTORE_PATH" ]
+	then
+	    KEYSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+
+	if [ "$DEBUG_FLAG" ]
+	then
+		DEBUG_OPTS=" \
+			-Xdebug \
+			-Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$SUSPEND"
+	fi
+
+	if [ "$CLEAN_FLAG" ]
+	then
+        rm -rf $KERNEL_HOME/work
+        rm -rf $KERNEL_HOME/serviceability
+
+        LAUNCH_OPTS="$LAUNCH_OPTS -clean" #equivalent to setting osgi.clean to "true"
+	fi
+	
+	if [ "$SHELL_FLAG" ]
+	then
+	    echo "Warning: Kernel shell not supported; -shell option ignored."
+		# LAUNCH_OPTS="$LAUNCH_OPTS -Forg.eclipse.virgo.kernel.shell.local=true"
+	fi
+
+    ACCESS_PROPERTIES=$CONFIG_DIR/org.eclipse.virgo.kernel.jmxremote.access.properties
+    AUTH_LOGIN=$CONFIG_DIR/org.eclipse.virgo.kernel.authentication.config
+    AUTH_FILE=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties
+    CONFIG_AREA=$KERNEL_HOME/work
+    JAVA_PROFILE=$KERNEL_HOME/configuration/java6-server.profile
+
+    if $cygwin; then
+        ACCESS_PROPERTIES=$(cygpath -wp $ACCESS_PROPERTIES)
+        AUTH_LOGIN=$(cygpath -wp $AUTH_LOGIN)
+        AUTH_FILE=$(cygpath -wp $AUTH_FILE)
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+        CONFIG_AREA=$(cygpath -wp $CONFIG_AREA)
+        JAVA_PROFILE=$(cygpath -wp $JAVA_PROFILE)
+    fi
+	
+	# Set the required permissions on the JMX configuration files
+	chmod 600 "$ACCESS_PROPERTIES"
+
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Dcom.sun.management.jmxremote.port=$JMX_PORT \
+		-Dcom.sun.management.jmxremote.authenticate=true \
+		-Dcom.sun.management.jmxremote.login.config=virgo-kernel \
+		-Dcom.sun.management.jmxremote.access.file="$ACCESS_PROPERTIES" \
+		-Djavax.net.ssl.keyStore=$KEYSTORE_PATH \
+		-Djavax.net.ssl.keyStorePassword=$KEYSTORE_PASSWORD \
+		-Dcom.sun.management.jmxremote.ssl=true \
+		-Dcom.sun.management.jmxremote.ssl.need.client.auth=false"
+
+   	if [ -z "$JAVA_HOME" ]
+    then
+      	JAVA_EXECUTABLE=java
+    else
+     	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+    fi
+
+	# If we get here we have the correct Java version.
+	
+	if [ -z "$NO_START_FLAG" ]
+	then
+		TMP_DIR=$KERNEL_HOME/work/tmp
+		# Ensure that the tmp directory exists
+		mkdir -p $TMP_DIR
+
+        JAVA_OPTS="-Xmx512m \
+                    -XX:MaxPermSize=512m $JAVA_OPTS"
+
+		cd $KERNEL_HOME; exec $JAVA_EXECUTABLE \
+			$JAVA_OPTS \
+			$DEBUG_OPTS \
+			$JMX_OPTS \
+			-XX:+HeapDumpOnOutOfMemoryError \
+			-XX:ErrorFile=$KERNEL_HOME/serviceability/error.log \
+			-XX:HeapDumpPath=$KERNEL_HOME/serviceability/heap_dump.hprof \
+			-Djava.security.auth.login.config=$AUTH_LOGIN \
+			-Dorg.eclipse.virgo.kernel.authentication.file=$AUTH_FILE \
+			-Djava.io.tmpdir=$TMP_DIR \
+			-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+			-Dorg.eclipse.virgo.kernel.config=$CONFIG_DIR \
+			-Dosgi.sharedConfiguration.area=$CONFIG_DIR \
+			-Dosgi.java.profile="file:$JAVA_PROFILE" \
+            -Declipse.ignoreApp=true \
+            -Dosgi.install.area=$KERNEL_HOME \
+            -Dosgi.configuration.area=$CONFIG_AREA \
+            -Dssh.server.keystore="$CONFIG_DIR/hostkey.ser" \
+            -Dosgi.frameworkClassPath=$FWCLASSPATH \
+            -Djava.endorsed.dirs="$KERNEL_HOME/lib/endorsed" \
+            -classpath $CLASSPATH \
+			org.eclipse.equinox.launcher.Main \
+            -noExit \
+			$LAUNCH_OPTS \
+			$ADDITIONAL_ARGS
+	fi
+elif [ "$COMMAND" = "stop" ]
+then
+
+	CONFIG_DIR=$KERNEL_HOME/configuration
+
+	#parse args for the script
+	if [ -z "$TRUSTSTORE_PATH" ]
+	then
+		TRUSTSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+	
+	if [ -z "$TRUSTSTORE_PASSWORD" ]	
+	then
+		TRUSTSTORE_PASSWORD=changeit
+	fi
+
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+
+	shopt -s extglob
+
+	while (($# > 0))
+		do
+		case $1 in
+		-truststore)
+				TRUSTSTORE_PATH=$2
+				shift;
+				;;
+		-truststorePassword)
+				TRUSTSTORE_PASSWORD=$2
+				shift;
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		*)
+			OTHER_ARGS+=" $1"
+			;;
+		esac
+		shift
+	done
+	
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+		-Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+	OTHER_ARGS+=" -jmxport $JMX_PORT"
+
+    if $cygwin; then
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+    fi
+
+	exec $JAVA_EXECUTABLE $JAVA_OPTS $JMX_OPTS \
+		-classpath $CLASSPATH \
+		-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+		-Dorg.eclipse.virgo.kernel.authentication.file=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties \
+		org.eclipse.virgo.nano.shutdown.ShutdownClient $OTHER_ARGS
+	
+else
+	echo "Unknown command: ${COMMAND}"
+fi
+
diff --git a/kernel/src/main/dist/bin/jconsole.bat b/kernel/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/kernel/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Set defaults
+  set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+  set TRUSTSTORE_PASSWORD=changeit
+  set OTHER_ARGS=
+  
+:Loop
+  if "%~1"=="" goto EndLoop
+
+  if "%~1"=="-truststore" (
+    set TRUSTSTORE_PATH=%~2
+    shift
+    shift
+    goto Loop
+  ) 
+  if "%~1"=="-truststorePassword" (
+    set TRUSTSTORE_PASSWORD=%~2
+    shift
+    shift
+    goto Loop
+  )
+  rem Accumulate extra parameters.
+    set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    shift
+  goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%" 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/kernel/src/main/dist/bin/jconsole.sh b/kernel/src/main/dist/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/kernel/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+    echo The JAVA_HOME environment variable is not defined
+    exit 1
+fi
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do 
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+ 
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+	do
+	case $1 in
+	-truststore)
+			TRUSTSTORE_PATH=$2
+			shift;
+			;;
+	-truststorePassword)
+			TRUSTSTORE_PASSWORD=$2
+			shift;
+			;;
+	esac
+	shift
+done
+
+JMX_OPTS=" \
+	$JMX_OPTS \
+	-J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+	-J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+	-J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/kernel/src/main/dist/bin/jmxPermissions.vbs b/kernel/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/kernel/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+	updateInheritance(configFolder & file)
+	updateOwnership(configFolder & file)
+	updatePermissions(configFolder & file)
+Next 
+
+Sub updateInheritance(file)
+	'WScript.Echo "Updating inheritance of " & file
+	
+	Const SE_DACL_PRESENT = 4
+	Const SE_DACL_PROTECTED = 4096
+	Const SE_SELF_RELATIVE = 32768
+
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+	Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+	objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+	objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+	
+	'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+	'WScript.Echo "Updating ownership of " & file
+	Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+	Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+	objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+	'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)	
+	'WScript.Echo "Updating permissions of " & file
+	
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	Set WshNetwork = WScript.CreateObject("WScript.Network")
+	
+	Dim foundAce
+	foundAce = "false"
+	
+	'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+	Dim specificAce(0)
+	For Each ace in objSecurityDescriptor.DACL
+		If ace.Trustee.Name = WshNetwork.UserName Then
+			Set specificAce(0) = ace
+			foundAce = "true"
+		End If
+	Next
+	
+	If foundAce = "true" Then
+		objSecurityDescriptor.DACL = specificAce
+
+		Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+		Set objInParam = objMethod.inParameters.SpawnInstance_()
+		objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+		objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+		
+		'WScript.Echo "Updated permissions of " & file
+	Else
+		WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+	End If
+	
+End Sub
diff --git a/kernel/src/main/dist/bin/setupClasspath.bat b/kernel/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/kernel/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+  echo The KERNEL_HOME environment variable is not defined.
+  exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+  echo No JAR files found in %KERNEL_HOME%\lib
+  exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+  set CLASSPATH=%CLASSPATH%;%~1
+  set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+  goto :eof
diff --git a/kernel/src/main/dist/bin/setupClasspath.sh b/kernel/src/main/dist/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/kernel/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+	echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+#  Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+	if [[ $file == *.jar ]]
+	then
+		CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+		FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+	fi
+done
+
+#  Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+	FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+#  Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+	echo No JAR files found in $KERNEL_HOME/lib
+	exit 1
+fi
diff --git a/kernel/src/main/dist/bin/setupVars.bat b/kernel/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/kernel/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+  echo Called setupVars.bat out of context.
+  exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+  for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+  set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+  for %%I in (%ChkLst%) do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required.
+    exit /B 1
+  )
+
+rem set up the classpath (check result)
+  call "%KERNEL_HOME%\bin\setupClasspath.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+  call "%KERNEL_HOME%\bin\checkJava.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+	
+rem Execute user setenv script if needed (ignore result)
+  if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/kernel/src/main/dist/bin/shutdown.bat b/kernel/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/kernel/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/kernel/src/main/dist/bin/shutdown.sh b/kernel/src/main/dist/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/kernel/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/kernel/src/main/dist/bin/startup.bat b/kernel/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/kernel/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/kernel/src/main/dist/bin/startup.sh b/kernel/src/main/dist/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/kernel/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/nano/org.eclipse.virgo.nano.smoketest/.gitignore b/nano/org.eclipse.virgo.nano.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/nano/org.eclipse.virgo.nano.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/nano/src/main/dist/bin/checkJava.bat b/nano/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/nano/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%CLASSPATH%" == "" (
+  echo The CLASSPATH environment variable is not defined.
+  exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/nano/src/main/dist/bin/checkJava.sh b/nano/src/main/dist/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/nano/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+    CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+  	JAVA_EXECUTABLE=java
+else
+  	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+	-classpath "$CLASSPATH" \
+	org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+	exit 1
+fi
diff --git a/nano/src/main/dist/bin/dmk.bat b/nano/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/nano/src/main/dist/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Select command we are to run
+
+  rem First parm is command
+    set COMMAND=%~1
+    rem Rest are parameters - shift done in subroutines
+   
+  rem Switch on COMMAND in {"start","stop"}
+
+    if "%COMMAND%" == "start" (
+      call :doStartCommand %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    if "%COMMAND%" == "stop"  (
+      call :doStopCommand  %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    echo Unknown command: %COMMAND%
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+  shift
+  rem The shift must be here :()
+
+  rem Check further file that needs to exist
+  for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required to continue.
+    exit /B 1
+  )
+
+  rem Set defaults
+    set CONFIG_DIR=%KERNEL_HOME%\configuration
+    set CLEAN_FLAG=
+    set NO_START_FLAG=
+    set DEBUG_FLAG=
+    set DEBUG_PORT=8000
+    set SUSPEND=n
+    if not defined JMX_PORT set JMX_PORT=9875
+    if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+    set ADDITIONAL_ARGS=
+
+  rem Loop through options
+
+  :startOptionLoop
+  if "%~1"=="" goto endStartOptionLoop
+  if "%~1"=="-debug"             goto debug
+  if "%~1"=="-clean"             goto clean
+  if "%~1"=="-configDir"         goto configDir
+  if "%~1"=="-jmxport"           goto jmxport
+  if "%~1"=="-keystore"          goto keystore
+  if "%~1"=="-keystorePassword"  goto keystorePassword
+  if "%~1"=="-noStart"           goto noStart
+  if "%~1"=="-suspend"           goto suspend
+  if "%~1"=="-shell"             goto shell
+
+  set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+  :continueStartOptionLoop
+    shift
+    goto startOptionLoop
+
+  :debug
+    set DEBUG_FLAG=1
+    set PORT_CANDIDATE=%~2
+    if not "%PORT_CANDIDATE:~0,1%"=="-" (
+      set DEBUG_PORT=%PORT_CANDIDATE%
+      shift
+    )
+    goto continueStartOptionLoop
+  :clean
+    set CLEAN_FLAG=1
+    goto continueStartOptionLoop
+  :configDir
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDir
+    shift
+    goto continueStartOptionLoop
+  :jmxport
+    set JMX_PORT=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystore
+    set KEYSTORE_PATH=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystorePassword
+    set KEYSTORE_PASSWORD=%~2
+    shift
+    goto continueStartOptionLoop
+  :noStart
+    set NO_START_FLAG=1
+    goto continueStartOptionLoop
+  :suspend
+    set SUSPEND=y
+    goto continueStartOptionLoop
+  :shell
+    set SHELL_FLAG=1
+    goto continueStartOptionLoop
+
+  :endStartOptionLoop
+
+  
+  rem Adjust permissions if necessary
+    cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+  rem Adjust options now all are known
+    if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+    if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+  rem do Clean work:
+    if not "%CLEAN_FLAG%"=="" (
+      rmdir /Q /S "%KERNEL_HOME%\serviceability"
+      rmdir /Q /S "%KERNEL_HOME%\work"
+      
+      set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+    )
+
+  rem do Shell work:
+    if not "%SHELL_FLAG%"=="" ( 
+      echo "Warning: Kernel shell not supported; -shell option ignored."
+      rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+    )
+
+  rem Set JMX options
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+    if not "%NO_START_FLAG%"=="" goto :eof
+    rem ensure that the tmp directory exists:
+      set TMP_DIR="%KERNEL_HOME%\work\tmp"
+      if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+       set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+    rem Run the server
+  
+      rem Marshall parameters
+      set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+      rem Now run it
+        PUSHD %KERNEL_HOME%
+        "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+        POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+  
+  shift
+  rem The shift must be here :()
+
+  rem Set defaults
+  set CONFIG_DIR=%KERNEL_HOME%\configuration
+  if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+  if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+  if not defined JMX_PORT set JMX_PORT=9875
+  set OTHER_ARGS=
+
+  rem Loop through options
+  :stopOptionLoop
+
+  if "%~1"=="" goto endStopOptionLoop  
+  if "%~1"=="-truststore" goto truststoreStop
+  if "%~1"=="-truststorePassword" goto truststorePasswordStop
+  if "%~1"=="-configDir" goto configDirStop 
+  if "%~1"=="-jmxport" goto jmxportStop
+  
+  set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    
+  :continueStopOptionLoop
+  shift
+  goto stopOptionLoop
+
+  :truststoreStop
+  set TRUSTSTORE_PATH=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :truststorePasswordStop
+  set TRUSTSTORE_PASSWORD=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :configDirStop
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDirStop
+    shift
+    goto continueStopOptionLoop
+
+  :jmxportStop
+  set JMX_PORT=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :endStopOptionLoop
+
+  rem Call shutdown client
+
+    rem Extend JMX options
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+    set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+    rem Marshall parameters
+    set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+    rem Run Java program
+    PUSHD %KERNEL_HOME%
+    "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+    POPD
+
+goto :eof
diff --git a/nano/src/main/dist/bin/dmk.sh b/nano/src/main/dist/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/nano/src/main/dist/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+# determine kernel home
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+
+# make KERNEL_HOME absolute
+KERNEL_HOME=`cd "$KERNEL_HOME"; pwd`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+	. $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# Run java version check with the discovered java jvm.
+. "$KERNEL_HOME/bin/checkJava.sh"
+
+shopt -s extglob
+	
+# parse the command we executing
+COMMAND=$1
+shift;
+	
+if [ "$COMMAND" = "start" ]
+then
+	
+	# parse the standard arguments
+	CONFIG_DIR=$KERNEL_HOME/configuration
+	CLEAN_FLAG=
+	NO_START_FLAG=
+
+	SHELL_FLAG=
+	
+	DEBUG_FLAG=
+	DEBUG_PORT=8000
+	SUSPEND=n
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+	
+	if [ -z "$KEYSTORE_PASSWORD" ]
+	then
+		KEYSTORE_PASSWORD=changeit
+	fi
+	
+	ADDITIONAL_ARGS=
+
+	while (($# > 0))
+		do
+		case $1 in
+		-debug)
+				DEBUG_FLAG=1
+				if [[ "$2" == +([0-9]) ]]
+				then
+					DEBUG_PORT=$2
+					shift;
+				fi
+				;;
+		-clean)
+				CLEAN_FLAG=1
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		-keystore)
+				KEYSTORE_PATH=$2
+				shift;
+				;;
+		-keystorePassword)
+				KEYSTORE_PASSWORD=$2
+				shift;
+				;;
+		-noStart)
+				NO_START_FLAG=1
+				;;
+				
+		-suspend)
+				SUSPEND=y
+				;;
+		-shell)
+				SHELL_FLAG=1
+				;;
+		*)
+				ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
+				;;
+		esac
+		shift
+	done
+	
+	# start the kernel
+	if [[ "$CONFIG_DIR" != /* ]]
+	then
+	    CONFIG_DIR=$KERNEL_HOME/$CONFIG_DIR
+	fi
+
+	if [ -z "$KEYSTORE_PATH" ]
+	then
+	    KEYSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+
+	if [ "$DEBUG_FLAG" ]
+	then
+		DEBUG_OPTS=" \
+			-Xdebug \
+			-Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$SUSPEND"
+	fi
+
+	if [ "$CLEAN_FLAG" ]
+	then
+        rm -rf $KERNEL_HOME/work
+        rm -rf $KERNEL_HOME/serviceability
+
+        LAUNCH_OPTS="$LAUNCH_OPTS -clean" #equivalent to setting osgi.clean to "true"
+	fi
+	
+	if [ "$SHELL_FLAG" ]
+	then
+	    echo "Warning: Kernel shell not supported; -shell option ignored."
+		# LAUNCH_OPTS="$LAUNCH_OPTS -Forg.eclipse.virgo.kernel.shell.local=true"
+	fi
+
+    ACCESS_PROPERTIES=$CONFIG_DIR/org.eclipse.virgo.kernel.jmxremote.access.properties
+    AUTH_LOGIN=$CONFIG_DIR/org.eclipse.virgo.kernel.authentication.config
+    AUTH_FILE=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties
+    CONFIG_AREA=$KERNEL_HOME/work
+    JAVA_PROFILE=$KERNEL_HOME/configuration/java6-server.profile
+
+    if $cygwin; then
+        ACCESS_PROPERTIES=$(cygpath -wp $ACCESS_PROPERTIES)
+        AUTH_LOGIN=$(cygpath -wp $AUTH_LOGIN)
+        AUTH_FILE=$(cygpath -wp $AUTH_FILE)
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+        CONFIG_AREA=$(cygpath -wp $CONFIG_AREA)
+        JAVA_PROFILE=$(cygpath -wp $JAVA_PROFILE)
+    fi
+	
+	# Set the required permissions on the JMX configuration files
+	chmod 600 "$ACCESS_PROPERTIES"
+
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Dcom.sun.management.jmxremote.port=$JMX_PORT \
+		-Dcom.sun.management.jmxremote.authenticate=true \
+		-Dcom.sun.management.jmxremote.login.config=virgo-kernel \
+		-Dcom.sun.management.jmxremote.access.file="$ACCESS_PROPERTIES" \
+		-Djavax.net.ssl.keyStore=$KEYSTORE_PATH \
+		-Djavax.net.ssl.keyStorePassword=$KEYSTORE_PASSWORD \
+		-Dcom.sun.management.jmxremote.ssl=true \
+		-Dcom.sun.management.jmxremote.ssl.need.client.auth=false"
+
+   	if [ -z "$JAVA_HOME" ]
+    then
+      	JAVA_EXECUTABLE=java
+    else
+     	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+    fi
+
+	# If we get here we have the correct Java version.
+	
+	if [ -z "$NO_START_FLAG" ]
+	then
+		TMP_DIR=$KERNEL_HOME/work/tmp
+		# Ensure that the tmp directory exists
+		mkdir -p $TMP_DIR
+
+        JAVA_OPTS="-Xmx512m \
+                    -XX:MaxPermSize=512m $JAVA_OPTS"
+
+		cd $KERNEL_HOME; exec $JAVA_EXECUTABLE \
+			$JAVA_OPTS \
+			$DEBUG_OPTS \
+			$JMX_OPTS \
+			-XX:+HeapDumpOnOutOfMemoryError \
+			-XX:ErrorFile=$KERNEL_HOME/serviceability/error.log \
+			-XX:HeapDumpPath=$KERNEL_HOME/serviceability/heap_dump.hprof \
+			-Djava.security.auth.login.config=$AUTH_LOGIN \
+			-Dorg.eclipse.virgo.kernel.authentication.file=$AUTH_FILE \
+			-Djava.io.tmpdir=$TMP_DIR \
+			-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+			-Dorg.eclipse.virgo.kernel.config=$CONFIG_DIR \
+			-Dosgi.sharedConfiguration.area=$CONFIG_DIR \
+			-Dosgi.java.profile="file:$JAVA_PROFILE" \
+            -Declipse.ignoreApp=true \
+            -Dosgi.install.area=$KERNEL_HOME \
+            -Dosgi.configuration.area=$CONFIG_AREA \
+            -Dssh.server.keystore="$CONFIG_DIR/hostkey.ser" \
+            -Dosgi.frameworkClassPath=$FWCLASSPATH \
+            -Djava.endorsed.dirs="$KERNEL_HOME/lib/endorsed" \
+            -classpath $CLASSPATH \
+			org.eclipse.equinox.launcher.Main \
+            -noExit \
+			$LAUNCH_OPTS \
+			$ADDITIONAL_ARGS
+	fi
+elif [ "$COMMAND" = "stop" ]
+then
+
+	CONFIG_DIR=$KERNEL_HOME/configuration
+
+	#parse args for the script
+	if [ -z "$TRUSTSTORE_PATH" ]
+	then
+		TRUSTSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+	
+	if [ -z "$TRUSTSTORE_PASSWORD" ]	
+	then
+		TRUSTSTORE_PASSWORD=changeit
+	fi
+
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+
+	shopt -s extglob
+
+	while (($# > 0))
+		do
+		case $1 in
+		-truststore)
+				TRUSTSTORE_PATH=$2
+				shift;
+				;;
+		-truststorePassword)
+				TRUSTSTORE_PASSWORD=$2
+				shift;
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		*)
+			OTHER_ARGS+=" $1"
+			;;
+		esac
+		shift
+	done
+	
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+		-Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+	OTHER_ARGS+=" -jmxport $JMX_PORT"
+
+    if $cygwin; then
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+    fi
+
+	exec $JAVA_EXECUTABLE $JAVA_OPTS $JMX_OPTS \
+		-classpath $CLASSPATH \
+		-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+		-Dorg.eclipse.virgo.kernel.authentication.file=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties \
+		org.eclipse.virgo.nano.shutdown.ShutdownClient $OTHER_ARGS
+	
+else
+	echo "Unknown command: ${COMMAND}"
+fi
+
diff --git a/nano/src/main/dist/bin/jconsole.bat b/nano/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/nano/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Set defaults
+  set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+  set TRUSTSTORE_PASSWORD=changeit
+  set OTHER_ARGS=
+  
+:Loop
+  if "%~1"=="" goto EndLoop
+
+  if "%~1"=="-truststore" (
+    set TRUSTSTORE_PATH=%~2
+    shift
+    shift
+    goto Loop
+  ) 
+  if "%~1"=="-truststorePassword" (
+    set TRUSTSTORE_PASSWORD=%~2
+    shift
+    shift
+    goto Loop
+  )
+  rem Accumulate extra parameters.
+    set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    shift
+  goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%" 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/nano/src/main/dist/bin/jconsole.sh b/nano/src/main/dist/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/nano/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+    echo The JAVA_HOME environment variable is not defined
+    exit 1
+fi
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do 
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+ 
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+	do
+	case $1 in
+	-truststore)
+			TRUSTSTORE_PATH=$2
+			shift;
+			;;
+	-truststorePassword)
+			TRUSTSTORE_PASSWORD=$2
+			shift;
+			;;
+	esac
+	shift
+done
+
+JMX_OPTS=" \
+	$JMX_OPTS \
+	-J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+	-J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+	-J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/nano/src/main/dist/bin/jmxPermissions.vbs b/nano/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/nano/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+	updateInheritance(configFolder & file)
+	updateOwnership(configFolder & file)
+	updatePermissions(configFolder & file)
+Next 
+
+Sub updateInheritance(file)
+	'WScript.Echo "Updating inheritance of " & file
+	
+	Const SE_DACL_PRESENT = 4
+	Const SE_DACL_PROTECTED = 4096
+	Const SE_SELF_RELATIVE = 32768
+
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+	Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+	objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+	objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+	
+	'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+	'WScript.Echo "Updating ownership of " & file
+	Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+	Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+	objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+	'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)	
+	'WScript.Echo "Updating permissions of " & file
+	
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	Set WshNetwork = WScript.CreateObject("WScript.Network")
+	
+	Dim foundAce
+	foundAce = "false"
+	
+	'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+	Dim specificAce(0)
+	For Each ace in objSecurityDescriptor.DACL
+		If ace.Trustee.Name = WshNetwork.UserName Then
+			Set specificAce(0) = ace
+			foundAce = "true"
+		End If
+	Next
+	
+	If foundAce = "true" Then
+		objSecurityDescriptor.DACL = specificAce
+
+		Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+		Set objInParam = objMethod.inParameters.SpawnInstance_()
+		objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+		objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+		
+		'WScript.Echo "Updated permissions of " & file
+	Else
+		WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+	End If
+	
+End Sub
diff --git a/nano/src/main/dist/bin/setupClasspath.bat b/nano/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/nano/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+  echo The KERNEL_HOME environment variable is not defined.
+  exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+  echo No JAR files found in %KERNEL_HOME%\lib
+  exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+  set CLASSPATH=%CLASSPATH%;%~1
+  set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+  goto :eof
diff --git a/nano/src/main/dist/bin/setupClasspath.sh b/nano/src/main/dist/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/nano/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+	echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+#  Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+	if [[ $file == *.jar ]]
+	then
+		CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+		FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+	fi
+done
+
+#  Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+	FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+#  Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+	echo No JAR files found in $KERNEL_HOME/lib
+	exit 1
+fi
diff --git a/nano/src/main/dist/bin/setupVars.bat b/nano/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/nano/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+  echo Called setupVars.bat out of context.
+  exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+  for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+  set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+  for %%I in (%ChkLst%) do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required.
+    exit /B 1
+  )
+
+rem set up the classpath (check result)
+  call "%KERNEL_HOME%\bin\setupClasspath.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+  call "%KERNEL_HOME%\bin\checkJava.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+	
+rem Execute user setenv script if needed (ignore result)
+  if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/nano/src/main/dist/bin/shutdown.bat b/nano/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/nano/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/nano/src/main/dist/bin/shutdown.sh b/nano/src/main/dist/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/nano/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/nano/src/main/dist/bin/startup.bat b/nano/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/nano/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/nano/src/main/dist/bin/startup.sh b/nano/src/main/dist/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/nano/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/tomcat-server/org.eclipse.virgo.tomcat.smoketest/.gitignore b/tomcat-server/org.eclipse.virgo.tomcat.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/tomcat-server/org.eclipse.virgo.tomcat.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/tomcat-server/src/main/dist/bin/checkJava.bat b/tomcat-server/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%CLASSPATH%" == "" (
+  echo The CLASSPATH environment variable is not defined.
+  exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/tomcat-server/src/main/dist/bin/checkJava.sh b/tomcat-server/src/main/dist/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+    CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+  	JAVA_EXECUTABLE=java
+else
+  	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+	-classpath "$CLASSPATH" \
+	org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+	exit 1
+fi
diff --git a/tomcat-server/src/main/dist/bin/dmk.bat b/tomcat-server/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Select command we are to run
+
+  rem First parm is command
+    set COMMAND=%~1
+    rem Rest are parameters - shift done in subroutines
+   
+  rem Switch on COMMAND in {"start","stop"}
+
+    if "%COMMAND%" == "start" (
+      call :doStartCommand %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    if "%COMMAND%" == "stop"  (
+      call :doStopCommand  %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    echo Unknown command: %COMMAND%
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+  shift
+  rem The shift must be here :()
+
+  rem Check further file that needs to exist
+  for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required to continue.
+    exit /B 1
+  )
+
+  rem Set defaults
+    set CONFIG_DIR=%KERNEL_HOME%\configuration
+    set CLEAN_FLAG=
+    set NO_START_FLAG=
+    set DEBUG_FLAG=
+    set DEBUG_PORT=8000
+    set SUSPEND=n
+    if not defined JMX_PORT set JMX_PORT=9875
+    if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+    set ADDITIONAL_ARGS=
+
+  rem Loop through options
+
+  :startOptionLoop
+  if "%~1"=="" goto endStartOptionLoop
+  if "%~1"=="-debug"             goto debug
+  if "%~1"=="-clean"             goto clean
+  if "%~1"=="-configDir"         goto configDir
+  if "%~1"=="-jmxport"           goto jmxport
+  if "%~1"=="-keystore"          goto keystore
+  if "%~1"=="-keystorePassword"  goto keystorePassword
+  if "%~1"=="-noStart"           goto noStart
+  if "%~1"=="-suspend"           goto suspend
+  if "%~1"=="-shell"             goto shell
+
+  set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+  :continueStartOptionLoop
+    shift
+    goto startOptionLoop
+
+  :debug
+    set DEBUG_FLAG=1
+    set PORT_CANDIDATE=%~2
+    if not "%PORT_CANDIDATE:~0,1%"=="-" (
+      set DEBUG_PORT=%PORT_CANDIDATE%
+      shift
+    )
+    goto continueStartOptionLoop
+  :clean
+    set CLEAN_FLAG=1
+    goto continueStartOptionLoop
+  :configDir
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDir
+    shift
+    goto continueStartOptionLoop
+  :jmxport
+    set JMX_PORT=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystore
+    set KEYSTORE_PATH=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystorePassword
+    set KEYSTORE_PASSWORD=%~2
+    shift
+    goto continueStartOptionLoop
+  :noStart
+    set NO_START_FLAG=1
+    goto continueStartOptionLoop
+  :suspend
+    set SUSPEND=y
+    goto continueStartOptionLoop
+  :shell
+    set SHELL_FLAG=1
+    goto continueStartOptionLoop
+
+  :endStartOptionLoop
+
+  
+  rem Adjust permissions if necessary
+    cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+  rem Adjust options now all are known
+    if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+    if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+  rem do Clean work:
+    if not "%CLEAN_FLAG%"=="" (
+      rmdir /Q /S "%KERNEL_HOME%\serviceability"
+      rmdir /Q /S "%KERNEL_HOME%\work"
+      
+      set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+    )
+
+  rem do Shell work:
+    if not "%SHELL_FLAG%"=="" ( 
+      echo "Warning: Kernel shell not supported; -shell option ignored."
+      rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+    )
+
+  rem Set JMX options
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+    if not "%NO_START_FLAG%"=="" goto :eof
+    rem ensure that the tmp directory exists:
+      set TMP_DIR="%KERNEL_HOME%\work\tmp"
+      if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+       set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+    rem Run the server
+  
+      rem Marshall parameters
+      set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+      rem Now run it
+        PUSHD %KERNEL_HOME%
+        "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+        POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+  
+  shift
+  rem The shift must be here :()
+
+  rem Set defaults
+  set CONFIG_DIR=%KERNEL_HOME%\configuration
+  if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+  if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+  if not defined JMX_PORT set JMX_PORT=9875
+  set OTHER_ARGS=
+
+  rem Loop through options
+  :stopOptionLoop
+
+  if "%~1"=="" goto endStopOptionLoop  
+  if "%~1"=="-truststore" goto truststoreStop
+  if "%~1"=="-truststorePassword" goto truststorePasswordStop
+  if "%~1"=="-configDir" goto configDirStop 
+  if "%~1"=="-jmxport" goto jmxportStop
+  
+  set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    
+  :continueStopOptionLoop
+  shift
+  goto stopOptionLoop
+
+  :truststoreStop
+  set TRUSTSTORE_PATH=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :truststorePasswordStop
+  set TRUSTSTORE_PASSWORD=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :configDirStop
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDirStop
+    shift
+    goto continueStopOptionLoop
+
+  :jmxportStop
+  set JMX_PORT=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :endStopOptionLoop
+
+  rem Call shutdown client
+
+    rem Extend JMX options
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+    set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+    rem Marshall parameters
+    set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+    rem Run Java program
+    PUSHD %KERNEL_HOME%
+    "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+    POPD
+
+goto :eof
diff --git a/tomcat-server/src/main/dist/bin/dmk.sh b/tomcat-server/src/main/dist/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+# determine kernel home
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+
+# make KERNEL_HOME absolute
+KERNEL_HOME=`cd "$KERNEL_HOME"; pwd`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+	. $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# Run java version check with the discovered java jvm.
+. "$KERNEL_HOME/bin/checkJava.sh"
+
+shopt -s extglob
+	
+# parse the command we executing
+COMMAND=$1
+shift;
+	
+if [ "$COMMAND" = "start" ]
+then
+	
+	# parse the standard arguments
+	CONFIG_DIR=$KERNEL_HOME/configuration
+	CLEAN_FLAG=
+	NO_START_FLAG=
+
+	SHELL_FLAG=
+	
+	DEBUG_FLAG=
+	DEBUG_PORT=8000
+	SUSPEND=n
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+	
+	if [ -z "$KEYSTORE_PASSWORD" ]
+	then
+		KEYSTORE_PASSWORD=changeit
+	fi
+	
+	ADDITIONAL_ARGS=
+
+	while (($# > 0))
+		do
+		case $1 in
+		-debug)
+				DEBUG_FLAG=1
+				if [[ "$2" == +([0-9]) ]]
+				then
+					DEBUG_PORT=$2
+					shift;
+				fi
+				;;
+		-clean)
+				CLEAN_FLAG=1
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		-keystore)
+				KEYSTORE_PATH=$2
+				shift;
+				;;
+		-keystorePassword)
+				KEYSTORE_PASSWORD=$2
+				shift;
+				;;
+		-noStart)
+				NO_START_FLAG=1
+				;;
+				
+		-suspend)
+				SUSPEND=y
+				;;
+		-shell)
+				SHELL_FLAG=1
+				;;
+		*)
+				ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
+				;;
+		esac
+		shift
+	done
+	
+	# start the kernel
+	if [[ "$CONFIG_DIR" != /* ]]
+	then
+	    CONFIG_DIR=$KERNEL_HOME/$CONFIG_DIR
+	fi
+
+	if [ -z "$KEYSTORE_PATH" ]
+	then
+	    KEYSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+
+	if [ "$DEBUG_FLAG" ]
+	then
+		DEBUG_OPTS=" \
+			-Xdebug \
+			-Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$SUSPEND"
+	fi
+
+	if [ "$CLEAN_FLAG" ]
+	then
+        rm -rf $KERNEL_HOME/work
+        rm -rf $KERNEL_HOME/serviceability
+
+        LAUNCH_OPTS="$LAUNCH_OPTS -clean" #equivalent to setting osgi.clean to "true"
+	fi
+	
+	if [ "$SHELL_FLAG" ]
+	then
+	    echo "Warning: Kernel shell not supported; -shell option ignored."
+		# LAUNCH_OPTS="$LAUNCH_OPTS -Forg.eclipse.virgo.kernel.shell.local=true"
+	fi
+
+    ACCESS_PROPERTIES=$CONFIG_DIR/org.eclipse.virgo.kernel.jmxremote.access.properties
+    AUTH_LOGIN=$CONFIG_DIR/org.eclipse.virgo.kernel.authentication.config
+    AUTH_FILE=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties
+    CONFIG_AREA=$KERNEL_HOME/work
+    JAVA_PROFILE=$KERNEL_HOME/configuration/java6-server.profile
+
+    if $cygwin; then
+        ACCESS_PROPERTIES=$(cygpath -wp $ACCESS_PROPERTIES)
+        AUTH_LOGIN=$(cygpath -wp $AUTH_LOGIN)
+        AUTH_FILE=$(cygpath -wp $AUTH_FILE)
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+        CONFIG_AREA=$(cygpath -wp $CONFIG_AREA)
+        JAVA_PROFILE=$(cygpath -wp $JAVA_PROFILE)
+    fi
+	
+	# Set the required permissions on the JMX configuration files
+	chmod 600 "$ACCESS_PROPERTIES"
+
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Dcom.sun.management.jmxremote.port=$JMX_PORT \
+		-Dcom.sun.management.jmxremote.authenticate=true \
+		-Dcom.sun.management.jmxremote.login.config=virgo-kernel \
+		-Dcom.sun.management.jmxremote.access.file="$ACCESS_PROPERTIES" \
+		-Djavax.net.ssl.keyStore=$KEYSTORE_PATH \
+		-Djavax.net.ssl.keyStorePassword=$KEYSTORE_PASSWORD \
+		-Dcom.sun.management.jmxremote.ssl=true \
+		-Dcom.sun.management.jmxremote.ssl.need.client.auth=false"
+
+   	if [ -z "$JAVA_HOME" ]
+    then
+      	JAVA_EXECUTABLE=java
+    else
+     	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+    fi
+
+	# If we get here we have the correct Java version.
+	
+	if [ -z "$NO_START_FLAG" ]
+	then
+		TMP_DIR=$KERNEL_HOME/work/tmp
+		# Ensure that the tmp directory exists
+		mkdir -p $TMP_DIR
+
+        JAVA_OPTS="-Xmx512m \
+                    -XX:MaxPermSize=512m $JAVA_OPTS"
+
+		cd $KERNEL_HOME; exec $JAVA_EXECUTABLE \
+			$JAVA_OPTS \
+			$DEBUG_OPTS \
+			$JMX_OPTS \
+			-XX:+HeapDumpOnOutOfMemoryError \
+			-XX:ErrorFile=$KERNEL_HOME/serviceability/error.log \
+			-XX:HeapDumpPath=$KERNEL_HOME/serviceability/heap_dump.hprof \
+			-Djava.security.auth.login.config=$AUTH_LOGIN \
+			-Dorg.eclipse.virgo.kernel.authentication.file=$AUTH_FILE \
+			-Djava.io.tmpdir=$TMP_DIR \
+			-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+			-Dorg.eclipse.virgo.kernel.config=$CONFIG_DIR \
+			-Dosgi.sharedConfiguration.area=$CONFIG_DIR \
+			-Dosgi.java.profile="file:$JAVA_PROFILE" \
+            -Declipse.ignoreApp=true \
+            -Dosgi.install.area=$KERNEL_HOME \
+            -Dosgi.configuration.area=$CONFIG_AREA \
+            -Dssh.server.keystore="$CONFIG_DIR/hostkey.ser" \
+            -Dosgi.frameworkClassPath=$FWCLASSPATH \
+            -Djava.endorsed.dirs="$KERNEL_HOME/lib/endorsed" \
+            -classpath $CLASSPATH \
+			org.eclipse.equinox.launcher.Main \
+            -noExit \
+			$LAUNCH_OPTS \
+			$ADDITIONAL_ARGS
+	fi
+elif [ "$COMMAND" = "stop" ]
+then
+
+	CONFIG_DIR=$KERNEL_HOME/configuration
+
+	#parse args for the script
+	if [ -z "$TRUSTSTORE_PATH" ]
+	then
+		TRUSTSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+	
+	if [ -z "$TRUSTSTORE_PASSWORD" ]	
+	then
+		TRUSTSTORE_PASSWORD=changeit
+	fi
+
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+
+	shopt -s extglob
+
+	while (($# > 0))
+		do
+		case $1 in
+		-truststore)
+				TRUSTSTORE_PATH=$2
+				shift;
+				;;
+		-truststorePassword)
+				TRUSTSTORE_PASSWORD=$2
+				shift;
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		*)
+			OTHER_ARGS+=" $1"
+			;;
+		esac
+		shift
+	done
+	
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+		-Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+	OTHER_ARGS+=" -jmxport $JMX_PORT"
+
+    if $cygwin; then
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+    fi
+
+	exec $JAVA_EXECUTABLE $JAVA_OPTS $JMX_OPTS \
+		-classpath $CLASSPATH \
+		-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+		-Dorg.eclipse.virgo.kernel.authentication.file=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties \
+		org.eclipse.virgo.nano.shutdown.ShutdownClient $OTHER_ARGS
+	
+else
+	echo "Unknown command: ${COMMAND}"
+fi
+
diff --git a/tomcat-server/src/main/dist/bin/jconsole.bat b/tomcat-server/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Set defaults
+  set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+  set TRUSTSTORE_PASSWORD=changeit
+  set OTHER_ARGS=
+  
+:Loop
+  if "%~1"=="" goto EndLoop
+
+  if "%~1"=="-truststore" (
+    set TRUSTSTORE_PATH=%~2
+    shift
+    shift
+    goto Loop
+  ) 
+  if "%~1"=="-truststorePassword" (
+    set TRUSTSTORE_PASSWORD=%~2
+    shift
+    shift
+    goto Loop
+  )
+  rem Accumulate extra parameters.
+    set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    shift
+  goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%" 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/tomcat-server/src/main/dist/bin/jconsole.sh b/tomcat-server/src/main/dist/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+    echo The JAVA_HOME environment variable is not defined
+    exit 1
+fi
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do 
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+ 
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+	do
+	case $1 in
+	-truststore)
+			TRUSTSTORE_PATH=$2
+			shift;
+			;;
+	-truststorePassword)
+			TRUSTSTORE_PASSWORD=$2
+			shift;
+			;;
+	esac
+	shift
+done
+
+JMX_OPTS=" \
+	$JMX_OPTS \
+	-J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+	-J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+	-J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/tomcat-server/src/main/dist/bin/jmxPermissions.vbs b/tomcat-server/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+	updateInheritance(configFolder & file)
+	updateOwnership(configFolder & file)
+	updatePermissions(configFolder & file)
+Next 
+
+Sub updateInheritance(file)
+	'WScript.Echo "Updating inheritance of " & file
+	
+	Const SE_DACL_PRESENT = 4
+	Const SE_DACL_PROTECTED = 4096
+	Const SE_SELF_RELATIVE = 32768
+
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+	Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+	objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+	objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+	
+	'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+	'WScript.Echo "Updating ownership of " & file
+	Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+	Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+	objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+	'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)	
+	'WScript.Echo "Updating permissions of " & file
+	
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	Set WshNetwork = WScript.CreateObject("WScript.Network")
+	
+	Dim foundAce
+	foundAce = "false"
+	
+	'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+	Dim specificAce(0)
+	For Each ace in objSecurityDescriptor.DACL
+		If ace.Trustee.Name = WshNetwork.UserName Then
+			Set specificAce(0) = ace
+			foundAce = "true"
+		End If
+	Next
+	
+	If foundAce = "true" Then
+		objSecurityDescriptor.DACL = specificAce
+
+		Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+		Set objInParam = objMethod.inParameters.SpawnInstance_()
+		objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+		objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+		
+		'WScript.Echo "Updated permissions of " & file
+	Else
+		WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+	End If
+	
+End Sub
diff --git a/tomcat-server/src/main/dist/bin/setupClasspath.bat b/tomcat-server/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+  echo The KERNEL_HOME environment variable is not defined.
+  exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+  echo No JAR files found in %KERNEL_HOME%\lib
+  exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+  set CLASSPATH=%CLASSPATH%;%~1
+  set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+  goto :eof
diff --git a/tomcat-server/src/main/dist/bin/setupClasspath.sh b/tomcat-server/src/main/dist/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+	echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+#  Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+	if [[ $file == *.jar ]]
+	then
+		CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+		FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+	fi
+done
+
+#  Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+	FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+#  Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+	echo No JAR files found in $KERNEL_HOME/lib
+	exit 1
+fi
diff --git a/tomcat-server/src/main/dist/bin/setupVars.bat b/tomcat-server/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+  echo Called setupVars.bat out of context.
+  exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+  for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+  set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+  for %%I in (%ChkLst%) do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required.
+    exit /B 1
+  )
+
+rem set up the classpath (check result)
+  call "%KERNEL_HOME%\bin\setupClasspath.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+  call "%KERNEL_HOME%\bin\checkJava.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+	
+rem Execute user setenv script if needed (ignore result)
+  if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/tomcat-server/src/main/dist/bin/shutdown.bat b/tomcat-server/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/tomcat-server/src/main/dist/bin/shutdown.sh b/tomcat-server/src/main/dist/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/tomcat-server/src/main/dist/bin/startup.bat b/tomcat-server/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/tomcat-server/src/main/dist/bin/startup.sh b/tomcat-server/src/main/dist/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/virgo/nano/bin/checkJava.bat b/virgo/nano/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/virgo/nano/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%CLASSPATH%" == "" (
+  echo The CLASSPATH environment variable is not defined.
+  exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/virgo/nano/bin/checkJava.sh b/virgo/nano/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/virgo/nano/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+    CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+  	JAVA_EXECUTABLE=java
+else
+  	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+	-classpath "$CLASSPATH" \
+	org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+	exit 1
+fi
diff --git a/virgo/nano/bin/dmk.bat b/virgo/nano/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/virgo/nano/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Select command we are to run
+
+  rem First parm is command
+    set COMMAND=%~1
+    rem Rest are parameters - shift done in subroutines
+   
+  rem Switch on COMMAND in {"start","stop"}
+
+    if "%COMMAND%" == "start" (
+      call :doStartCommand %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    if "%COMMAND%" == "stop"  (
+      call :doStopCommand  %*
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 0
+    )
+
+    echo Unknown command: %COMMAND%
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+  shift
+  rem The shift must be here :()
+
+  rem Check further file that needs to exist
+  for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required to continue.
+    exit /B 1
+  )
+
+  rem Set defaults
+    set CONFIG_DIR=%KERNEL_HOME%\configuration
+    set CLEAN_FLAG=
+    set NO_START_FLAG=
+    set DEBUG_FLAG=
+    set DEBUG_PORT=8000
+    set SUSPEND=n
+    if not defined JMX_PORT set JMX_PORT=9875
+    if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+    set ADDITIONAL_ARGS=
+
+  rem Loop through options
+
+  :startOptionLoop
+  if "%~1"=="" goto endStartOptionLoop
+  if "%~1"=="-debug"             goto debug
+  if "%~1"=="-clean"             goto clean
+  if "%~1"=="-configDir"         goto configDir
+  if "%~1"=="-jmxport"           goto jmxport
+  if "%~1"=="-keystore"          goto keystore
+  if "%~1"=="-keystorePassword"  goto keystorePassword
+  if "%~1"=="-noStart"           goto noStart
+  if "%~1"=="-suspend"           goto suspend
+  if "%~1"=="-shell"             goto shell
+
+  set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+  :continueStartOptionLoop
+    shift
+    goto startOptionLoop
+
+  :debug
+    set DEBUG_FLAG=1
+    set PORT_CANDIDATE=%~2
+    if not "%PORT_CANDIDATE:~0,1%"=="-" (
+      set DEBUG_PORT=%PORT_CANDIDATE%
+      shift
+    )
+    goto continueStartOptionLoop
+  :clean
+    set CLEAN_FLAG=1
+    goto continueStartOptionLoop
+  :configDir
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDir
+    shift
+    goto continueStartOptionLoop
+  :jmxport
+    set JMX_PORT=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystore
+    set KEYSTORE_PATH=%~2
+    shift
+    goto continueStartOptionLoop
+  :keystorePassword
+    set KEYSTORE_PASSWORD=%~2
+    shift
+    goto continueStartOptionLoop
+  :noStart
+    set NO_START_FLAG=1
+    goto continueStartOptionLoop
+  :suspend
+    set SUSPEND=y
+    goto continueStartOptionLoop
+  :shell
+    set SHELL_FLAG=1
+    goto continueStartOptionLoop
+
+  :endStartOptionLoop
+
+  
+  rem Adjust permissions if necessary
+    cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+  rem Adjust options now all are known
+    if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+    if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+  rem do Clean work:
+    if not "%CLEAN_FLAG%"=="" (
+      rmdir /Q /S "%KERNEL_HOME%\serviceability"
+      rmdir /Q /S "%KERNEL_HOME%\work"
+      
+      set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+    )
+
+  rem do Shell work:
+    if not "%SHELL_FLAG%"=="" ( 
+      echo "Warning: Kernel shell not supported; -shell option ignored."
+      rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+    )
+
+  rem Set JMX options
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%" 
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD% 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true 
+    set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+    if not "%NO_START_FLAG%"=="" goto :eof
+    rem ensure that the tmp directory exists:
+      set TMP_DIR="%KERNEL_HOME%\work\tmp"
+      if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+       set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+    rem Run the server
+  
+      rem Marshall parameters
+      set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true" 
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%" 
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+	  set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+      set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+      rem Now run it
+        PUSHD %KERNEL_HOME%
+        "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+        POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+  
+  shift
+  rem The shift must be here :()
+
+  rem Set defaults
+  set CONFIG_DIR=%KERNEL_HOME%\configuration
+  if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+  if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+  if not defined JMX_PORT set JMX_PORT=9875
+  set OTHER_ARGS=
+
+  rem Loop through options
+  :stopOptionLoop
+
+  if "%~1"=="" goto endStopOptionLoop  
+  if "%~1"=="-truststore" goto truststoreStop
+  if "%~1"=="-truststorePassword" goto truststorePasswordStop
+  if "%~1"=="-configDir" goto configDirStop 
+  if "%~1"=="-jmxport" goto jmxportStop
+  
+  set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    
+  :continueStopOptionLoop
+  shift
+  goto stopOptionLoop
+
+  :truststoreStop
+  set TRUSTSTORE_PATH=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :truststorePasswordStop
+  set TRUSTSTORE_PASSWORD=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :configDirStop
+    set CONFIG_DIR=%~2
+    rem unless absolute, treat as relative to kernel home
+    if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+    if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+    set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+  :absoluteConfigDirStop
+    shift
+    goto continueStopOptionLoop
+
+  :jmxportStop
+  set JMX_PORT=%~2
+  shift
+  goto continueStopOptionLoop
+
+  :endStopOptionLoop
+
+  rem Call shutdown client
+
+    rem Extend JMX options
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+    set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+    set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+    rem Marshall parameters
+    set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+    set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+    rem Run Java program
+    PUSHD %KERNEL_HOME%
+    "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+    POPD
+
+goto :eof
diff --git a/virgo/nano/bin/dmk.sh b/virgo/nano/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/virgo/nano/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+# determine kernel home
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+
+# make KERNEL_HOME absolute
+KERNEL_HOME=`cd "$KERNEL_HOME"; pwd`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+	. $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# Run java version check with the discovered java jvm.
+. "$KERNEL_HOME/bin/checkJava.sh"
+
+shopt -s extglob
+	
+# parse the command we executing
+COMMAND=$1
+shift;
+	
+if [ "$COMMAND" = "start" ]
+then
+	
+	# parse the standard arguments
+	CONFIG_DIR=$KERNEL_HOME/configuration
+	CLEAN_FLAG=
+	NO_START_FLAG=
+
+	SHELL_FLAG=
+	
+	DEBUG_FLAG=
+	DEBUG_PORT=8000
+	SUSPEND=n
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+	
+	if [ -z "$KEYSTORE_PASSWORD" ]
+	then
+		KEYSTORE_PASSWORD=changeit
+	fi
+	
+	ADDITIONAL_ARGS=
+
+	while (($# > 0))
+		do
+		case $1 in
+		-debug)
+				DEBUG_FLAG=1
+				if [[ "$2" == +([0-9]) ]]
+				then
+					DEBUG_PORT=$2
+					shift;
+				fi
+				;;
+		-clean)
+				CLEAN_FLAG=1
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		-keystore)
+				KEYSTORE_PATH=$2
+				shift;
+				;;
+		-keystorePassword)
+				KEYSTORE_PASSWORD=$2
+				shift;
+				;;
+		-noStart)
+				NO_START_FLAG=1
+				;;
+				
+		-suspend)
+				SUSPEND=y
+				;;
+		-shell)
+				SHELL_FLAG=1
+				;;
+		*)
+				ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
+				;;
+		esac
+		shift
+	done
+	
+	# start the kernel
+	if [[ "$CONFIG_DIR" != /* ]]
+	then
+	    CONFIG_DIR=$KERNEL_HOME/$CONFIG_DIR
+	fi
+
+	if [ -z "$KEYSTORE_PATH" ]
+	then
+	    KEYSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+
+	if [ "$DEBUG_FLAG" ]
+	then
+		DEBUG_OPTS=" \
+			-Xdebug \
+			-Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$SUSPEND"
+	fi
+
+	if [ "$CLEAN_FLAG" ]
+	then
+        rm -rf $KERNEL_HOME/work
+        rm -rf $KERNEL_HOME/serviceability
+
+        LAUNCH_OPTS="$LAUNCH_OPTS -clean" #equivalent to setting osgi.clean to "true"
+	fi
+	
+	if [ "$SHELL_FLAG" ]
+	then
+	    echo "Warning: Kernel shell not supported; -shell option ignored."
+		# LAUNCH_OPTS="$LAUNCH_OPTS -Forg.eclipse.virgo.kernel.shell.local=true"
+	fi
+
+    ACCESS_PROPERTIES=$CONFIG_DIR/org.eclipse.virgo.kernel.jmxremote.access.properties
+    AUTH_LOGIN=$CONFIG_DIR/org.eclipse.virgo.kernel.authentication.config
+    AUTH_FILE=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties
+    CONFIG_AREA=$KERNEL_HOME/work
+    JAVA_PROFILE=$KERNEL_HOME/configuration/java6-server.profile
+
+    if $cygwin; then
+        ACCESS_PROPERTIES=$(cygpath -wp $ACCESS_PROPERTIES)
+        AUTH_LOGIN=$(cygpath -wp $AUTH_LOGIN)
+        AUTH_FILE=$(cygpath -wp $AUTH_FILE)
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+        CONFIG_AREA=$(cygpath -wp $CONFIG_AREA)
+        JAVA_PROFILE=$(cygpath -wp $JAVA_PROFILE)
+    fi
+	
+	# Set the required permissions on the JMX configuration files
+	chmod 600 "$ACCESS_PROPERTIES"
+
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Dcom.sun.management.jmxremote.port=$JMX_PORT \
+		-Dcom.sun.management.jmxremote.authenticate=true \
+		-Dcom.sun.management.jmxremote.login.config=virgo-kernel \
+		-Dcom.sun.management.jmxremote.access.file="$ACCESS_PROPERTIES" \
+		-Djavax.net.ssl.keyStore=$KEYSTORE_PATH \
+		-Djavax.net.ssl.keyStorePassword=$KEYSTORE_PASSWORD \
+		-Dcom.sun.management.jmxremote.ssl=true \
+		-Dcom.sun.management.jmxremote.ssl.need.client.auth=false"
+
+   	if [ -z "$JAVA_HOME" ]
+    then
+      	JAVA_EXECUTABLE=java
+    else
+     	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+    fi
+
+	# If we get here we have the correct Java version.
+	
+	if [ -z "$NO_START_FLAG" ]
+	then
+		TMP_DIR=$KERNEL_HOME/work/tmp
+		# Ensure that the tmp directory exists
+		mkdir -p $TMP_DIR
+
+        JAVA_OPTS="-Xmx512m \
+                    -XX:MaxPermSize=512m $JAVA_OPTS"
+
+		cd $KERNEL_HOME; exec $JAVA_EXECUTABLE \
+			$JAVA_OPTS \
+			$DEBUG_OPTS \
+			$JMX_OPTS \
+			-XX:+HeapDumpOnOutOfMemoryError \
+			-XX:ErrorFile=$KERNEL_HOME/serviceability/error.log \
+			-XX:HeapDumpPath=$KERNEL_HOME/serviceability/heap_dump.hprof \
+			-Djava.security.auth.login.config=$AUTH_LOGIN \
+			-Dorg.eclipse.virgo.kernel.authentication.file=$AUTH_FILE \
+			-Djava.io.tmpdir=$TMP_DIR \
+			-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+			-Dorg.eclipse.virgo.kernel.config=$CONFIG_DIR \
+			-Dosgi.sharedConfiguration.area=$CONFIG_DIR \
+			-Dosgi.java.profile="file:$JAVA_PROFILE" \
+            -Declipse.ignoreApp=true \
+            -Dosgi.install.area=$KERNEL_HOME \
+            -Dosgi.configuration.area=$CONFIG_AREA \
+            -Dssh.server.keystore="$CONFIG_DIR/hostkey.ser" \
+            -Dosgi.frameworkClassPath=$FWCLASSPATH \
+            -Djava.endorsed.dirs="$KERNEL_HOME/lib/endorsed" \
+            -classpath $CLASSPATH \
+			org.eclipse.equinox.launcher.Main \
+            -noExit \
+			$LAUNCH_OPTS \
+			$ADDITIONAL_ARGS
+	fi
+elif [ "$COMMAND" = "stop" ]
+then
+
+	CONFIG_DIR=$KERNEL_HOME/configuration
+
+	#parse args for the script
+	if [ -z "$TRUSTSTORE_PATH" ]
+	then
+		TRUSTSTORE_PATH=$CONFIG_DIR/keystore
+	fi
+	
+	if [ -z "$TRUSTSTORE_PASSWORD" ]	
+	then
+		TRUSTSTORE_PASSWORD=changeit
+	fi
+
+	if [ -z "$JMX_PORT" ]
+	then
+		JMX_PORT=9875
+	fi
+
+	shopt -s extglob
+
+	while (($# > 0))
+		do
+		case $1 in
+		-truststore)
+				TRUSTSTORE_PATH=$2
+				shift;
+				;;
+		-truststorePassword)
+				TRUSTSTORE_PASSWORD=$2
+				shift;
+				;;
+		-configDir)
+				CONFIG_DIR=$2
+				shift;
+				;;
+		-jmxport)
+				JMX_PORT=$2
+				shift;
+				;;
+		*)
+			OTHER_ARGS+=" $1"
+			;;
+		esac
+		shift
+	done
+	
+	JMX_OPTS=" \
+		$JMX_OPTS \
+		-Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+		-Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+	OTHER_ARGS+=" -jmxport $JMX_PORT"
+
+    if $cygwin; then
+        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
+        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
+    fi
+
+	exec $JAVA_EXECUTABLE $JAVA_OPTS $JMX_OPTS \
+		-classpath $CLASSPATH \
+		-Dorg.eclipse.virgo.kernel.home=$KERNEL_HOME \
+		-Dorg.eclipse.virgo.kernel.authentication.file=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties \
+		org.eclipse.virgo.nano.shutdown.ShutdownClient $OTHER_ARGS
+	
+else
+	echo "Unknown command: ${COMMAND}"
+fi
+
diff --git a/virgo/nano/bin/jconsole.bat b/virgo/nano/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/virgo/nano/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+  set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+  call "%SCRIPT_DIR%setupVars.bat"
+  if not "%ERRORLEVEL%"=="0" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B %ERRORLEVEL%
+  )
+) else (
+  echo Cannot set up environment. "setupVars.bat" file missing.
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+)
+
+rem Set defaults
+  set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+  set TRUSTSTORE_PASSWORD=changeit
+  set OTHER_ARGS=
+  
+:Loop
+  if "%~1"=="" goto EndLoop
+
+  if "%~1"=="-truststore" (
+    set TRUSTSTORE_PATH=%~2
+    shift
+    shift
+    goto Loop
+  ) 
+  if "%~1"=="-truststorePassword" (
+    set TRUSTSTORE_PASSWORD=%~2
+    shift
+    shift
+    goto Loop
+  )
+  rem Accumulate extra parameters.
+    set OTHER_ARGS=%OTHER_ARGS% "%~1"
+    shift
+  goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%" 
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/virgo/nano/bin/jconsole.sh b/virgo/nano/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/virgo/nano/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+    echo The JAVA_HOME environment variable is not defined
+    exit 1
+fi
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do 
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+ 
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+	do
+	case $1 in
+	-truststore)
+			TRUSTSTORE_PATH=$2
+			shift;
+			;;
+	-truststorePassword)
+			TRUSTSTORE_PASSWORD=$2
+			shift;
+			;;
+	esac
+	shift
+done
+
+JMX_OPTS=" \
+	$JMX_OPTS \
+	-J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+	-J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+	-J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/virgo/nano/bin/jmxPermissions.vbs b/virgo/nano/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/virgo/nano/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+	updateInheritance(configFolder & file)
+	updateOwnership(configFolder & file)
+	updatePermissions(configFolder & file)
+Next 
+
+Sub updateInheritance(file)
+	'WScript.Echo "Updating inheritance of " & file
+	
+	Const SE_DACL_PRESENT = 4
+	Const SE_DACL_PROTECTED = 4096
+	Const SE_SELF_RELATIVE = 32768
+
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+	Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+	objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+	objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+	
+	'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+	'WScript.Echo "Updating ownership of " & file
+	Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+	Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+	Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+	objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+	'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)	
+	'WScript.Echo "Updating permissions of " & file
+	
+	Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+    objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+	Set WshNetwork = WScript.CreateObject("WScript.Network")
+	
+	Dim foundAce
+	foundAce = "false"
+	
+	'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+	Dim specificAce(0)
+	For Each ace in objSecurityDescriptor.DACL
+		If ace.Trustee.Name = WshNetwork.UserName Then
+			Set specificAce(0) = ace
+			foundAce = "true"
+		End If
+	Next
+	
+	If foundAce = "true" Then
+		objSecurityDescriptor.DACL = specificAce
+
+		Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+		Set objInParam = objMethod.inParameters.SpawnInstance_()
+		objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+		objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+		
+		'WScript.Echo "Updated permissions of " & file
+	Else
+		WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+	End If
+	
+End Sub
diff --git a/virgo/nano/bin/setupClasspath.bat b/virgo/nano/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/virgo/nano/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+  echo The JAVA_HOME environment variable is not defined.
+  exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+  echo The KERNEL_HOME environment variable is not defined.
+  exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+  echo No JAR files found in %KERNEL_HOME%\lib
+  exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+  set CLASSPATH=%CLASSPATH%;%~1
+  set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+  goto :eof
diff --git a/virgo/nano/bin/setupClasspath.sh b/virgo/nano/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/virgo/nano/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+	echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+#  Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+	if [[ $file == *.jar ]]
+	then
+		CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+		FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+	fi
+done
+
+#  Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+	FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+#  Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+	CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+	echo No JAR files found in $KERNEL_HOME/lib
+	exit 1
+fi
diff --git a/virgo/nano/bin/setupVars.bat b/virgo/nano/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/virgo/nano/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+  echo Called setupVars.bat out of context.
+  exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+  for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+  set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+  for %%I in (%ChkLst%) do if not exist "%%~I" (
+    echo File "%%~I" does not exist but is required.
+    exit /B 1
+  )
+
+rem set up the classpath (check result)
+  call "%KERNEL_HOME%\bin\setupClasspath.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+  call "%KERNEL_HOME%\bin\checkJava.bat"
+  if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+	
+rem Execute user setenv script if needed (ignore result)
+  if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/virgo/nano/bin/shutdown.bat b/virgo/nano/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/virgo/nano/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/virgo/nano/bin/shutdown.sh b/virgo/nano/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/virgo/nano/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/virgo/nano/bin/startup.bat b/virgo/nano/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/virgo/nano/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/virgo/nano/bin/startup.sh b/virgo/nano/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/virgo/nano/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+SCRIPT="$0"
+
+# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
+while [ -h "$SCRIPT" ] ; do
+  ls=`ls -ld "$SCRIPT"`
+  # Drop everything prior to ->
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    SCRIPT="$link"
+  else
+    SCRIPT=`dirname "$SCRIPT"`/"$link"
+  fi
+done
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+    CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"