diff --git a/Doc/lib/libre.tex b/Doc/lib/libre.tex
index 704db30..0d9b702 100644
--- a/Doc/lib/libre.tex
+++ b/Doc/lib/libre.tex
@@ -424,8 +424,10 @@
 \subsection{Module Contents}
 \nodename{Contents of Module re}
 
-The module defines the following functions and constants, and an exception:
-
+The module defines several functions, constants, and an exception. Some of the
+functions are simplified versions of the full featured methods for compiled
+regular expressions.  Most non-trivial applications always use the compiled
+form.
 
 \begin{funcdesc}{compile}{pattern\optional{, flags}}
   Compile a regular expression pattern into a regular expression
@@ -552,21 +554,23 @@
   the old \function{regsub.split()} and \function{regsub.splitx()}.
 \end{funcdesc}
 
-\begin{funcdesc}{findall}{pattern, string}
+\begin{funcdesc}{findall}{pattern, string\optional{, flags}}
   Return a list of all non-overlapping matches of \var{pattern} in
   \var{string}.  If one or more groups are present in the pattern,
   return a list of groups; this will be a list of tuples if the
   pattern has more than one group.  Empty matches are included in the
   result unless they touch the beginning of another match.
   \versionadded{1.5.2}
+  \versionchanged[Added the optional flags argument]{2.4}
 \end{funcdesc}
 
-\begin{funcdesc}{finditer}{pattern, string}
+\begin{funcdesc}{finditer}{pattern, string\optional{, flags}}
   Return an iterator over all non-overlapping matches for the RE
   \var{pattern} in \var{string}.  For each match, the iterator returns
   a match object.  Empty matches are included in the result unless they
   touch the beginning of another match.
   \versionadded{2.2}
+  \versionchanged[Added the optional flags argument]{2.4}
 \end{funcdesc}
 
 \begin{funcdesc}{sub}{pattern, repl, string\optional{, count}}
@@ -695,11 +699,13 @@
 Identical to the \function{split()} function, using the compiled pattern.
 \end{methoddesc}
 
-\begin{methoddesc}[RegexObject]{findall}{string}
+\begin{methoddesc}[RegexObject]{findall}{string\optional{, pos\optional{,
+                                        endpos}}}
 Identical to the \function{findall()} function, using the compiled pattern.
 \end{methoddesc}
 
-\begin{methoddesc}[RegexObject]{finditer}{string}
+\begin{methoddesc}[RegexObject]{finditer}{string\optional{, pos\optional{,
+                                        endpos}}}
 Identical to the \function{finditer()} function, using the compiled pattern.
 \end{methoddesc}
 
diff --git a/Lib/sre.py b/Lib/sre.py
index 8bf0fad..7969723 100644
--- a/Lib/sre.py
+++ b/Lib/sre.py
@@ -156,7 +156,7 @@
     returning a list containing the resulting substrings."""
     return _compile(pattern, 0).split(string, maxsplit)
 
-def findall(pattern, string):
+def findall(pattern, string, flags=0):
     """Return a list of all non-overlapping matches in the string.
 
     If one or more groups are present in the pattern, return a
@@ -164,16 +164,16 @@
     has more than one group.
 
     Empty matches are included in the result."""
-    return _compile(pattern, 0).findall(string)
+    return _compile(pattern, flags).findall(string)
 
 if sys.hexversion >= 0x02020000:
     __all__.append("finditer")
-    def finditer(pattern, string):
+    def finditer(pattern, string, flags=0):
         """Return an iterator over all non-overlapping matches in the
         string.  For each match, the iterator returns a match object.
 
         Empty matches are included in the result."""
-        return _compile(pattern, 0).finditer(string)
+        return _compile(pattern, flags).finditer(string)
 
 def compile(pattern, flags=0):
     "Compile a regular expression pattern, returning a pattern object."
diff --git a/Misc/NEWS b/Misc/NEWS
index d3f4fe4..edf5a0c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -32,6 +32,11 @@
 Library
 -------
 
+- re's findall() and finditer() functions now take an optional flags argument
+  just like the compile(), search(), and match() functions.  Also, documented
+  the previously existing start and stop parameters for the findall() and
+  finditer() methods of regular expression objects.
+
 - rfc822 Messages now support iterating over the headers.
 
 - The (undocumented) tarfile.Tarfile.membernames has been removed;
