diff --git a/datastore_server/build/build.xml b/datastore_server/build/build.xml
index cf8eb675b9615673f37becb45ace7a3323414133..91a4beee0ad60b245caf3d9b346536b1e1068517 100644
--- a/datastore_server/build/build.xml
+++ b/datastore_server/build/build.xml
@@ -17,6 +17,12 @@
   <property name="dss-client-jar.file" value="${dist.dss_client.lib}/dss_client.jar" />
   <property name="dist.client.file.prefix" value="${dist}/dss_client" />
 	
+	<property name="dss_upload_gui" value="dss_upload_gui" />
+	<property name="dist.dss_upload_gui" value="${dist}/${dss_upload_gui}" />
+	<property name="dist.dss_upload_gui.lib" value="${dist.dss_upload_gui}/lib" />
+  <property name="dss-upload-gui-jar.file" value="${dist.dss_upload_gui.lib}/dss_upload_gui.jar" />
+  <property name="dist.upload-gui.file.prefix" value="${dist}/${dss_upload_gui}" />
+	
 	<property name="nativesrc" value="${lib}/unix/native" />
 	<property name="nativeroot" value="${targets}/ant" />
 	<property name="native" value="${nativeroot}/native" />
@@ -89,7 +95,7 @@
 
    <!-- This target has been separated to allow DSS extensions to modify jar files in the distribution
     -->
-  <target name="prepare-dist-libs" depends="dss-jar, dist-client">
+  <target name="prepare-dist-libs" depends="dss-jar, dist-client, dist-upload-gui">
     <copy file="${dss-jar.file}" todir="${dist.datastore_server.lib}" />
   	<copy todir="${dist.datastore_server.lib}" flatten="true">
   		<fileset dir="${lib}/jetty7/lib">
@@ -129,6 +135,12 @@
     	<fileset 	dir="${lib}/jython/jython-lib" />
     </copy>
     <copy file="${lib}/truezip/truezip.jar" todir="${dist.datastore_server.lib}" />
+    <copy todir="${dist.datastore_server.lib}/${dss_upload_gui}" >
+    	<fileset 	dir="${dist.dss_upload_gui.lib}" />
+    </copy>
+  	
+  	<!-- The dss_upload_gui folder is no longer needed; clean it up here (not in the task that makes the zip) -->
+  	<delete dir="${dist.dss_upload_gui}" />
   </target>
 
   <!-- parameters: 
@@ -255,6 +267,116 @@
     <delete dir="${dist.dss_client}" />
     
   </target>
+	
+	
+  <!--  
+    dss-upload-gui-jar is designed to be called from make-dist. Thus, it does not depend on compile, but
+    should be called after dss-jar. -->
+  <target name="dss-upload-gui-jar" depends="">
+    <mkdir dir="${dist.dss_upload_gui.lib}" />
+    <build-info revision="revision.number" version="version.number" clean="clean.flag" />
+    <echo file="${build.info.file}">${version.number}:${revision.number}:${clean.flag}</echo>
+    <recursive-jar destfile="${dss-upload-gui-jar.file}">
+      <fileset dir="${classes}">
+      	<include name="ch/systemsx/cisd/common/**/*.class" />
+      	<include name="ch/systemsx/cisd/openbis/generic/shared/**/*.class" />
+        <include name="ch/systemsx/cisd/openbis/dss/client/**/*.class" />
+      	<include name="ch/systemsx/cisd/openbis/dss/generic/shared/api/**/*.class" />
+        <include name="${build.info.filename}" />
+      </fileset>
+      <manifest>
+        <attribute name="Main-Class" value="ch.systemsx.cisd.openbis.dss.client.api.gui.DataSetUploadClient" />
+        <attribute name="Class-Path"
+                   value="cisd-base.jar cisd-args4j.jar stream-supporting-httpinvoker.jar log4j.jar commons-lang.jar commons-io.jar commons-logging.jar 
+ commons-codec.jar commons-httpclient.jar spring.jar jline.jar" />
+        <attribute name="Version" value="${version.number}" />
+        <attribute name="Build-Number"
+                   value="${version.number} (r${revision.number},${clean.flag})" />
+      </manifest>
+    </recursive-jar>
+    <jar update="true" destfile="${dss-upload-gui-jar.file}">
+      <fileset dir="../${ant.project.name}/${classes}" includes="ch/systemsx/cisd/openbis/dss/BuildAndEnvironmentInfo.class"/>
+    	<zipfileset src="${lib}/gwt2.0/gwt-user.jar"
+    				            includes="com/google/gwt/user/client/rpc/IsSerializable.class, com/google/gwt/user/client/rpc/SerializableException.class" />
+    </jar>
+  </target>
+	
+	<target name="dist-upload-gui">
+		<antcall target="make-dist-upload-gui">
+			<param name="variant" value="${variant}" />
+		</antcall>
+	</target>
+  
+  <target name="make-dist-upload-gui" depends="dss-upload-gui-jar">
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${dist.dss_upload_gui.lib}" />
+			<param name="jar" value="dss_upload_gui.jar" />
+		</antcall>
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${lib}/cisd-base" />
+			<param name="jar" value="cisd-base.jar" />
+		</antcall>
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${lib}/cisd-args4j" />
+			<param name="jar" value="cisd-args4j.jar" />
+		</antcall>
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${lib}/cisd-base" />
+			<param name="jar" value="cisd-base.jar" />
+		</antcall>
+  	<antcall target="copy-and-sign-jar">
+  		<param name="dir" value="${lib}/commons-codec" />
+  		<param name="jar" value="commons-codec.jar" />
+  	</antcall>
+  	<antcall target="copy-and-sign-jar">
+  		<param name="dir" value="${lib}/commons-httpclient" />
+  		<param name="jar" value="commons-httpclient.jar" />
+  	</antcall>
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${lib}/commons-io" />
+			<param name="jar" value="commons-io.jar" />
+		</antcall>
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${lib}/commons-lang" />
+			<param name="jar" value="commons-lang.jar" />
+		</antcall>
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${lib}/commons-logging" />
+			<param name="jar" value="commons-logging.jar" />
+		</antcall>
+  	<antcall target="copy-and-sign-jar">
+  		<param name="dir" value="${lib}/commons-codec" />
+  		<param name="jar" value="commons-codec.jar" />
+  	</antcall>
+  	<antcall target="copy-and-sign-jar">
+  		<param name="dir" value="${lib}/spring" />
+  		<param name="jar" value="spring.jar" />
+  	</antcall>
+		<antcall target="copy-and-sign-jar">
+			<param name="dir" value="${lib}/spring/third-party" />
+			<param name="jar" value="stream-supporting-httpinvoker.jar" />
+		</antcall>
+    <property name="dist.file"
+              value="${dist.upload-gui.file.prefix}${variant}-${version.number}-r${revision.number}.zip" />
+    
+    <zip destfile="${dist.file}">
+      <zipfileset dir="${dist.dss_upload_gui.lib}"
+                  prefix="${dss_upload_gui}/lib" />
+    </zip>
+  	
+  	<!-- Do NOT delete the directory here;  it will be cleaned up in another part of the dist process 
+    <delete dir="${dist.dss_upload_gui}" />
+    -->
+  	
+  </target>
+	
+	<target name="copy-and-sign-jar">
+		<copy file="${dir}/${jar}" todir="${dist.dss_upload_gui.lib}" />
+		<signjar jar="${dist.dss_upload_gui.lib}/${jar}"
+		         keystore="../openbis/etc/dev.keystore"
+		         alias="openbis"
+		         storepass="openbistest"/>
+	</target>
 
 	<target name="ci" depends="run-tests, check-dependencies, dist">
 	</target>