diff --git a/library.scm b/library.scm
index 31c8b37..db4b553 100644
--- a/library.scm
+++ b/library.scm
@@ -2696,7 +2696,8 @@ EOF
 		 [h (and srst (##sys#slot srst (char->integer c)) ) ] )
 	    (if h
 	        ;then handled by read-table entry
-		(h c port)
+		(##sys#call-with-values (lambda () (h c port))
+					(lambda xs (if (null? xs) (readrec) (car xs))))
 		;otherwise chicken extended r5rs syntax
 		(case c
 		  ((#\')
@@ -2720,7 +2721,8 @@ EOF
 				(spdrst (##sys#slot crt 3)) 
 				(h (and spdrst (##sys#slot spdrst (char->integer dchar)) ) ) )
 	                         ;#<num> handled by parameterized # read-table entry?
-			   (cond (h (h dchar port n))
+			   (cond (h (##sys#call-with-values (lambda () (h dchar port n))
+							    (lambda xs (if (null? xs) (readrec) (car xs)))))
 			         ;#<num>?
 				 ((or (eq? dchar #\)) (char-whitespace? dchar)) (##sys#sharp-number-hook port n))
 				 (else (##sys#read-error port "invalid parameterized read syntax" dchar n) ) ) )
@@ -2728,7 +2730,8 @@ EOF
 				(h (and sdrst (##sys#slot sdrst (char->integer dchar)) ) ) )
 			   (if h
 	                       ;then handled by # read-table entry
-			       (h dchar port)
+			       (##sys#call-with-values (lambda () (h dchar port))
+						       (lambda xs (if (null? xs) (readrec) (car xs))))
                 	       ;otherwise chicken extended r5rs syntax
 			       (case (char-downcase dchar)
 				 ((#\x) (##sys#read-char-0 port) (r-number-with-exactness 16))
@@ -2795,7 +2798,9 @@ EOF
 							  (##sys#read-error
 							   port
 							   "invalid `#!' token" tok) ) ) ] ) ) ) ) ) )
-				 (else (##sys#user-read-hook dchar port)) ) ) ) ) ) )
+				 (else
+				  (##sys#call-with-values (lambda () (##sys#user-read-hook dchar port))
+							  (lambda xs (if (null? xs) (readrec) (car xs)))) ) ) ) ) ) ) )
 		  ((#\() (r-list #\( #\)))
 		  ((#\)) (##sys#read-char-0 port) (container c))
 		  ((#\") (##sys#read-char-0 port) (r-string #\"))
