diff --git a/general-info/release-19a.txt b/general-info/release-19a.txt
index 9ae69c38d9a2275aff519c9107b6d5aa1cfc598c..500925ddafae140432f4b1f6ad5d980f25db4572 100644
--- a/general-info/release-19a.txt
+++ b/general-info/release-19a.txt
@@ -112,6 +112,7 @@ New in this release:
      - ALLOCATE-INSTANCE working with structures defined with DEFSTRUCT.
      - With (DEFGENERIC FOO (&REST X &KEY)) (DEFMETHOD FOO (&REST X) X),
        (FOO 1) now signals an error.
+     - Methods with &OPTIONAL arguments detecting too many args.
 
   * Improvements to Hemlock, the Emacs-like editor:
 
diff --git a/pcl/boot.lisp b/pcl/boot.lisp
index b544af35570544b38ea9e02e95790e1ee41a4441..f1135c8a2df373235c90a49aac1a0e5211c86081 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.55 2003/05/09 17:09:52 gerd Exp $")
+ "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/boot.lisp,v 1.56 2003/05/18 12:23:21 gerd Exp $")
 
 (in-package :pcl)
 
@@ -1009,12 +1009,18 @@ work during bootstrapping.
       (let ((bindings (mapcan #'process-var lambda-list)))
 	`(let* ((,args-tail ,args)
 		,@bindings
+		(.dummy1. ,@(when (eq state 'optional)
+			      `((unless (null ,args-tail)
+				  (too-many-args)))))
 		(.dummy. ,@(when (and key-seen (zerop nkeys))
 			     `((get-key-arg1 :allow-other-keys
 					     ,args-tail t)))))
-	   (declare (ignorable ,args-tail .dummy.))
+	   (declare (ignorable ,args-tail .dummy. .dummy1.))
 	   ,@body)))))
 
+(defun too-many-args ()
+  (simple-program-error "Too many arguments."))
+
 (defun odd-number-of-keyword-arguments ()
   (simple-program-error "Odd number of keyword arguments."))