Index: db.scm
==================================================================
--- db.scm
+++ db.scm
@@ -1442,11 +1442,11 @@
 	       (< (current-seconds) timeout))
 	  (begin
 	    (thread-sleep! 0.01)
 	    (loop))))
     (set! *number-of-writes*   (+ *number-of-writes*   1))
-    (set! *writes-total-delay* (+ *writes-total-delay* 1))
+    (set! *writes-total-delay* (+ *writes-total-delay* (- (current-milliseconds) start-time)))
     got-it))
 	  
 (define (db:process-queue-item db item)
   (let* ((stmt-key       (cdb:packet-get-qtype item))
 	 (qry-sig        (cdb:packet-get-query-sig item))
@@ -1537,11 +1537,11 @@
 	   (member status '("PASS" "WARN" "FAIL" "WAIVED" "RUNNING" "CHECK" "SKIP")))
       (begin
 	(sqlite3:execute 
 	 db
 	 "UPDATE tests 
-             SET fail_count=(SELECT count(id) FROM tests WHERE run_id=? AND testname=? AND item_path != '' AND status='FAIL'),
+             SET fail_count=(SELECT count(id) FROM tests WHERE run_id=? AND testname=? AND item_path != '' AND status IN ('FAIL','CHECK')),
                  pass_count=(SELECT count(id) FROM tests WHERE run_id=? AND testname=? AND item_path != '' AND status IN ('PASS','WARN','WAIVED'))
              WHERE run_id=? AND testname=? AND item_path='';"
 	 run-id test-name run-id test-name run-id test-name)
         ;; (thread-sleep! 0.1) ;; give other processes a chance here, no, better to be done ASAP?
 	(if (equal? status "RUNNING") ;; running takes priority over all other states, force the test state to RUNNING
@@ -1553,16 +1553,20 @@
                                    WHEN (SELECT count(id) FROM tests 
                                                 WHERE run_id=? AND testname=?
                                                      AND item_path != '' 
                                                      AND state in ('RUNNING','NOT_STARTED')) > 0 THEN 'RUNNING'
                                    ELSE 'COMPLETED' END,
-                                      status=CASE 
-                                            WHEN fail_count > 0 THEN 'FAIL' 
-                                            WHEN pass_count > 0 AND fail_count=0 THEN 'PASS' 
-                                            ELSE 'UNKNOWN' END
+                            status=CASE 
+                                  WHEN fail_count > 0 THEN 'FAIL' 
+                                  WHEN pass_count > 0 AND fail_count=0 THEN 'PASS' 
+                                  WHEN (SELECT count(id) FROM tests
+                                         WHERE run_id=? AND testname=?
+                                              AND item_path != ''
+                                              AND status = 'SKIP') > 0 THEN 'SKIP'
+                                  ELSE 'UNKNOWN' END
                        WHERE run_id=? AND testname=? AND item_path='';"
-	     run-id test-name run-id test-name))
+	     run-id test-name run-id test-name run-id test-name))
 	#f)
       #f))
 
 ;;======================================================================
 ;; Tests meta data
@@ -1699,11 +1703,15 @@
 
 	  ;; Now rollup the counts to the central megatest.db
 	  (cdb:pass-fail-counts *runremote* test-id fail-count pass-count)
 	  ;; (sqlite3:execute db "UPDATE tests SET fail_count=?,pass_count=? WHERE id=?;" 
 	  ;;                     fail-count pass-count test-id)
-	  (cdb:flush-queue *runremote*)
+
+	  ;; The flush is not needed with the transaction based write agregation enabled. Remove these commented lines
+	  ;; next time you read this!
+	  ;;
+	  ;; (cdb:flush-queue *runremote*)
 	  ;; (thread-sleep! 1) ;; play nice with the queue by ensuring the rollup is at least 10ms later than the set
 	  
 	  ;; if the test is not FAIL then set status based on the fail and pass counts.
 	  (cdb:test-rollup-test_data-pass-fail *runremote* test-id)
 	  ;; (sqlite3:execute

Index: http-transport.scm
==================================================================
--- http-transport.scm
+++ http-transport.scm
@@ -188,15 +188,15 @@
 	 (serverdat   (list iface port)))
     (set! login-res (client:login serverdat))
     (if (and (not (null? login-res))
 	     (car login-res))
 	(begin
-	  (debug:print-info 2 "Logged in and connected to " iface ":" port)
+	  (debug:print-info 0 "Logged in and connected to " iface ":" port)
 	  (set! *runremote* serverdat)
 	  serverdat)
 	(begin
-	  (debug:print-info 2 "Failed to login or connect to " iface ":" port)
+	  (debug:print-info 0 "Failed to login or connect to " iface ":" port)
 	  (set! *runremote* #f)
 	  (set! *transport-type* 'fs)
 	  #f))))
 
 

ADDED   utils/example-launch-dispatcher.scm
Index: utils/example-launch-dispatcher.scm
==================================================================
--- /dev/null
+++ utils/example-launch-dispatcher.scm
@@ -0,0 +1,12 @@
+
+(let ((target (assoc 
+	       ;; Put the variable name here, note: only *one* '
+	       ;; 'TARGET_OS
+	       'MANYITEMS
+	       (read (open-input-string (get-environment-variable "MT_ITEM_INFO"))))))
+  (case (if target target 'var-undef)
+    ((suse)      (system "echo suse-launcher.pl"))
+    ((redhat)    (system "echo red-hat-launcher.pl"))
+    ((af)        (system "echo Got af"))
+    ((var-undef) (system "echo Variable not in MT_ITEM_INFO list"))
+    (else        (system "echo normal-launcher.pl"))))