diff --git a/ansi-tests/string-comparisons.lsp b/ansi-tests/string-comparisons.lsp
index e7df8f1f65e245ec90718bcd4c124370febb6f98..2db6e779dfcd066cd9044978b89cc30476ec9f88 100644
--- a/ansi-tests/string-comparisons.lsp
+++ b/ansi-tests/string-comparisons.lsp
@@ -77,6 +77,40 @@
 	collect (not (string= "ab" "xyab" :start2 i :end2 nil)))
   (t t nil t))
 
+;;; Keyword argument processing
+
+(deftest string-comparison.allow-other-keys.1
+  (loop for fn in '(string= string<= string>= string/= string< string>
+		    string-equal string-not-greaterp string-not-lessp
+		    string-not-equal string-lessp string-greaterp)
+	for expected in '(nil 0 nil 0 0 nil nil 0 nil 0 0 nil)
+	for result = (funcall fn "a" "b" :allow-other-keys t :foo nil)
+	unless (eql result expected)
+	collect (list fn expected result))
+  nil)
+
+(deftest string-comparison.allow-other-keys.2
+  (loop for fn in '(string= string<= string>= string/= string< string>
+		    string-equal string-not-greaterp string-not-lessp
+		    string-not-equal string-lessp string-greaterp)
+	for expected in '(nil nil 0 0 nil 0 nil nil 0 0 nil 0)
+	for result = (funcall fn "c" "b" :allow-other-keys t
+			      :allow-other-keys nil :foo 1)
+	unless (eql result expected)
+	collect (list fn expected result))
+  nil)
+
+(deftest string-comparison.allow-other-keys.3
+  (loop for fn in '(string= string<= string>= string/= string< string>
+		    string-equal string-not-greaterp string-not-lessp
+		    string-not-equal string-lessp string-greaterp)
+	for expected in '(nil 0 nil 0 0 nil nil 0 nil 0 0 nil)
+	for result = (funcall fn "a" "b" :allow-other-keys nil)
+	unless (eql result expected)
+	collect (list fn expected result))
+  nil)
+
+
 ;;; Order of evaluation
 
 (deftest string=.order.1
@@ -660,3 +694,322 @@
      (string-not-lessp s1 "a")
      (string-not-lessp "a" s1)))
   0 0 0 0 0 nil 0)
+
+;;; Error cases
+
+(deftest string=.error.1
+  (signals-error (string=) program-error)
+  t)
+
+(deftest string=.error.2
+  (signals-error (string= "") program-error)
+  t)
+
+(deftest string=.error.3
+  (signals-error (string= "a" "b" nil nil) program-error)
+  t)
+
+(deftest string=.error.4
+  (signals-error (string= "a" "b" :start1) program-error)
+  t)
+
+(deftest string=.error.5
+  (signals-error (string= "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string=.error.6
+  (signals-error (string= "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+(deftest string/=.error.1
+  (signals-error (string/=) program-error)
+  t)
+
+(deftest string/=.error.2
+  (signals-error (string/= "") program-error)
+  t)
+
+(deftest string/=.error.3
+  (signals-error (string/= "a" "b" nil nil) program-error)
+  t)
+
+(deftest string/=.error.4
+  (signals-error (string/= "a" "b" :start1) program-error)
+  t)
+
+(deftest string/=.error.5
+  (signals-error (string/= "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string/=.error.6
+  (signals-error (string/= "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+
+(deftest string<.error.1
+  (signals-error (string<) program-error)
+  t)
+
+(deftest string<.error.2
+  (signals-error (string< "") program-error)
+  t)
+
+(deftest string<.error.3
+  (signals-error (string< "a" "b" nil nil) program-error)
+  t)
+
+(deftest string<.error.4
+  (signals-error (string< "a" "b" :start1) program-error)
+  t)
+
+(deftest string<.error.5
+  (signals-error (string< "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string<.error.6
+  (signals-error (string< "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+
+(deftest string<=.error.1
+  (signals-error (string<=) program-error)
+  t)
+
+(deftest string<=.error.2
+  (signals-error (string<= "") program-error)
+  t)
+
+(deftest string<=.error.3
+  (signals-error (string<= "a" "b" nil nil) program-error)
+  t)
+
+(deftest string<=.error.4
+  (signals-error (string<= "a" "b" :start1) program-error)
+  t)
+
+(deftest string<=.error.5
+  (signals-error (string<= "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string<=.error.6
+  (signals-error (string<= "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+
+(deftest string>.error.1
+  (signals-error (string>) program-error)
+  t)
+
+(deftest string>.error.2
+  (signals-error (string> "") program-error)
+  t)
+
+(deftest string>.error.3
+  (signals-error (string> "a" "b" nil nil) program-error)
+  t)
+
+(deftest string>.error.4
+  (signals-error (string> "a" "b" :start1) program-error)
+  t)
+
+(deftest string>.error.5
+  (signals-error (string> "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string>.error.6
+  (signals-error (string> "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+
+(deftest string>=.error.1
+  (signals-error (string>=) program-error)
+  t)
+
+(deftest string>=.error.2
+  (signals-error (string>= "") program-error)
+  t)
+
+(deftest string>=.error.3
+  (signals-error (string>= "a" "b" nil nil) program-error)
+  t)
+
+(deftest string>=.error.4
+  (signals-error (string>= "a" "b" :start1) program-error)
+  t)
+
+(deftest string>=.error.5
+  (signals-error (string>= "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string>=.error.6
+  (signals-error (string>= "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+
+(deftest string-equal.error.1
+  (signals-error (string-equal) program-error)
+  t)
+
+(deftest string-equal.error.2
+  (signals-error (string-equal "") program-error)
+  t)
+
+(deftest string-equal.error.3
+  (signals-error (string-equal "a" "b" nil nil) program-error)
+  t)
+
+(deftest string-equal.error.4
+  (signals-error (string-equal "a" "b" :start1) program-error)
+  t)
+
+(deftest string-equal.error.5
+  (signals-error (string-equal "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string-equal.error.6
+  (signals-error (string-equal "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+(deftest string-not-equal.error.1
+  (signals-error (string-not-equal) program-error)
+  t)
+
+(deftest string-not-equal.error.2
+  (signals-error (string-not-equal "") program-error)
+  t)
+
+(deftest string-not-equal.error.3
+  (signals-error (string-not-equal "a" "b" nil nil) program-error)
+  t)
+
+(deftest string-not-equal.error.4
+  (signals-error (string-not-equal "a" "b" :start1) program-error)
+  t)
+
+(deftest string-not-equal.error.5
+  (signals-error (string-not-equal "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string-not-equal.error.6
+  (signals-error (string-not-equal "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+(deftest string-lessp.error.1
+  (signals-error (string-lessp) program-error)
+  t)
+
+(deftest string-lessp.error.2
+  (signals-error (string-lessp "") program-error)
+  t)
+
+(deftest string-lessp.error.3
+  (signals-error (string-lessp "a" "b" nil nil) program-error)
+  t)
+
+(deftest string-lessp.error.4
+  (signals-error (string-lessp "a" "b" :start1) program-error)
+  t)
+
+(deftest string-lessp.error.5
+  (signals-error (string-lessp "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string-lessp.error.6
+  (signals-error (string-lessp "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+(deftest string-greaterp.error.1
+  (signals-error (string-greaterp) program-error)
+  t)
+
+(deftest string-greaterp.error.2
+  (signals-error (string-greaterp "") program-error)
+  t)
+
+(deftest string-greaterp.error.3
+  (signals-error (string-greaterp "a" "b" nil nil) program-error)
+  t)
+
+(deftest string-greaterp.error.4
+  (signals-error (string-greaterp "a" "b" :start1) program-error)
+  t)
+
+(deftest string-greaterp.error.5
+  (signals-error (string-greaterp "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string-greaterp.error.6
+  (signals-error (string-greaterp "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+(deftest string-not-lessp.error.1
+  (signals-error (string-not-lessp) program-error)
+  t)
+
+(deftest string-not-lessp.error.2
+  (signals-error (string-not-lessp "") program-error)
+  t)
+
+(deftest string-not-lessp.error.3
+  (signals-error (string-not-lessp "a" "b" nil nil) program-error)
+  t)
+
+(deftest string-not-lessp.error.4
+  (signals-error (string-not-lessp "a" "b" :start1) program-error)
+  t)
+
+(deftest string-not-lessp.error.5
+  (signals-error (string-not-lessp "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string-not-lessp.error.6
+  (signals-error (string-not-lessp "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)
+
+(deftest string-not-greaterp.error.1
+  (signals-error (string-not-greaterp) program-error)
+  t)
+
+(deftest string-not-greaterp.error.2
+  (signals-error (string-not-greaterp "") program-error)
+  t)
+
+(deftest string-not-greaterp.error.3
+  (signals-error (string-not-greaterp "a" "b" nil nil) program-error)
+  t)
+
+(deftest string-not-greaterp.error.4
+  (signals-error (string-not-greaterp "a" "b" :start1) program-error)
+  t)
+
+(deftest string-not-greaterp.error.5
+  (signals-error (string-not-greaterp "a" "b" 1 nil) program-error)
+  t)
+
+(deftest string-not-greaterp.error.6
+  (signals-error (string-not-greaterp "a" "b" :allow-other-keys nil
+			  :allow-other-keys t :foo 'bar)
+		 program-error)
+  t)