diff --git a/Makefile b/Makefile
index d097ee92e3518b04a16eaedbd6d89b17192f8018..b3d32178485f822812495c1344d406e34ebb5dab 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,15 @@
 .PHONY: all install check clean
 
 # Tests are run in the order noted here
-tests = state.scm \
-	bv.scm \
-	label.scm \
-	enum.scm \
-	reverse.scm \
-	object.scm \
-	types-round-trip.scm \
-	header.scm \
-	rr.scm \
+tests = state \
+	bv \
+	label \
+	enum \
+	reverse \
+	object \
+	types-round-trip \
+	header \
+	rr \
 
 sources = dns.scm \
 	$(shell find dns -type f -name \*.scm)
@@ -25,8 +25,7 @@ GUILE_VERSION = $(shell guile -c '(display (effective-version))')
 BUILD_ENV = GUILE_AUTO_COMPILE=0
 
 TEST_ENV = GUILE_AUTO_COMPILE=0 \
-	GUILE_LOAD_PATH=$(CURDIR) \
-	GUILE_LOAD_COMPILED_PATH=$(CURDIR)/obj
+	GUILE_LOAD_PATH=$(CURDIR)
 TEST_FLAGS = $(if $(VERBOSE),--verbose) $(if $(COVERAGE),--coverage=coverage.info)
 
 PREFIX = /usr
@@ -50,7 +49,7 @@ install: all
 	done
 
 check: all
-	env $(TEST_ENV) $(GUILE) -e main -s run-tests.scm $(TEST_FLAGS) $(tests)
+	env $(TEST_ENV) $(GUILE) --debug -e main -s run-tests.scm $(TEST_FLAGS) $(tests)
 
 coverage/index.html: coverage.info
 	genhtml --output-directory coverage $<
diff --git a/dns/internal/object.scm b/dns/internal/object.scm
index 6b86d91f6938c0e236988519f5f3843752b41029..6fe8a8c597b12ebfb5408e48e5cb31c35d0db53b 100644
--- a/dns/internal/object.scm
+++ b/dns/internal/object.scm
@@ -1,6 +1,10 @@
 ;;; Commentary:
 ;;; Another definition of define-record-type.
 ;;; Aims to be syntastically compatible with (rnrs records syntastic),
+;;; TODO is this still the case? with the #:type keywords?
+;;;
+;;; TODO compare this with the object system in calp
+;;;
 ;;; But instead declares the object as a GOOPS object,
 ;;; creates a constructor which takes keyword arguments,
 ;;; sets a propper write method,
diff --git a/run-tests.scm b/run-tests.scm
old mode 100644
new mode 100755
index 3e1aa5e54509f04ef12c1a27e43c1b12172a18ab..c8fbb3930eed938becf9cca4ac7773fd39bad5d2
--- a/run-tests.scm
+++ b/run-tests.scm
@@ -104,10 +104,7 @@
 
 (define (run-test-file test-file)
   (format #t "Running test in ~a~%" test-file)
-  (load
-   (format #f "~a/tests/~a"
-           (dirname (current-filename))
-           test-file)))
+)
 
 (define option-spec
   '((verbose (single-char #\v) (value #f))
@@ -123,7 +120,14 @@
   (cond ((option-ref options 'coverage #f)
          => (lambda (file)
               (let ((coverage _ (with-code-coverage
-                                 (lambda () (run-tests)))))
+                                 (lambda ()
+                                   (for-each (lambda (test-file)
+                                               (load
+                                                (format #f "~a/tests/~a.scm"
+                                                        (dirname (current-filename))
+                                                        test-file)))
+                                             tests)
+                                   ))))
                 (call-with-output-file file
                   (lambda (port) (coverage-data->lcov coverage port))))))
         (else (run-tests)))
diff --git a/sample-client.scm b/sample-client.scm
index 8a4e20360671178465b5a146cf06c215d5aac145..6297e8da2367dfcc09a82d8f1e105b8bd9f7f7f1 100755
--- a/sample-client.scm
+++ b/sample-client.scm
@@ -25,6 +25,8 @@
 (define (run sock msg)
   (define resp (make-bytevector 512))
   ;; TODO pack bytevector here
+  ;; (send sock (eval-state (dns-message->bytes msg)
+  ;;                        (lambda () (values (make-bytevector 100) 0))))
   (send sock (call-with-values (lambda () ((dns-message->bytes msg) (make-bytevector 100) 0))
                (lambda (_ bv ptr) bv)))
   (recv! sock resp)
diff --git a/tests/bv.scm b/tests/bv.scm
index c27d3a9e17a4529ea403132b9a2ef98cdf5254d2..43869397a5e20fcc60b8081061c509300f581489 100644
--- a/tests/bv.scm
+++ b/tests/bv.scm
@@ -1,9 +1,10 @@
-(use-modules (srfi srfi-64)
-             (srfi srfi-1)
-             (rnrs bytevectors)
-             (rnrs io ports)
-             (dns internal bv)
-             (dns internal state-monad))
+(define-module (tests bv)
+  :use-module (srfi srfi-64)
+  :use-module (srfi srfi-1)
+  :use-module (rnrs bytevectors)
+  :use-module (rnrs io ports)
+  :use-module (dns internal bv)
+  :use-module (dns internal state-monad))
 
 (test-begin "Bytevectors in state monad")
 
diff --git a/tests/enum.scm b/tests/enum.scm
index 67f56de60480e546c2d8824d6a3bd26d979eea2c..0be13a353677904d0b644883c24f53afa251839f 100644
--- a/tests/enum.scm
+++ b/tests/enum.scm
@@ -1,5 +1,6 @@
-(use-modules (srfi srfi-64)
-             (dns enum))
+(define-module (tests enum)
+  :use-module (srfi srfi-64)
+  :use-module (dns enum))
 
 ;;; These tests claim to be testing rr->int, but is really testing make-mappings.
 ;;; Explicit data could be checked, but a test for that would just be duplicating the data
diff --git a/tests/header.scm b/tests/header.scm
index c86f296bfa3bcb0c90ef4c3b749da3cbd278cf07..3d976229e6cf6829f150510aa6e9d8211a73b8f6 100644
--- a/tests/header.scm
+++ b/tests/header.scm
@@ -1,6 +1,7 @@
-(use-modules (srfi srfi-64)
-             (srfi srfi-88)
-             (dns types header))
+(define-module (tests header)
+  :use-module (srfi srfi-64)
+  :use-module (srfi srfi-88)
+  :use-module (dns types header))
 
 (test-begin "DNS message header")
 
diff --git a/tests/label.scm b/tests/label.scm
index 490b24995f1ccadfb1efbf5046c35d00490908d9..3490f1296cc122a06d102cd5177de94812086e61 100644
--- a/tests/label.scm
+++ b/tests/label.scm
@@ -1,6 +1,7 @@
-(use-modules (srfi srfi-64)
-             (rnrs io ports)
-             (dns label))
+(define-module (tests label)
+  :use-module (srfi srfi-64)
+  :use-module (rnrs io ports)
+  :use-module (dns label))
 
 (define codec (make-transcoder (latin-1-codec)))
 
diff --git a/tests/object.scm b/tests/object.scm
index 8de271a23073f6b640ad02808468520454db56a3..025ff7d4ca776dc0e7cf298e32c015d31dd5b2ea 100644
--- a/tests/object.scm
+++ b/tests/object.scm
@@ -1,6 +1,7 @@
-(use-modules (srfi srfi-64)
-             (srfi srfi-88)
-             (dns internal object))
+(define-module (tests object)
+  :use-module (srfi srfi-64)
+  :use-module (srfi srfi-88)
+  :use-module (dns internal object))
 
 (test-begin "Object system")
 
diff --git a/tests/reverse.scm b/tests/reverse.scm
index 52d4e188174c3637dba5e6a8a55ff4afdd262e32..1a841c4ba5993ab77363ed8766a2ac9f39a0c66d 100644
--- a/tests/reverse.scm
+++ b/tests/reverse.scm
@@ -1,5 +1,6 @@
-(use-modules (srfi srfi-64)
-             (dns reverse))
+(define-module (tests reverse)
+  :use-module (srfi srfi-64)
+  :use-module (dns reverse))
 
 (test-begin "Reverse addresses")
 
diff --git a/tests/rr.scm b/tests/rr.scm
index 3a3391210b35bdfe3ffb4821b0559869d231254b..5a8474fea9976bd271dabfa7aafd28954a21bba0 100644
--- a/tests/rr.scm
+++ b/tests/rr.scm
@@ -1,7 +1,8 @@
-(use-modules (srfi srfi-64)
-             (rnrs bytevectors)
-             (rnrs io ports)
-             (dns types rr-data))
+(define-module (tests rr)
+  :use-module (srfi srfi-64)
+  :use-module (rnrs bytevectors)
+  :use-module (rnrs io ports)
+  :use-module (dns types rr-data))
 
 (test-begin "DNS Resource Records")
 
@@ -82,3 +83,5 @@
 
 
 (test-end)
+
+(format (current-error-port) "Hello, World!" )
diff --git a/tests/state.scm b/tests/state.scm
index 3e27d2901a3e5103154048bff2b2547a0efed32d..b0ee856a347817a284537b94eedf75f71a20b30d 100644
--- a/tests/state.scm
+++ b/tests/state.scm
@@ -1,5 +1,6 @@
-(use-modules (srfi srfi-64)
-             (dns internal state-monad))
+(define-module (tests state)
+  :use-module (srfi srfi-64)
+  :use-module (dns internal state-monad))
 
 (test-begin "State Monad")
 
diff --git a/tests/types-round-trip.scm b/tests/types-round-trip.scm
index b262eb82075bbebb0a58821b55ce06469d4090e8..0c106ccccedcb5d7815f557d9ffa4e25652d0fa5 100644
--- a/tests/types-round-trip.scm
+++ b/tests/types-round-trip.scm
@@ -1,11 +1,12 @@
-(use-modules (srfi srfi-64)
-             (srfi srfi-71)
-             (srfi srfi-88)
-             (rnrs bytevectors)
-             (dns types header)
-             (dns types message)
-             (dns types question)
-             (dns types rr))
+(define-module (tests types-round-trip)
+  :use-module (srfi srfi-64)
+  :use-module (srfi srfi-71)
+  :use-module (srfi srfi-88)
+  :use-module (rnrs bytevectors)
+  :use-module (dns types header)
+  :use-module (dns types message)
+  :use-module (dns types question)
+  :use-module (dns types rr))
 
 (test-begin "Encode-decode round trip for all types")