diff --git a/Demo/sgi/gl/kites.py b/Demo/sgi/gl/kites.py
index be56513..cde69cb 100755
--- a/Demo/sgi/gl/kites.py
+++ b/Demo/sgi/gl/kites.py
@@ -43,7 +43,7 @@
 	popmatrix()
 
 #
-# makeobj : the contructor of the object
+# makeobj : the constructor of the object
 #
 def mkobj () :
 	v0 = (-5.0 ,0.0, 0.0)
diff --git a/Demo/sgi/video/OldVcopy.py b/Demo/sgi/video/OldVcopy.py
index 697a51a..0eb1c7f 100755
--- a/Demo/sgi/video/OldVcopy.py
+++ b/Demo/sgi/video/OldVcopy.py
@@ -15,10 +15,10 @@
 	print 'Frame', iframe, ': t =', time
 
 def usage():
-	sys.stderr.write('usage: Vcopy [-t type] [-m treshold] [-a] infile outfile\n')
+	sys.stderr.write('usage: Vcopy [-t type] [-m threshold] [-a] infile outfile\n')
 	sys.stderr.write('-t Convert to other type\n')
 	sys.stderr.write('-a Automatic\n')
-	sys.stderr.write('-m Convert grey to mono with treshold\n')
+	sys.stderr.write('-m Convert grey to mono with threshold\n')
 	sys.stderr.write('-d Convert grey to mono with dithering\n')
 	sys.exit(2)
 
diff --git a/Demo/sgi/video/Vrec.py b/Demo/sgi/video/Vrec.py
index b647bd3..11039bb 100755
--- a/Demo/sgi/video/Vrec.py
+++ b/Demo/sgi/video/Vrec.py
@@ -26,7 +26,7 @@
 	print '-g bits       : greyscale (2, 4 or 8 bits)'
 	print '-G            : 2-bit greyscale dithered'
 	print '-m            : monochrome dithered'
-	print '-M value      : monochrome tresholded with value'
+	print '-M value      : monochrome thresholded with value'
 	print '-f            : Capture fields (in stead of frames)'
 	print '-P frames     : preallocate space for "frames" frames'
 	print 'moviefile     : here goes the movie data (default film.video)'
diff --git a/Demo/sgi/video/Vrecb.py b/Demo/sgi/video/Vrecb.py
index d65b35f..5cdde9e 100755
--- a/Demo/sgi/video/Vrecb.py
+++ b/Demo/sgi/video/Vrecb.py
@@ -45,7 +45,7 @@
 	print '-g bits       : greyscale (2, 4 or 8 bits)'
 	print '-G            : 2-bit greyscale dithered'
 	print '-m            : monochrome dithered'
-	print '-M value      : monochrome tresholded with value'
+	print '-M value      : monochrome thresholded with value'
 	print '-f            : Capture fields (instead of frames)'
 	print '-n number     : Capture this many frames (default 60)'
 	print '-N memsize    : Capture frames fitting in this many kbytes'
diff --git a/Include/abstract.h b/Include/abstract.h
index 890ffcd..b765c4b 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -695,7 +695,7 @@
      DL_IMPORT(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
 
        /*
-	 Return the concatination of o1 and o2 on success, and NULL on
+	 Return the concatenation of o1 and o2 on success, and NULL on
 	 failure.   This is the equivalent of the Python
 	 expression: o1+o2.
 
diff --git a/Include/cStringIO.h b/Include/cStringIO.h
index cc62c90..fac5f05 100644
--- a/Include/cStringIO.h
+++ b/Include/cStringIO.h
@@ -71,7 +71,7 @@
 
 */
 
-/* Basic fuctions to manipulate cStringIO objects from C */
+/* Basic functions to manipulate cStringIO objects from C */
 
 static struct PycStringIO_CAPI {
   
diff --git a/Include/cobject.h b/Include/cobject.h
index 15850d9..e7b75f5 100644
--- a/Include/cobject.h
+++ b/Include/cobject.h
@@ -28,7 +28,7 @@
 #define PyCObject_Check(op) ((op)->ob_type == &PyCObject_Type)
 
 /* Create a PyCObject from a pointer to a C object and an optional
-   destrutor function.  If the second argument is non-null, then it
+   destructor function.  If the second argument is non-null, then it
    will be called with the first argument if and when the PyCObject is
    destroyed.
 
@@ -38,7 +38,7 @@
 
 
 /* Create a PyCObject from a pointer to a C object, a description object,
-   and an optional destrutor function.  If the third argument is non-null,
+   and an optional destructor function.  If the third argument is non-null,
    then it will be called with the first and second arguments if and when 
    the PyCObject is destroyed.
 */
diff --git a/Include/longintrepr.h b/Include/longintrepr.h
index fed01ed..1e78d05 100644
--- a/Include/longintrepr.h
+++ b/Include/longintrepr.h
@@ -44,7 +44,7 @@
    In a normalized number, ob_digit[abs(ob_size)-1] (the most significant
    digit) is never zero.  Also, in all cases, for all valid i,
    	0 <= ob_digit[i] <= MASK.
-   The allocation fuction takes care of allocating extra memory
+   The allocation function takes care of allocating extra memory
    so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available. */
 
 struct _longobject {
diff --git a/Include/modsupport.h b/Include/modsupport.h
index c50d769..c55b46b 100644
--- a/Include/modsupport.h
+++ b/Include/modsupport.h
@@ -44,7 +44,7 @@
 #define PYTHON_API_STRING "1009"
 /* The API version is maintained (independently from the Python version)
    so we can detect mismatches between the interpreter and dynamically
-   loaded modules.  These are diagnosticised by an error message but
+   loaded modules.  These are diagnosed by an error message but
    the module is still loaded (because the mismatch can only be tested
    after loading the module).  The error message is intended to
    explain the core dump a few seconds later.
diff --git a/Include/object.h b/Include/object.h
index 8c61e56..72a5282 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -51,7 +51,7 @@
 contains other data that can only be accessed after casting the pointer
 to a pointer to a longer structure type.  This longer type must start
 with the reference count and type fields; the macro PyObject_HEAD should be
-used for this (to accomodate for future changes).  The implementation
+used for this (to accommodate for future changes).  The implementation
 of a particular object type can cast the object pointer to the proper
 type and back.
 
@@ -326,7 +326,7 @@
 reference counts.  Py_DECREF calls the object's deallocator function; for
 objects that don't contain references to other objects or heap memory
 this can be the standard function free().  Both macros can be used
-whereever a void expression is allowed.  The argument shouldn't be a
+wherever a void expression is allowed.  The argument shouldn't be a
 NIL pointer.  The macro _Py_NewReference(op) is used only to initialize
 reference counts to 1; it is defined here for convenience.
 
@@ -518,7 +518,7 @@
   redefinition for better locality and less overhead.
 
   Objects that want to be recursion safe need to use
-  the macroes 
+  the macro's 
 		Py_TRASHCAN_SAFE_BEGIN(name)
   and
 		Py_TRASHCAN_SAFE_END(name)
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index 38f787b..41fffc0 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -493,7 +493,7 @@
 
    Note that Py_UNICODE data is being interpreted as UTF-16 reduced to
    UCS-2. This trick makes it possible to add full UTF-16 capabilities
-   at a later point without comprimising the APIs.
+   at a later point without compromising the APIs.
 
 */
 
@@ -815,7 +815,7 @@
     PyObject *right		/* Right string */
     );
 
-/* Apply a argument tuple or dictionar to a format string and return
+/* Apply a argument tuple or dictionary to a format string and return
    the resulting Unicode string. */
 
 extern DL_IMPORT(PyObject *) PyUnicode_Format(
diff --git a/Lib/UserList.py b/Lib/UserList.py
index 7bd0298..d4a8d2f 100644
--- a/Lib/UserList.py
+++ b/Lib/UserList.py
@@ -4,7 +4,7 @@
     def __init__(self, initlist=None):
         self.data = []
         if initlist is not None:
-            # XXX should this accept an arbitary sequence?
+            # XXX should this accept an arbitrary sequence?
             if type(initlist) == type(self.data):
                 self.data[:] = initlist
             elif isinstance(initlist, UserList):
diff --git a/Lib/aifc.py b/Lib/aifc.py
index 0af6622..e00b23f 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -82,7 +82,7 @@
   close()     -- close the instance (make it unusable)
 The position returned by tell(), the position given to setpos() and
 the position of marks are all compatible and have nothing to do with
-the actual postion in the file.
+the actual position in the file.
 The close() method is called automatically when the class instance
 is destroyed.
 
diff --git a/Lib/asynchat.py b/Lib/asynchat.py
index 8b2f59f..4e02fa5 100644
--- a/Lib/asynchat.py
+++ b/Lib/asynchat.py
@@ -287,7 +287,7 @@
 ##	return result
 
 # yes, this is about twice as fast, but still seems
-# to be neglible CPU.  The previous could do about 290
+# to be negligible CPU.  The previous could do about 290
 # searches/sec. the new one about 555/sec.
 
 import regex
diff --git a/Lib/binhex.py b/Lib/binhex.py
index 0a28859..275701d 100644
--- a/Lib/binhex.py
+++ b/Lib/binhex.py
@@ -75,7 +75,7 @@
 
 else:
     #
-    # Glue code for non-macintosh useage
+    # Glue code for non-macintosh usage
     #
     
     class FInfo:
diff --git a/Lib/cgi.py b/Lib/cgi.py
index 4eaa983..7c95706 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -83,7 +83,7 @@
 If the submitted form data contains more than one field with the same
 name, the object retrieved by form[key] is not a (Mini)FieldStorage
 instance but a list of such instances.  If you are expecting this
-possibility (i.e., when your HTML form comtains multiple fields with
+possibility (i.e., when your HTML form contains multiple fields with
 the same name), use the type() function to determine whether you have
 a single instance or a list of instances.  For example, here's code
 that concatenates any number of username fields, separated by commas:
@@ -106,7 +106,7 @@
 If a field represents an uploaded file, the value attribute reads the 
 entire file in memory as a string.  This may not be what you want.  You can 
 test for an uploaded file by testing either the filename attribute or the 
-file attribute.  You can then read the data at leasure from the file 
+file attribute.  You can then read the data at leisure from the file 
 attribute:
 
         fileitem = form["userfile"]
@@ -500,7 +500,7 @@
 
         keep_blank_values: flag indicating whether blank values in
             URL encoded forms should be treated as blank strings.  
-            A true value inicates that blanks should be retained as 
+            A true value indicates that blanks should be retained as 
             blank strings.  The default false value indicates that
             blank values are to be ignored and treated as if they were
             not included.
@@ -551,7 +551,7 @@
 
         keep_blank_values: flag indicating whether blank values in
             URL encoded queries should be treated as blank strings.  
-            A true value inicates that blanks should be retained as 
+            A true value indicates that blanks should be retained as 
             blank strings.  The default false value indicates that
             blank values are to be ignored and treated as if they were
             not included.
@@ -578,7 +578,7 @@
 
         keep_blank_values: flag indicating whether blank values in
             URL encoded queries should be treated as blank strings.  
-            A true value inicates that blanks should be retained as 
+            A true value indicates that blanks should be retained as 
             blank strings.  The default false value indicates that
             blank values are to be ignored and treated as if they were
             not included.
@@ -806,7 +806,7 @@
 
         keep_blank_values: flag indicating whether blank values in
             URL encoded forms should be treated as blank strings.  
-            A true value inicates that blanks should be retained as 
+            A true value indicates that blanks should be retained as 
             blank strings.  The default false value indicates that
             blank values are to be ignored and treated as if they were
             not included.
diff --git a/Lib/codecs.py b/Lib/codecs.py
index fbb9824..2c1d835 100644
--- a/Lib/codecs.py
+++ b/Lib/codecs.py
@@ -273,7 +273,7 @@
         """ Resets the codec buffers used for keeping state.
 
             Note that no stream repositioning should take place.
-            This method is primarely intended to be able to recover
+            This method is primarily intended to be able to recover
             from decoding errors.
 
         """
@@ -295,7 +295,7 @@
         work in both read and write modes.
 
         The design is such that one can use the factory functions
-        returned by the codec.lookup() function to contruct the
+        returned by the codec.lookup() function to construct the
         instance.
 
     """
diff --git a/Lib/dos-8x3/multifil.py b/Lib/dos-8x3/multifil.py
index 977b92f..cc8f43c 100755
--- a/Lib/dos-8x3/multifil.py
+++ b/Lib/dos-8x3/multifil.py
@@ -21,7 +21,7 @@
 The latter sequence may be used recursively at (A).
 It is also allowed to use multiple push()...pop() sequences.
 
-If seekable is given as 0, the class code will not do the bookeeping
+If seekable is given as 0, the class code will not do the bookkeeping
 it normally attempts in order to make seeks relative to the beginning of the
 current file part.  This may be useful when using MultiFile with a non-
 seekable stream object.
diff --git a/Lib/dos-8x3/rlcomple.py b/Lib/dos-8x3/rlcomple.py
index 7a248fe..8cd21ed 100644
--- a/Lib/dos-8x3/rlcomple.py
+++ b/Lib/dos-8x3/rlcomple.py
@@ -84,7 +84,7 @@
         """Compute matches when text contains a dot.
 
         Assuming the text is of the form NAME.NAME....[NAME], and is
-        evaluabable in the globals of __main__, it will be evaluated
+        evaluatable in the globals of __main__, it will be evaluated
         and its attributes (as revealed by dir()) are used as possible
         completions.  (For class instances, class members are are also
         considered.)
diff --git a/Lib/dos-8x3/sre_comp.py b/Lib/dos-8x3/sre_comp.py
index 590e45f..fa0cf37 100644
--- a/Lib/dos-8x3/sre_comp.py
+++ b/Lib/dos-8x3/sre_comp.py
@@ -20,7 +20,7 @@
     if len(array.array(WORDSIZE, [0]).tostring()) == _sre.getcodesize():
         break
 else:
-    raise RuntimeError, "cannot find a useable array type"
+    raise RuntimeError, "cannot find a usable array type"
 
 def _compile(code, pattern, flags):
     # internal: compile a (sub)pattern
diff --git a/Lib/dos-8x3/stringol.py b/Lib/dos-8x3/stringol.py
index 8fa7dd4..c3e6f6f 100644
--- a/Lib/dos-8x3/stringol.py
+++ b/Lib/dos-8x3/stringol.py
@@ -118,7 +118,7 @@
     """join(list [,sep]) -> string
 
     Return a string composed of the words in list, with
-    intervening occurences of sep.  The default separator is a
+    intervening occurrences of sep.  The default separator is a
     single space.
 
     (joinfields and join are synonymous)
diff --git a/Lib/dos-8x3/test_ima.py b/Lib/dos-8x3/test_ima.py
index 63ab138..6b144c6 100644
--- a/Lib/dos-8x3/test_ima.py
+++ b/Lib/dos-8x3/test_ima.py
@@ -62,7 +62,7 @@
     image = imageop.grey2rgb(greyimage, width, height)
     
     # Convert a 8-bit deep greyscale image to a 1-bit deep image by
-    # tresholding all the pixels. The resulting image is tightly packed
+    # thresholding all the pixels. The resulting image is tightly packed
     # and is probably only useful as an argument to mono2grey. 
     if verbose:
         print 'grey2mono'
diff --git a/Lib/dos-8x3/threadst.py b/Lib/dos-8x3/threadst.py
index c2b08f2..d9c2788 100644
--- a/Lib/dos-8x3/threadst.py
+++ b/Lib/dos-8x3/threadst.py
@@ -1,7 +1,7 @@
 import thread
-# Start empty thread to initialise thread mechanics (and global lock!)
+# Start empty thread to initialize thread mechanics (and global lock!)
 # This thread will finish immediately thus won't make much influence on
-# test results by itself, only by that fact that it initialises global lock
+# test results by itself, only by that fact that it initializes global lock
 thread.start_new_thread(lambda : 1, ())
 
 import test.pystone
diff --git a/Lib/dos-8x3/tracebac.py b/Lib/dos-8x3/tracebac.py
index 4675077..d219340 100755
--- a/Lib/dos-8x3/tracebac.py
+++ b/Lib/dos-8x3/tracebac.py
@@ -117,7 +117,7 @@
 	have the same meaning as the corresponding arguments to
 	print_exception().  The return value is a list of strings, each
 	ending in a newline and some containing internal newlines.  When 
-	these lines are contatenated and printed, exactly the same text is
+	these lines are concatenated and printed, exactly the same text is
 	printed as does print_exception()."""
 	if tb:
 		list = ['Traceback (most recent call last):\n']
diff --git a/Lib/dos-8x3/userlist.py b/Lib/dos-8x3/userlist.py
index 7bd0298..d4a8d2f 100755
--- a/Lib/dos-8x3/userlist.py
+++ b/Lib/dos-8x3/userlist.py
@@ -4,7 +4,7 @@
     def __init__(self, initlist=None):
         self.data = []
         if initlist is not None:
-            # XXX should this accept an arbitary sequence?
+            # XXX should this accept an arbitrary sequence?
             if type(initlist) == type(self.data):
                 self.data[:] = initlist
             elif isinstance(initlist, UserList):
diff --git a/Lib/encodings/cp856.py b/Lib/encodings/cp856.py
index a0aa4c1..f384acb 100644
--- a/Lib/encodings/cp856.py
+++ b/Lib/encodings/cp856.py
@@ -120,10 +120,10 @@
 	0x00d0: None,	# UNDEFINED
 	0x00d1: None,	# UNDEFINED
 	0x00d2: None,	# UNDEFINED
-	0x00d3: None,	# UNDEFINEDS
+	0x00d3: None,	# UNDEFINED
 	0x00d4: None,	# UNDEFINED
 	0x00d5: None,	# UNDEFINED
-	0x00d6: None,	# UNDEFINEDE
+	0x00d6: None,	# UNDEFINED
 	0x00d7: None,	# UNDEFINED
 	0x00d8: None,	# UNDEFINED
 	0x00d9: 0x2518,	# BOX DRAWINGS LIGHT UP AND LEFT
diff --git a/Lib/lib-old/Para.py b/Lib/lib-old/Para.py
index 003ea1e..bf5f92c 100644
--- a/Lib/lib-old/Para.py
+++ b/Lib/lib-old/Para.py
@@ -56,7 +56,7 @@
 	#
 	# Tab to a given position (relative to the current left indent):
 	# remove all stretch, add fixed space up to the new indent.
-	# If the current position is already beying the tab stop,
+	# If the current position is already at the tab stop,
 	# don't add any new space (but still remove the stretch)
 	def tabto(self, tab):
 		total = 0
diff --git a/Lib/lib-old/ni.py b/Lib/lib-old/ni.py
index 13bcfac..4a06f59 100644
--- a/Lib/lib-old/ni.py
+++ b/Lib/lib-old/ni.py
@@ -64,7 +64,7 @@
 (2) A package's *import domain*, contained in the per-package variable
 __domain__, defines a list of *packages* that are searched (using
 their respective module search paths) to satisfy imports.  It is
-initialized to the list cosisting of the package itself, its parent
+initialized to the list consisting of the package itself, its parent
 package, its parent's parent, and so on, ending with the root package
 (the nameless package containing all top-level packages and modules,
 whose module search path is None, implying sys.path).
diff --git a/Lib/lib-tk/FileDialog.py b/Lib/lib-tk/FileDialog.py
index 74e9741..bd62c6d 100644
--- a/Lib/lib-tk/FileDialog.py
+++ b/Lib/lib-tk/FileDialog.py
@@ -36,7 +36,7 @@
     and pattern arguments, overriding the values passed in (it does
     not keep track of the default argument!).  If no key is specified,
     the dialog keeps no memory of previous state.  Note that memory is
-    kept even when the dialog is cancelled.  (All this emulates the
+    kept even when the dialog is canceled.  (All this emulates the
     behavior of the Macintosh file selection dialogs.)
 
     """
diff --git a/Lib/lib-tk/Tkdnd.py b/Lib/lib-tk/Tkdnd.py
index 0dda3b7..a4e1d1f 100644
--- a/Lib/lib-tk/Tkdnd.py
+++ b/Lib/lib-tk/Tkdnd.py
@@ -277,7 +277,7 @@
         return self
 
     def dnd_enter(self, source, event):
-        self.canvas.focus_set() # Show higlight border
+        self.canvas.focus_set() # Show highlight border
         x, y = source.where(self.canvas, event)
         x1, y1, x2, y2 = source.canvas.bbox(source.id)
         dx, dy = x2-x1, y2-y1
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index a70e064..63ccd1c 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -117,7 +117,7 @@
 					        Enter, KeyPress, KeyRelease,
 					        Leave, Motion)
 	state - state as a string (Visibility)
-	time - when the event occured
+	time - when the event occurred
 	x - x-position of the mouse
 	y - y-position of the mouse
 	x_root - x-position of the mouse on the screen
@@ -129,7 +129,7 @@
 	keysym - keysym of the the event as a string (KeyPress, KeyRelease)
 	keysym_num - keysym of the event as a number (KeyPress, KeyRelease)
 	type - type of the event as a number
-	widget - widget in which the event occured
+	widget - widget in which the event occurred
 	delta - delta of wheel movement (MouseWheel)
 	"""
 	pass
@@ -409,7 +409,7 @@
 		The focus order first goes to the next child, then to
 		the children of the child recursively and then to the
 		next sibling which is higher in the stacking order.  A
-		widget is ommited if it has the takefocus resource set
+		widget is omitted if it has the takefocus resource set
 		to 0."""
 		name = self.tk.call('tk_focusNext', self._w)
 		if not name: return None
@@ -529,7 +529,7 @@
 	def option_readfile(self, fileName, priority = None):
 		"""Read file FILENAME into the option database.
 
-		An optional second paramter gives the numeric
+		An optional second parameter gives the numeric
 		priority."""
 		self.tk.call('option', 'readfile', fileName, priority)
 	def selection_clear(self, **kw):
@@ -639,7 +639,7 @@
 		"""Return geometry string for this widget in the form "widthxheight+X+Y"."""
 		return self.tk.call('winfo', 'geometry', self._w)
 	def winfo_height(self):
-		"""Return heigth of this widget."""
+		"""Return height of this widget."""
 		return getint(
 			self.tk.call('winfo', 'height', self._w))
 	def winfo_id(self):
@@ -754,7 +754,7 @@
 		return self._nametowidget(self.tk.call(
 			'winfo', 'toplevel', self._w))
 	def winfo_viewable(self):
-		"""Return true if the widget and all its higher anchestors are mapped."""
+		"""Return true if the widget and all its higher ancestors are mapped."""
 		return getint(
 			self.tk.call('winfo', 'viewable', self._w))
 	def winfo_visual(self):
@@ -1135,7 +1135,7 @@
 		cell. If COL2 and ROW2 are given the bounding box
 		starts at that cell.
 
-		The returned integers specify the offset of the uppler left
+		The returned integers specify the offset of the upper left
 		corner in the master widget and the width and height.
 		"""
 		args = ('grid', 'bbox', self._w)
@@ -1268,7 +1268,7 @@
 
 class CallWrapper:
 	"""Internal class. Stores function to call when some user
-	defined Tcl function is called e.g. after an event occured."""
+	defined Tcl function is called e.g. after an event occurred."""
 	def __init__(self, func, subst, widget):
 		"""Store FUNC, SUBST and WIDGET as members."""
 		self.func = func
@@ -1316,7 +1316,7 @@
 	def wm_command(self, value=None):
 		"""Store VALUE in WM_COMMAND property. It is the command
 		which shall be used to invoke the application. Return current
-		commmand if VALUE is None."""
+		command if VALUE is None."""
 		return self.tk.call('wm', 'command', self._w, value)
 	command = wm_command
 	def wm_deiconify(self):
@@ -1335,7 +1335,7 @@
 		return self.tk.call('wm', 'frame', self._w)
 	frame = wm_frame
 	def wm_geometry(self, newGeometry=None):
-		"""Set geometry to NEWGEOMETRY of the form =widthxheigth+x+y. Return
+		"""Set geometry to NEWGEOMETRY of the form =widthxheight+x+y. Return
 		current value if None is given."""
 		return self.tk.call('wm', 'geometry', self._w, newGeometry)
 	geometry = wm_geometry
@@ -1623,7 +1623,7 @@
 		                  relative to width of master (1.0 is the same width
 				  as the master)
 	        relheight=amount - height of this widget between 0.0 and 1.0
-		                   relative to heigth of master (1.0 is the same
+		                   relative to height of master (1.0 is the same
 				   height as the master)
 	        bordermode="inside" or "outside" - whether to take border width of master widget
 	                                           into account
@@ -1913,12 +1913,12 @@
 				  sequence, func, add)
 	def canvasx(self, screenx, gridspacing=None):
 		"""Return the canvas x coordinate of pixel position SCREENX rounded
-		to nearest muliple of GRIDSPACING units."""
+		to nearest multiple of GRIDSPACING units."""
 		return getdouble(self.tk.call(
 			self._w, 'canvasx', screenx, gridspacing))
 	def canvasy(self, screeny, gridspacing=None):
 		"""Return the canvas y coordinate of pixel position SCREENY rounded
-		to nearest muliple of GRIDSPACING units."""
+		to nearest multiple of GRIDSPACING units."""
 		return getdouble(self.tk.call(
 			self._w, 'canvasy', screeny, gridspacing))
 	def coords(self, *args):
@@ -2609,7 +2609,7 @@
 		width, wrap, xscrollcommand, yscrollcommand."""
 		Widget.__init__(self, master, 'text', cnf, kw)
 	def bbox(self, *args):
-		"""Return a tuple of (x,y,width,heigth) which gives the bounding
+		"""Return a tuple of (x,y,width,height) which gives the bounding
 		box of the visible part of the character at the index in ARGS."""
 		return self._getints(
 			self.tk.call((self._w, 'bbox') + args)) or None
@@ -2674,7 +2674,7 @@
 		"""Return the index in the form line.char for INDEX."""
 		return self.tk.call(self._w, 'index', index)
 	def insert(self, index, chars, *args):
-		"""Insert CHARS before the charaters at INDEX. An additional
+		"""Insert CHARS before the characters at INDEX. An additional
 		tag can be given in ARGS. Additional CHARS and tags can follow in ARGS."""
 		self.tk.call((self._w, 'insert', index, chars) + args)
 	def mark_gravity(self, markName, direction=None):
@@ -2728,7 +2728,7 @@
 		self.tk.call(self._w, 'see', index)
 	def tag_add(self, tagName, index1, *args):
 		"""Add tag TAGNAME to all characters between INDEX1 and index2 in ARGS.
-		Addtional pairs of indices may follow in ARGS."""
+		Additional pairs of indices may follow in ARGS."""
 		self.tk.call(
 			(self._w, 'tag', 'add', tagName, index1) + args)
 	def tag_unbind(self, tagName, sequence, funcid=None):
diff --git a/Lib/lib-tk/tkColorChooser.py b/Lib/lib-tk/tkColorChooser.py
index 5756275..77e856b 100644
--- a/Lib/lib-tk/tkColorChooser.py
+++ b/Lib/lib-tk/tkColorChooser.py
@@ -48,7 +48,7 @@
         # to simplify application code, the color chooser returns
         # an RGB tuple together with the Tk color string
         if not result:
-            return None, None # cancelled
+            return None, None # canceled
         r, g, b = widget.winfo_rgb(result)
         return (r/256, g/256, b/256), result
 
diff --git a/Lib/locale.py b/Lib/locale.py
index 7dde040..401c712 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -268,7 +268,7 @@
         setlocale(LC_ALL, "") runs using the portable 'C' locale.
         Calling setlocale(LC_ALL, "") lets it use the default locale as
         defined by the LANG variable. Since we don't want to interfere
-        with the current locale setting we thus emulate the behaviour
+        with the current locale setting we thus emulate the behavior
         in the way described above.
 
         To maintain compatibility with other platforms, not only the
diff --git a/Lib/mhlib.py b/Lib/mhlib.py
index 9af04b2..df538f2 100644
--- a/Lib/mhlib.py
+++ b/Lib/mhlib.py
@@ -627,7 +627,7 @@
                     pass
 
     def removefromallsequences(self, list):
-        """Remove one or more messages from all sequeuces (including last)
+        """Remove one or more messages from all sequences (including last)
         -- but not from 'cur'!!!"""
         if hasattr(self, 'last') and self.last in list:
             del self.last
diff --git a/Lib/multifile.py b/Lib/multifile.py
index 977b92f..cc8f43c 100644
--- a/Lib/multifile.py
+++ b/Lib/multifile.py
@@ -21,7 +21,7 @@
 The latter sequence may be used recursively at (A).
 It is also allowed to use multiple push()...pop() sequences.
 
-If seekable is given as 0, the class code will not do the bookeeping
+If seekable is given as 0, the class code will not do the bookkeeping
 it normally attempts in order to make seeks relative to the beginning of the
 current file part.  This may be useful when using MultiFile with a non-
 seekable stream object.
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index 81449b0..7a90543 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -219,7 +219,7 @@
 		- date: string 'yymmdd' indicating the date
 		- time: string 'hhmmss' indicating the time
 		Return:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- list: list of newsgroup names"""
 
 		return self.longcmd('NEWGROUPS ' + date + ' ' + time)
@@ -230,7 +230,7 @@
 		- date: string 'yymmdd' indicating the date
 		- time: string 'hhmmss' indicating the time
 		Return:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- list: list of article ids"""
 
 		cmd = 'NEWNEWS ' + group + ' ' + date + ' ' + time
@@ -238,7 +238,7 @@
 
 	def list(self):
 		"""Process a LIST command.  Return:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- list: list of (group, last, first, flag) (strings)"""
 
 		resp, list = self.longcmd('LIST')
@@ -251,7 +251,7 @@
 		"""Process a GROUP command.  Argument:
 		- group: the group name
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- count: number of articles (string)
 		- first: first article number (string)
 		- last: last article number (string)
@@ -275,7 +275,7 @@
 
 	def help(self):
 		"""Process a HELP command.  Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- list: list of strings"""
 
 		return self.longcmd('HELP')
@@ -303,7 +303,7 @@
 		"""Process a STAT command.  Argument:
 		- id: article number or message id
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- nr:   the article number
 		- id:   the article id"""
 
@@ -327,7 +327,7 @@
 		"""Process a HEAD command.  Argument:
 		- id: article number or message id
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- nr: article number
 		- id: message id
 		- list: the lines of the article's header"""
@@ -338,7 +338,7 @@
 		"""Process a BODY command.  Argument:
 		- id: article number or message id
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- nr: article number
 		- id: message id
 		- list: the lines of the article's body"""
@@ -349,7 +349,7 @@
 		"""Process an ARTICLE command.  Argument:
 		- id: article number or message id
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- nr: article number
 		- id: message id
 		- list: the lines of the article"""
@@ -358,7 +358,7 @@
 
 	def slave(self):
 		"""Process a SLAVE command.  Returns:
-		- resp: server response if succesful"""
+		- resp: server response if successful"""
 
 		return self.shortcmd('SLAVE')
 
@@ -367,7 +367,7 @@
 		- hdr: the header type (e.g. 'subject')
 		- str: an article nr, a message id, or a range nr1-nr2
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- list: list of (nr, value) strings"""
 
 		pat = re.compile('^([0-9]+) ?(.*)\n?')
@@ -384,7 +384,7 @@
 		- start: start of range
 		- end: end of range
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- list: list of (art-nr, subject, poster, date,
 		                 id, references, size, lines)"""
 
@@ -409,7 +409,7 @@
 		"""Process an XGTITLE command (optional server extension) Arguments:
 		- group: group name wildcard (i.e. news.*)
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		- list: list of (name,title) strings"""
 
 		line_pat = re.compile("^([^ \t]+)[ \t]+(.*)$")
@@ -425,7 +425,7 @@
 		"""Process an XPATH command (optional server extension) Arguments:
 		- id: Message id of article
 		Returns:
-		resp: server response if succesful
+		resp: server response if successful
 		path: directory path to article"""
 
 		resp = self.shortcmd("XPATH " + id)
@@ -442,7 +442,7 @@
 		"""Process the DATE command. Arguments:
 		None
 		Returns:
-		resp: server response if succesful
+		resp: server response if successful
 		date: Date suitable for newnews/newgroups commands etc.
 		time: Time suitable for newnews/newgroups commands etc."""
 
@@ -463,7 +463,7 @@
 		"""Process a POST command.  Arguments:
 		- f: file containing the article
 		Returns:
-		- resp: server response if succesful"""
+		- resp: server response if successful"""
 
 		resp = self.shortcmd('POST')
 		# Raises error_??? if posting is not allowed
@@ -486,7 +486,7 @@
 		- id: message-id of the article
 		- f:  file containing the article
 		Returns:
-		- resp: server response if succesful
+		- resp: server response if successful
 		Note that if the server refuses the article an exception is raised."""
 
 		resp = self.shortcmd('IHAVE ' + id)
@@ -507,7 +507,7 @@
 
 	def quit(self):
 		"""Process a QUIT command and close the socket.  Returns:
-		- resp: server response if succesful"""
+		- resp: server response if successful"""
 
 		resp = self.shortcmd('QUIT')
 		self.file.close()
diff --git a/Lib/os.py b/Lib/os.py
index c7a3cc5..8e1e4f0 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -218,7 +218,7 @@
 
     Execute the executable file (which is searched for along $PATH)
     with argument list args, replacing the current process.
-    args may be a list or tupe of strings. """
+    args may be a list or tuple of strings. """
     _execvpe(file, args)
 
 def execvpe(file, args, env):
@@ -227,7 +227,7 @@
     Execute the executable file (which is searched for along $PATH)
     with argument list args and environment env , replacing the
     current process.
-    args may be a list or tupe of strings. """    
+    args may be a list or tuple of strings. """    
     _execvpe(file, args, env)
 
 _notfound = None
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 67387a9..db4a2cd 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -191,7 +191,7 @@
 					if bp:
 						bp.bpprint()
 			return
-		# parse arguments; comma has lowest precendence
+		# parse arguments; comma has lowest precedence
 		# and cannot occur in filename
 		filename = None
 		lineno = None
diff --git a/Lib/poplib.py b/Lib/poplib.py
index 97a9b0d..5a3813c 100644
--- a/Lib/poplib.py
+++ b/Lib/poplib.py
@@ -59,7 +59,7 @@
 		POP3(hostname, port=110)
 
 	NB:	the POP protocol locks the mailbox from user
-		authorisation until QUIT, so be sure to get in, suck
+		authorization until QUIT, so be sure to get in, suck
 		the messages, and quit, each time you access the
 		mailbox.
 
diff --git a/Lib/pprint.py b/Lib/pprint.py
index 346c70b..8e10e9d 100644
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -4,7 +4,7 @@
 #  This is a simple little module I wrote to make life easier.  I didn't
 #  see anything quite like it in the library, though I may have overlooked
 #  something.  I wrote this when I was trying to read some heavily nested
-#  tuples with fairly non-descriptive content.  This is modelled very much
+#  tuples with fairly non-descriptive content.  This is modeled very much
 #  after Lisp/Scheme - style pretty-printing of lists.  If you find it
 #  useful, thank small children who sleep at night.
 
diff --git a/Lib/pre.py b/Lib/pre.py
index 602980a..3086bd4 100644
--- a/Lib/pre.py
+++ b/Lib/pre.py
@@ -77,7 +77,7 @@
     M  MULTILINE   "^" matches the beginning of lines as well as the string.
                    "$" matches the end of lines as well as the string.
     S  DOTALL      "." matches any character at all, including the newline.
-    X  VERBOSE     Ignore whitespaces and comments for nicer looking RE's.
+    X  VERBOSE     Ignore whitespace and comments for nicer looking RE's.
 
 This module also defines an exception 'error'.
 
diff --git a/Lib/profile.py b/Lib/profile.py
index 18fd65d..e31363a 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -98,9 +98,9 @@
 	       subfunctions
 	[ 2] = Cumulative time spent in this frame's function, including time in
 	       all subfunctions to this frame.
-	[-3] = Name of the function that corresonds to this frame.  
+	[-3] = Name of the function that corresponds to this frame.  
 	[-2] = Actual frame that we correspond to (used to sync exception handling)
-	[-1] = Our parent 6-tuple (corresonds to frame.f_back)
+	[-1] = Our parent 6-tuple (corresponds to frame.f_back)
 
 	Timing data for each function is stored as a 5-tuple in the dictionary
 	self.timings[].  The index is always the name stored in self.cur[4].
@@ -205,7 +205,7 @@
 		return
 
 
-	# SLOW generic dispatch rountine for timer returning lists of numbers
+	# SLOW generic dispatch routine for timer returning lists of numbers
 
 	def trace_dispatch_l(self, frame, event, arg):
 		t = self.get_time() - self.t
@@ -368,7 +368,7 @@
 	#******************************************************************
 	# The following calculates the overhead for using a profiler.  The
 	# problem is that it takes a fair amount of time for the profiler
-	# to stop the stopwatch (from the time it recieves an event).
+	# to stop the stopwatch (from the time it receives an event).
 	# Similarly, there is a delay from the time that the profiler
 	# re-starts the stopwatch before the user's code really gets to
 	# continue.  The following code tries to measure the difference on
diff --git a/Lib/pstats.py b/Lib/pstats.py
index 413351d..558962e 100644
--- a/Lib/pstats.py
+++ b/Lib/pstats.py
@@ -49,16 +49,16 @@
 	The big change from the previous Profiler (in terms of raw functionality)
 	is that an "add()" method has been provided to combine Stats from
 	several distinct profile runs.  Both the constructor and the add()
-	method now take arbitrarilly many file names as arguments.
+	method now take arbitrarily many file names as arguments.
 
-	All the print methods now take an argument that indicats how many lines
+	All the print methods now take an argument that indicates how many lines
 	to print.  If the arg is a floating point number between 0 and 1.0, then
-	it is taken as a decimal percentage of the availabel lines to be printed
+	it is taken as a decimal percentage of the available lines to be printed
 	(e.g., .1 means print 10% of all available lines).  If it is an integer,
 	it is taken to mean the number of lines of data that you wish to have
 	printed.
 
-	The sort_stats() method now processes some additionaly options (i.e., in
+	The sort_stats() method now processes some additional options (i.e., in
 	addition to the old -1, 0, 1, or 2).  It takes an arbitrary number of quoted
 	strings to select the sort order.  For example sort_stats('time', 'name')
 	sorts on the major key of "internal function time", and on the minor
@@ -165,7 +165,7 @@
 			
 
 
-	# list the tuple indicies and directions for sorting,
+	# list the tuple indices and directions for sorting,
 	# along with some printable description
 	sort_arg_dict_default = {\
 		  "calls"     : (((1,-1),              ), "call count"),\
@@ -447,7 +447,7 @@
 
 class TupleComp:
 	"""This class provides a generic function for comparing any two tuples.
-	Each instance records a list of tuple-indicies (from most significant
+	Each instance records a list of tuple-indices (from most significant
 	to least significant), and sort direction (ascending or decending) for
 	each tuple-index.  The compare functions can then be used as the function
 	argument to the system sort() function when a list of tuples need to be
diff --git a/Lib/rfc822.py b/Lib/rfc822.py
index bb17614..6473149 100644
--- a/Lib/rfc822.py
+++ b/Lib/rfc822.py
@@ -193,7 +193,7 @@
         
         You may override this method if your application wants
         to bend the rules, e.g. to strip trailing whitespace,
-        or to recognise MH template separators ('--------').
+        or to recognize MH template separators ('--------').
         For convenience (e.g. for code reading from sockets) a
         line consisting of \r\n also matches.                
         """
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py
index 7a248fe..8cd21ed 100644
--- a/Lib/rlcompleter.py
+++ b/Lib/rlcompleter.py
@@ -84,7 +84,7 @@
         """Compute matches when text contains a dot.
 
         Assuming the text is of the form NAME.NAME....[NAME], and is
-        evaluabable in the globals of __main__, it will be evaluated
+        evaluatable in the globals of __main__, it will be evaluated
         and its attributes (as revealed by dir()) are used as possible
         completions.  (For class instances, class members are are also
         considered.)
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index c7865ad..e5f0b03 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -88,7 +88,7 @@
 
 class SMTPRecipientsRefused(SMTPException):
     """All recipient addresses refused.
-    The errors for each recipient are accessable thru the attribute
+    The errors for each recipient are accessible through the attribute
     'recipients', which is a dictionary of exactly the same sort as 
     SMTP.sendmail() returns.  
     """
@@ -323,7 +323,7 @@
         if code<>250:
             return (code,msg)
         self.does_esmtp=1
-        #parse the ehlo responce -ddm
+        #parse the ehlo response -ddm
         resp=string.split(self.ehlo_resp,'\n')
         del resp[0]
         for each in resp:
diff --git a/Lib/sre_constants.py b/Lib/sre_constants.py
index ef32c32..c2cecdf 100644
--- a/Lib/sre_constants.py
+++ b/Lib/sre_constants.py
@@ -172,7 +172,7 @@
 # flags
 SRE_FLAG_TEMPLATE = 1 # template mode (disable backtracking)
 SRE_FLAG_IGNORECASE = 2 # case insensitive
-SRE_FLAG_LOCALE = 4 # honour system locale
+SRE_FLAG_LOCALE = 4 # honor system locale
 SRE_FLAG_MULTILINE = 8 # treat target as multiline string
 SRE_FLAG_DOTALL = 16 # treat target as a single string
 SRE_FLAG_UNICODE = 32 # use unicode locale
diff --git a/Lib/string.py b/Lib/string.py
index 21781e7..6570fef 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -116,7 +116,7 @@
     """join(list [,sep]) -> string
 
     Return a string composed of the words in list, with
-    intervening occurences of sep.  The default separator is a
+    intervening occurrences of sep.  The default separator is a
     single space.
 
     (joinfields and join are synonymous)
diff --git a/Lib/stringold.py b/Lib/stringold.py
index 8fa7dd4..c3e6f6f 100644
--- a/Lib/stringold.py
+++ b/Lib/stringold.py
@@ -118,7 +118,7 @@
     """join(list [,sep]) -> string
 
     Return a string composed of the words in list, with
-    intervening occurences of sep.  The default separator is a
+    intervening occurrences of sep.  The default separator is a
     single space.
 
     (joinfields and join are synonymous)
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 5e8ac32..940cfd4 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -63,7 +63,7 @@
         tell()		-- return the current position
         close()		-- close the instance (make it unusable)
 The position returned by tell() and the position given to setpos()
-are compatible and have nothing to do with the actual postion in the
+are compatible and have nothing to do with the actual position in the
 file.
 The close() method is called automatically when the class instance
 is destroyed.
@@ -170,7 +170,7 @@
 		if self._hdr_size < 24:
 			raise Error, 'header size too small'
 		if self._hdr_size > 100:
-			raise Error, 'header size rediculously large'
+			raise Error, 'header size ridiculously large'
 		self._data_size = _read_u32(file)
 		if self._data_size != AUDIO_UNKNOWN_SIZE:
 			self._data_size = int(self._data_size)
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index dbaee75..e96ba81 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -42,7 +42,7 @@
          exclude=0, single=0, randomize=0):
     """Execute a test suite.
 
-    This also parses command-line options and modifies its behaviour
+    This also parses command-line options and modifies its behavior
     accordingly. 
 
     tests -- a list of strings containing test names (optional)
diff --git a/Lib/test/test_imageop.py b/Lib/test/test_imageop.py
index 63ab138..6b144c6 100755
--- a/Lib/test/test_imageop.py
+++ b/Lib/test/test_imageop.py
@@ -62,7 +62,7 @@
     image = imageop.grey2rgb(greyimage, width, height)
     
     # Convert a 8-bit deep greyscale image to a 1-bit deep image by
-    # tresholding all the pixels. The resulting image is tightly packed
+    # thresholding all the pixels. The resulting image is tightly packed
     # and is probably only useful as an argument to mono2grey. 
     if verbose:
         print 'grey2mono'
diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py
index d6dd1d7..389d2a7 100644
--- a/Lib/test/test_pty.py
+++ b/Lib/test/test_pty.py
@@ -66,7 +66,7 @@
         pass
     except:
         # We don't want this error to propagate, escape the call to
-        # os._exit(), and cause very peculiar behaviour in the calling
+        # os._exit(), and cause very peculiar behavior in the calling
         # regrtest.py !
         debug("Some other error was raised.")
         os._exit(1)
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index 0eb798f..18ce7a7 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -58,7 +58,7 @@
 def ReadTestData(root_key):
     # Check we can get default value for this key.
     val = QueryValue(root_key, test_key_name)
-    assert val=="Default value", "Registry didnt give back the correct value"
+    assert val=="Default value", "Registry didn't give back the correct value"
 
     key = OpenKey(root_key, test_key_name)
     # Read the sub-keys
@@ -70,9 +70,9 @@
             data = EnumValue(sub_key, index)
         except EnvironmentError:
             break
-        assert data in test_data, "didnt read back the correct test data."
+        assert data in test_data, "Didn't read back the correct test data"
         index = index + 1
-    assert index==len(test_data), "Didnt read the correct number of items"
+    assert index==len(test_data), "Didn't read the correct number of items"
     # Check I can directly access each item
     for value_name, value_data, value_type in test_data:
         read_val, read_typ = QueryValueEx(sub_key, value_name)
diff --git a/Lib/toaiff.py b/Lib/toaiff.py
index 7fd0153..84a7786 100644
--- a/Lib/toaiff.py
+++ b/Lib/toaiff.py
@@ -76,7 +76,7 @@
 		temps.append(fname)
 		sts = uncompress.copy(filename, fname)
 		if sts:
-			raise error, filename + ': uncomress failed'
+			raise error, filename + ': uncompress failed'
 	else:
 		fname = filename
 	try:
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 4675077..d219340 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -117,7 +117,7 @@
 	have the same meaning as the corresponding arguments to
 	print_exception().  The return value is a list of strings, each
 	ending in a newline and some containing internal newlines.  When 
-	these lines are contatenated and printed, exactly the same text is
+	these lines are concatenated and printed, exactly the same text is
 	printed as does print_exception()."""
 	if tb:
 		list = ['Traceback (most recent call last):\n']
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 7a98164..ac44249 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -773,7 +773,7 @@
             # just return it
             return url
     host, basepath = splithost(basepath) # inherit host
-    basepath, basetag = splittag(basepath) # remove extraneuous cruft
+    basepath, basetag = splittag(basepath) # remove extraneous cruft
     basepath, basequery = splitquery(basepath) # idem
     if path[:1] != '/':
         # non-absolute path name
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index c4e5348..86fdc20 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -456,7 +456,7 @@
     http_error_301 = http_error_302
 
     inf_msg = "The HTTP server returned a redirect error that would" \
-              "lead to an inifinte loop.\n" \
+              "lead to an infinite loop.\n" \
               "The last 302 error message was:\n"
 
 class ProxyHandler(BaseHandler):
diff --git a/Lib/wave.py b/Lib/wave.py
index 8bb9ff7..60c0b98 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -30,7 +30,7 @@
       tell()          -- return the current position
       close()         -- close the instance (make it unusable)
 The position returned by tell() and the position given to setpos()
-are compatible and have nothing to do with the actual postion in the
+are compatible and have nothing to do with the actual position in the
 file.
 The close() method is called automatically when the class instance
 is destroyed.
diff --git a/Lib/xml/sax/xmlreader.py b/Lib/xml/sax/xmlreader.py
index 8bc33d8..84a8bbb 100644
--- a/Lib/xml/sax/xmlreader.py
+++ b/Lib/xml/sax/xmlreader.py
@@ -50,7 +50,7 @@
     def setLocale(self, locale):
         """Allow an application to set the locale for errors and warnings. 
    
-        SAX parsers are not required to provide localisation for errors
+        SAX parsers are not required to provide localization for errors
         and warnings; if they cannot support the requested locale,
         however, they must throw a SAX exception. Applications may
         request a locale change in the middle of a parse."""
diff --git a/Lib/xmllib.py b/Lib/xmllib.py
index bbd4b54..06b599f 100644
--- a/Lib/xmllib.py
+++ b/Lib/xmllib.py
@@ -143,7 +143,7 @@
         self.__seen_starttag = 0
         self.__use_namespaces = 0
         self.__namespaces = {'xml':None}   # xml is implicitly declared
-        # backward compatipibility hack: if elements not overridden,
+        # backward compatibility hack: if elements not overridden,
         # fill it in ourselves
         if self.elements is XMLParser.elements:
             self.__fixelements()
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 321e79b..bda60dd 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -57,7 +57,7 @@
 "This module provides a simple useful replacement for\n"
 "the StringIO module that is written in C.  It does not provide the\n"
 "full generality of StringIO, but it provides enough for most\n"
-"applications and is especially useful in conjuction with the\n"
+"applications and is especially useful in conjunction with the\n"
 "pickle module.\n"
 "\n"
 "Usage:\n"
diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index 5b88be5..e2aa6a1 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -22,7 +22,7 @@
  * fine but a program with two threads using forms will probably crash (unless
  * the program takes precaution to ensure that only one thread can be in
  * this module at any time). This will have to be fixed some time.
- * (A fix will probably also have to synchronise with the gl module).
+ * (A fix will probably also have to synchronize with the gl module).
  */
 
 #include "Python.h"
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 876bac0..0807fa3 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -92,7 +92,7 @@
  * That's it!
  *
  * Well, almost.  Once we have determined prefix and exec_prefix, the
- * preprocesor variable PYTHONPATH is used to construct a path.  Each
+ * preprocessor variable PYTHONPATH is used to construct a path.  Each
  * relative path on PYTHONPATH is prefixed with prefix.  Then the directory
  * containing the shared library modules is appended.  The environment
  * variable $PYTHONPATH is inserted in front of it all.  Finally, the
diff --git a/Modules/imgfile.c b/Modules/imgfile.c
index 0b9dd54..e1e798f 100644
--- a/Modules/imgfile.c
+++ b/Modules/imgfile.c
@@ -10,7 +10,7 @@
 
 /* IMGFILE module - Interface to sgi libimage */
 
-/* XXX This modele should be done better at some point. It should return
+/* XXX This module should be done better at some point. It should return
 ** an object of image file class, and have routines to manipulate these
 ** image files in a neater way (so you can get rgb images off a greyscale
 ** file, for instance, or do a straight display without having to get the
diff --git a/Modules/md5c.c b/Modules/md5c.c
index e747725..e6e7898 100644
--- a/Modules/md5c.c
+++ b/Modules/md5c.c
@@ -143,7 +143,7 @@
 }
 
 /* MD5 finalization. Ends an MD5 message-digest operation, writing the
-   the message digest and zeroizing the context.
+  the message digest and zeroing the context.
  */
 void
 MD5Final(unsigned char digest[16], MD5_CTX *context)
diff --git a/Modules/md5module.c b/Modules/md5module.c
index 545df2b..e3d5804 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -145,7 +145,7 @@
 straightforward: use the new() to create an md5 object. You can now\n\
 feed this object with arbitrary strings using the update() method, and\n\
 at any point you can ask it for the digest (a strong kind of 128-bit\n\
-checksum, a.k.a. ``fingerprint'') of the contatenation of the strings\n\
+checksum, a.k.a. ``fingerprint'') of the concatenation of the strings\n\
 fed to it so far using the digest() method.\n\
 \n\
 Functions:\n\
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index c3caa22..772e2af 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -701,7 +701,7 @@
    a larger map size, there is no point because all the useful operations
    (len(), slicing(), sequence indexing) are limited by a C int.
 
-   Returns -1 on error, with an apprpriate Python exception raised. On
+   Returns -1 on error, with an appropriate Python exception raised. On
    success, the map size is returned. */
 static int
 _GetMapSize(PyObject *o)
diff --git a/Modules/mpzmodule.c b/Modules/mpzmodule.c
index accd967..d4882c2 100644
--- a/Modules/mpzmodule.c
+++ b/Modules/mpzmodule.c
@@ -1635,8 +1635,8 @@
 static mp_test_error( location )
 	int *location;
 {
-	/* assumptions: *alloc returns address dividable by 4,
-	mpz_* routines allocate in chunks dividable by four */
+	/* assumptions: *alloc returns address divisible by 4,
+	mpz_* routines allocate in chunks divisible by four */
 	fprintf(stderr, "MP_TEST_ERROR: location holds 0x%08d\n", *location );
 	Py_FatalError("MP_TEST_ERROR");
 } /* static mp_test_error() */
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 27203c3..b5414af 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -66,7 +66,7 @@
                             int index,
                             PyObject* element);
 
-/*  The function below is copyrigthed by Stichting Mathematisch Centrum.  The
+/*  The function below is copyrighted by Stichting Mathematisch Centrum.  The
  *  original copyright statement is included below, and continues to apply
  *  in full to the function immediately following.  All other material is
  *  original, copyrighted by Fred L. Drake, Jr. and Virginia Polytechnic
@@ -2403,7 +2403,7 @@
             res = validate_compound_stmt(tree);
             break;
             /*
-             *  Fundemental statements.
+             *  Fundamental statements.
              */
           case expr_stmt:
             res = validate_expr_stmt(tree);
@@ -2552,7 +2552,7 @@
         else
             res = validate_newline(CHILD(tree, j));
     }
-    /*  This stays in to prevent any internal failues from getting to the
+    /*  This stays in to prevent any internal failures from getting to the
      *  user.  Hopefully, this won't be needed.  If a user reports getting
      *  this, we have some debugging to do.
      */
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 93f9ea9..2cf9881 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1360,7 +1360,7 @@
 \n\
 	path: path of executable file\n\
 	args: tuple or list of arguments\n\
-	env: dictonary of strings mapping to strings";
+	env: dictionary of strings mapping to strings";
 
 static PyObject *
 posix_execve(PyObject *self, PyObject *args)
@@ -1558,7 +1558,7 @@
 	mode: mode of process creation\n\
 	path: path of executable file\n\
 	args: tuple or list of arguments\n\
-	env: dictonary of strings mapping to strings";
+	env: dictionary of strings mapping to strings";
 
 static PyObject *
 posix_spawnve(PyObject *self, PyObject *args)
@@ -1700,7 +1700,7 @@
 #include <libutil.h>
 #else
 /* BSDI does not supply a prototype for the 'openpty' and 'forkpty'
-   functions, eventhough they are included in libutil. */
+   functions, even though they are included in libutil. */
 #include <termios.h>
 extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
 extern int forkpty(int *, char *, struct termios *, struct winsize *);
@@ -3897,7 +3897,7 @@
 /* This is used for fpathconf(), pathconf(), confstr() and sysconf().
  * It maps strings representing configuration variable names to
  * integer values, allowing those functions to be called with the
- * magic names instead of poluting the module's namespace with tons of
+ * magic names instead of polluting the module's namespace with tons of
  * rarely-used constants.  There are three separate tables that use
  * these definitions.
  *
diff --git a/Modules/pypcre.c b/Modules/pypcre.c
index 2f493c0..18b319b 100644
--- a/Modules/pypcre.c
+++ b/Modules/pypcre.c
@@ -493,7 +493,7 @@
 
 caseless = ((re->options | options) & PCRE_CASELESS) != 0;
 
-/* For an anchored pattern, or an unchored pattern that has a first char, or a
+/* For an anchored pattern, or an unanchored pattern that has a first char, or a
 multiline pattern that matches only at "line starts", no further processing at
 present. */
 
@@ -1636,8 +1636,8 @@
           *code++ = (repeat_min & 255);
           }
 
-        /* If the mininum is 1 and the previous item was a character string,
-        we either have to put back the item that got cancelled if the string
+        /* If the minimum is 1 and the previous item was a character string,
+        we either have to put back the item that got canceled if the string
         length was 1, or add the character back onto the end of a longer
         string. For a character type nothing need be done; it will just get
         put back naturally. Note that the final character is always going to
@@ -1649,7 +1649,7 @@
           }
 
         /*  For a single negated character we also have to put back the
-        item that got cancelled. */
+        item that got canceled. */
 
         else if (*previous == OP_NOT) code++;
 
diff --git a/Modules/regexpr.c b/Modules/regexpr.c
index 98fa04c..70b7ee1 100644
--- a/Modules/regexpr.c
+++ b/Modules/regexpr.c
@@ -124,7 +124,7 @@
 	/* Structure to encapsulate the stack. */
 	struct
 	{
-		/* index into the curent page.  If index == 0 and you need
+		/* index into the current page.  If index == 0 and you need
 		 * to pop an item, move to the previous page and set index
 		 * = STACK_PAGE_SIZE - 1.  Otherwise decrement index to
 		 * push a page. If index == STACK_PAGE_SIZE and you need
diff --git a/Modules/regexpr.h b/Modules/regexpr.h
index dd66325..2aee62d 100644
--- a/Modules/regexpr.h
+++ b/Modules/regexpr.h
@@ -119,7 +119,7 @@
 
 int re_search(regexp_t compiled, unsigned char *string, int size, int startpos,
 	      int range, regexp_registers_t regs);
-/* This rearches for a substring matching the regexp.  This returns the
+/* This searches for a substring matching the regexp.  This returns the
  * first index at which a match is found.  range specifies at how many
  * positions to try matching; positive values indicate searching
  * forwards, and negative values indicate searching backwards.  mstop
diff --git a/Modules/resource.c b/Modules/resource.c
index 373e8d2..c0f52cf 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -70,8 +70,8 @@
 		ru.ru_msgsnd,		     /* messages sent */
 		ru.ru_msgrcv,		     /* messages received */
 		ru.ru_nsignals,		     /* signals received */
-		ru.ru_nvcsw,		     /* voluntary context switchs */
-		ru.ru_nivcsw		     /* involuntary context switchs */
+		ru.ru_nvcsw,		     /* voluntary context switches */
+		ru.ru_nivcsw		     /* involuntary context switches */
 		);
 }
 
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c
index 4b0af22..a883f6a 100644
--- a/Modules/rgbimgmodule.c
+++ b/Modules/rgbimgmodule.c
@@ -553,7 +553,7 @@
  *	represents one pixel.  xsize and ysize specify the dimensions of
  *	the pixel array.  zsize specifies what kind of image file to
  *	write out.  if zsize is 1, the luminance of the pixels are
- *	calculated, and a sinlge channel black and white image is saved.
+ *	calculated, and a single channel black and white image is saved.
  *	If zsize is 3, an RGB image file is saved.  If zsize is 4, an
  *	RGBA image file is saved.
  *
diff --git a/Modules/rotormodule.c b/Modules/rotormodule.c
index 70ba032..6c0aff6 100644
--- a/Modules/rotormodule.c
+++ b/Modules/rotormodule.c
@@ -23,7 +23,7 @@
 ******************************************************************/
 
 /* This creates an encryption and decryption engine I am calling
-   a rotor due to the original design was a harware rotor with
+   a rotor due to the original design was a hardware rotor with
    contacts used in Germany during WWII.
 
 Rotor Module:
@@ -43,7 +43,7 @@
 NOTE: the {en,de}cryptmore() methods use the setup that was
       established via the {en,de}crypt calls. They will NOT
       re-initalize the rotors unless: 1) They have not been
-      initalized with {en,de}crypt since the last setkey() call;
+      initialized with {en,de}crypt since the last setkey() call;
       2) {en,de}crypt has not been called for this rotor yet.
 
 NOTE: you MUST use the SAME key in rotor.newrotor()
@@ -209,7 +209,7 @@
 }
 
 
-/* These routines impliment the rotor itself */
+/* These routines implement the rotor itself */
 
 /*  Here is a fairly sophisticated {en,de}cryption system.  It is based on
     the idea of a "rotor" machine.  A bunch of rotors, each with a
@@ -217,7 +217,7 @@
     after encrypting one character.  The current state of the rotors is
     used to encrypt one character.
 
-    The code is smart enought to tell if your alphabet has a number of
+    The code is smart enough to tell if your alphabet has a number of
     characters equal to a power of two.  If it does, it uses logical
     operations, if not it uses div and mod (both require a division).
 
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 612d0d3..62a17a3 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -167,7 +167,7 @@
 joinfields(list [,sep]) -> string\n\
 \n\
 Return a string composed of the words in list, with\n\
-intervening occurences of sep.  Sep defaults to a single\n\
+intervening occurrences of sep.  Sep defaults to a single\n\
 space.\n\
 \n\
 (join and joinfields are synonymous)";
@@ -1040,10 +1040,10 @@
 /*
    mymemreplace
 
-   Return a string in which all occurences of PAT in memory STR are
+   Return a string in which all occurrences of PAT in memory STR are
    replaced with SUB.
 
-   If length of PAT is less than length of STR or there are no occurences
+   If length of PAT is less than length of STR or there are no occurrences
    of PAT in STR, then the original string is returned. Otherwise, a new
    string is allocated here and returned.
 
diff --git a/Modules/sunaudiodev.c b/Modules/sunaudiodev.c
index 5ef2c06..d4e5ec9 100644
--- a/Modules/sunaudiodev.c
+++ b/Modules/sunaudiodev.c
@@ -258,7 +258,7 @@
 		PyErr_SetFromErrno(SunAudioError);
 		return NULL;
 	}
-	/* x_ocount is in bytes, wheras play.samples is in frames */
+	/* x_ocount is in bytes, whereas play.samples is in frames */
 	/* we want frames */
 	return PyInt_FromLong(self->x_ocount / (ai.play.channels *
 						ai.play.precision / 8) -
diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index a9891c4..2381ff8 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -36,7 +36,7 @@
   - Changed arg parsing to use PyArg_ParseTuple.
   - Added PyErr_Clear() call(s) where needed.
   - Fix core dumps if user message contains format specifiers.
-  - Change openlog arg defaults to match normal syslog behaviour.
+  - Change openlog arg defaults to match normal syslog behavior.
   - Plug memory leak in openlog().
   - Fix setlogmask() to return previous mask value.
 
diff --git a/Modules/tclNotify.c b/Modules/tclNotify.c
index 429416e..422c944 100644
--- a/Modules/tclNotify.c
+++ b/Modules/tclNotify.c
@@ -119,7 +119,7 @@
  *	None.
  *
  * Side effects:
- *	Clears the notifier intialization flag.
+ *	Clears the notifier initialization flag.
  *
  *----------------------------------------------------------------------
  */
@@ -202,7 +202,7 @@
  *	None.
  *
  * Side effects:
- *	The given event source is cancelled, so its procedure will
+ *	The given event source is canceled, so its procedure will
  *	never again be called.  If no such source exists, nothing
  *	happens.
  *
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 3643ce9..d1eb451 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -1077,7 +1077,7 @@
 	}
 	func = instance_getattr(inst, __contains__);
 	if(func == NULL) {
-		/* fall back to previous behaviour */
+		/* fall back to previous behavior */
 		int i, cmp_res;
 
 		if(!PyErr_ExceptionMatches(PyExc_AttributeError))
@@ -1160,7 +1160,7 @@
 		return result;
 	if (halfbinop(w, v, ropname, &result, thisfunc, 1) <= 0)
 		return result;
-	/* Sigh -- special case for comnparisons */
+	/* Sigh -- special case for comparisons */
 	if (strcmp(opname, "__cmp__") == 0) {
 		long c = (v < w) ? -1 : (v > w) ? 1 : 0;
 		return PyInt_FromLong(c);
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 76417b9..819fadd 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -185,7 +185,7 @@
 		/* Cycle through GF(2^n)-{0} */
 		incr = incr << 1;
 		if (incr > mask)
-			incr ^= mp->ma_poly; /* This will implicitely clear
+			incr ^= mp->ma_poly; /* This will implicitly clear
 						the highest bit */
 	}
 }
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 022c298..20bb370 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -311,7 +311,7 @@
 /*
 Integer overflow checking used to be done using a double, but on 64
 bit machines (where both long and double are 64 bit) this fails
-because the double doesn't have enouvg precision.  John Tromp suggests
+because the double doesn't have enough precision.  John Tromp suggests
 the following algorithm:
 
 Suppose again we normalize a and b to be nonnegative.
diff --git a/Objects/object.c b/Objects/object.c
index 64d8a82..ef3455e 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -337,7 +337,7 @@
 
 PyObject *_PyCompareState_Key;
 
-/* _PyCompareState_nesting is incremented beforing call compare (for
+/* _PyCompareState_nesting is incremented before calling compare (for
    some types) and decremented on exit.  If the count exceeds the
    nesting limit, enable code to detect circular data structures.
 */
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index ab44e91..80b9def 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -283,7 +283,7 @@
 		return 0;
 	}
 
-	/* figure out which quote to use; single is prefered */
+	/* figure out which quote to use; single is preferred */
 	quote = '\'';
 	if (strchr(op->ob_sval, '\'') && !strchr(op->ob_sval, '"'))
 		quote = '"';
@@ -321,7 +321,7 @@
 		register char *p;
 		int quote;
 
-		/* figure out which quote to use; single is prefered */
+		/* figure out which quote to use; single is preferred */
 		quote = '\'';
 		if (strchr(op->ob_sval, '\'') && !strchr(op->ob_sval, '"'))
 			quote = '"';
@@ -1416,10 +1416,10 @@
 /*
    mymemreplace
 
-   Return a string in which all occurences of PAT in memory STR are
+   Return a string in which all occurrences of PAT in memory STR are
    replaced with SUB.
 
-   If length of PAT is less than length of STR or there are no occurences
+   If length of PAT is less than length of STR or there are no occurrences
    of PAT in STR, then the original string is returned. Otherwise, a new
    string is allocated here and returned.
 
@@ -1689,7 +1689,7 @@
     if (!PyArg_ParseTuple(args, "|i:expandtabs", &tabsize))
 	return NULL;
 
-    /* First pass: determine size of ouput string */
+    /* First pass: determine size of output string */
     i = j = 0;
     e = PyString_AS_STRING(self) + PyString_GET_SIZE(self);
     for (p = PyString_AS_STRING(self); p < e; p++)
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 02d1b0d..12c5be4 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -3198,7 +3198,7 @@
     if (v == NULL)
 	goto onError;
 
-    /* Shortcut for emtpy or interned objects */
+    /* Shortcut for empty or interned objects */
     if (v == u) {
 	Py_DECREF(u);
 	Py_DECREF(v);
@@ -3385,7 +3385,7 @@
     if (!PyArg_ParseTuple(args, "|i:expandtabs", &tabsize))
 	return NULL;
 
-    /* First pass: determine size of ouput string */
+    /* First pass: determine size of output string */
     i = j = 0;
     e = self->str + self->length;
     for (p = self->str; p < e; p++)
diff --git a/PC/_winreg.c b/PC/_winreg.c
index 75ceb8b..84bf3c4 100644
--- a/PC/_winreg.c
+++ b/PC/_winreg.c
@@ -658,7 +658,7 @@
 ** Note that fixupMultiSZ and countString have both had changes
 ** made to support "incorrect strings".  The registry specification
 ** calls for strings to be terminated with 2 null bytes.  It seems
-** some commercial packages install strings whcich dont conform,
+** some commercial packages install strings which dont conform,
 ** causing this code to fail - however, "regedit" etc still work
 ** with these strings (ie only we dont!).
 */
diff --git a/Parser/pgen.c b/Parser/pgen.c
index e5d5d37..dbaadbd 100644
--- a/Parser/pgen.c
+++ b/Parser/pgen.c
@@ -575,7 +575,7 @@
    equivalent to another oner.  This is NOT Algorithm 3.3 from
    [Aho&Ullman 77].  It does not always finds the minimal DFA,
    but it does usually make a much smaller one...  (For an example
-   of sub-optimal behaviour, try S: x a b+ | y a b+.)
+   of sub-optimal behavior, try S: x a b+ | y a b+.)
 */
 
 static int
diff --git a/Python/ceval.c b/Python/ceval.c
index bcdd98f..3225685 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2769,7 +2769,7 @@
 			/* Call the base's *type*, if it is callable.
 			   This code is a hook for Donald Beaudry's
 			   and Jim Fulton's type extensions.  In
-			   unexended Python it will never be triggered
+			   unextended Python it will never be triggered
 			   since its types are not callable.
 			   Ditto: call the bases's *class*, if it has
 			   one.  This makes the same thing possible
diff --git a/Python/codecs.c b/Python/codecs.c
index 27331ab..20791f5 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -146,7 +146,7 @@
     }
 
     /* Convert the encoding to a normalized Python string: all
-       characters are converted to lower case, spaces and hypens are
+       characters are converted to lower case, spaces and hyphens are
        replaced with underscores. */
     v = normalizestring(encoding);
     if (v == NULL)
@@ -427,7 +427,7 @@
 	_PyCodec_SearchCache = PyDict_New();
     if (_PyCodec_SearchPath == NULL || 
 	_PyCodec_SearchCache == NULL)
-	Py_FatalError("can't intialize codec registry");
+	Py_FatalError("can't initialize codec registry");
 }
 
 void _PyCodecRegistry_Fini()
diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c
index 9c6b60a..04e6293 100644
--- a/Python/dynload_aix.c
+++ b/Python/dynload_aix.c
@@ -189,7 +189,7 @@
 	/*
 	-- Invoke load() with L_NOAUTODEFER leaving the imported symbols
 	-- of the shared module unresolved. Thus we have to resolve them
-	-- explicitely with loadbind. The new module is loaded, then we
+	-- explicitly with loadbind. The new module is loaded, then we
 	-- resolve its symbols using the list of already loaded modules
 	-- (only those that belong to the python executable). Get these
 	-- with loadquery(L_GETINFO).
diff --git a/Python/dynload_next.c b/Python/dynload_next.c
index 2d02cc6..a352edc 100644
--- a/Python/dynload_next.c
+++ b/Python/dynload_next.c
@@ -162,7 +162,7 @@
 			return NULL;
 		}
 		if (!NSIsSymbolNameDefined(funcname)) {
-			/* UnlinkModule() isn't implimented in current versions, but calling it does no harm */
+			/* UnlinkModule() isn't implemented in current versions, but calling it does no harm */
 			NSUnLinkModule(newModule, FALSE);
 			PyErr_Format(PyExc_ImportError,
 				     "Loaded module does not contain symbol %.200s",
diff --git a/Python/exceptions.c b/Python/exceptions.c
index 05e318e..b63daee 100644
--- a/Python/exceptions.c
+++ b/Python/exceptions.c
@@ -183,7 +183,7 @@
 {
     PyObject* self = PyTuple_GetItem(args, 0);
     if (!self) {
-	/* Watch out for being called to early in the bootstapping process */
+	/* Watch out for being called to early in the bootstrapping process */
 	if (PyExc_TypeError) {
 	    PyErr_SetString(PyExc_TypeError,
 	     "unbound method must be called with class instance 1st argument");
diff --git a/Python/getargs.c b/Python/getargs.c
index 11754ef..3ed65a3 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -13,7 +13,7 @@
 /* XXX There are several unchecked sprintf or strcat calls in this file.
    XXX The only way these can become a danger is if some C code in the
    XXX Python source (or in an extension) uses ridiculously long names
-   XXX or riduculously deep nesting in format strings. */
+   XXX or ridiculously deep nesting in format strings. */
 
 #include "Python.h"
 
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index afb9589..cc942a3 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -75,7 +75,7 @@
 
 static int initialized = 0;
 
-/* API to access the initialized flag -- useful for eroteric use */
+/* API to access the initialized flag -- useful for esoteric use */
 
 int
 Py_IsInitialized()
diff --git a/Python/strtod.c b/Python/strtod.c
index a0991d5..0673fca 100644
--- a/Python/strtod.c
+++ b/Python/strtod.c
@@ -69,7 +69,7 @@
 	register char *sp, *dp;
 	register int c;
 	char *buforg, *buflim;
-	char buffer[64];		/* 45-digit significand + */
+	char buffer[64];		/* 45-digit significant + */
 					/* 13-digit exponent */
 	sp = str;
 	while (*sp == ' ') sp++;
diff --git a/Python/thread_lwp.h b/Python/thread_lwp.h
index fcfabf5..5d73242 100644
--- a/Python/thread_lwp.h
+++ b/Python/thread_lwp.h
@@ -13,7 +13,7 @@
 #include <lwp/stackdep.h>
 
 #define STACKSIZE	1000	/* stacksize for a thread */
-#define NSTACKS		2	/* # stacks to be put in cache initialy */
+#define NSTACKS		2	/* # stacks to be put in cache initially */
 
 struct lock {
 	int lock_locked;
diff --git a/Python/thread_os2.h b/Python/thread_os2.h
index 2371aae..0709e06 100644
--- a/Python/thread_os2.h
+++ b/Python/thread_os2.h
@@ -122,7 +122,7 @@
     PyThread_init_thread();
 
   DosCreateMutexSem(NULL,  /* Sem name      */
-                    &aLock, /* the semaphone */
+                    &aLock, /* the semaphore */
                     0,     /* shared ?      */
                     0);    /* initial state */  
 
diff --git a/Tools/freeze/checkextensions_win32.py b/Tools/freeze/checkextensions_win32.py
index e90bdab..85c3a3c 100644
--- a/Tools/freeze/checkextensions_win32.py
+++ b/Tools/freeze/checkextensions_win32.py
@@ -1,7 +1,7 @@
 """Extension management for Windows.
 
 Under Windows it is unlikely the .obj files are of use, as special compiler options
-are needed (primarily to toggle the behaviour of "public" symbols.
+are needed (primarily to toggle the behavior of "public" symbols.
 
 I dont consider it worth parsing the MSVC makefiles for compiler options.  Even if
 we get it just right, a specific freeze application may have specific compiler
diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py
index 95f0662..eea8134 100755
--- a/Tools/freeze/freeze.py
+++ b/Tools/freeze/freeze.py
@@ -54,7 +54,7 @@
               'console' (default), 'windows', 'service' or 'com_dll'
               
 -w:           Toggle Windows (NT or 95) behavior.
-              (For debugging only -- on a win32 platform, win32 behaviour
+              (For debugging only -- on a win32 platform, win32 behavior
               is automatic.)
 
 Arguments:
diff --git a/Tools/freeze/modulefinder.py b/Tools/freeze/modulefinder.py
index 7260614..a75e2f3 100644
--- a/Tools/freeze/modulefinder.py
+++ b/Tools/freeze/modulefinder.py
@@ -25,7 +25,7 @@
 # Modulefinder does a good job at simulating Python's, but it can not
 # handle __path__ modifications packages make at runtime.  Therefore there
 # is a mechanism whereby you can register extra paths in this map for a
-# package, and it will be honoured.
+# package, and it will be honored.
 
 # Note this is a mapping is lists of paths.
 packagePathMap = {}
@@ -365,7 +365,7 @@
         keys = self.badmodules.keys()
         keys.sort()
         for key in keys:
-            # ... but not if they were explicitely excluded.
+            # ... but not if they were explicitly excluded.
             if key not in self.excludes:
                 mods = self.badmodules[key].keys()
                 mods.sort()
