diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
index 75be797753f76263f52941fd1c3cafbc7cb38c63..295bcdede7fb390ebb32dfdce877c37b0a005da8 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
@@ -68,7 +68,14 @@ class RADatabase:
                                      port=self.dbcreds.port,
                                      connect_timeout=5)
         self.cursor = self.conn.cursor(cursor_factory = psycopg2.extras.RealDictCursor)
-        self.conn.notices = collections.deque()
+
+        # see http://initd.org/psycopg/docs/connection.html#connection.notices
+        # try to set the notices attribute with a non-list collection,
+        # so we can log more than 50 messages. Is only available since 2.7, so encapsulate in try/except.
+        try:
+            self.conn.notices = collections.deque()
+        except TypeError:
+            logger.warning("Cannot overwrite self.conn.notices with a deque... only max 50 notifications available per query. (That's ok, no worries.)")
 
     def _queryAsSingleLine(self, query, qargs=None):
         line = ' '.join(query.replace('\n', ' ').split())
diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql
index 2242ac5e375ceb19c80d64d99db1863fcd48ae1e..b32116dd3e0fde128687d234fb1c6d381634c25b 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql
@@ -13,6 +13,8 @@ DECLARE
     claim_claimed_status_id int := 1; --beware: hard coded instead of lookup for performance
     task_approved_status_id int := 300; --beware: hard coded instead of lookup for performance
     task_conflict_status_id int := 335; --beware: hard coded instead of lookup for performance
+    task_prescheduled_status_id int := 350; --beware: hard coded instead of lookup for performance
+    task_scheduled_status_id int := 400; --beware: hard coded instead of lookup for performance
     task_finished_status_id int := 1000; --beware: hard coded instead of lookup for performance
     task_aborted_status_id int  := 1100; --beware: hard coded instead of lookup for performance
 BEGIN
@@ -21,8 +23,8 @@ BEGIN
         UPDATE resource_allocation.resource_claim
         SET status_id=claim_tentative_status_id
         WHERE (task_id=NEW.id AND status_id = claim_claimed_status_id);
-    ELSIF NEW.status_id = ANY(ARRAY[400, 500, 600, 900, 1000, 1100]) THEN
-        --prevent task status to be upgraded to scheduled (or beyond) when not all its claims are claimed
+    ELSIF OLD.status_id = task_prescheduled_status_id AND NEW.status_id = task_scheduled_status_id THEN
+        --prevent task status to be scheduled when not all its claims are claimed
         IF EXISTS (SELECT id FROM resource_allocation.resource_claim WHERE task_id = NEW.id AND status_id <> claim_claimed_status_id) THEN
             RAISE EXCEPTION 'Cannot update task status from % to % when not all its claims are claimed', OLD.status_id, NEW.status_id;
         END IF;