Index: docs/Validator.txt
===================================================================
--- docs/Validator.txt	(revision 2695)
+++ docs/Validator.txt	(working copy)
@@ -192,11 +192,11 @@
 
 Like any other validator, a ``Registration`` instance will have the
 ``to_python`` and ``from_python`` methods.  The input should be a
-dictionary, with keys like ``"first_name"``, ``"password"``, etc.  The
-validators you give as attributes will be applied to each of the
-values of the dictionary.  *All* the values will be validated, so if
-there are multiple invalid fields you will get information about all
-of them.
+dictionary (or a Paste MultiDict), with keys like ``"first_name"``,
+``"password"``, etc.  The validators you give as attributes will be
+applied to each of the values of the dictionary.  *All* the values
+will be validated, so if there are multiple invalid fields you will
+get information about all of them.
 
 Most validators (anything that subclasses
 ``formencode.FancyValidator``) will take a certain standard set of
Index: docs/news.txt
===================================================================
--- docs/news.txt	(revision 2695)
+++ docs/news.txt	(working copy)
@@ -6,6 +6,11 @@
 svn trunk
 ---------
 
+* Added support for Paste's MultiDict dictionary as input to
+  Schema.to_python, by converting it to a normal dict via MultiDict.mixed.
+  Previously MultiDicts wouldn't work with CompoundValidators (like
+  ForEach)
+
 * Added encoding parameter to htmlfill, which will handle cases when mixed
   str and unicode objects are used (turning all str objects into unicode)
 
Index: formencode/api.py
===================================================================
--- formencode/api.py	(revision 2695)
+++ formencode/api.py	(working copy)
@@ -352,6 +352,9 @@
         try:
             if self.strip and isinstance(value, (str, unicode)):
                 value = value.strip()
+            elif hasattr(value, 'mixed'):
+                # Support Paste's MultiDict
+                value = value.mixed()
             if self.is_empty(value):
                 if self.not_empty:
                     raise Invalid(self.message('empty', state), value, state)
