diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/OperationsExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/OperationsExecutor.java
index 41286a9b56f1332f09bc7c701c3a7d0b086cad0e..99bbb7ea8d1a4271ca553f92634cbfd8858d875a 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/OperationsExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/OperationsExecutor.java
@@ -304,6 +304,7 @@ public class OperationsExecutor implements IOperationsExecutor
             resultMap.putAll(internalOperationExecutor.execute(context, operations));
 
             flushCurrentSession();
+            clearCurrentSession();
 
             verify(operations, resultMap, context);
 
@@ -401,13 +402,13 @@ public class OperationsExecutor implements IOperationsExecutor
             Map<IOperation, IOperationResult> resultMap, IOperationContext context)
     {
         resultMap.putAll(createVocabularyTermsExecutor.execute(context, operations));
-        resultMap.putAll(createTagsExecutor.execute(context, operations));
         resultMap.putAll(createMaterialsExecutor.execute(context, operations));
         resultMap.putAll(createSpacesExecutor.execute(context, operations));
         resultMap.putAll(createProjectsExecutor.execute(context, operations));
         resultMap.putAll(createExperimentsExecutor.execute(context, operations));
         resultMap.putAll(createSamplesExecutor.execute(context, operations));
         resultMap.putAll(createDataSetsExecutor.execute(context, operations));
+        resultMap.putAll(createTagsExecutor.execute(context, operations));
     }
 
     private void executeDeletions(List<? extends IOperation> operations, 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java
index 7c41cc0f7b1389e6d8481787af81fb48efc9cd4a..73e604568179991bd24386f1b0de10c43fe504ba 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java
@@ -53,6 +53,12 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.CreationId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.operation.IOperation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.operation.IOperationResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.DataSet;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetchOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.IDataSetId;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update.DataSetUpdate;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update.UpdateDataSetsOperation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.history.PropertyHistoryEntry;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.AsynchronousOperationExecutionOptions;
@@ -406,6 +412,47 @@ public class ExecuteOperationsTest extends AbstractOperationExecutionTest
         assertEquals(historyEntry.getPropertyName(), "COMMENT");
         assertEquals(historyEntry.getPropertyValue(), "created");
     }
+    
+    @Test
+    public void testUpdateDataSetAndRelatedSample()
+    {
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+        DataSetUpdate dataSetUpdate = new DataSetUpdate();
+        DataSetPermId dataSetId = new DataSetPermId("20081105092159111-1");
+        dataSetUpdate.setDataSetId(dataSetId);
+        dataSetUpdate.setProperty("COMMENT", "test data set");
+        SampleUpdate sampleUpdate = new SampleUpdate();
+        SamplePermId sampleId = new SamplePermId("200902091219327-1025");
+        sampleUpdate.setSampleId(sampleId);
+        sampleUpdate.setProperty("COMMENT", "test comment");
+        List<? extends IOperation> operations = Arrays.asList(new UpdateDataSetsOperation(dataSetUpdate), new UpdateSamplesOperation(sampleUpdate));
+        SynchronousOperationExecutionOptions options = new SynchronousOperationExecutionOptions();
+
+        SynchronousOperationExecutionResults results = (SynchronousOperationExecutionResults) v3api.executeOperations(sessionToken,
+                operations, options);
+
+        assertEquals(results.getResults().size(), 2);
+        DataSetFetchOptions dataSetFetchOptions = new DataSetFetchOptions();
+        dataSetFetchOptions.withProperties();
+        dataSetFetchOptions.withHistory();
+        Map<IDataSetId, DataSet> dataSets = v3api.getDataSets(sessionToken, Arrays.asList(dataSetId), dataSetFetchOptions);
+        assertEquals(dataSets.size(), 1);
+        DataSet dataSet = dataSets.get(dataSetId);
+        assertEquals(dataSet.getProperty("COMMENT"), "test data set");
+        PropertyHistoryEntry historyEntry = (PropertyHistoryEntry) dataSet.getHistory().get(0);
+        assertEquals(historyEntry.getPropertyName(), "COMMENT");
+        assertEquals(historyEntry.getPropertyValue(), "no comment");
+        SampleFetchOptions sampleFetchOptions = new SampleFetchOptions();
+        sampleFetchOptions.withProperties();
+        sampleFetchOptions.withHistory();
+        Map<ISampleId, Sample> samples = v3api.getSamples(sessionToken, Arrays.asList(sampleId), sampleFetchOptions);
+        assertEquals(samples.size(), 1);
+        Sample updatedSample = samples.get(sampleId);
+        assertEquals(updatedSample.getProperty("COMMENT"), "test comment");
+        historyEntry = (PropertyHistoryEntry) updatedSample.getHistory().get(0);
+        assertEquals(historyEntry.getPropertyName(), "COMMENT");
+        assertEquals(historyEntry.getPropertyValue(), "very advanced stuff");
+    }
 
     @Test
     public void testExecuteWithSynchronousOperationThatSucceedsAndExecutionIdNull()