diff --git a/beat/web/backend/schedule.py b/beat/web/backend/schedule.py
index 170d36e9ff06101be8e42cc37effef861e770f8d..bcc4f2e86e91f6a715cbee1b2871d961a3292345 100644
--- a/beat/web/backend/schedule.py
+++ b/beat/web/backend/schedule.py
@@ -71,7 +71,8 @@ def _select_splits_for_queue(queue):
     '''
 
     splits = JobSplit.objects.filter(job__block__queue=queue,
-        job__split_errors=0, status=Job.QUEUED).order_by('job__runnable_date')
+        worker__isnull=True, job__split_errors=0,
+        status=Job.QUEUED).order_by('job__runnable_date')
 
     # lists of all users currently running
     users = set(splits.values_list('job__block__experiment__author', flat=True))
diff --git a/beat/web/backend/tests.py b/beat/web/backend/tests.py
index 936ca5c93b98ed5abf149d764371c4caab190b89..9379638ef022b0dbf9f987f982df3fb355c1a83c 100644
--- a/beat/web/backend/tests.py
+++ b/beat/web/backend/tests.py
@@ -840,6 +840,25 @@ class Scheduling(BaseBackendTestCase):
         self.assertEqual(worker.available_cores(), qsetup.CORES)
 
 
+    def test_does_not_reassign(self):
+
+        # tests if the scheduling routine never re-assigns splits which are
+        # already assigned.
+
+        fullname = 'user/user/single/1/single'
+        xp = Experiment.objects.get(name=fullname.split(os.sep)[-1])
+
+        # schedules the experiment and check it
+        xp.schedule()
+        self.check_single(xp)
+        assigned_splits = schedule()
+
+        self.assertEqual(len(assigned_splits), 1)
+
+        assigned_splits = schedule()
+        self.assertEqual(len(assigned_splits), 0)
+
+
     def test_worker_activation(self):
 
         # tests that scheduling depends on worker activation