Index: dashboard-tests.scm
==================================================================
--- dashboard-tests.scm
+++ dashboard-tests.scm
@@ -417,18 +417,18 @@
 	       (keydat        (if testdat (db:get-key-val-pairs dbstruct run-id) #f))
 	       (rundat        (if testdat (db:get-run-info dbstruct run-id) #f))
 	       (runname       (if testdat (db:get-value-by-header (db:get-rows rundat)
 								  (db:get-header rundat)
 								  "runname") #f))
-	       (tdb           (tdb:open-test-db-by-test-id-local dbstruct run-id test-id))
+	       ;; (tdb           (tdb:open-test-db-by-test-id-local dbstruct run-id test-id))
 	       ;; These next two are intentional bad values to ensure errors if they should not
 	       ;; get filled in properly.
 	       (logfile       "/this/dir/better/not/exist")
 	       (rundir        (if testdat 
 				  (db:test-get-rundir testdat)
 				  logfile))
-	       (testdat-path  (conc rundir "/testdat.db")) ;; this gets recalculated until found 
+	       ;; (testdat-path  (conc rundir "/testdat.db")) ;; this gets recalculated until found 
 	       (teststeps     (if testdat (tests:get-compressed-steps dbstruct run-id test-id) '()))
 	       (testfullname  (if testdat (db:test-get-fullname testdat) "Gathering data ..."))
 	       (testname      (if testdat (db:test-get-testname testdat) "n/a"))
 	       (testmeta      (if testdat 
 				  (let ((tm (db:testmeta-get-record dbstruct testname)))
@@ -462,16 +462,16 @@
 				   (system (conc "cd " rundir 
 						 ";mt_xterm -T \"" (string-translate testfullname "()" "  ") "\" " shell "&")))
 				 (message-window  (conc "Directory " rundir " not found")))))
 	       (widgets    (make-hash-table))
 	       (refreshdat (lambda ()
-			     (let* ((curr-mod-time (max (file-modification-time db-path)
-							(if (file-exists? testdat-path)
-							    (file-modification-time testdat-path)
-							    (begin
-							      (set! testdat-path (conc rundir "/testdat.db"))
-							      0))))
+			     (let* ((curr-mod-time (file-modification-time db-path))
+				                   ;;     (max ..... (if (file-exists? testdat-path)
+						   ;;      	      (file-modification-time testdat-path)
+						   ;;      	      (begin
+						   ;;      		(set! testdat-path (conc rundir "/testdat.db"))
+						   ;;      		0))))
 				    (need-update   (or (and (>= curr-mod-time db-mod-time)
 							    (> (current-milliseconds)(+ last-update 250))) ;; every half seconds if db touched
 						       (> (current-milliseconds)(+ last-update 10000))     ;; force update even 10 seconds
 						       request-update))
 				    (newtestdat (if need-update 
@@ -694,11 +694,11 @@
 											      (db:test-data-get-tol      x)
 											      (db:test-data-get-status   x)
 											      (db:test-data-get-units    x)
 											      (db:test-data-get-type     x)
 											      (db:test-data-get-comment  x)))
-										    (tdb:open-run-close-db-by-test-id-local dbstruct run-id test-id #f tdb:read-test-data test-id "%")))
+										    (db:read-test-data dbstruct run-id test-id "%")))
 									      "\n")))
 							       (if (not (equal? currval newval))
 								   (iup:attribute-set! test-data "VALUE" newval ))))) ;; "TITLE" newval)))))
 					  test-data))
 				       ;;(dashboard:run-controls)

Index: db.scm
==================================================================
--- db.scm
+++ db.scm
@@ -2717,10 +2717,24 @@
 		      ", expected: " expected " tol: " tol " units: " units " status: " status " comment: " comment)
 	 (db:delay-if-busy dbdat)
 	 (sqlite3:execute db "INSERT OR REPLACE INTO test_data (test_id,category,variable,value,expected,tol,units,comment,status,type) VALUES (?,?,?,?,?,?,?,?,?,?);"
 			  test-id category variable value expected tol units (if comment comment "") status type)))
      csvlist)))
+
+;; This routine moved from tdb.scm, tdb:read-test-data
+;;
+(define (db:read-test-data dbstruct run-id test-id categorypatt)
+  (let* ((dbdat      (db:get-db dbstruct run-id))
+	 (db         (db:dbdat-get-db dbdat))
+	 (res '()))
+    (db:delay-if-busy dbdat)
+    (sqlite3:for-each-row 
+     (lambda (id test_id category variable value expected tol units comment status type)
+       (set! res (cons (vector id test_id category variable value expected tol units comment status type) res)))
+     db
+     "SELECT id,test_id,category,variable,value,expected,tol,units,comment,status,type FROM test_data WHERE test_id=? AND category LIKE ? ORDER BY category,variable;" test-id categorypatt)
+    (reverse res)))
 
 ;;======================================================================
 ;; Misc. test related queries
 ;;======================================================================
 

Index: tdb.scm
==================================================================
--- tdb.scm
+++ tdb.scm
@@ -40,10 +40,14 @@
 ;;======================================================================
 ;; T E S T   S P E C I F I C   D B 
 ;;======================================================================
 
 ;; Create the sqlite db for the individual test(s)
+;;
+;; Moved these tables into <runid>.db
+;; THIS CODE TO BE REMOVED
+;;
 (define (open-test-db work-area) 
   (debug:print-info 11 "open-test-db " work-area)
   (if (and work-area 
 	   (directory? work-area)
 	   (file-read-access? work-area))
@@ -169,10 +173,12 @@
               val TEXT,
               ackstate INTEGER DEFAULT 0,
               CONSTRAINT metadat_constraint UNIQUE (var));"))))
   (debug:print 11 "db:testdb-initialize END"))
 
+;; This routine moved to db:read-test-data
+;;
 (define (tdb:read-test-data tdb test-id categorypatt)
   (let ((res '()))
     (sqlite3:for-each-row 
      (lambda (id test_id category variable value expected tol units comment status type)
        (set! res (cons (vector id test_id category variable value expected tol units comment status type) res)))
@@ -221,10 +227,12 @@
 
 (define (tdb:step-get-time-as-string vec)
   (seconds->time-string (tdb:step-get-event_time vec)))
 
 ;; get a pretty table to summarize steps
+;; 
+;; NOT USED, WILL BE REMOVED
 ;;
 (define (tdb:get-steps-table steps);; organise the steps for better readability
   (let ((res (make-hash-table)))
     (for-each 
      (lambda (step)

Index: tests/unittests/misc.scm
==================================================================
--- tests/unittests/misc.scm
+++ tests/unittests/misc.scm
@@ -41,11 +41,8 @@
 (test #f "(testname GLOB 'a' AND item_path GLOB 'b') OR (testname LIKE 'a%' AND item_path LIKE '%') OR (testname GLOB '' AND item_path LIKE 'b%')"
       (tests:match->sqlqry "a/b,a%,/b%"))
 (test #f "(testname GLOB 'a' AND item_path GLOB 'b') OR (testname LIKE 'a%' AND item_path LIKE '%') OR (testname LIKE '%' AND item_path LIKE 'b%')"
       (tests:match->sqlqry "a/b,a%,%/b%"))
 
-;;======================================================================
-;; itemwait, itemmatch
-(db:compare-itempaths ref-item-path item-path itemmap)
 
 (exit)
 

Index: tests/unittests/tests.scm
==================================================================
--- tests/unittests/tests.scm
+++ tests/unittests/tests.scm
@@ -0,0 +1,13 @@
+;;======================================================================
+;; itemwait, itemmatch
+
+(db:compare-itempaths ref-item-path item-path itemmap)
+
+;; prereqs-not-met
+
+(rmt:get-prereqs-not-met run-id waitons item-path mode: testmode itemmap: itemmap))
+
+	 (fails           (runs:calc-fails prereqs-not-met))
+	 (prereq-fails    (runs:calc-prereq-fail prereqs-not-met))
+	 (non-completed   (runs:calc-not-completed prereqs-not-met))
+	 (runnables       (runs:calc-runnable prereqs-not-met)))