Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Session.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Session.cs	(revision 2122)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Session.cs	(revision 2123)
@@ -84,10 +84,10 @@
     }
 
-    public ITransaction BeginTransaction() {
+    public ITransaction BeginTransaction(TransactionIsolationLevel isolationLevel) {
       CheckThread();
 
       if (transaction == null) {
-         transaction = new Transaction(this);
-         transaction.Connection = Connection;
+        transaction = new Transaction(this, isolationLevel);
+        transaction.Connection = Connection;
       }
 
@@ -95,4 +95,8 @@
 
       return transaction;
+    }
+
+    public ITransaction BeginTransaction() {
+      return BeginTransaction(TransactionIsolationLevel.Default);
     }
 
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Transaction.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Transaction.cs	(revision 2122)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/Transaction.cs	(revision 2123)
@@ -36,6 +36,9 @@
     private int usageCounter = 0;
 
-    public Transaction(Session session) {
+    private TransactionIsolationLevel isolationLevel;
+
+    public Transaction(Session session, TransactionIsolationLevel isolationLevel) {
       this.session = session;
+      this.isolationLevel = isolationLevel;
     }
 
@@ -53,5 +56,16 @@
             value.Open();
 
-          transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
+          if (isolationLevel == TransactionIsolationLevel.Default)
+            transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
+          else if (isolationLevel == TransactionIsolationLevel.ReadUncommitted)
+            transaction = value.BeginTransaction(IsolationLevel.ReadUncommitted);
+          else if (isolationLevel == TransactionIsolationLevel.ReadCommitted)
+            transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
+          else if (isolationLevel == TransactionIsolationLevel.RepeatableRead)
+            transaction = value.BeginTransaction(IsolationLevel.RepeatableRead);
+          else if (isolationLevel == TransactionIsolationLevel.Serializable)
+            transaction = value.BeginTransaction(IsolationLevel.Serializable);
+          else
+            transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
         }
       }
Index: /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/VarBinaryStream.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/VarBinaryStream.cs	(revision 2122)
+++ /trunk/sources/HeuristicLab.DataAccess.ADOHelper/3.2/VarBinaryStream.cs	(revision 2123)
@@ -168,8 +168,21 @@
       } else {
         _ownedConnection = false;
-        _ownedTransaction = false;
 
         if (transaction != null) {
           _transaction = transaction;
+
+          _ownedTransaction = false;
+
+          if (_transaction.IsolationLevel != IsolationLevel.RepeatableRead &&
+              _transaction.IsolationLevel != IsolationLevel.Serializable) {
+            throw new ArgumentException("Transaction level must be at least repeatable read");
+          }
+        } else {
+          _transaction =
+            _connection.BeginTransaction(
+          IsolationLevel.RepeatableRead)
+            as SqlTransaction;
+
+          _ownedTransaction = true;
         }
       }
Index: /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISession.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISession.cs	(revision 2122)
+++ /trunk/sources/HeuristicLab.DataAccess/3.2/Interfaces/ISession.cs	(revision 2123)
@@ -25,7 +25,13 @@
 
 namespace HeuristicLab.DataAccess.Interfaces {
+  public enum TransactionIsolationLevel {
+    Default, ReadUncommitted, ReadCommitted, RepeatableRead, Serializable
+  };
+
   public interface ISession {
     ISessionFactory Factory { get; }
-    
+
+    ITransaction BeginTransaction(TransactionIsolationLevel isolationLevel);
+
     ITransaction BeginTransaction();
 
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs	(revision 2122)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs	(revision 2123)
@@ -480,5 +480,8 @@
           (JobResult)formatter.Deserialize(stream);
 
-        tx = session.BeginTransaction();
+        //important - repeatable read isolation level is required here, 
+        //otherwise race conditions could occur when writing the stream into the DB
+        tx = session.BeginTransaction(
+          TransactionIsolationLevel.RepeatableRead);
 
         ResponseResultReceived response =
