diff --git a/Demo/pdist/cmptree.py b/Demo/pdist/cmptree.py
index f6c611f..fa06f5f 100755
--- a/Demo/pdist/cmptree.py
+++ b/Demo/pdist/cmptree.py
@@ -6,6 +6,11 @@
 import time
 import os
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def main():
     pwd = os.getcwd()
     s = raw_input("chdir [%s] " % pwd)
diff --git a/Demo/pdist/mac.py b/Demo/pdist/mac.py
index 107113c..61cff09 100755
--- a/Demo/pdist/mac.py
+++ b/Demo/pdist/mac.py
@@ -1,14 +1,18 @@
 import sys
-import string
 import rcvs
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def main():
     while 1:
         try:
             line = raw_input('$ ')
         except EOFError:
             break
-        words = string.split(line)
+        words = line.split()
         if not words:
             continue
         if words[0] != 'rcvs':
@@ -16,4 +20,5 @@
         sys.argv = words
         rcvs.main()
 
-main()
+if __name__ == '__main__':
+    main()
diff --git a/Demo/pdist/rcvs.py b/Demo/pdist/rcvs.py
index 8b8bae6..ab1fd87 100755
--- a/Demo/pdist/rcvs.py
+++ b/Demo/pdist/rcvs.py
@@ -35,7 +35,6 @@
 from cvslib import CVS, File
 import md5
 import os
-import string
 import sys
 from cmdfw import CommandFrameWork
 
@@ -269,13 +268,13 @@
 
     def mailinfo(self, files, message = ""):
         towhom = "sjoerd@cwi.nl, jack@cwi.nl" # XXX
-        mailtext = MAILFORM % (towhom, string.join(files),
-                                string.join(files), message)
+        mailtext = MAILFORM % (towhom, ' '.join(files),
+                                ' '.join(files), message)
         print '-'*70
         print mailtext
         print '-'*70
         ok = raw_input("OK to mail to %s? " % towhom)
-        if string.lower(string.strip(ok)) in ('y', 'ye', 'yes'):
+        if ok.lower().strip() in ('y', 'ye', 'yes'):
             p = os.popen(SENDMAIL, "w")
             p.write(mailtext)
             sts = p.close()
diff --git a/Demo/pdist/sumtree.py b/Demo/pdist/sumtree.py
index 9291a56..68224df 100755
--- a/Demo/pdist/sumtree.py
+++ b/Demo/pdist/sumtree.py
@@ -1,4 +1,5 @@
 import time
+import sys
 import FSProxy
 
 def main():
@@ -9,7 +10,9 @@
     proxy._close()
     t2 = time.time()
     print t2-t1, "seconds"
-    raw_input("[Return to exit] ")
+    sys.stdout.write("[Return to exit] ")
+    sys.stdout.flush()
+    sys.stdin.readline()
 
 def sumtree(proxy):
     print "PWD =", proxy.pwd()
diff --git a/Demo/scripts/unbirthday.py b/Demo/scripts/unbirthday.py
index 2d0b8e5..94ad448 100755
--- a/Demo/scripts/unbirthday.py
+++ b/Demo/scripts/unbirthday.py
@@ -9,6 +9,11 @@
 import time
 import calendar
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def main():
     # Note that the range checks below also check for bad types,
     # e.g. 3.14 or ().  However syntactically invalid replies
diff --git a/Demo/sockets/ftp.py b/Demo/sockets/ftp.py
index 6e9282a..eed45be 100755
--- a/Demo/sockets/ftp.py
+++ b/Demo/sockets/ftp.py
@@ -130,6 +130,11 @@
         sys.stdout.write(data)
     print '(end of data connection)'
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 # Get a command from the user.
 #
 def getcommand():
@@ -143,4 +148,5 @@
 
 # Call the main program.
 #
-main()
+if __name__ == '__main__':
+    main()
diff --git a/Demo/sockets/gopher.py b/Demo/sockets/gopher.py
index 34bcdf0..2488c81 100755
--- a/Demo/sockets/gopher.py
+++ b/Demo/sockets/gopher.py
@@ -4,7 +4,6 @@
 #
 # Usage: gopher [ [selector] host [port] ]
 
-import string
 import sys
 import os
 import socket
@@ -42,7 +41,7 @@
     if not port:
         port = DEF_PORT
     elif type(port) == type(''):
-        port = string.atoi(port)
+        port = int(port)
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     s.connect((host, port))
     return s
@@ -73,7 +72,7 @@
             print '(Empty line from server)'
             continue
         typechar = line[0]
-        parts = string.splitfields(line[1:], TAB)
+        parts = line[1:].split(TAB)
         if len(parts) < 4:
             print '(Bad line from server: %r)' % (line,)
             continue
@@ -160,7 +159,7 @@
         for i in range(len(list)):
             item = list[i]
             typechar, description = item[0], item[1]
-            print string.rjust(repr(i+1), 3) + ':', description,
+            print repr(i+1).rjust(3) + ':', description,
             if typename.has_key(typechar):
                 print typename[typechar]
             else:
@@ -175,8 +174,8 @@
             if not str:
                 return
             try:
-                choice = string.atoi(str)
-            except string.atoi_error:
+                choice = int(str)
+            except ValueError:
                 print 'Choice must be a number; try again:'
                 continue
             if not 0 < choice <= len(list):
@@ -218,6 +217,11 @@
         print 'IOError:', msg
     x.close()
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 # Browse a search index
 def browse_search(selector, host, port):
     while 1:
@@ -230,7 +234,7 @@
         except EOFError:
             print
             break
-        query = string.strip(query)
+        query = query.strip()
         if not query:
             break
         if '\t' in query:
@@ -300,11 +304,11 @@
     except EOFError:
         print
         return None
-    savefile = string.strip(savefile)
+    savefile = savefile.strip()
     if not savefile:
         return None
     if savefile[0] == '|':
-        cmd = string.strip(savefile[1:])
+        cmd = savefile[1:].strip()
         try:
             p = os.popen(cmd, 'w')
         except IOError, msg:
@@ -331,10 +335,10 @@
         browser(sys.argv[1], sys.argv[2], sys.argv[3])
     elif sys.argv[2:]:
         try:
-            port = string.atoi(sys.argv[2])
+            port = int(sys.argv[2])
             selector = ''
             host = sys.argv[1]
-        except string.atoi_error:
+        except ValueError:
             selector = sys.argv[1]
             host = sys.argv[2]
             port = ''
diff --git a/Demo/tkinter/guido/wish.py b/Demo/tkinter/guido/wish.py
index 0a61ad8..35e012c 100755
--- a/Demo/tkinter/guido/wish.py
+++ b/Demo/tkinter/guido/wish.py
@@ -2,6 +2,7 @@
 
 import _tkinter
 import os
+import sys
 
 tk = _tkinter.create(os.environ['DISPLAY'], 'wish', 'Tk', 1)
 tk.call('update')
@@ -12,7 +13,9 @@
     if cmd: prompt = ''
     else: prompt = '% '
     try:
-        line = raw_input(prompt)
+        sys.stdout.write(prompt)
+        sys.stdout.flush()
+        line = sys.stdin.readline()
     except EOFError:
         break
     cmd = cmd + (line + '\n')
diff --git a/Doc/lib/libcmd.tex b/Doc/lib/libcmd.tex
index 661eb9e..9fe8123 100644
--- a/Doc/lib/libcmd.tex
+++ b/Doc/lib/libcmd.tex
@@ -186,13 +186,3 @@
 headers.  If empty, no ruler line is drawn.  It defaults to
 \character{=}.
 \end{memberdesc}
-
-\begin{memberdesc}{use_rawinput}
-A flag, defaulting to true.  If true, \method{cmdloop()} uses
-\function{raw_input()} to display a prompt and read the next command;
-if false, \method{sys.stdout.write()} and
-\method{sys.stdin.readline()} are used. (This means that by
-importing \refmodule{readline}, on systems that support it, the
-interpreter will automatically support \program{Emacs}-like line editing 
-and command-history keystrokes.)
-\end{memberdesc}
diff --git a/Doc/lib/libcode.tex b/Doc/lib/libcode.tex
index dc4c717..628a1eb 100644
--- a/Doc/lib/libcode.tex
+++ b/Doc/lib/libcode.tex
@@ -167,7 +167,7 @@
 \begin{methoddesc}{raw_input}{\optional{prompt}}
 Write a prompt and read a line.  The returned line does not include
 the trailing newline.  When the user enters the \EOF{} key sequence,
-\exception{EOFError} is raised.  The base implementation uses the
-built-in function \function{raw_input()}; a subclass may replace this
+\exception{EOFError} is raised.  The base implementation reads from
+\code{sys.stdin}; a subclass may replace this
 with a different implementation.
 \end{methoddesc}
diff --git a/Doc/lib/libcrypt.tex b/Doc/lib/libcrypt.tex
index b6a1463..55e7163 100644
--- a/Doc/lib/libcrypt.tex
+++ b/Doc/lib/libcrypt.tex
@@ -41,6 +41,12 @@
 \begin{verbatim}
 import crypt, getpass, pwd
 
+def raw_input(prompt):
+    import sys
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def login():
     username = raw_input('Python login:')
     cryptedpasswd = pwd.getpwnam(username)[1]
diff --git a/Doc/lib/libexcs.tex b/Doc/lib/libexcs.tex
index f52ff0a..85058a4 100644
--- a/Doc/lib/libexcs.tex
+++ b/Doc/lib/libexcs.tex
@@ -153,9 +153,7 @@
 
 \begin{excdesc}{EOFError}
 % XXXJH xrefs here
-  Raised when one of the built-in functions (\function{input()} or
-  \function{raw_input()}) hits an end-of-file condition (\EOF) without
-  reading any data.
+  Raised when attempting to read beyond the end of a file.
 % XXXJH xrefs here
   (N.B.: the \method{read()} and \method{readline()} methods of file
   objects return an empty string when they hit \EOF.)
@@ -213,9 +211,6 @@
   \kbd{Control-C} or \kbd{Delete}).  During execution, a check for
   interrupts is made regularly.
 % XXX(hylton) xrefs here
-  Interrupts typed when a built-in function \function{input()} or
-  \function{raw_input()} is waiting for input also raise this
-  exception.
   The exception inherits from \exception{BaseException} so as to not be
   accidentally caught by code that catches \exception{Exception} and thus
   prevent the interpreter from exiting.
diff --git a/Doc/lib/libfuncs.tex b/Doc/lib/libfuncs.tex
index 9b6bfe9..c75c172 100644
--- a/Doc/lib/libfuncs.tex
+++ b/Doc/lib/libfuncs.tex
@@ -551,23 +551,6 @@
   note: this is the address of the object.)
 \end{funcdesc}
 
-\begin{funcdesc}{input}{\optional{prompt}}
-  Equivalent to \code{eval(raw_input(\var{prompt}))}.
-  \warning{This function is not safe from user errors!  It
-  expects a valid Python expression as input; if the input is not
-  syntactically valid, a \exception{SyntaxError} will be raised.
-  Other exceptions may be raised if there is an error during
-  evaluation.  (On the other hand, sometimes this is exactly what you
-  need when writing a quick script for expert use.)}
-
-  If the \refmodule{readline} module was loaded, then
-  \function{input()} will use it to provide elaborate line editing and
-  history features.
-
-  Consider using the \function{raw_input()} function for general input
-  from users.
-\end{funcdesc}
-
 \begin{funcdesc}{int}{\optional{x\optional{, radix}}}
   Convert a string or number to a plain integer.  If the argument is a
   string, it must contain a possibly signed decimal number
@@ -811,24 +794,6 @@
 \end{verbatim}
 \end{funcdesc}
 
-\begin{funcdesc}{raw_input}{\optional{prompt}}
-  If the \var{prompt} argument is present, it is written to standard output
-  without a trailing newline.  The function then reads a line from input,
-  converts it to a string (stripping a trailing newline), and returns that.
-  When \EOF{} is read, \exception{EOFError} is raised. Example:
-
-\begin{verbatim}
->>> s = raw_input('--> ')
---> Monty Python's Flying Circus
->>> s
-"Monty Python's Flying Circus"
-\end{verbatim}
-
-  If the \refmodule{readline} module was loaded, then
-  \function{raw_input()} will use it to provide elaborate
-  line editing and history features.
-\end{funcdesc}
-
 \begin{funcdesc}{reduce}{function, sequence\optional{, initializer}}
   Apply \var{function} of two arguments cumulatively to the items of
   \var{sequence}, from left to right, so as to reduce the sequence to
diff --git a/Doc/lib/libsmtplib.tex b/Doc/lib/libsmtplib.tex
index 2f87bc4..ddf1764 100644
--- a/Doc/lib/libsmtplib.tex
+++ b/Doc/lib/libsmtplib.tex
@@ -267,6 +267,12 @@
 \begin{verbatim}
 import smtplib
 
+def raw_input(prompt):
+    import sys
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def prompt(prompt):
     return raw_input(prompt).strip()
 
diff --git a/Doc/lib/libsys.tex b/Doc/lib/libsys.tex
index ea8950a..1a57da4 100644
--- a/Doc/lib/libsys.tex
+++ b/Doc/lib/libsys.tex
@@ -511,11 +511,8 @@
 \dataline{stderr}
   File objects corresponding to the interpreter's standard input,
   output and error streams.  \code{stdin} is used for all interpreter
-  input except for scripts but including calls to
-  \function{input()}\bifuncindex{input} and
-  \function{raw_input()}\bifuncindex{raw_input}.  \code{stdout} is
-  used for the output of \keyword{print} and expression statements and
-  for the prompts of \function{input()} and \function{raw_input()}.
+  input except for scripts.  \code{stdout} is
+  used for the output of \keyword{print} and expression statements.
   The interpreter's own prompts and (almost all of) its error messages
   go to \code{stderr}.  \code{stdout} and \code{stderr} needn't be
   built-in file objects: any object is acceptable as long as it has a
diff --git a/Doc/lib/libtelnetlib.tex b/Doc/lib/libtelnetlib.tex
index c7a4226..b8dfeee 100644
--- a/Doc/lib/libtelnetlib.tex
+++ b/Doc/lib/libtelnetlib.tex
@@ -196,6 +196,11 @@
 import sys
 import telnetlib
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 HOST = "localhost"
 user = raw_input("Enter your remote account: ")
 password = getpass.getpass()
diff --git a/Doc/lib/libtermios.tex b/Doc/lib/libtermios.tex
index ef99cf9..64f3438 100644
--- a/Doc/lib/libtermios.tex
+++ b/Doc/lib/libtermios.tex
@@ -91,6 +91,12 @@
 old tty attributes are restored exactly no matter what happens:
 
 \begin{verbatim}
+def raw_input(prompt):
+    import sys
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def getpass(prompt = "Password: "):
     import termios, sys
     fd = sys.stdin.fileno()
diff --git a/Doc/ref/ref8.tex b/Doc/ref/ref8.tex
index d10c87f..801ab58 100644
--- a/Doc/ref/ref8.tex
+++ b/Doc/ref/ref8.tex
@@ -103,10 +103,7 @@
 \end{productionlist}
 
 Note: to read `raw' input line without interpretation, you can use the
-built-in function \function{raw_input()} or the \method{readline()} method
-of file objects.
+the \method{readline()} method of file objects, including \code{sys.stdin}.
 \obindex{file}
 \index{input!raw}
-\index{raw input}
-\bifuncindex{raw_input}
 \withsubitem{(file method)}{\ttindex{readline()}}
diff --git a/Doc/tools/keywords.py b/Doc/tools/keywords.py
index 9f32056..3344021 100644
--- a/Doc/tools/keywords.py
+++ b/Doc/tools/keywords.py
@@ -2,6 +2,12 @@
 
 # This Python program sorts and reformats the table of keywords in ref2.tex
 
+def raw_input(prompt):
+    import sys
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 l = []
 try:
     while 1:
diff --git a/Doc/tut/tut.tex b/Doc/tut/tut.tex
index efbc08d..054985b 100644
--- a/Doc/tut/tut.tex
+++ b/Doc/tut/tut.tex
@@ -231,7 +231,7 @@
 
 Note that there is a difference between \samp{python file} and
 \samp{python <file}.  In the latter case, input requests from the
-program, such as calls to \function{input()} and \function{raw_input()}, are
+program, such as calling \code{sys.stdin.read()}, are
 satisfied from \emph{file}.  Since this file has already been read
 until the end by the parser before the program starts executing, the
 program will encounter end-of-file immediately.  In the former case
@@ -1161,6 +1161,12 @@
 \keyword{if} statement.  For example:
 
 \begin{verbatim}
+>>> def raw_input(prompt):
+...     import sys
+...     sys.stdout.write(prompt)
+...     sys.stdout.flush()
+...     return sys.stdin.readline()
+... 
 >>> x = int(raw_input("Please enter an integer: "))
 >>> if x < 0:
 ...      x = 0
@@ -1453,6 +1459,12 @@
 arguments than it is defined to allow.  For example:
 
 \begin{verbatim}
+def raw_input(prompt):
+    import sys
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
     while True:
         ok = raw_input(prompt)
@@ -2711,15 +2723,15 @@
  'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
  'UserWarning', 'ValueError', 'Warning', 'WindowsError',
  'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__',
- '__name__', 'abs', 'apply', 'basestring', 'bool', 'buffer',
+ '__name__', 'abs', 'basestring', 'bool', 'buffer',
  'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile',
  'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod',
  'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float',
  'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex',
- 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter',
+ 'id', 'int', 'intern', 'isinstance', 'issubclass', 'iter',
  'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'min',
  'object', 'oct', 'open', 'ord', 'pow', 'property', 'quit', 'range',
- 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set',
+ 'reduce', 'reload', 'repr', 'reversed', 'round', 'set',
  'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super',
  'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']
 \end{verbatim}
@@ -3412,6 +3424,12 @@
 raising the \exception{KeyboardInterrupt} exception.
 
 \begin{verbatim}
+>>> def raw_input(prompt):
+...     import sys
+...     sys.stdout.write(prompt)
+...     sys.stdout.flush()
+...     return sys.stdin.readline()
+... 
 >>> while True:
 ...     try:
 ...         x = int(raw_input("Please enter a number: "))
@@ -4983,7 +5001,12 @@
 placeholders such as the current date, image sequence number, or file format:
 
 \begin{verbatim}
->>> import time, os.path
+>>> import time, os.path, sys
+>>> def raw_input(prompt):
+...     sys.stdout.write(prompt)
+...     sys.stdout.flush()
+...     return sys.stdin.readline()
+... 
 >>> photofiles = ['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg']
 >>> class BatchRename(Template):
 ...     delimiter = '%'
diff --git a/Lib/cmd.py b/Lib/cmd.py
index 3f82b48..23dc5b2 100644
--- a/Lib/cmd.py
+++ b/Lib/cmd.py
@@ -40,18 +40,20 @@
 `self.undoc_header' set the headers used for the help function's
 listings of documented functions, miscellaneous topics, and undocumented
 functions respectively.
-
-These interpreters use raw_input; thus, if the readline module is loaded,
-they automatically support Emacs-like command history and editing features.
 """
 
-import string
+import string, sys
 
 __all__ = ["Cmd"]
 
 PROMPT = '(Cmd) '
 IDENTCHARS = string.ascii_letters + string.digits + '_'
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 class Cmd:
     """A simple framework for writing line-oriented command interpreters.
 
diff --git a/Lib/code.py b/Lib/code.py
index 6bdc658..b67009b 100644
--- a/Lib/code.py
+++ b/Lib/code.py
@@ -269,12 +269,14 @@
         The returned line does not include the trailing newline.
         When the user enters the EOF key sequence, EOFError is raised.
 
-        The base implementation uses the built-in function
-        raw_input(); a subclass may replace this with a different
-        implementation.
+        The base implementation uses sys.stdin.readline(); a subclass
+        may replace this with a different implementation.
 
         """
-        return raw_input(prompt)
+        sys.stdout.write(prompt)
+        sys.stdout.flush()
+        return sys.stdin.readline()
+
 
 
 def interact(banner=None, readfunc=None, local=None):
diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py
index dec9aa2..f891262 100644
--- a/Lib/distutils/command/register.py
+++ b/Lib/distutils/command/register.py
@@ -13,6 +13,11 @@
 from distutils.core import Command
 from distutils.errors import *
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 class register(Command):
 
     description = ("register the distribution with the Python package index")
diff --git a/Lib/getpass.py b/Lib/getpass.py
index e96491f..a30d3a1 100644
--- a/Lib/getpass.py
+++ b/Lib/getpass.py
@@ -69,8 +69,7 @@
 
 
 def _raw_input(prompt=""):
-    # A raw_input() replacement that doesn't save the string in the
-    # GNU readline history.
+    # This doesn't save the string in the GNU readline history.
     prompt = str(prompt)
     if prompt:
         sys.stdout.write(prompt)
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index f81091b..b6abe40 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -1122,7 +1122,7 @@
         self.text.tag_add("stdin", "iomark", "end-1c")
         self.text.update_idletasks()
         if self.reading:
-            self.top.quit() # Break out of recursive mainloop() in raw_input()
+            self.top.quit() # Break out of recursive mainloop()
         else:
             self.runit()
         return "break"
diff --git a/Lib/pdb.py b/Lib/pdb.py
index b00f68b..1aa2eae 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -22,6 +22,11 @@
 __all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace",
            "post_mortem", "help"]
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def find_function(funcname, filename):
     cre = re.compile(r'def\s+%s\s*[(]' % funcname)
     try:
diff --git a/Lib/plat-mac/aetools.py b/Lib/plat-mac/aetools.py
index 79f3978..861dd2f 100644
--- a/Lib/plat-mac/aetools.py
+++ b/Lib/plat-mac/aetools.py
@@ -342,6 +342,11 @@
 # XXXX Should test more, really...
 
 def test():
+    def raw_input(prompt):
+        sys.stdout.write(prompt)
+        sys.stdout.flush()
+        return sys.stdin.readline()
+
     target = AE.AECreateDesc('sign', 'quil')
     ae = AE.AECreateAppleEvent('aevt', 'oapp', target, -1, 0)
     print unpackevent(ae)
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index ee45643..b6afc7f 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1505,6 +1505,11 @@
                     done[modname] = 1
                     writedoc(modname)
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 class Helper:
     keywords = {
         'and': 'BOOLEAN',
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py
index 1d29167..6eb77f9 100644
--- a/Lib/rlcompleter.py
+++ b/Lib/rlcompleter.py
@@ -28,12 +28,6 @@
 acceptable risk.  More complicated expressions (e.g. function calls or
 indexing operations) are *not* evaluated.
 
-- GNU readline is also used by the built-in functions input() and
-raw_input(), and thus these also benefit/suffer from the completer
-features.  Clearly an interactive application can benefit by
-specifying its own completer function and using raw_input() for all
-its input.
-
 - When the original stdin is not a tty device, GNU readline is never
 used, and this module (and the readline module) are silently inactive.
 
diff --git a/Lib/site.py b/Lib/site.py
index 6818e85..5e7ff7b 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -299,7 +299,9 @@
                 lineno += self.MAXLINES
                 key = None
                 while key is None:
-                    key = raw_input(prompt)
+                    sys.stdout.write(prompt)
+                    sys.stdout.flush()
+                    key = sys.stdin.readline()
                     if key not in ('', 'q'):
                         key = None
                 if key == 'q':
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index fdef876..65f7876 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -44,8 +44,8 @@
 savestdin = sys.stdin
 try:
     try:
-        sys.stdin = fp
-        x = raw_input()
+        import marshal
+        marshal.loads('')
     except EOFError:
         pass
 finally:
diff --git a/Lib/urllib.py b/Lib/urllib.py
index aeca3f1..136f42e 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -768,10 +768,11 @@
 
     def prompt_user_passwd(self, host, realm):
         """Override this in a GUI environment!"""
-        import getpass
+        import getpass, sys
         try:
-            user = raw_input("Enter username for %s at %s: " % (realm,
-                                                                host))
+            sys.stdout.write("Enter username for %s at %s: " % (realm, host))
+            sys.stdout.flush()
+            user = sys.stdin.readline()
             passwd = getpass.getpass("Enter password for %s in %s at %s: " %
                 (user, realm, host))
             return user, passwd
diff --git a/Mac/Demo/resources/copyres.py b/Mac/Demo/resources/copyres.py
index 528ff16..cb1fa8e 100644
--- a/Mac/Demo/resources/copyres.py
+++ b/Mac/Demo/resources/copyres.py
@@ -6,6 +6,12 @@
 WRITE = 2
 smAllScripts = -3
 
+def raw_input(prompt):
+    import sys
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def copyres(src, dst):
     """Copy resource from src file to dst file."""
 
diff --git a/Mac/Demo/sound/morselib.py b/Mac/Demo/sound/morselib.py
index 98e2590..3c7493f 100644
--- a/Mac/Demo/sound/morselib.py
+++ b/Mac/Demo/sound/morselib.py
@@ -61,11 +61,10 @@
 }
 
 def morsecode(s):
-    from string import lower
     m = ''
     for c in s:
-        c = lower(c)
-        if morsetab.has_key(c):
+        c = c.lower()
+        if c in morsetab:
             c = morsetab[c] + ' '
         else:
             c = '? '
@@ -107,9 +106,12 @@
 
     def sendmorse(self, s):
         for c in s:
-            if c == '.': self.dot()
-            elif c == '-': self.dah()
-            else: self.pdah()
+            if c == '.':
+                self.dot()
+            elif c == '-':
+                self.dah()
+            else:
+                self.pdah()
             self.pdot()
 
     def sendascii(self, s):
@@ -122,8 +124,9 @@
 import Audio_mac
 class MyAudio(Audio_mac.Play_Audio_mac):
     def _callback(self, *args):
-        if hasattr(self, 'usercallback'): self.usercallback()
-        apply(Audio_mac.Play_Audio_mac._callback, (self,) + args)
+        if hasattr(self, 'usercallback'):
+            self.usercallback()
+        Audio_mac.Play_Audio_mac._callback(self, args)
 
 
 class MacMorse(BaseMorse):
@@ -169,12 +172,21 @@
     def usercallback(self):
         if self.morsequeue:
             c, self.morsequeue = self.morsequeue[0], self.morsequeue[1:]
-            if c == '.': self.dot()
-            elif c == '-': self.dah()
-            else: self.pdah()
+            if c == '.':
+                self.dot()
+            elif c == '-':
+                self.dah()
+            else:
+                self.pdah()
             self.pdot()
 
 
+def raw_input(prompt):
+    import sys
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def test():
     m = MacMorse()
     while 1:
@@ -183,6 +195,8 @@
         except (EOFError, KeyboardInterrupt):
             break
         m.send(line)
-        while m.morsequeue: pass
+        while m.morsequeue:
+            pass
 
-test()
+if __name__ == '__main__':
+    test()
diff --git a/Misc/Vim/python.vim b/Misc/Vim/python.vim
index 0d5e6d0..a31fa30 100644
--- a/Misc/Vim/python.vim
+++ b/Misc/Vim/python.vim
@@ -63,16 +63,16 @@
 
 if exists("python_highlight_builtins")
   syn keyword pythonBuiltin    unichr all set abs vars int __import__ unicode
-  syn keyword pythonBuiltin    enumerate reduce coerce intern exit issubclass
-  syn keyword pythonBuiltin    divmod file Ellipsis apply isinstance open any
+  syn keyword pythonBuiltin    enumerate reduce exit issubclass
+  syn keyword pythonBuiltin    divmod file Ellipsis isinstance open any
   syn keyword pythonBuiltin    locals help filter basestring slice copyright min
-  syn keyword pythonBuiltin    super sum tuple hex execfile long id xrange chr
+  syn keyword pythonBuiltin    super sum tuple hex execfile long id chr
   syn keyword pythonBuiltin    complex bool zip pow dict True oct NotImplemented
   syn keyword pythonBuiltin    map None float hash getattr buffer max reversed
   syn keyword pythonBuiltin    object quit len repr callable credits setattr
   syn keyword pythonBuiltin    eval frozenset sorted ord __debug__ hasattr
-  syn keyword pythonBuiltin    delattr False input license classmethod type
-  syn keyword pythonBuiltin    raw_input list iter compile reload range globals
+  syn keyword pythonBuiltin    delattr False license classmethod type
+  syn keyword pythonBuiltin    list iter reload range globals
   syn keyword pythonBuiltin    staticmethod str property round dir cmp
 
 endif
diff --git a/Misc/cheatsheet b/Misc/cheatsheet
index d50ed2e..b8de4281 100644
--- a/Misc/cheatsheet
+++ b/Misc/cheatsheet
@@ -925,8 +925,6 @@
 globals[, locals[,  more details)
 fromlist]]])
 abs(x)              Return the absolute value of number x.
-apply(f, args[,     Calls func/method f with arguments args and optional
-keywords])          keywords.
 bool(x)             Returns True when the argument x is true and False otherwise.
 buffer(obj)         Creates a buffer reference to an object.
 callable(x)         Returns True if x callable, else False.
@@ -934,10 +932,6 @@
 classmethod(f)      Converts a function f, into a method with the class as the
                     first argument.  Useful for creating alternative constructors.
 cmp(x,y)            Returns negative, 0, positive if x <, ==, > to y
-coerce(x,y)         Returns a tuple of the two numeric arguments converted to a
-                    common type.
-                    Compiles string into a code object.filename is used in
-                    error message, can be any string. It isusually the file
 compile(string,     from which the code was read, or eg. '<string>'if not read
 filename, kind)     from file.kind can be 'eval' if string is a single stmt, or
                     'single' which prints the output of expression statements
@@ -971,8 +965,6 @@
 help(f)             Display documentation on object f.
 hex(x)              Converts a number x to a hexadecimal string.
 id(object)          Returns a unique 'identity' integer for an object.
-input([prompt])     Prints prompt if given. Reads input and evaluates it.
-                    Converts a number or a string to a plain integer. Optional
 int(x[, base])      base paramenter specifies base from which to convert string
                     values.
 intern(aString)     Enters aString in the table of "interned strings"
@@ -1013,8 +1005,6 @@
 range(start [,end   Returns list of ints from >= start and < end.With 1 arg,
 [, step]])          list from 0..arg-1With 2 args, list from start..end-1With 3
                     args, list from start up to end by step
-raw_input([prompt]) Prints prompt if given, then reads string from stdinput (no
-                    trailing \n). See also input().
 reduce(f, list [,   Applies the binary function f to the items oflist so as to
 init])              reduce the list to a single value.If init given, it is
                     "prepended" to list.
diff --git a/Misc/python-mode.el b/Misc/python-mode.el
index 202541c..1392c84 100644
--- a/Misc/python-mode.el
+++ b/Misc/python-mode.el
@@ -378,18 +378,18 @@
 			  "ZeroDivisionError" "__debug__"
 			  "__import__" "__name__" "abs" "apply" "basestring"
 			  "bool" "buffer" "callable" "chr" "classmethod"
-			  "cmp" "coerce" "compile" "complex" "copyright"
+			  "cmp" "compile" "complex" "copyright"
 			  "delattr" "dict" "dir" "divmod"
 			  "enumerate" "eval" "execfile" "exit" "file"
 			  "filter" "float" "getattr" "globals" "hasattr"
-			  "hash" "hex" "id" "input" "int" "intern"
+			  "hash" "hex" "id" "int" "intern"
 			  "isinstance" "issubclass" "iter" "len" "license"
 			  "list" "locals" "long" "map" "max" "min" "object"
 			  "oct" "open" "ord" "pow" "property" "range"
-			  "raw_input" "reduce" "reload" "repr" "round"
+			  "reduce" "reload" "repr" "round"
 			  "setattr" "slice" "staticmethod" "str" "sum"
 			  "super" "tuple" "type" "unichr" "unicode" "vars"
-			  "xrange" "zip")
+			  "zip")
 			"\\|"))
 	)
     (list
diff --git a/Tools/compiler/regrtest.py b/Tools/compiler/regrtest.py
index 50d06e7..4244d62 100644
--- a/Tools/compiler/regrtest.py
+++ b/Tools/compiler/regrtest.py
@@ -67,6 +67,11 @@
 def cleanup(dir):
     os.system("rm -rf %s" % dir)
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def main():
     lib_dir = copy_library()
     compile_files(lib_dir)
diff --git a/Tools/scripts/ftpmirror.py b/Tools/scripts/ftpmirror.py
index 0f918b8..caade16 100755
--- a/Tools/scripts/ftpmirror.py
+++ b/Tools/scripts/ftpmirror.py
@@ -352,6 +352,11 @@
     def close(self):
         self.outfp.write('\n')
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 # Ask permission to download a file.
 def askabout(filetype, filename, pwd):
     prompt = 'Retrieve %s %s from %s ? [ny] ' % (filetype, filename, pwd)
diff --git a/Tools/scripts/treesync.py b/Tools/scripts/treesync.py
index ab9324b..4fb1798 100755
--- a/Tools/scripts/treesync.py
+++ b/Tools/scripts/treesync.py
@@ -187,6 +187,11 @@
     f.close()
     g.close()
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def okay(prompt, answer='ask'):
     answer = answer.strip().lower()
     if not answer or answer[0] not in 'ny':
diff --git a/Tools/scripts/xxci.py b/Tools/scripts/xxci.py
index c6a7d08..1e77c87 100755
--- a/Tools/scripts/xxci.py
+++ b/Tools/scripts/xxci.py
@@ -105,6 +105,11 @@
     cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}'
     sts = os.system(cmd)
 
+def raw_input(prompt):
+    sys.stdout.write(prompt)
+    sys.stdout.flush()
+    return sys.stdin.readline()
+
 def askyesno(prompt):
     s = raw_input(prompt)
     return s in ['y', 'yes']
diff --git a/Tools/webchecker/wcmac.py b/Tools/webchecker/wcmac.py
index 9c8a199..9edcd5d 100644
--- a/Tools/webchecker/wcmac.py
+++ b/Tools/webchecker/wcmac.py
@@ -4,4 +4,6 @@
 webchecker.verbose = 2
 sys.argv.append('-x')
 webchecker.main()
-raw_input("\nCR to exit: ")
+sys.stdout.write("\nCR to exit: ")
+sys.stdout.flush()
+sys.stdin.readline()
