diff --git a/Misc/HISTORY b/Misc/HISTORY
index b2d3fba..4fb749a 100644
--- a/Misc/HISTORY
+++ b/Misc/HISTORY
@@ -10435,7 +10435,7 @@
 Python code.  The limit exists to prevent infinite recursion from
 overflowing the C stack and causing a core dump.  The default value is
 1000.  The maximum safe value for a particular platform can be found
-by running Misc/find_recursionlimit.py.
+by running Tools/scripts/find_recursionlimit.py.
 
 New Modules and Packages
 ------------------------
diff --git a/Misc/README b/Misc/README
index 6e26303..8695b60 100644
--- a/Misc/README
+++ b/Misc/README
@@ -9,24 +9,32 @@
 
 ACKS		Acknowledgements
 AIX-NOTES	Notes for building Python on AIX
+build.sh	Script to build and test latest Python from the repository
 cheatsheet	Quick summary of Python by Ken Manheimer
-find_recursionlimit.py  Script to find a value for sys.maxrecursionlimit
+developers.txt	A history of who got developer permissions, and why
 gdbinit		Handy stuff to put in your .gdbinit file, if you use gdb
 HISTORY		News from previous releases -- oldest last
-HPUX-NOTES	Notes about dynamic loading under HP-UX
 indent.pro	GNU indent profile approximating my C style
+maintainers.txt	A list of maintainers for library modules
 NEWS		News for this release (for some meaning of "this")
+NEWS.help	How to edit NEWS
 Porting		Mini-FAQ on porting to new platforms
 PURIFY.README	Information for Purify users
 pymemcompat.h	Memory interface compatibility file.
 python.man	UNIX man page for the python interpreter
 python-mode.el	Emacs mode for editing Python programs
+python.pc.in	Package configuration info template for pkg-config
 python-wing.wpr Wing IDE project file
 README		The file you're reading now
+README.coverity	Information about running Coverity's Prevent on Python
+README.klocwork	Information about running Klocwork's K7 on Python
+README.OpenBSD	Help for building problems on OpenBSD
 README.valgrind	Information for Valgrind users, see valgrind-python.supp
 RFD		Request For Discussion about a Python newsgroup
 RPM		(Old) tools to build RPMs
-SpecialBuilds.txt     Describes extra symbols you can set for debug builds
 setuid-prog.c	C helper program for set-uid Python scripts
+SpecialBuilds.txt     Describes extra symbols you can set for debug builds
+TextMate	A TextMate bundle for Python development
+valgrind-python.supp  Valgrind suppression file, see README.valgrind
 vgrindefs	Python configuration for vgrind (a generic pretty printer)
-valgrind-python.supp	Valgrind suppression file, see README.valgrind
+Vim		Python development utilities for the Vim editor
\ No newline at end of file
diff --git a/Misc/find_recursionlimit.py b/Misc/find_recursionlimit.py
deleted file mode 100644
index 2e202be..0000000
--- a/Misc/find_recursionlimit.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#! /usr/bin/env python
-"""Find the maximum recursion limit that prevents interpreter termination.
-
-This script finds the maximum safe recursion limit on a particular
-platform.  If you need to change the recursion limit on your system,
-this script will tell you a safe upper bound.  To use the new limit,
-call sys.setrecursionlimit().
-
-This module implements several ways to create infinite recursion in
-Python.  Different implementations end up pushing different numbers of
-C stack frames, depending on how many calls through Python's abstract
-C API occur.
-
-After each round of tests, it prints a message:
-"Limit of NNNN is fine".
-
-The highest printed value of "NNNN" is therefore the highest potentially
-safe limit for your system (which depends on the OS, architecture, but also
-the compilation flags). Please note that it is practically impossible to
-test all possible recursion paths in the interpreter, so the results of
-this test should not be trusted blindly -- although they give a good hint
-of which values are reasonable.
-
-NOTE: When the C stack space allocated by your system is exceeded due
-to excessive recursion, exact behaviour depends on the platform, although
-the interpreter will always fail in a likely brutal way: either a
-segmentation fault, a MemoryError, or just a silent abort.
-
-NB: A program that does not use __methods__ can set a higher limit.
-"""
-
-import sys
-import itertools
-
-class RecursiveBlowup1:
-    def __init__(self):
-        self.__init__()
-
-def test_init():
-    return RecursiveBlowup1()
-
-class RecursiveBlowup2:
-    def __repr__(self):
-        return repr(self)
-
-def test_repr():
-    return repr(RecursiveBlowup2())
-
-class RecursiveBlowup4:
-    def __add__(self, x):
-        return x + self
-
-def test_add():
-    return RecursiveBlowup4() + RecursiveBlowup4()
-
-class RecursiveBlowup5:
-    def __getattr__(self, attr):
-        return getattr(self, attr)
-
-def test_getattr():
-    return RecursiveBlowup5().attr
-
-class RecursiveBlowup6:
-    def __getitem__(self, item):
-        return self[item - 2] + self[item - 1]
-
-def test_getitem():
-    return RecursiveBlowup6()[5]
-
-def test_recurse():
-    return test_recurse()
-
-def test_cpickle(_cache={}):
-    import io
-    try:
-        import _pickle
-    except ImportError:
-        print("cannot import _pickle, skipped!")
-        return
-    l = None
-    for n in itertools.count():
-        try:
-            l = _cache[n]
-            continue  # Already tried and it works, let's save some time
-        except KeyError:
-            for i in range(100):
-                l = [l]
-        _pickle.Pickler(io.BytesIO(), protocol=-1).dump(l)
-        _cache[n] = l
-
-def check_limit(n, test_func_name):
-    sys.setrecursionlimit(n)
-    if test_func_name.startswith("test_"):
-        print(test_func_name[5:])
-    else:
-        print(test_func_name)
-    test_func = globals()[test_func_name]
-    try:
-        test_func()
-    # AttributeError can be raised because of the way e.g. PyDict_GetItem()
-    # silences all exceptions and returns NULL, which is usually interpreted
-    # as "missing attribute".
-    except (RuntimeError, AttributeError):
-        pass
-    else:
-        print("Yikes!")
-
-limit = 1000
-while 1:
-    check_limit(limit, "test_recurse")
-    check_limit(limit, "test_add")
-    check_limit(limit, "test_repr")
-    check_limit(limit, "test_init")
-    check_limit(limit, "test_getattr")
-    check_limit(limit, "test_getitem")
-    check_limit(limit, "test_cpickle")
-    print("Limit of %d is fine" % limit)
-    limit = limit + 100
