diff --git a/pcl/boot.lisp b/pcl/boot.lisp
index e514a08490a0ee06f7555f2272b9a74454b392de..6d4b5307ec8792efd323495f9f02785996ff1fea 100644
--- a/pcl/boot.lisp
+++ b/pcl/boot.lisp
@@ -25,7 +25,7 @@
 ;;; *************************************************************************
 
 (file-comment
- "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/boot.lisp,v 1.57 2003/05/18 18:09:31 gerd Exp $")
+ "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/boot.lisp,v 1.58 2003/05/19 10:40:28 gerd Exp $")
 
 (in-package :pcl)
 
@@ -234,8 +234,7 @@ work during bootstrapping.
 			format-control format-arguments)
 		function-specifier))
 	     (duplicate-option (name)
-	       (loose "The option ~s appears more than once"
-		      name))
+	       (loose "The option ~s appears more than once" name))
 	     (check-declaration (declaration-specifiers)
 	       (loop for specifier in declaration-specifiers
 		     when (and (consp specifier)
@@ -245,6 +244,17 @@ work during bootstrapping.
 				       :test #'eq)) do
 		     (loose "Declaration specifier ~s is not allowed"
 			    specifier)))
+	     (check-argument-precedence-order (precedence)
+	       (let ((required (parse-lambda-list lambda-list)))
+		 (when (set-difference required precedence)
+		   (loose "Argument precedence order must list all ~
+                           required parameters and only those: ~s"
+			  precedence))
+		 (when (/= (length (remove-duplicates precedence))
+			   (length precedence))
+		   (loose "Duplicate parameter names in argument ~
+                           precedence order: ~s"
+			  precedence))))
 	     (initarg (key &optional (new nil new-supplied-p))
 	       (if new-supplied-p
 		   (setf (getf initargs key) new)
@@ -257,9 +267,10 @@ work during bootstrapping.
       (dolist (option options)
 	(case (car option)
 	  (:argument-precedence-order
-	   (if (initarg :argument-precedence-order)
-	       (duplicate-option :argument-precedence-order)
-	       (initarg :argument-precedence-order `',(cdr option))))
+	   (when (initarg :argument-precedence-order)
+	     (duplicate-option :argument-precedence-order))
+	   (check-argument-precedence-order (cdr option))
+	   (initarg :argument-precedence-order `',(cdr option)))
 	  (declare
 	   (check-declaration (cdr option))
 	   (initarg :declarations