diff --git a/openbis/build/build.xml b/openbis/build/build.xml
index f049f9a2b18813366a8eab47e6faa2ae5e0360d7..4d39d33704a5df274338e933c9d5f69e6afb19a6 100644
--- a/openbis/build/build.xml
+++ b/openbis/build/build.xml
@@ -202,23 +202,26 @@
 
   <target name="make-dist" description="Makes a distribution file." 
   		depends="check-dictionary-syntax, clean, war, admin-console-dist, query-api-dist">
-    <copy file="${lib}/tomcat5/apache-tomcat.zip" todir="${server.dist}" />
-    <loadfile property="tomcat.version" srcFile="${lib}/tomcat5/version.txt">
+    <copy file="${lib}/jetty7/jetty.zip" todir="${server.dist}" />
+    <loadfile property="jetty.version" srcFile="${lib}/jetty7/version.txt">
       <filterchain>
         <striplinebreaks />
       </filterchain>
     </loadfile>
-    <echo file="${server.dist}/tomcat-version.txt">${tomcat.version}</echo>
-    <copy file="${original.openbis.server.dist}/server.xml" todir="${server.dist}" />
+    <echo file="${server.dist}/jetty-version.txt">${jetty.version}</echo>
+    <copy file="${original.openbis.server.dist}/jetty.xml" todir="${server.dist}" />
     <move file="${admin.dist.file}" todir="${server.dist}" />
     <move file="${query.api.dist.file}" todir="${server.dist}" />
     <copy file="${original.server.dist}/service.properties" todir="${server.dist}" />
     <copy file="${original.server.dist}/openbis.conf" todir="${server.dist}" />
     <copy file="${original.openbis.server.dist}/openBIS.keystore" todir="${server.dist}" />
     <copy file="${original.openbis.server.dist}/passwd.sh" todir="${server.dist}" />
+    <copy file="${original.openbis.server.dist}/setup-env" todir="${server.dist}" />
     <property name="server.dist.file" value="${server.dist}${variant}-${version.number}-r${revision.number}.zip" />
     <zip basedir="${dist}" destfile="${server.dist.file}" excludes="*.zip">
       <zipfileset file="${original.openbis.server.dist}/install.sh" filemode="777" prefix="${server.folder.name}" />
+      <zipfileset file="${original.openbis.server.dist}/startup.sh" filemode="777" prefix="${server.folder.name}" />
+      <zipfileset file="${original.openbis.server.dist}/shutdown.sh" filemode="777" prefix="${server.folder.name}" />
     </zip>
     <delete dir="${server.dist}" />
   </target>
diff --git a/openbis/dist/server/install.sh b/openbis/dist/server/install.sh
index 855f02b37696d37a9c78f65e78cfdd77d3e0c26e..1ad3cedc1dc3a53414e863a85332b0acbaaaae2c 100755
--- a/openbis/dist/server/install.sh
+++ b/openbis/dist/server/install.sh
@@ -1,110 +1,100 @@
-#!/bin/bash
+#! /bin/bash
 
-nostartup=0
-if [[ "$1" = '-n' || "$1" = '--nostartup' ]]; then
-	nostartup=1
-	shift
-fi
+usage() {
+	echo "Usage: $0 [--port <port number>] <server folder>"
+	exit 1
+}
+
+# Checks whether the number of arguments is smaller than one.
+# We at least need the server folder.
+check_arguments() {
+	if [ $# -lt 1 ]; then
+		usage
+	fi
+}
 
-if [ $# -lt 1 ]; then
-    echo "Usage: $0 [--nostartup] <server folder> [<service properties file> <startup properties file>]"
-    echo "  --nostartup: do not start up tomcat automatically"
-    exit 1
+check_arguments $@
+JETTY_PORT=8443
+if [ $1 == "--port" ]; then
+	shift
+	check_arguments $@
+	JETTY_PORT=$1
+	shift
 fi
+check_arguments $@
 
+# Installation folder: where the distribution zip file has been unzipped (and where this script resides)
 installation_folder="`dirname $0`"
 if [ ${installation_folder#/} == ${installation_folder} ]; then
 	installation_folder="`pwd`/${installation_folder}"
 fi
-server_folder="$1"
-shift
+# Where the server will be installed.
+server_folder=$1
 
 if [ ${server_folder#/} == ${server_folder} ]; then
 	server_folder="`pwd`/${server_folder}"
 fi
 
-properties_file="${installation_folder}/service.properties"
-startup_properties_file="${installation_folder}/openbis.conf"
-# Check whether given properties files exist and are regular file.
-if [ "$1" -a "$2" ]; then
-	if [ ! -f "$1" ]; then
-		echo "Given properties file '$1' does not exist!"
-		exit 1
-	fi
-	properties_file="$1"
-	shift
-	if [ "${properties_file#/}" == "${properties_file}" ]; then
-		properties_file="`pwd`/${properties_file}"
-	fi
-        if [ ! -f "$1" ]; then
-                echo "Given properties file '$1' does not exist!"
-                exit 1
-        fi
-        startup_properties_file="$1"
-        shift
-        if [ "${startup_properties_file#/}" == "${startup_properties_file}" ]; then
-                startup_properties_file="`pwd`/${startup_properties_file}"
-        fi
-fi
+properties_file="$installation_folder/service.properties"
+logconf_file="$installation_folder/log.xml"
 
-rel_tomcat_folder="apache-tomcat-`cat \"${installation_folder}/tomcat-version.txt\"`"
-tomcat_folder="${server_folder}/${rel_tomcat_folder}"
-rel_openbis_web_folder=webapps/openbis
-openbis_web_folder="${tomcat_folder}/${rel_openbis_web_folder}"
-rel_openbis_web_inf=${rel_openbis_web_folder}/WEB-INF
-openbis_web_inf="${tomcat_folder}/${rel_openbis_web_inf}"
-startup_script_path="${tomcat_folder}/bin/startup.sh"
+rel_jetty_folder="jetty-`cat $installation_folder/jetty-version.txt`"
+jetty_folder="${server_folder}/${rel_jetty_folder}"
 
 # Creates server folder.
-mkdir -p "${server_folder}"
+mkdir -p "$server_folder"
 
-# Checks whether a tomcat folder already exists.
-if [ -d "${tomcat_folder}" ]; then
-	echo "There exists already a Tomcat folder."
-	echo "Please shutdown and remove this Tomcat installation"
+# Checks whether a jetty folder already exists.
+if [ -d $jetty_folder ]; then
+	echo "There exists already a Jetty folder."
+	echo "Please shutdown and remove this Jetty installation"
 	echo "or choose another server folder."
 	exit 1
 fi
 
-unzip -q "${installation_folder}/apache-tomcat.zip" -d "$server_folder"
-cp -p "${installation_folder}"/openBIS.keystore "${tomcat_folder}"
-cp -p "${installation_folder}/server.xml" "${tomcat_folder}/conf"
-cp -p "${installation_folder}/passwd.sh" "${tomcat_folder}/bin"
-chmod 755 "${tomcat_folder}/bin/passwd.sh"
-STARTUP_TMP=`mktemp startup.sh.XXXXXX`
-sed -e "33i\\
-source \${PRGDIR}/../etc/openbis.conf\\
-CATALINA_OPTS=\"\${JAVA_OPTS:=-server -Djavax.net.ssl.trustStore=openBIS.keystore} \${JAVA_MEM_OPTS:=-Xmx2048m -Xms512m -XX:MaxPermSize=256m} -Ddatabase.create-from-scratch=false -Ddatabase.script-single-step-mode=false\"\\
-export CATALINA_OPTS\\
-\\
-if [ \${PRGDIR#/} == \${PRGDIR} ]; then\\
-        PRGDIR=\"\`pwd\`/\${PRGDIR}\"\\
-fi\\
-cd \"\${PRGDIR}/..\"\\
-" -e "s/\/bin\/sh/\/bin\/bash/" "${startup_script_path}" "${startup_script_path}" > ${STARTUP_TMP}
-mv ${STARTUP_TMP} "${startup_script_path}"
-chmod 744 "${tomcat_folder}"/bin/*.sh
-
-unzip -q "${installation_folder}/openBIS.war" -d "${openbis_web_folder}"
-mkdir "${openbis_web_inf}/conf"
-
-# Copy configuration files
-
-mkdir  "${tomcat_folder}/etc"
-cp -p "${properties_file}" "${openbis_web_inf}/classes/service.properties"
-echo Given properties file \'${properties_file}\' copied to \'${openbis_web_inf}/classes/service.properties\'
-cp -p "${startup_properties_file}" "${tomcat_folder}/etc/"
-echo Given properties file \'${startup_properties_file}\' copied to \'${tomcat_folder}/etc/\'
-
-# Create symlinks for easier access
-
-cd "${server_folder}"
-ln -s "${rel_tomcat_folder}" apache-tomcat
-cd "${tomcat_folder}"
-ln -s "../${rel_openbis_web_inf}"/classes/service.properties etc/
-cp -p "${rel_openbis_web_inf}"/classes/etc/passwd etc/
-
-if [ "$nostartup" -eq 0 ]; then
-	echo Starting tomcat...
-	bin/startup.sh
-fi
+echo Unzipping Jetty...
+# Files are unzipped in $rel_jetty_folder
+unzip -q "$installation_folder/jetty.zip" -d "$server_folder"
+test -f "$installation_folder"/jetty.xml && cp -p "$installation_folder"/jetty.xml "$jetty_folder"/etc
+test -f "$jetty_folder"/etc/keystore && rm "$jetty_folder"/etc/keystore
+cp -p "$installation_folder"/openBIS.keystore "$jetty_folder"/etc
+
+echo Preparing and installing web archive...
+war_file=openbis.war
+war_classes=WEB-INF/classes
+mkdir -p "$war_classes"/etc
+# Replace 'service.properties' and 'log.xml' files in war
+test -f "$properties_file" && cp -p "$properties_file" "$war_classes/"
+test -f "$logconf_file" && cp -p "$logconf_file" "$war_classes/etc/"
+zip "$installation_folder"/$war_file "$war_classes"/service.properties "$war_classes"/etc/log.xml *.js *.html images/*
+#cp -p "$installation_folder"/$war_file "$jetty_folder"/webapps
+cp -p "$installation_folder"/$war_file "$jetty_folder"
+rm -rf WEB-INF
+
+# Create symlinks for easier access.
+cd "$server_folder"
+ln -s "${rel_jetty_folder}" jetty
+cd jetty/etc
+ln -s ../work/openbis/webapp/WEB-INF/classes/service.properties .
+ln -s ../work/openbis/webapp/WEB-INF/classes/etc/log.xml .
+ln -s ../bin/jetty.properties .
+cd ../..
+
+JETTY_BIN_DIR="$jetty_folder"/bin
+cp -p "$installation_folder"/startup.sh "$JETTY_BIN_DIR"
+cp -p "$installation_folder"/shutdown.sh "$JETTY_BIN_DIR"
+cp -p "$installation_folder"/setup-env "$JETTY_BIN_DIR"
+
+# Create a file called 'jetty.properties'.
+JETTY_PROPERTIES="$JETTY_BIN_DIR"/jetty.properties
+cat "$installation_folder"/openbis.conf > "$JETTY_PROPERTIES"
+echo "" >> "$JETTY_PROPERTIES"
+echo "# Jetty options" >> "$JETTY_PROPERTIES"
+echo "JETTY_PORT=$JETTY_PORT" >> "$JETTY_PROPERTIES"
+echo "JETTY_STOP_PORT=8079" >> "$JETTY_PROPERTIES"
+echo "JETTY_STOP_KEY=secret" >> "$JETTY_PROPERTIES"
+
+# Create a 'work' directory in jetty folder. Web applications will be unpacked there.
+mkdir -p "$jetty_folder"/work
+
+cd "$jetty_folder"
diff --git a/openbis/dist/server/jetty.xml b/openbis/dist/server/jetty.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7fe2fa0b88392bd52de79574733078e12f0cdb3a
--- /dev/null
+++ b/openbis/dist/server/jetty.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+    <Set name="ThreadPool">
+      <!-- Default queued blocking threadpool -->
+      <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
+        <Set name="minThreads">25</Set>
+        <Set name="maxThreads">250</Set>
+      </New>
+    </Set>
+
+    <Call name="addConnector">
+        <Arg>
+          <New class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
+	             <Set name="Port">8443</Set>
+	                 <Set name="maxIdleTime">30000</Set>
+                   <Set name="Acceptors">2</Set>
+                   <Set name="AcceptQueueSize">100</Set>
+	                 <Set name="Keystore">
+	                     <SystemProperty name="jetty.home" default="." />/etc/openBIS.keystore
+	                 </Set>
+                  <Set name="Password">changeit</Set>
+                  <Set name="KeyPassword">changeit</Set>
+          </New>
+        </Arg>
+    </Call>
+
+    <Set name="handler">
+      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
+        <Set name="handlers">
+         <Array type="org.eclipse.jetty.server.Handler">
+           <Item>
+             <New class="org.eclipse.jetty.webapp.WebAppContext">
+               <Set name="contextPath">/openbis</Set>
+               <Set name="war">
+                 <SystemProperty name="jetty.home" default="." />/openbis.war
+               </Set>
+               <Set name="tempDirectory">
+                 <SystemProperty name="jetty.home" default="." />/work/openbis
+               </Set>
+             </New>
+           </Item>
+           <Item>
+             <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
+           </Item>
+         </Array>
+        </Set>
+      </New>
+    </Set>
+
+    <Call name="addBean">
+      <Arg>
+        <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
+          <Set name="contexts">
+            <Ref id="Contexts" />
+          </Set>
+          <Call name="addAppProvider">
+            <Arg>
+              <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
+                <Set name="monitoredDir"><Property name="jetty.home" default="." />/webapps</Set>
+                <Set name="scanInterval">5</Set>
+                <Set name="extractWars">true</Set>
+              </New>
+            </Arg>
+          </Call>
+        </New>
+      </Arg>
+    </Call>
+
+    <!-- =========================================================== -->
+    <!-- extra options                                               -->
+    <!-- =========================================================== -->
+
+    <Set name="stopAtShutdown">true</Set>
+    <Set name="sendServerVersion">true</Set>
+    <Set name="sendDateHeader">true</Set>
+    <Set name="gracefulShutdown">1000</Set>
+
+</Configure>
diff --git a/openbis/dist/server/server.xml b/openbis/dist/server/server.xml
deleted file mode 100644
index 509f421a5a5b3621010f155fc52b561f053e8f66..0000000000000000000000000000000000000000
--- a/openbis/dist/server/server.xml
+++ /dev/null
@@ -1,365 +0,0 @@
-<!-- Example Server Configuration File -->
-<!-- Note that component elements are nested corresponding to their
-     parent-child relationships with each other -->
-
-<!-- A "Server" is a singleton element that represents the entire JVM,
-     which may contain one or more "Service" instances.  The Server
-     listens for a shutdown command on the indicated port.
-
-     Note:  A "Server" is not itself a "Container", so you may not
-     define subcomponents such as "Valves" or "Loggers" at this level.
- -->
-
-<Server port="8006" shutdown="SHUTDOWN">
-
-  <!-- Comment these entries out to disable JMX MBeans support used for the 
-       administration web application -->
-  <Listener className="org.apache.catalina.core.AprLifecycleListener" />
-  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
-  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
-  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
-
-  <!-- Global JNDI resources -->
-  <GlobalNamingResources>
-
-    <!-- Test entry for demonstration purposes -->
-    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
-
-    <!-- Editable user database that can also be used by
-         UserDatabaseRealm to authenticate users -->
-    <Resource name="UserDatabase" auth="Container"
-              type="org.apache.catalina.UserDatabase"
-       description="User database that can be updated and saved"
-           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
-          pathname="conf/tomcat-users.xml" />
-
-  </GlobalNamingResources>
-
-  <!-- A "Service" is a collection of one or more "Connectors" that share
-       a single "Container" (and therefore the web applications visible
-       within that Container).  Normally, that Container is an "Engine",
-       but this is not required.
-
-       Note:  A "Service" is not itself a "Container", so you may not
-       define subcomponents such as "Valves" or "Loggers" at this level.
-   -->
-
-  <!-- Define the Tomcat Stand-Alone Service -->
-  <Service name="Catalina">
-
-    <!-- A "Connector" represents an endpoint by which requests are received
-         and responses are returned.  Each Connector passes requests on to the
-         associated "Container" (normally an Engine) for processing.
-
-         By default, a non-SSL HTTP/1.1 Connector is established on port 8080.
-         You can also enable an SSL HTTP/1.1 Connector on port 8443 by
-         following the instructions below and uncommenting the second Connector
-         entry.  SSL support requires the following steps (see the SSL Config
-         HOWTO in the Tomcat 5 documentation bundle for more detailed
-         instructions):
-         * If your JDK version 1.3 or prior, download and install JSSE 1.0.2 or
-           later, and put the JAR files into "$JAVA_HOME/jre/lib/ext".
-         * Execute:
-             %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
-             $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA  (Unix)
-           with a password value of "changeit" for both the certificate and
-           the keystore itself.
-
-         By default, DNS lookups are enabled when a web application calls
-         request.getRemoteHost().  This can have an adverse impact on
-         performance, so you can disable it by setting the
-         "enableLookups" attribute to "false".  When DNS lookups are disabled,
-         request.getRemoteHost() will return the String version of the
-         IP address of the remote client.
-    -->
-
-    <!-- Note : To disable connection timeouts, set connectionTimeout value
-     to 0 -->
-	
-	<!-- Note : To use gzip compression you could set the following properties :
-	
-			   compression="on" 
-			   compressionMinSize="2048" 
-			   noCompressionUserAgents="gozilla, traviata" 
-			   compressableMimeType="text/html,text/xml"
-	-->
-
-    <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
-    <Connector port="8443" maxHttpHeaderSize="8192"
-               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
-               keystoreFile="openBIS.keystore"
-               enableLookups="false" disableUploadTimeout="true"
-               acceptCount="100" scheme="https" secure="true"
-               clientAuth="false" sslProtocol="TLS" 
-               compression="on" compressableMimeType="text/html,text/xml,text/css,text/javascript"/>
-
-    <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
-    <!-- See proxy documentation for more information about using this. -->
-    <!--
-    <Connector port="8082" 
-               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
-               enableLookups="false" acceptCount="100" connectionTimeout="20000"
-               proxyPort="80" disableUploadTimeout="true" />
-    -->
-
-    <!-- An Engine represents the entry point (within Catalina) that processes
-         every request.  The Engine implementation for Tomcat stand alone
-         analyzes the HTTP headers included with the request, and passes them
-         on to the appropriate Host (virtual host). -->
-
-    <!-- You should set jvmRoute to support load-balancing via AJP ie :
-    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">         
-    --> 
-         
-    <!-- Define the top level container in our container hierarchy -->
-    <Engine name="Catalina" defaultHost="localhost">
-
-      <!-- The request dumper valve dumps useful debugging information about
-           the request headers and cookies that were received, and the response
-           headers and cookies that were sent, for all requests received by
-           this instance of Tomcat.  If you care only about requests to a
-           particular virtual host, or a particular application, nest this
-           element inside the corresponding <Host> or <Context> entry instead.
-
-           For a similar mechanism that is portable to all Servlet 2.4
-           containers, check out the "RequestDumperFilter" Filter in the
-           example application (the source for this filter may be found in
-           "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters").
-
-           Note that this Valve uses the platform's default character encoding.
-           This may cause problems for developers in another encoding, e.g.
-           UTF-8.  Use the RequestDumperFilter instead.
-
-           Also note that enabling this Valve will write a ton of stuff to your
-           logs.  They are likely to grow quite large.  This extensive log writing
-           will definitely slow down your server.
-
-           Request dumping is disabled by default.  Uncomment the following
-           element to enable it. -->
-      <!--
-      <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
-      -->
-
-      <!-- Because this Realm is here, an instance will be shared globally -->
-
-      <!-- This Realm uses the UserDatabase configured in the global JNDI
-           resources under the key "UserDatabase".  Any edits
-           that are performed against this UserDatabase are immediately
-           available for use by the Realm.  -->
-      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
-             resourceName="UserDatabase"/>
-
-      <!-- Comment out the old realm but leave here for now in case we
-           need to go back quickly -->
-      <!--
-      <Realm className="org.apache.catalina.realm.MemoryRealm" />
-      -->
-
-      <!-- Replace the above Realm with one of the following to get a Realm
-           stored in a database and accessed via JDBC -->
-
-      <!--
-      <Realm  className="org.apache.catalina.realm.JDBCRealm"
-             driverName="org.gjt.mm.mysql.Driver"
-          connectionURL="jdbc:mysql://localhost/authority"
-         connectionName="test" connectionPassword="test"
-              userTable="users" userNameCol="user_name" userCredCol="user_pass"
-          userRoleTable="user_roles" roleNameCol="role_name" />
-      -->
-
-      <!--
-      <Realm  className="org.apache.catalina.realm.JDBCRealm"
-             driverName="oracle.jdbc.driver.OracleDriver"
-          connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
-         connectionName="scott" connectionPassword="tiger"
-              userTable="users" userNameCol="user_name" userCredCol="user_pass"
-          userRoleTable="user_roles" roleNameCol="role_name" />
-      -->
-
-      <!--
-      <Realm  className="org.apache.catalina.realm.JDBCRealm"
-             driverName="sun.jdbc.odbc.JdbcOdbcDriver"
-          connectionURL="jdbc:odbc:CATALINA"
-              userTable="users" userNameCol="user_name" userCredCol="user_pass"
-          userRoleTable="user_roles" roleNameCol="role_name" />
-      -->
-
-      <!-- Define the default virtual host
-           Note: XML Schema validation will not work with Xerces 2.2.
-       -->
-      <Host name="localhost" appBase="webapps"
-       unpackWARs="true" autoDeploy="true"
-       xmlValidation="false" xmlNamespaceAware="false">
-
-        <!-- Defines a cluster for this node,
-             By defining this element, means that every manager will be changed.
-             So when running a cluster, only make sure that you have webapps in there
-             that need to be clustered and remove the other ones.
-             A cluster has the following parameters:
-
-             className = the fully qualified name of the cluster class
-
-             clusterName = a descriptive name for your cluster, can be anything
-
-             mcastAddr = the multicast address, has to be the same for all the nodes
-
-             mcastPort = the multicast port, has to be the same for all the nodes
-             
-             mcastBindAddress = bind the multicast socket to a specific address
-             
-             mcastTTL = the multicast TTL if you want to limit your broadcast
-             
-             mcastSoTimeout = the multicast readtimeout 
-
-             mcastFrequency = the number of milliseconds in between sending a "I'm alive" heartbeat
-
-             mcastDropTime = the number a milliseconds before a node is considered "dead" if no heartbeat is received
-
-             tcpThreadCount = the number of threads to handle incoming replication requests, optimal would be the same amount of threads as nodes 
-
-             tcpListenAddress = the listen address (bind address) for TCP cluster request on this host, 
-                                in case of multiple ethernet cards.
-                                auto means that address becomes
-                                InetAddress.getLocalHost().getHostAddress()
-
-             tcpListenPort = the tcp listen port
-
-             tcpSelectorTimeout = the timeout (ms) for the Selector.select() method in case the OS
-                                  has a wakup bug in java.nio. Set to 0 for no timeout
-
-             printToScreen = true means that managers will also print to std.out
-
-             expireSessionsOnShutdown = true means that 
-
-             useDirtyFlag = true means that we only replicate a session after setAttribute,removeAttribute has been called.
-                            false means to replicate the session after each request.
-                            false means that replication would work for the following piece of code: (only for SimpleTcpReplicationManager)
-                            <%
-                            HashMap map = (HashMap)session.getAttribute("map");
-                            map.put("key","value");
-                            %>
-             replicationMode = can be either 'pooled', 'synchronous' or 'asynchronous'.
-                               * Pooled means that the replication happens using several sockets in a synchronous way. Ie, the data gets replicated, then the request return. This is the same as the 'synchronous' setting except it uses a pool of sockets, hence it is multithreaded. This is the fastest and safest configuration. To use this, also increase the nr of tcp threads that you have dealing with replication.
-                               * Synchronous means that the thread that executes the request, is also the
-                               thread the replicates the data to the other nodes, and will not return until all
-                               nodes have received the information.
-                               * Asynchronous means that there is a specific 'sender' thread for each cluster node,
-                               so the request thread will queue the replication request into a "smart" queue,
-                               and then return to the client.
-                               The "smart" queue is a queue where when a session is added to the queue, and the same session
-                               already exists in the queue from a previous request, that session will be replaced
-                               in the queue instead of replicating two requests. This almost never happens, unless there is a 
-                               large network delay.
-        -->             
-        <!--
-            When configuring for clustering, you also add in a valve to catch all the requests
-            coming in, at the end of the request, the session may or may not be replicated.
-            A session is replicated if and only if all the conditions are met:
-            1. useDirtyFlag is true or setAttribute or removeAttribute has been called AND
-            2. a session exists (has been created)
-            3. the request is not trapped by the "filter" attribute
-
-            The filter attribute is to filter out requests that could not modify the session,
-            hence we don't replicate the session after the end of this request.
-            The filter is negative, ie, anything you put in the filter, you mean to filter out,
-            ie, no replication will be done on requests that match one of the filters.
-            The filter attribute is delimited by ;, so you can't escape out ; even if you wanted to.
-
-            filter=".*\.gif;.*\.js;" means that we will not replicate the session after requests with the URI
-            ending with .gif and .js are intercepted.
-            
-            The deployer element can be used to deploy apps cluster wide.
-            Currently the deployment only deploys/undeploys to working members in the cluster
-            so no WARs are copied upons startup of a broken node.
-            The deployer watches a directory (watchDir) for WAR files when watchEnabled="true"
-            When a new war file is added the war gets deployed to the local instance,
-            and then deployed to the other instances in the cluster.
-            When a war file is deleted from the watchDir the war is undeployed locally 
-            and cluster wide
-        -->
-        
-        <!--
-        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
-                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
-                 expireSessionsOnShutdown="false"
-                 useDirtyFlag="true"
-                 notifyListenersOnReplication="true">
-
-            <Membership 
-                className="org.apache.catalina.cluster.mcast.McastService"
-                mcastAddr="228.0.0.4"
-                mcastPort="45564"
-                mcastFrequency="500"
-                mcastDropTime="3000"/>
-
-            <Receiver 
-                className="org.apache.catalina.cluster.tcp.ReplicationListener"
-                tcpListenAddress="auto"
-                tcpListenPort="4001"
-                tcpSelectorTimeout="100"
-                tcpThreadCount="6"/>
-
-            <Sender
-                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
-                replicationMode="pooled"
-                ackTimeout="15000"
-                waitForAck="true"/>
-
-            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
-                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
-                   
-            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
-                      tempDir="/tmp/war-temp/"
-                      deployDir="/tmp/war-deploy/"
-                      watchDir="/tmp/war-listen/"
-                      watchEnabled="false"/>
-                      
-            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
-        </Cluster>
-        -->        
-
-
-
-        <!-- Normally, users must authenticate themselves to each web app
-             individually.  Uncomment the following entry if you would like
-             a user to be authenticated the first time they encounter a
-             resource protected by a security constraint, and then have that
-             user identity maintained across *all* web applications contained
-             in this virtual host. -->
-        <!--
-        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-        -->
-
-        <!-- Access log processes all requests for this virtual host.  By
-             default, log files are created in the "logs" directory relative to
-             $CATALINA_HOME.  If you wish, you can specify a different
-             directory with the "directory" attribute.  Specify either a relative
-             (to $CATALINA_HOME) or absolute path to the desired directory.
-        -->
-        <!--
-        <Valve className="org.apache.catalina.valves.AccessLogValve"
-                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
-                 pattern="common" resolveHosts="false"/>
-        -->
-
-        <!-- Access log processes all requests for this virtual host.  By
-             default, log files are created in the "logs" directory relative to
-             $CATALINA_HOME.  If you wish, you can specify a different
-             directory with the "directory" attribute.  Specify either a relative
-             (to $CATALINA_HOME) or absolute path to the desired directory.
-             This access log implementation is optimized for maximum performance,
-             but is hardcoded to support only the "common" and "combined" patterns.
-        -->
-        <!--
-        <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
-                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
-                 pattern="common" resolveHosts="false"/>
-        -->
-
-      </Host>
-
-    </Engine>
-
-  </Service>
-
-</Server>
diff --git a/openbis/dist/server/setup-env b/openbis/dist/server/setup-env
new file mode 100644
index 0000000000000000000000000000000000000000..ed6da0033f48f58f999f2f4c2318da234e3beb1f
--- /dev/null
+++ b/openbis/dist/server/setup-env
@@ -0,0 +1,15 @@
+# Load properties that become environment variables
+# NOTE: it would be possible to specify a normal java properties file after the 'start.jar'
+
+JETTY_BIN_DIR=`dirname "$0"`
+if [ ${JETTY_BIN_DIR#/} == ${JETTY_BIN_DIR} ]; then
+    JETTY_BIN_DIR="`pwd`/${JETTY_BIN_DIR}"
+fi
+
+source "$JETTY_BIN_DIR"/jetty.properties
+cd "$JETTY_BIN_DIR"/..
+
+JVM=java
+if [ -n "$JAVA_HOME" ]; then
+    JVM="$JAVA_HOME"/bin/java
+fi 
diff --git a/openbis/dist/server/shutdown.sh b/openbis/dist/server/shutdown.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2ba1ea1084f92c4166a35529f77387d99892797f
--- /dev/null
+++ b/openbis/dist/server/shutdown.sh
@@ -0,0 +1,8 @@
+#! /bin/bash
+
+source `dirname "$0"`/setup-env
+$JVM -DSTOP.PORT=$JETTY_STOP_PORT \
+     -DSTOP.KEY=$JETTY_STOP_KEY \
+     -Djetty.port=$JETTY_PORT \
+     $JAVA_OPTS $JAVA_MEM_OPTS \
+     -jar start.jar --stop
diff --git a/openbis/dist/server/startup.sh b/openbis/dist/server/startup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..696601e9af38508bc6aac68a8f838a450eddab37
--- /dev/null
+++ b/openbis/dist/server/startup.sh
@@ -0,0 +1,8 @@
+#! /bin/bash
+
+source `dirname "$0"`/setup-env
+$JVM -DSTOP.PORT=$JETTY_STOP_PORT \
+     -DSTOP.KEY=$JETTY_STOP_KEY \
+     -Djetty.port=$JETTY_PORT \
+     $JAVA_OPTS $JAVA_MEM_OPTS \
+     -jar start.jar etc/jetty.xml >> logs/jetty.out 2>&1 &