diff --git a/ansi-tests/rt/rt.lsp b/ansi-tests/rt/rt.lsp
index b2d3038f24504e6873a12e6d5adaa993a040f58f..195c0b9cf4a7c9244724771c278ac7adafe1261c 100644
--- a/ansi-tests/rt/rt.lsp
+++ b/ansi-tests/rt/rt.lsp
@@ -105,16 +105,15 @@
 
 (defun equalp-with-case (x y)
   "Like EQUALP, but doesn't do case conversion of characters.
-   Currently doesn't work on arrays of dimension > 1."
+   Currently doesn't work on arrays of dimension > 2."
   (cond
    ((consp x)
     (and (consp y)
 	 (equalp-with-case (car x) (car y))
 	 (equalp-with-case (cdr x) (cdr y))))
    ((and (typep x 'array)
-	 (typep y 'array)
-	 (not (eql (array-rank x) (array-rank y))))
-    nil)
+	 (= (array-rank x) 0))
+    (equalp-with-case (aref x) (aref y)))
    ((typep x 'vector)
     (and (typep y 'vector)
 	 (let ((x-len (length x))
@@ -125,8 +124,19 @@
 		 for e2 across y
 		 always (equalp-with-case e1 e2))))))
    ((and (typep x 'array)
-	 (= (array-rank x) 0))
-    (equalp-with-case (aref x) (aref y)))
+	 (typep y 'array)
+	 (not (equal (array-dimensions x)
+		     (array-dimensions y))))
+    nil)
+   ;; I should use ROW-MAJOR-AREF to do this, but that's broken
+   ;; in GCL right now.
+   ((and (typep x 'array)
+	 (= (array-rank x) 2))
+    (let ((dim (array-dimensions x)))
+      (loop for i from 0 below (first dim)
+	    always (loop for j from 0 below (second dim)
+			 always (equalp-with-case (aref x i j)
+						  (aref y i j))))))
    (t (eql x y))))
 
 (defun do-entry (entry &optional