diff --git a/deep_sequencing_unit/dist/tracking/etc/tracking-email.template b/deep_sequencing_unit/dist/tracking/etc/tracking-email.template
new file mode 100644
index 0000000000000000000000000000000000000000..aae6f7f5159948d8d3938dd7195c0b6c4a4e9a7a
--- /dev/null
+++ b/deep_sequencing_unit/dist/tracking/etc/tracking-email.template
@@ -0,0 +1,10 @@
+Dear Mr./Mrs.
+This email has been sent to you automatically by the openBIS system because
+your have been registered as a contact person or principal investigator.
+
+There is progress considering your sequencing order. Below you will find all the details.
+
+{generated-content}
+
+Kind regards, 
+	Deep Sequencing Unit Team
\ No newline at end of file
diff --git a/deep_sequencing_unit/dist/tracking/etc/tracking-local-database b/deep_sequencing_unit/dist/tracking/etc/tracking-local-database
new file mode 100644
index 0000000000000000000000000000000000000000..6e59b385c8954de6e066fce64168fa61a62fee8f
--- /dev/null
+++ b/deep_sequencing_unit/dist/tracking/etc/tracking-local-database
@@ -0,0 +1,2 @@
+lastSeenSequencingSampleId	lastSeenFlowLaneSampleId	lastSeenDatasetId
+0	0	0
diff --git a/deep_sequencing_unit/dist/tracking/etc/tracking-service.properties b/deep_sequencing_unit/dist/tracking/etc/tracking-service.properties
new file mode 100644
index 0000000000000000000000000000000000000000..f92ad89b3c4096e086635045710f5c031ad42596
--- /dev/null
+++ b/deep_sequencing_unit/dist/tracking/etc/tracking-service.properties
@@ -0,0 +1,23 @@
+openbis-user=<login>
+openbis-password=<password>
+openbis-server-url = https://<openbis-server-url>:8443/openbis
+
+
+# SMTP properties.
+# To test the system and save emails as files instead of sending them, 
+# set the smtp host to file://path-to-directory
+mail.smtp.host = 
+mail.smtp.user = 
+mail.smtp.password = 
+
+# all emails will be sent from this address
+notification-email-from = openbis-noreply@bsse.ethz.ch
+# all emails will have this address in the reply-to field
+notification-email-reply-to = manuel.kohler@bsse.ethz.ch
+# subject of all the notification emails
+notification-email-subject = Status report of your sequencing order
+
+# Recipients that will receive notifications when entity connected with sequencing sample 
+# with certain AFFILIATION value. Property key should contain affiliation vocabulary term code
+# with '-notification-email-contact' suffix, e.g. for 'FMI' affiliation:
+FMI-affiliation-notification-email-contact = michael.stadler@fmi.ch
diff --git a/deep_sequencing_unit/dist/tracking/tracking.sh b/deep_sequencing_unit/dist/tracking/tracking.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e892b9d665b0955d00e465af8bac4ed8c5d5b0ca
--- /dev/null
+++ b/deep_sequencing_unit/dist/tracking/tracking.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+#
+# Launch script for CISD openBIS Tracking system for Deep Sequencing Unit.
+# Runs on Unix / Linux systems.
+# -------------------------------------------------------------------------
+
+JAR_FILE=lib/openbis-tracking-dsu-client.jar
+
+#
+# change to installation directory
+#
+bin=$0
+if [ -L $bin ]; then
+  bin=`dirname $bin`/`readlink $bin`
+fi
+WD=`dirname $bin`
+cd $WD
+SCRIPT=./`basename $0`
+
+if [ "$JAVA_HOME" != "" ]; then
+	JAVA_BIN="$JAVA_HOME/bin/java"
+else
+	JAVA_BIN="java"
+fi
+
+ALL_JAVA_OPTS="-Djavax.net.ssl.trustStore=etc/openBIS.keystore $JAVA_OPTS"
+echo -n "Starting the openBIS Tracking Client for DSU"
+${JAVA_BIN} ${ALL_JAVA_OPTS} -jar $JAR_FILE "$@"
\ No newline at end of file
diff --git a/deep_sequencing_unit/etc/tracking-email.template b/deep_sequencing_unit/etc/tracking-email.template
index 930f5d6d858630c31b3a200353d2a83696853cd6..aae6f7f5159948d8d3938dd7195c0b6c4a4e9a7a 100644
--- a/deep_sequencing_unit/etc/tracking-email.template
+++ b/deep_sequencing_unit/etc/tracking-email.template
@@ -1,8 +1,10 @@
 Dear Mr./Mrs.
-This is an automatically generated email notification from openBIS about creation of
-samples and data sets for which you are a contact person, principal investigator or affiliation contact.
+This email has been sent to you automatically by the openBIS system because
+your have been registered as a contact person or principal investigator.
+
+There is progress considering your sequencing order. Below you will find all the details.
 
 {generated-content}
 
 Kind regards, 
-	CISD Team
\ No newline at end of file
+	Deep Sequencing Unit Team
\ No newline at end of file
diff --git a/deep_sequencing_unit/etc/tracking-service.properties b/deep_sequencing_unit/etc/tracking-service.properties
index 7fd7fb3f68ee8374cfd293ad206016808b6d1dfb..a2206ee31c57a45fd6707c6b3dafbc30da65f6f4 100644
--- a/deep_sequencing_unit/etc/tracking-service.properties
+++ b/deep_sequencing_unit/etc/tracking-service.properties
@@ -1,18 +1,14 @@
 openbis-user=kohleman
 openbis-password=xxx
-openbis-server-url = http://localhost:8888/openbis/rmi-tracking
+openbis-server-url = http://localhost:8888/openbis
 
 
-# SMTP properties (must start with 'mail' to be considered).
-mail.smtp.host = file://${root}
-#mail.from = datastore_server@localhost
+mail.smtp.host = file://targets
 mail.smtp.user = 
 mail.smtp.password = 
 
 notification-email-from = openbis-noreply@bsse.ethz.ch
 notification-email-reply-to = tomasz.pylak@bsse.ethz.ch
-notification-email-subject = Entity creation notification
-# Recipients that will receive notifications when entity connected with sequencing sample 
-# with certain AFFILIATION value. Property key should contain affiliation vocabulary term code
-# with '-notification-email-contact' suffix, e.g. for 'FMI' affiliation:
-# FMI-affiliation-notification-email-contact = fmi@bsse.ethz.ch
+notification-email-subject = Status report of your sequencing order 
+
+FMI-affiliation-notification-email-contact = fmi@bsse.ethz.ch
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
index 723f67c0c9eaabba9c902e1d7c5914f1bad02a86..91066093d21e262a657220c6ac5103cc4fe6424d 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/email/EntityTrackingEmailGenerator.java
@@ -128,7 +128,7 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
         private static final String SUBSECTION_SEPARATOR_LINE =
                 createSeparatorLine(SUBSECTION_SEPARATOR_CHAR);
 
-        private static final String PERMLINK_LABEL = "Permlink";
+        private static final String PERMLINK_LABEL = "See details in openBIS";
 
         private static final String GENARATED_CONTENT_TARGET = "{generated-content}";
 
@@ -194,10 +194,8 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
             // basic sample info
             appendAttribute(sb, PERMLINK_LABEL, sample.getPermlink());
             appendAttribute(sb, "Identifier", sample.getIdentifier());
-            appendNewline(sb);
 
             // sample properties
-            appendln(sb, "Filled sample properties:");
             appendProperties(sb, sample.getProperties());
         }
 
@@ -235,7 +233,6 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat
                     .getCode(), sequencingSample.getPermlink()));
 
             // data set properties
-            appendln(sb, "Filled data set properties:");
             appendProperties(sb, dataSet.getProperties());
         }
 
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java
index 66011ec34c06e95605694eb3dd8797a0e8cf6eca..e61834ab2fcc3ab93dc1e1caef1fa49cbd3a3c9e 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/FileBasedTrackingDAO.java
@@ -48,7 +48,7 @@ public class FileBasedTrackingDAO implements ITrackingDAO
     public void saveTrackingState(TrackingStateDTO state)
     {
         List<String> lines = new ArrayList<String>();
-        lines.add("lastSeenSequencingSampleId\tlastSeenFlowLaneSampleId\tlastSeenDatasetId\n");
+        lines.add("lastSeenSequencingSampleId\tlastSeenFlowLaneSampleId\tlastSeenDatasetId");
         lines.add("" + state.getLastSeenSequencingSampleId() + "\t"
                 + state.getLastSeenFlowLaneSampleId() + "\t" + state.getLastSeenDatasetId());
         writeLines(new File(filePath), lines);
@@ -74,13 +74,13 @@ public class FileBasedTrackingDAO implements ITrackingDAO
             List<TrackingStateDTO> trackingState = tabFileLoader.load(new File(filePath));
             if (trackingState.size() != 1)
             {
-                throw LogUtils.environmentError("File %s has to many rows, it should have exactly 1.",
-                        filePath);
+                throw LogUtils.environmentError(
+                        "File %s has to many rows, it should have exactly 1.", filePath);
             }
             return trackingState.get(0);
         } catch (Exception e)
         {
-            throw LogUtils.envErr("Incorrect file format", e);
+            throw LogUtils.environmentError("Incorrect file format", e);
         }
     }
 
@@ -91,8 +91,8 @@ public class FileBasedTrackingDAO implements ITrackingDAO
             IOUtils.writeLines(lines, "\n", new FileOutputStream(file));
         } catch (IOException ex)
         {
-            throw LogUtils.envErr(String.format("Cannot save the file %s with content: %s",
-                    file.getPath(), lines), ex);
+            throw LogUtils.environmentError(String.format("Cannot save the file %s with content: %s", file
+                    .getPath(), lines), ex);
         }
     }
 }
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
index 750bdf40b003e8ce7d513e4cc0d0c05c893ae379..4a25c9fc885390dfe66b5799b0e682b2c5f698b0 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingBO.java
@@ -22,6 +22,8 @@ import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackedEntities;
 import ch.ethz.bsse.cisd.dsu.tracking.dto.TrackingStateDTO;
 import ch.ethz.bsse.cisd.dsu.tracking.email.Email;
 import ch.ethz.bsse.cisd.dsu.tracking.email.IEntityTrackingEmailGenerator;
+import ch.ethz.bsse.cisd.dsu.tracking.utils.LogUtils;
+import ch.systemsx.cisd.common.collections.CollectionUtils;
 import ch.systemsx.cisd.common.mail.From;
 import ch.systemsx.cisd.common.mail.IMailClient;
 import ch.systemsx.cisd.openbis.generic.shared.ITrackingServer;
@@ -39,7 +41,7 @@ public class TrackingBO
 {
     private static final String SEQUENCING_SAMPLE_TYPE = "ILLUMINA_SEQUENCING";
 
-    private static final String FLOW_LANE_SAMPLE_TYPE = "FLOW_LANE";
+    private static final String FLOW_LANE_SAMPLE_TYPE = "ILLUMINA_FLOW_LANE";
 
     private final ITrackingServer trackingServer;
 
@@ -70,12 +72,71 @@ public class TrackingBO
     {
         for (Email email : emails)
         {
-            From from = (email.getFromOrNull() == null) ? null : new From(email.getFromOrNull());
-            mailClient.sendMessage(email.getSubject(), email.getContent(),
-                    email.getReplyToOrNull(), from, email.getRecipients());
+            try
+            {
+                From from = tryGetFromField(email);
+                String[] recipients = email.getRecipients();
+                String content = email.getContent();
+                String subject = email.getSubject();
+                String replyToOrNull = email.getReplyToOrNull();
+                sendMessage(mailClient, subject, content, replyToOrNull, from, recipients);
+            } catch (Exception ex)
+            {
+                sendErrorReport(mailClient, ex, email);
+            }
         }
     }
 
+    private static From tryGetFromField(Email email)
+    {
+        return (email.getFromOrNull() == null) ? null : new From(email.getFromOrNull());
+    }
+
+    // This email could not be sent, most probably the recipient addresses were
+    // incorrect.
+    // We send the email to the administrator "replyTo' address, the admin should
+    // forward it to the right recipient.
+    private static void sendErrorReport(IMailClient mailClient, Exception exception, Email email)
+    {
+        StringBuffer errorReportContent = new StringBuffer();
+        appendLine(errorReportContent, "Dear openBIS Admin,");
+        appendLine(errorReportContent,
+                "This email has been generated automatically from the openBIS Changes Tracking system.");
+        appendLine(errorReportContent, "There was a failure while trying to send the email:");
+        appendLine(errorReportContent, exception.getMessage());
+        appendLine(errorReportContent,
+                "The possible reason is that the recipient address is not valid.");
+        appendLine(errorReportContent,
+                "If you know the address of the recipient please correct it and forward this email to him.");
+        appendLine(errorReportContent,
+                "!!! Note that the Tracking System will not try to send this email again !!!");
+        appendLine(errorReportContent,
+                "Please correct the recipient email address in openBIS to avoid similar problems in future.");
+        appendLine(errorReportContent, "");
+        appendLine(errorReportContent, "Subject:    " + email.getSubject());
+        appendLine(errorReportContent, "Recipients: "
+                + CollectionUtils.abbreviate(email.getRecipients(), -1));
+        appendLine(errorReportContent, "");
+        appendLine(errorReportContent, "Original content:");
+
+        sendMessage(mailClient, "[Tracking] Sending an email failed",
+                errorReportContent.toString(), null, tryGetFromField(email), email
+                        .getReplyToOrNull());
+    }
+
+    private static void sendMessage(IMailClient mailClient, String subject, String content,
+            String replyToOrNull, From fromOrNull, String... recipients)
+    {
+        mailClient.sendMessage(subject, content, replyToOrNull, fromOrNull, recipients);
+        LogUtils.debug("Sending an email [" + subject + "]\n" + content);
+    }
+
+    private static void appendLine(StringBuffer sb, String msg)
+    {
+        sb.append(msg);
+        sb.append("\n");
+    }
+
     private static void saveTrackingState(TrackedEntities changedEntities, ITrackingDAO trackingDAO)
     {
         TrackingStateDTO state = new TrackingStateDTO();
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
index 1857242294bc4d556c812a289e587788b4b13e90..95ed67a83fbd01e43837cde770d90760c995fbaa 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/main/TrackingClient.java
@@ -46,6 +46,8 @@ public class TrackingClient
 
     private static final String EMAIL_TEMPLATE_FILE = "etc/tracking-email.template";
 
+    private static final String OPENBIS_RMI_TRACKING = "/rmi-tracking";
+
     public static void main(String[] args)
     {
         try
@@ -81,8 +83,8 @@ public class TrackingClient
 
     private static ITrackingServer createOpenBISTrackingServer(Parameters params)
     {
-        return HttpInvokerUtils.createServiceStub(ITrackingServer.class, params
-                .getOpenbisServerURL(), 5);
+        String serviceURL = params.getOpenbisServerURL() + OPENBIS_RMI_TRACKING;
+        return HttpInvokerUtils.createServiceStub(ITrackingServer.class, serviceURL, 5);
     }
 
     private static SessionContextDTO authentificateInOpenBIS(Parameters params,
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java
index a9ceb026d76a222ac1453f1763a1693359325773..a092e10d69976acd5da8e5633763df1548c00fd2 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/utils/LogUtils.java
@@ -37,20 +37,28 @@ public class LogUtils
     {
         String causeMsg =
                 (ex.getCause() == null) ? "" : "Error cause: " + ex.getCause().getMessage();
-        notificationLog
-                .error("An environment exception occured why trying to send emails with changes.\n"
+        String fullMsg =
+                "An environment exception occured why trying to send emails with changes.\n"
                         + "Check and correct the configuration.\n" + "Error details: "
-                        + ex.getMessage() + "\n" + causeMsg);
+                        + ex.getMessage() + "\n" + causeMsg;
+        notify(ex, fullMsg);
     }
 
     public static void notify(Throwable ex)
     {
-        notificationLog
-                .error("An unexpected exception occured why trying to send emails with changes.\n"
-                        + "Error details: " + ex.getMessage());
+        String fullMsg =
+                "An unexpected exception occured why trying to send emails with changes.\n"
+                        + "Error details: " + ex.getMessage();
+        notify(ex, fullMsg);
+    }
+
+    private static void notify(Throwable ex, String fullMsg)
+    {
+        ex.printStackTrace();
+        notificationLog.error(fullMsg);
     }
 
-    public static EnvironmentFailureException envErr(String message, Throwable exception)
+    public static EnvironmentFailureException environmentError(String message, Throwable exception)
     {
         String fullMsg =
                 message + " The following exception has been thrown: " + exception.getMessage();
@@ -62,4 +70,15 @@ public class LogUtils
         String fullMsg = String.format(msgFormat, params);
         return new EnvironmentFailureException(fullMsg);
     }
+
+    public static void info(String msg)
+    {
+        operationLog.info(msg);
+    }
+
+    public static void debug(String msg)
+    {
+        // FIXME 2009--, Tomasz Pylak: change to debug
+        operationLog.info(msg);
+    }
 }