diff -u bbdb-2.33/lisp/bbdb-com.el.orig bbdb-2.33/lisp/bbdb-com.el
--- bbdb-2.33/lisp/bbdb-com.el.orig	Tue May 22 16:00:22 2001
+++ bbdb-2.33/lisp/bbdb-com.el	Sat May 11 12:10:09 2002
@@ -1643,7 +1643,7 @@
           ;; to be enclosed in quotes.  Double-quotes and backslashes have
           ;; already been escaped.  This quotes a few extra characters as
           ;; well (!,%, and $) just for common sense.
-          ((string-match "[][\000-\037\177()<>@,;:.!$%]" name)
+	  ((string-match "[][\000-\037\177<>@,;.!$%]" name)
            (format "\"%s\" <%s>" name net))
           (t
            (format "%s <%s>" name net)))))
diff -u bbdb-2.33/lisp/bbdb-hooks.el.orig bbdb-2.33/lisp/bbdb-hooks.el
--- bbdb-2.33/lisp/bbdb-hooks.el.orig	Sat May 19 16:00:21 2001
+++ bbdb-2.33/lisp/bbdb-hooks.el	Sat May 11 12:10:09 2002
@@ -35,6 +35,8 @@
 ;; $Id: bbdb-2.33-20020511.patch,v 1.1 2002/10/22 05:46:19 kose Exp $
 ;;
 
+(eval-when-compile (require 'cl))
+
 (require 'bbdb)
 
 (defvar rmail-buffer)
@@ -369,13 +371,23 @@
          (marker (bbdb-header-start))
          field pairs fieldval  ; do all bindings here for speed
          regexp string notes-field-name notes
-         replace-p)
+         replace-p extract-field-value-funtion)
     (set-buffer (marker-buffer marker))
     (save-restriction
-      (widen)
-      (goto-char marker)
-      (if (and (setq fieldval (bbdb-extract-field-value "From"))
-               (string-match (bbdb-user-mail-names) fieldval))
+      (let ((function-list bbdb-extract-field-value-function-list)
+	    function)
+	(or (progn
+	      (while (and (not extract-field-value-funtion)
+			  (setq function (car function-list)))
+		(setq extract-field-value-funtion (funcall function)
+		      function-list (cdr function-list)))
+	      extract-field-value-funtion)
+	    (progn
+	      (widen)
+	      (goto-char marker)
+	      (setq extract-field-value-funtion 'bbdb-extract-field-value))))
+      (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
+	       (string-match (bbdb-user-mail-names) fieldval))
           ;; Don't do anything if this message is from us.  Note that we have
           ;; to look at the message instead of the record, because the record
           ;; will be of the recipient of the message if it is from us.
@@ -385,7 +397,7 @@
           (goto-char marker)
           (setq field (car (car ignore-all))
                 regexp (cdr (car ignore-all))
-                fieldval (bbdb-extract-field-value field))
+                fieldval (funcall extract-field-value-funtion field))
           (if (and fieldval
                    (string-match regexp fieldval))
               (setq ignore t)
@@ -398,7 +410,8 @@
                 pairs (cdr (car rest))  ; (REGEXP . STRING) or
                                         ; (REGEXP FIELD-NAME STRING) or
                                         ; (REGEXP FIELD-NAME STRING REPLACE-P)
-                fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
+                fieldval (funcall extract-field-value-funtion field))
+                                        ; e.g., Subject line
           (when fieldval
             (while pairs
               (setq regexp (car (car pairs))
diff -u bbdb-2.33/lisp/bbdb.el.orig bbdb-2.33/lisp/bbdb.el
--- bbdb-2.33/lisp/bbdb.el.orig	Tue May 22 16:00:23 2001
+++ bbdb-2.33/lisp/bbdb.el	Sat May 11 12:11:00 2002
@@ -711,6 +711,8 @@
 (defvar bbdb-modified-p nil)
 (defvar bbdb-elided-display nil)
 
+(defvar bbdb-extract-field-value-function-list nil)
+
 (defvar bbdb-debug t)
 (defmacro bbdb-debug (&rest body)
   ;; ## comment out the next line to turn off debugging.

