diff --git a/common/source/java/ch/systemsx/cisd/common/server/ISessionTokenProvider.java b/common/source/java/ch/systemsx/cisd/common/server/ISessionTokenProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee9f8c9fbe89e391f7f9d36708fde0382fe72179
--- /dev/null
+++ b/common/source/java/ch/systemsx/cisd/common/server/ISessionTokenProvider.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.common.server;
+
+/**
+ * Provider of a session token.
+ * 
+ * @author Franz-Josef Elmer
+ */
+public interface ISessionTokenProvider
+{
+    public String getSessionToken();
+}
diff --git a/datastore_server/dss-tmp/.gitignore b/datastore_server/dss-tmp/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/datastore_server/recovery-state/test/.gitignore b/datastore_server/recovery-state/test/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
index d4a7285d1be2dcae2b286fc10eb8012f3c457f7a..fb33ab352eb29fb41f9acc2bb834d62310ccf3d9 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
@@ -25,7 +25,7 @@ import org.apache.log4j.Logger;
 import org.springframework.beans.factory.FactoryBean;
 
 import ch.systemsx.cisd.common.api.client.ServiceFinder;
-import ch.systemsx.cisd.common.conversation.ConversationalRmiClient;
+import ch.systemsx.cisd.common.conversation.IConversationalRmiClient;
 import ch.systemsx.cisd.common.conversation.RmiConversationController;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.logging.LogCategory;
@@ -87,7 +87,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
  * @author Bernd Rinn
  */
 public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISService, FactoryBean,
-        ConversationalRmiClient
+        IConversationalRmiClient
 {
 
     private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
@@ -193,67 +193,67 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public Experiment tryToGetExperiment(ExperimentIdentifier experimentIdentifier)
     {
         assert experimentIdentifier != null : " Unspecified experiment identifier.";
-        return service.tryToGetExperiment(session.getToken(), experimentIdentifier);
+        return service.tryToGetExperiment(session.getSessionToken(), experimentIdentifier);
     }
 
     @Override
     public Space tryGetSpace(SpaceIdentifier spaceIdentifier) throws UserFailureException
     {
         assert spaceIdentifier != null : "Unspecified space identifier";
-        return service.tryGetSpace(session.getToken(), spaceIdentifier);
+        return service.tryGetSpace(session.getSessionToken(), spaceIdentifier);
     }
 
     @Override
     public Project tryGetProject(ProjectIdentifier projectIdentifier) throws UserFailureException
     {
         assert projectIdentifier != null : "Unspecified project identifier";
-        return service.tryGetProject(session.getToken(), projectIdentifier);
+        return service.tryGetProject(session.getSessionToken(), projectIdentifier);
     }
 
     @Override
     public List<Sample> listSamples(ListSampleCriteria criteria)
     {
         assert criteria != null : "Unspecifed criteria.";
-        return service.listSamples(session.getToken(), criteria);
+        return service.listSamples(session.getSessionToken(), criteria);
     }
 
     @Override
     public final Sample tryGetSampleWithExperiment(final SampleIdentifier sampleIdentifier)
     {
         assert sampleIdentifier != null : "Given sample identifier can not be null.";
-        return service.tryGetSampleWithExperiment(session.getToken(), sampleIdentifier);
+        return service.tryGetSampleWithExperiment(session.getSessionToken(), sampleIdentifier);
     }
 
     @Override
     public SampleIdentifier tryToGetSampleIdentifier(String samplePermID)
             throws UserFailureException
     {
-        return service.tryToGetSampleIdentifier(session.getToken(), samplePermID);
+        return service.tryToGetSampleIdentifier(session.getSessionToken(), samplePermID);
     }
 
     @Override
     public ExperimentType getExperimentType(String experimentTypeCode) throws UserFailureException
     {
-        return service.getExperimentType(session.getToken(), experimentTypeCode);
+        return service.getExperimentType(session.getSessionToken(), experimentTypeCode);
     }
 
     @Override
     public Collection<VocabularyTerm> listVocabularyTerms(String vocabularyCode)
             throws UserFailureException
     {
-        return service.listVocabularyTerms(session.getToken(), vocabularyCode);
+        return service.listVocabularyTerms(session.getSessionToken(), vocabularyCode);
     }
 
     @Override
     public SampleType getSampleType(String sampleTypeCode) throws UserFailureException
     {
-        return service.getSampleType(session.getToken(), sampleTypeCode);
+        return service.getSampleType(session.getSessionToken(), sampleTypeCode);
     }
 
     @Override
     public DataSetTypeWithVocabularyTerms getDataSetType(String dataSetTypeCode)
     {
-        return service.getDataSetType(session.getToken(), dataSetTypeCode);
+        return service.getDataSetType(session.getSessionToken(), dataSetTypeCode);
     }
 
     @Override
@@ -261,7 +261,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
             throws UserFailureException
     {
         TechId id = new TechId(experimentID);
-        return service.listDataSetsByExperimentID(session.getToken(), id);
+        return service.listDataSetsByExperimentID(session.getSessionToken(), id);
     }
 
     @Override
@@ -269,21 +269,21 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
             boolean showOnlyDirectlyConnected)
     {
         TechId id = new TechId(sampleID);
-        return service.listDataSetsBySampleID(session.getToken(), id, showOnlyDirectlyConnected);
+        return service.listDataSetsBySampleID(session.getSessionToken(), id, showOnlyDirectlyConnected);
     }
 
     @Override
     public List<ExternalData> listDataSetsByCode(List<String> dataSetCodes)
             throws UserFailureException
     {
-        return service.listDataSetsByCode(session.getToken(), dataSetCodes);
+        return service.listDataSetsByCode(session.getSessionToken(), dataSetCodes);
     }
 
     @Override
     public long registerExperiment(NewExperiment experiment) throws UserFailureException
     {
         assert experiment != null : "Unspecified experiment.";
-        return service.registerExperiment(session.getToken(), experiment);
+        return service.registerExperiment(session.getSessionToken(), experiment);
     }
 
     @Override
@@ -292,7 +292,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     {
         assert newSamples != null : "Unspecified samples.";
 
-        service.registerSamples(session.getToken(), newSamples, userIDOrNull);
+        service.registerSamples(session.getSessionToken(), newSamples, userIDOrNull);
     }
 
     @Override
@@ -301,7 +301,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     {
         assert newSample != null : "Unspecified sample.";
 
-        return service.registerSample(session.getToken(), newSample, userIDOrNull);
+        return service.registerSample(session.getSessionToken(), newSample, userIDOrNull);
     }
 
     @Override
@@ -309,7 +309,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     {
         assert sampleUpdate != null : "Unspecified sample.";
 
-        service.updateSample(session.getToken(), sampleUpdate);
+        service.updateSample(session.getSessionToken(), sampleUpdate);
     }
 
     @Override
@@ -324,10 +324,10 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
         {
             ExperimentIdentifier experimentIdentifier =
                     dataSetInformation.getExperimentIdentifier();
-            service.registerDataSet(session.getToken(), experimentIdentifier, data);
+            service.registerDataSet(session.getSessionToken(), experimentIdentifier, data);
         } else
         {
-            service.registerDataSet(session.getToken(), sampleIdentifier, data);
+            service.registerDataSet(session.getSessionToken(), sampleIdentifier, data);
         }
         setShareId(data);
 
@@ -347,7 +347,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
         assert properties != null : "missing data";
         assert space != null : "space missing";
 
-        service.addPropertiesToDataSet(session.getToken(), properties, code, space);
+        service.addPropertiesToDataSet(session.getSessionToken(), properties, code, space);
 
         if (operationLog.isInfoEnabled())
         {
@@ -359,7 +359,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public void updateShareIdAndSize(String dataSetCode, String shareId, long size)
             throws UserFailureException
     {
-        service.updateShareIdAndSize(session.getToken(), dataSetCode, shareId, size);
+        service.updateShareIdAndSize(session.getSessionToken(), dataSetCode, shareId, size);
 
         if (operationLog.isInfoEnabled())
         {
@@ -376,7 +376,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
         assert codes != null : "missing data set codes";
         assert newStatus != null : "missing status";
 
-        service.updateDataSetStatuses(session.getToken(), codes, newStatus, presentInArchive);
+        service.updateDataSetStatuses(session.getSessionToken(), codes, newStatus, presentInArchive);
         if (operationLog.isInfoEnabled())
         {
             operationLog.info("Updated in openBIS: data sets " + codes + ", status=" + newStatus);
@@ -391,7 +391,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
         assert dataSetCode != null : "missing data set codes";
         assert oldStatus != null : "missing old status";
         assert newStatus != null : "missing new status";
-        return service.compareAndSetDataSetStatus(session.getToken(), dataSetCode, oldStatus,
+        return service.compareAndSetDataSetStatus(session.getSessionToken(), dataSetCode, oldStatus,
                 newStatus, newPresentInArchive);
     }
 
@@ -400,7 +400,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
             final SampleIdentifier sampleIdentifier) throws UserFailureException
     {
         assert sampleIdentifier != null : "Given sample identifier can not be null.";
-        return service.tryToGetPropertiesOfTopSampleRegisteredFor(session.getToken(),
+        return service.tryToGetPropertiesOfTopSampleRegisteredFor(session.getSessionToken(),
                 sampleIdentifier);
     }
 
@@ -408,7 +408,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public final List<Sample> listSamplesByCriteria(final ListSamplesByPropertyCriteria criteria)
             throws UserFailureException
     {
-        return service.listSamplesByCriteria(session.getToken(), criteria);
+        return service.listSamplesByCriteria(session.getSessionToken(), criteria);
     }
 
     @Override
@@ -426,7 +426,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     {
         if (homeDatabaseInstance == null)
         {
-            homeDatabaseInstance = service.getHomeDatabaseInstance(session.getToken());
+            homeDatabaseInstance = service.getHomeDatabaseInstance(session.getSessionToken());
         }
         return homeDatabaseInstance;
     }
@@ -434,25 +434,25 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     @Override
     public final String createDataSetCode()
     {
-        return service.createDataSetCode(session.getToken());
+        return service.createDataSetCode(session.getSessionToken());
     }
 
     @Override
     public final String createPermId()
     {
-        return service.createPermId(session.getToken());
+        return service.createPermId(session.getSessionToken());
     }
 
     @Override
     public long drawANewUniqueID()
     {
-        return service.drawANewUniqueID(session.getToken());
+        return service.drawANewUniqueID(session.getSessionToken());
     }
 
     @Override
     public ExternalData tryGetDataSet(String dataSetCode) throws UserFailureException
     {
-        return service.tryGetDataSet(session.getToken(), dataSetCode);
+        return service.tryGetDataSet(session.getSessionToken(), dataSetCode);
     }
 
     @Override
@@ -497,7 +497,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public List<DataSetShareId> listDataSetShareIds() throws UserFailureException
     {
         List<DataSetShareId> shareIds =
-                service.listShareIds(session.getToken(), session.getDataStoreCode());
+                service.listShareIds(session.getSessionToken(), session.getDataStoreCode());
         for (DataSetShareId dataSetShareId : shareIds)
         {
             if (dataSetShareId.getShareId() == null)
@@ -513,7 +513,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public List<SimpleDataSetInformationDTO> listDataSets() throws UserFailureException
     {
         List<SimpleDataSetInformationDTO> dataSets =
-                service.listDataSets(session.getToken(), session.getDataStoreCode());
+                service.listDataSets(session.getSessionToken(), session.getDataStoreCode());
         for (SimpleDataSetInformationDTO dataSet : dataSets)
         {
             if (dataSet.getDataSetShareId() == null)
@@ -528,14 +528,14 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public List<ExternalData> listNewerDataSets(TrackingDataSetCriteria criteria)
             throws UserFailureException
     {
-        return service.listDataSets(session.getToken(), session.getDataStoreCode(), criteria);
+        return service.listDataSets(session.getSessionToken(), session.getDataStoreCode(), criteria);
     }
 
     @Override
     public List<ExternalData> listAvailableDataSets(ArchiverDataSetCriteria criteria)
             throws UserFailureException
     {
-        return service.listAvailableDataSets(session.getToken(), session.getDataStoreCode(),
+        return service.listAvailableDataSets(session.getSessionToken(), session.getDataStoreCode(),
                 criteria);
     }
 
@@ -543,7 +543,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public List<DeletedDataSet> listDeletedDataSets(Long lastSeenDeletionEventIdOrNull,
             Date maxDeletionDataOrNull)
     {
-        return service.listDeletedDataSets(session.getToken(), lastSeenDeletionEventIdOrNull,
+        return service.listDeletedDataSets(session.getSessionToken(), lastSeenDeletionEventIdOrNull,
                 maxDeletionDataOrNull);
     }
 
@@ -551,13 +551,13 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     public void archiveDataSets(List<String> dataSetCodes, boolean removeFromDataStore)
             throws UserFailureException
     {
-        service.archiveDatasets(session.getToken(), dataSetCodes, removeFromDataStore);
+        service.archiveDatasets(session.getSessionToken(), dataSetCodes, removeFromDataStore);
     }
 
     @Override
     public void unarchiveDataSets(List<String> dataSetCodes) throws UserFailureException
     {
-        service.unarchiveDatasets(session.getToken(), dataSetCodes);
+        service.unarchiveDatasets(session.getSessionToken(), dataSetCodes);
     }
 
     @Override
@@ -569,25 +569,25 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     @Override
     public ExternalData tryGetDataSetForServer(String dataSetCode) throws UserFailureException
     {
-        return service.tryGetDataSetForServer(session.getToken(), dataSetCode);
+        return service.tryGetDataSetForServer(session.getSessionToken(), dataSetCode);
     }
 
     @Override
     public List<String> generateCodes(String prefix, int size)
     {
-        return service.generateCodes(session.getToken(), prefix, size);
+        return service.generateCodes(session.getSessionToken(), prefix, size);
     }
 
     @Override
     public List<Person> listAdministrators()
     {
-        return service.listAdministrators(session.getToken());
+        return service.listAdministrators(session.getSessionToken());
     }
 
     @Override
     public Person tryPersonWithUserIdOrEmail(String useridOrEmail)
     {
-        return service.tryPersonWithUserIdOrEmail(session.getToken(), useridOrEmail);
+        return service.tryPersonWithUserIdOrEmail(session.getSessionToken(), useridOrEmail);
     }
 
     @Override
@@ -595,7 +595,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
             String userIdOrNull) throws UserFailureException
     {
         Sample sample =
-                service.registerSampleAndDataSet(session.getToken(), newSample, externalData,
+                service.registerSampleAndDataSet(session.getSessionToken(), newSample, externalData,
                         userIdOrNull);
         setShareId(externalData);
         return sample;
@@ -606,7 +606,7 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
             NewExternalData externalData)
     {
         Sample sample =
-                service.updateSampleAndRegisterDataSet(session.getToken(), newSample, externalData);
+                service.updateSampleAndRegisterDataSet(session.getSessionToken(), newSample, externalData);
         setShareId(externalData);
         return sample;
     }
@@ -616,11 +616,11 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
             AtomicEntityOperationDetails operationDetails)
     {
         IETLLIMSService conversationalService =
-                conversationController.getConversationalReference(session.getToken(), service,
+                conversationController.getConversationalReference(session, service,
                         IETLLIMSService.class);
 
         AtomicEntityOperationResult operations =
-                conversationalService.performEntityOperations(session.getToken(), operationDetails);
+                conversationalService.performEntityOperations(session.getSessionToken(), operationDetails);
         List<? extends NewExternalData> dataSets = operationDetails.getDataSetRegistrations();
         for (NewExternalData dataSet : dataSets)
         {
@@ -643,110 +643,110 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
     @Override
     public List<Sample> searchForSamples(SearchCriteria searchCriteria)
     {
-        return service.searchForSamples(session.getToken(), searchCriteria);
+        return service.searchForSamples(session.getSessionToken(), searchCriteria);
     }
 
     @Override
     public List<ExternalData> searchForDataSets(SearchCriteria searchCriteria)
     {
-        return service.searchForDataSets(session.getToken(), searchCriteria);
+        return service.searchForDataSets(session.getSessionToken(), searchCriteria);
     }
 
     @Override
     public List<Project> listProjects()
     {
-        return service.listProjects(session.getToken());
+        return service.listProjects(session.getSessionToken());
     }
 
     @Override
     public List<Experiment> listExperiments(ProjectIdentifier projectIdentifier)
     {
-        return service.listExperiments(session.getToken(), projectIdentifier);
+        return service.listExperiments(session.getSessionToken(), projectIdentifier);
     }
 
     @Override
     public Material tryGetMaterial(MaterialIdentifier materialIdentifier)
     {
-        return service.tryGetMaterial(session.getToken(), materialIdentifier);
+        return service.tryGetMaterial(session.getSessionToken(), materialIdentifier);
     }
 
     @Override
     public List<Material> listMaterials(ListMaterialCriteria criteria, boolean withProperties)
     {
-        return service.listMaterials(session.getToken(), criteria, withProperties);
+        return service.listMaterials(session.getSessionToken(), criteria, withProperties);
     }
 
     @Override
     public void removeDataSetsPermanently(List<String> dataSetCodes, String reason)
     {
-        service.removeDataSetsPermanently(session.getToken(), dataSetCodes, reason);
+        service.removeDataSetsPermanently(session.getSessionToken(), dataSetCodes, reason);
     }
 
     @Override
     public void updateDataSet(DataSetUpdatesDTO dataSetUpdates)
     {
-        service.updateDataSet(session.getToken(), dataSetUpdates);
+        service.updateDataSet(session.getSessionToken(), dataSetUpdates);
     }
 
     @Override
     public List<String> getTrustedCrossOriginDomains()
     {
-        return service.getTrustedCrossOriginDomains(session.getToken());
+        return service.getTrustedCrossOriginDomains(session.getSessionToken());
     }
 
     @Override
     public void setStorageConfirmed(String dataSetCode)
     {
-        service.setStorageConfirmed(session.getToken(), dataSetCode);
+        service.setStorageConfirmed(session.getSessionToken(), dataSetCode);
     }
 
     @Override
     public void markSuccessfulPostRegistration(String dataSetCode)
     {
-        service.markSuccessfulPostRegistration(session.getToken(), dataSetCode);
+        service.markSuccessfulPostRegistration(session.getSessionToken(), dataSetCode);
     }
 
     @Override
     public List<ExternalData> listDataSetsForPostRegistration()
     {
-        return service.listDataSetsForPostRegistration(session.getToken(),
+        return service.listDataSetsForPostRegistration(session.getSessionToken(),
                 session.getDataStoreCode());
     }
 
     @Override
     public EntityOperationsState didEntityOperationsSucceed(TechId registrationId)
     {
-        return service.didEntityOperationsSucceed(session.getToken(), registrationId);
+        return service.didEntityOperationsSucceed(session.getSessionToken(), registrationId);
     }
 
     @Override
     public void heartbeat()
     {
-        service.heartbeat(session.getToken());
+        service.heartbeat(session.getSessionToken());
     }
 
     @Override
     public boolean doesUserHaveRole(String user, String roleCode, String spaceOrNull)
     {
-        return service.doesUserHaveRole(session.getToken(), user, roleCode, spaceOrNull);
+        return service.doesUserHaveRole(session.getSessionToken(), user, roleCode, spaceOrNull);
     }
 
     @Override
     public List<String> filterToVisibleDataSets(String user, List<String> dataSetCodes)
     {
-        return service.filterToVisibleDataSets(session.getToken(), user, dataSetCodes);
+        return service.filterToVisibleDataSets(session.getSessionToken(), user, dataSetCodes);
     }
 
     @Override
     public List<String> filterToVisibleExperiments(String user, List<String> experimentIds)
     {
-        return service.filterToVisibleExperiments(session.getToken(), user, experimentIds);
+        return service.filterToVisibleExperiments(session.getSessionToken(), user, experimentIds);
     }
 
     @Override
     public List<String> filterToVisibleSamples(String user, List<String> sampleIdentifiers)
     {
-        return service.filterToVisibleSamples(session.getToken(), user, sampleIdentifiers);
+        return service.filterToVisibleSamples(session.getSessionToken(), user, sampleIdentifiers);
     }
 
 }
\ No newline at end of file
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptor.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptor.java
index 302590a37041b27f28b55a0c84e3f89031efb17d..2129873badd0e53fc0b9533489183034eaee2a33 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptor.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptor.java
@@ -132,7 +132,7 @@ public class OpenBISAuthenticationInterceptor implements MethodInterceptor
                     "Authentication failure to openBIS server. Most probable cause: user or password are invalid.";
             throw new ConfigurationFailureException(msg);
         }
-        sessionHolder.setToken(sessionToken);
+        sessionHolder.setSessionToken(sessionToken);
         DataStoreServerInfo dataStoreServerInfo = new DataStoreServerInfo();
         dataStoreServerInfo.setPort(port);
         dataStoreServerInfo.setUseSSL(useSSL);
@@ -152,7 +152,7 @@ public class OpenBISAuthenticationInterceptor implements MethodInterceptor
 
     private final void checkSessionToken()
     {
-        if (sessionHolder.getToken() == null)
+        if (sessionHolder.getSessionToken() == null)
         {
             authenticate();
         }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISSessionHolder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISSessionHolder.java
index d9b5e2dd500984e718394921554e3f70a5922655..9da732dec1b802cf95bff42c92291b42a97086d4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISSessionHolder.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISSessionHolder.java
@@ -16,15 +16,21 @@
 
 package ch.systemsx.cisd.openbis.dss.generic.server.openbisauth;
 
+import java.io.Serializable;
+
+import ch.systemsx.cisd.common.server.ISessionTokenProvider;
+
 /**
  * A class that holds information about the openBIS session. It has the information necessary to
  * connect to any of the openBIS APIs.
  * 
  * @author Kaloyan Enimanev
  */
-public class OpenBISSessionHolder
+public class OpenBISSessionHolder implements Serializable, ISessionTokenProvider
 {
-    private String token;
+    private static final long serialVersionUID = 1L;
+
+    private String sessionToken;
 
     private String dataStoreCode;
 
@@ -38,14 +44,15 @@ public class OpenBISSessionHolder
         this.dataStoreCode = dataStoreCode.toUpperCase();
     }
 
-    public String getToken()
+    @Override
+    public String getSessionToken()
     {
-        return token;
+        return sessionToken;
     }
 
-    public void setToken(String sessionToken)
+    public void setSessionToken(String sessionToken)
     {
-        this.token = sessionToken;
+        this.sessionToken = sessionToken;
     }
 
 }
diff --git a/datastore_server/source/java/dssApplicationContext.xml b/datastore_server/source/java/dssApplicationContext.xml
index 70c7ea0cf5387f64175defe818e162fd6f13913d..a73b79b9612af4c9252d3c001aed8187e79e2ae1 100644
--- a/datastore_server/source/java/dssApplicationContext.xml
+++ b/datastore_server/source/java/dssApplicationContext.xml
@@ -147,7 +147,7 @@
     <bean id="data-store-rpc-conversational-client"
         class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
         <property name="service" ref="openBIS-service" />
-        <property name="serviceInterface" value="ch.systemsx.cisd.common.conversation.ConversationalRmiClient" />
+        <property name="serviceInterface" value="ch.systemsx.cisd.common.conversation.IConversationalRmiClient" />
     </bean>
     
     <bean id="session-token-manager" class="ch.systemsx.cisd.openbis.dss.generic.server.SessionTokenManager"/>
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
index 4727cf8e76f58e4b5aaddc691530ced23387306b..606ab28b66e1b41fa924d05cf6447b1c7195a453 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java
@@ -276,7 +276,7 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC
                         typeExtractor, storageProcessor);
 
         OpenBISSessionHolder sessionHolder = new OpenBISSessionHolder();
-        sessionHolder.setToken(SESSION_TOKEN);
+        sessionHolder.setSessionToken(SESSION_TOKEN);
         authorizedLimsService =
                 new EncapsulatedOpenBISService(limsService, sessionHolder, "", shareIdManager);
         dataSetValidator = context.mock(IDataSetValidator.class);
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/RmiConversationTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/RmiConversationTest.java
index 28431ac9056c7db2b24930c807130de59b7ddfe5..7a4c5383ecf682395e83b935c268f2d37c14b4ad 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/RmiConversationTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/RmiConversationTest.java
@@ -46,16 +46,18 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.base.exceptions.TimeoutExceptionUnchecked;
-import ch.systemsx.cisd.common.conversation.ConversationalRmiClient;
-import ch.systemsx.cisd.common.conversation.ConversationalRmiServer;
+import ch.systemsx.cisd.common.conversation.IConversationalRmiClient;
+import ch.systemsx.cisd.common.conversation.IConversationalRmiServer;
 import ch.systemsx.cisd.common.conversation.IProgressListener;
 import ch.systemsx.cisd.common.conversation.RmiConversationController;
 import ch.systemsx.cisd.common.conversation.RmiServiceFactory;
 import ch.systemsx.cisd.common.logging.LogInitializer;
+import ch.systemsx.cisd.common.server.ISessionTokenProvider;
 import ch.systemsx.cisd.common.serviceconversation.ServiceConversationDTO;
 import ch.systemsx.cisd.common.serviceconversation.ServiceMessage;
 import ch.systemsx.cisd.common.serviceconversation.server.ServiceConversationServer;
 import ch.systemsx.cisd.common.spring.HttpInvokerUtils;
+import ch.systemsx.cisd.openbis.dss.generic.server.openbisauth.OpenBISSessionHolder;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
 
 @Test(groups = "system test")
@@ -112,7 +114,9 @@ public class RmiConversationTest extends SystemTestCase
                 HttpInvokerUtils.createServiceStub(EchoService.class,
                         "http://localhost:8888/openbis/rmi-echoservice", 5000);
         cont = new RmiConversationController("http://localhost:8882");
-        echo = cont.getConversationalReference("", httpEcho, EchoService.class);
+        OpenBISSessionHolder sessionHolder = new OpenBISSessionHolder();
+        sessionHolder.setSessionToken("");
+        echo = cont.getConversationalReference(sessionHolder, httpEcho, EchoService.class);
     }
 
     @AfterClass
@@ -167,7 +171,7 @@ public class RmiConversationTest extends SystemTestCase
         assertThat(echo.exists("stored"), is(true));
     }
 
-    public interface EchoService extends ConversationalRmiServer
+    public interface EchoService extends IConversationalRmiServer
     {
         @Transactional
         public String echo(String input, Integer delayInMillis);
@@ -215,11 +219,11 @@ public class RmiConversationTest extends SystemTestCase
         }
 
         @Override
-        public ServiceConversationDTO startConversation(String sessionToken, String clientUrl,
-                String typeId)
+        public ServiceConversationDTO startConversation(ISessionTokenProvider sessionTokenProvider,
+                String clientUrl, String typeId)
         {
-            ConversationalRmiClient client =
-                    HttpInvokerUtils.createServiceStub(ConversationalRmiClient.class,
+            IConversationalRmiClient client =
+                    HttpInvokerUtils.createServiceStub(IConversationalRmiClient.class,
                             "http://localhost:8882/client", 5000);
             server.addClientResponseTransport("test-client-id", client);
             return this.server.startConversation(typeId, "test-client-id");
@@ -365,7 +369,7 @@ public class RmiConversationTest extends SystemTestCase
         }
     }
 
-    public static class ClientBean implements ConversationalRmiClient
+    public static class ClientBean implements IConversationalRmiClient
     {
 
         @Override
@@ -382,7 +386,7 @@ public class RmiConversationTest extends SystemTestCase
         @Override
         public void afterPropertiesSet()
         {
-            setServiceInterface(ConversationalRmiClient.class);
+            setServiceInterface(IConversationalRmiClient.class);
             setService(new ClientBean());
             super.afterPropertiesSet();
         }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java
index 064ca0d2cc83259811ca3862001e23b0959a306b..e383962c08cd6205fdfa6741156ae80c4c7aa286 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java
@@ -63,7 +63,7 @@ public class EncapsulatedOpenBISServiceTest
         limsService = context.mock(IETLLIMSService.class);
         shareIdManager = context.mock(IShareIdManager.class);
         session = new OpenBISSessionHolder();
-        session.setToken(SESSION_TOKEN);
+        session.setSessionToken(SESSION_TOKEN);
         encapsulatedLimsService = new EncapsulatedOpenBISService(limsService, session, "", shareIdManager);
     }
 
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptorTest.java
index 0972fe5761cf6db15ab700f7dabd56befbb88955..de8338c35a552b3a2b47e25d5c7c38c8b9e585e9 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptorTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/openbisauth/OpenBISAuthenticationInterceptorTest.java
@@ -94,7 +94,7 @@ public class OpenBISAuthenticationInterceptorTest
     @Test
     public final void testSessionTokenExpired() throws Throwable
     {
-        sessionHolder.setToken("expiredSessionToken");
+        sessionHolder.setSessionToken("expiredSessionToken");
         context.checking(new Expectations()
             {
                 {
@@ -108,13 +108,13 @@ public class OpenBISAuthenticationInterceptorTest
         interceptor.invoke(methodInvocation);
 
         // the interceptor will reauthenticate and set the new session token
-        assertEquals(VALiD_SESSION_TOKEN, sessionHolder.getToken());
+        assertEquals(VALiD_SESSION_TOKEN, sessionHolder.getSessionToken());
     }
     
     @Test
     public final void testInitializeSessionToken() throws Throwable
     {
-        sessionHolder.setToken(null);
+        sessionHolder.setSessionToken(null);
         context.checking(new Expectations()
             {
                 {
@@ -126,13 +126,13 @@ public class OpenBISAuthenticationInterceptorTest
         interceptor.invoke(methodInvocation);
 
         // the interceptor will reauthenticate and set the new session token
-        assertEquals(VALiD_SESSION_TOKEN, sessionHolder.getToken());
+        assertEquals(VALiD_SESSION_TOKEN, sessionHolder.getSessionToken());
     }
 
     @Test
     public final void testNoReauthenticationNeeded() throws Throwable
     {
-        sessionHolder.setToken(VALiD_SESSION_TOKEN);
+        sessionHolder.setSessionToken(VALiD_SESSION_TOKEN);
         context.checking(new Expectations()
             {
                 {
@@ -143,7 +143,7 @@ public class OpenBISAuthenticationInterceptorTest
         interceptor.invoke(methodInvocation);
 
         // the interceptor will reauthenticate and set the new session token
-        assertEquals(VALiD_SESSION_TOKEN, sessionHolder.getToken());
+        assertEquals(VALiD_SESSION_TOKEN, sessionHolder.getSessionToken());
     }
 
     private SessionContextDTO createSession()
diff --git a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/ConversationalRmiClient.java b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/IConversationalRmiClient.java
similarity index 91%
rename from openbis-common/source/java/ch/systemsx/cisd/common/conversation/ConversationalRmiClient.java
rename to openbis-common/source/java/ch/systemsx/cisd/common/conversation/IConversationalRmiClient.java
index 041f0a9fc6f40e2d8baf210343709db781f9a7d5..0ab030f7376082a71953f198cfda0c0d325465b8 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/ConversationalRmiClient.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/IConversationalRmiClient.java
@@ -23,6 +23,6 @@ import ch.systemsx.cisd.common.serviceconversation.IServiceMessageTransport;
  * 
  * @author anttil
  */
-public interface ConversationalRmiClient extends IServiceMessageTransport
+public interface IConversationalRmiClient extends IServiceMessageTransport
 {
 }
diff --git a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/ConversationalRmiServer.java b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/IConversationalRmiServer.java
similarity index 76%
rename from openbis-common/source/java/ch/systemsx/cisd/common/conversation/ConversationalRmiServer.java
rename to openbis-common/source/java/ch/systemsx/cisd/common/conversation/IConversationalRmiServer.java
index 2bc92ab26626c7c57a8db6698bf62495ab659076..97c4b5cc9020f37c2cb8b90deec82895fe701084 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/ConversationalRmiServer.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/IConversationalRmiServer.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.common.conversation;
 
+import ch.systemsx.cisd.common.server.ISessionTokenProvider;
 import ch.systemsx.cisd.common.serviceconversation.IServiceMessageTransport;
 import ch.systemsx.cisd.common.serviceconversation.ServiceConversationDTO;
 
@@ -24,8 +25,9 @@ import ch.systemsx.cisd.common.serviceconversation.ServiceConversationDTO;
  * 
  * @author anttil
  */
-public interface ConversationalRmiServer extends IServiceMessageTransport
+public interface IConversationalRmiServer extends IServiceMessageTransport
 {
-    public ServiceConversationDTO startConversation(String sessionToken, String clientUrl, String typeId);
+    public ServiceConversationDTO startConversation(ISessionTokenProvider sessionTokenProvider,
+            String clientUrl, String typeId);
 
 }
diff --git a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiConversationController.java b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiConversationController.java
index e2e9bccc7407c59bf1f8d0140c7488c900b0d621..53591be5666fc6fdcc427806e0f666b4e0b687ee 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiConversationController.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiConversationController.java
@@ -16,44 +16,49 @@
 
 package ch.systemsx.cisd.common.conversation;
 
+import ch.systemsx.cisd.common.server.ISessionTokenProvider;
 import ch.systemsx.cisd.common.serviceconversation.ServiceConversationDTO;
 import ch.systemsx.cisd.common.serviceconversation.ServiceMessage;
 import ch.systemsx.cisd.common.serviceconversation.client.IRemoteServiceConversationServer;
 import ch.systemsx.cisd.common.serviceconversation.client.ServiceConversationClient;
 
 /**
- * RmiConversationController controls the client side communication with the service conversation 
- * framework. Clients can use RmiConversationController to create conversational references to remote
- * services and to process incoming service conversation related messages.
+ * RmiConversationController controls the client side communication with the service conversation
+ * framework. Clients can use RmiConversationController to create conversational references to
+ * remote services and to process incoming service conversation related messages.
  * 
  * @author anttil
  */
-public class RmiConversationController {
+public class RmiConversationController
+{
     private ServiceConversationClient client = null;
+
     private final String callbackUrl;
-    
-    public RmiConversationController(String callbackUrl) {
+
+    public RmiConversationController(String callbackUrl)
+    {
         this.callbackUrl = callbackUrl;
     }
-    
-    public synchronized <T extends ConversationalRmiServer, U extends T> 
-        T getConversationalReference(final String sessionToken, final U service, Class<T> type) {
 
-        if (this.client == null) {
-            this.client = new ServiceConversationClient(
-                    new IRemoteServiceConversationServer() {
-                        @Override
-                        public ServiceConversationDTO startConversation(String typeId)
-                        {
-                            return service.startConversation(sessionToken, callbackUrl, typeId);
-                        }
-                    },
-                    service);
+    public synchronized <T extends IConversationalRmiServer, U extends T> T getConversationalReference(
+            final ISessionTokenProvider sessionTokenProvider, final U service, Class<T> type)
+    {
+        if (this.client == null)
+        {
+            this.client = new ServiceConversationClient(new IRemoteServiceConversationServer()
+                {
+                    @Override
+                    public ServiceConversationDTO startConversation(String typeId)
+                    {
+                        return service.startConversation(sessionTokenProvider, callbackUrl, typeId);
+                    }
+                }, service);
         }
         return RmiProxy.newInstance(type, client);
     }
-    
-    public void process(ServiceMessage message) {
+
+    public void process(ServiceMessage message)
+    {
         this.client.getIncomingResponseMessageTransport().send(message);
     }
 }
diff --git a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiProxy.java b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiProxy.java
index 78463e303d37906273427dc3b4397e9e08851167..2fb4b380ba72947458bb6f81515d127803954b70 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiProxy.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiProxy.java
@@ -37,7 +37,7 @@ public class RmiProxy implements InvocationHandler
     private String typeId;
     
     @SuppressWarnings("unchecked")
-    static <T extends ConversationalRmiServer> T newInstance(Class<T> clazz, ServiceConversationClient client) {
+    static <T extends IConversationalRmiServer> T newInstance(Class<T> clazz, ServiceConversationClient client) {
 
         Collection<Class<?>> interfaces = new HashSet<Class<?>>();
         interfaces.add(clazz);
diff --git a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiServiceFactory.java b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiServiceFactory.java
index cda190ac1560d7d3d1902e3b8dfe2adedc9f3203..ba053d1f66cf404c5285712d962b1cbd2f1a360a 100644
--- a/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiServiceFactory.java
+++ b/openbis-common/source/java/ch/systemsx/cisd/common/conversation/RmiServiceFactory.java
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.common.serviceconversation.server.ServiceConversationSer
  * 
  * @author anttil
  */
-public final class RmiServiceFactory<T extends ConversationalRmiServer> implements IServiceFactory
+public final class RmiServiceFactory<T extends IConversationalRmiServer> implements IServiceFactory 
 {
 
     private ServiceConversationServer server;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index cc5325be3a92d801df7fd113269262a211c6d5ff..21f8863060477ac95c2e1518e5b0a853a74d849b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -37,11 +37,12 @@ import ch.systemsx.cisd.authentication.DummyAuthenticationService;
 import ch.systemsx.cisd.authentication.IAuthenticationService;
 import ch.systemsx.cisd.authentication.ISessionManager;
 import ch.systemsx.cisd.common.collections.CollectionUtils;
-import ch.systemsx.cisd.common.conversation.ConversationalRmiClient;
+import ch.systemsx.cisd.common.conversation.IConversationalRmiClient;
 import ch.systemsx.cisd.common.conversation.IProgressListener;
 import ch.systemsx.cisd.common.conversation.RmiServiceFactory;
 import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.common.server.ISessionTokenProvider;
 import ch.systemsx.cisd.common.serviceconversation.ServiceConversationDTO;
 import ch.systemsx.cisd.common.serviceconversation.ServiceMessage;
 import ch.systemsx.cisd.common.serviceconversation.server.ServiceConversationServer;
@@ -275,13 +276,14 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
     }
 
     @Override
-    public ServiceConversationDTO startConversation(String sessionToken, String clientUrl,
-            String typeId)
+    public ServiceConversationDTO startConversation(ISessionTokenProvider sessionTokenProvider,
+            String clientUrl, String typeId)
     {
+        String sessionToken = sessionTokenProvider.getSessionToken();
         getSession(sessionToken);
 
-        ConversationalRmiClient client =
-                HttpInvokerUtils.createServiceStub(ConversationalRmiClient.class, clientUrl, 5000);
+        IConversationalRmiClient client =
+                HttpInvokerUtils.createServiceStub(IConversationalRmiClient.class, clientUrl, 5000);
         String clientId = sessionToken;
         server.addClientResponseTransport(clientId, client);
         return server.startConversation(typeId, clientId);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
index 45f758b29460fb492c3436f3d5035dc702f8e5d3..96958bec39244e918109e78d0ff1d006fe97dbc6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
@@ -26,6 +26,7 @@ import ch.systemsx.cisd.authentication.ISessionManager;
 import ch.systemsx.cisd.common.collections.CollectionUtils;
 import ch.systemsx.cisd.common.conversation.IProgressListener;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.common.server.ISessionTokenProvider;
 import ch.systemsx.cisd.common.serviceconversation.ServiceConversationDTO;
 import ch.systemsx.cisd.common.serviceconversation.ServiceMessage;
 import ch.systemsx.cisd.common.spring.IInvocationLoggerContext;
@@ -91,8 +92,8 @@ public class ETLServiceLogger extends AbstractServerLogger implements IETLLIMSSe
     }
 
     @Override
-    public ServiceConversationDTO startConversation(String sessionToken, String clientUrl,
-            String typeId)
+    public ServiceConversationDTO startConversation(ISessionTokenProvider sessionTokenProvider,
+            String clientUrl, String typeId)
     {
         logTracking(typeId, "startConversation", "");
         return null;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
index fbe5fc9175d6cf55c3a60f7705a231c1d591cd38..03924674ed4777ca063290c73b704bf8b151fd48 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.springframework.transaction.annotation.Transactional;
 
-import ch.systemsx.cisd.common.conversation.ConversationalRmiServer;
+import ch.systemsx.cisd.common.conversation.IConversationalRmiServer;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.ISessionProvider;
@@ -97,7 +97,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
  * 
  * @author Christian Ribeaud
  */
-public interface IETLLIMSService extends IServer, ISessionProvider, ConversationalRmiServer
+public interface IETLLIMSService extends IServer, ISessionProvider, IConversationalRmiServer
 {
     /**
      * Returns the home database instance.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSServiceConversational.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSServiceConversational.java
index 5e4bed8746132d25e4317b713ab1a1fee0451851..2030ae3acd286c2674d387b4bf41ba068bfe743b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSServiceConversational.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSServiceConversational.java
@@ -18,7 +18,7 @@ package ch.systemsx.cisd.openbis.generic.shared;
 
 import org.springframework.transaction.annotation.Transactional;
 
-import ch.systemsx.cisd.common.conversation.ConversationalRmiServer;
+import ch.systemsx.cisd.common.conversation.IConversationalRmiServer;
 import ch.systemsx.cisd.common.conversation.IProgressListener;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.AuthorizationGuard;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RolesAllowed;
@@ -31,7 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult;
 /**
  * @author anttil
  */
-public interface IETLLIMSServiceConversational extends IETLLIMSService, ConversationalRmiServer
+public interface IETLLIMSServiceConversational extends IETLLIMSService, IConversationalRmiServer
 {
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)