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
