diff --git a/Lib/difflib.py b/Lib/difflib.py
index 361be6e..052a627 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -1329,7 +1329,7 @@
     (from line tuple, to line tuple, boolean flag)
 
     from/to line tuple -- (line num, line text)
-        line num -- integer or None (to indicate a context seperation)
+        line num -- integer or None (to indicate a context separation)
         line text -- original line text with following markers inserted:
             '\0+' -- marks start of added text
             '\0-' -- marks start of deleted text
diff --git a/Lib/distutils/tests/test_core.py b/Lib/distutils/tests/test_core.py
index 170d767..7f021dc 100644
--- a/Lib/distutils/tests/test_core.py
+++ b/Lib/distutils/tests/test_core.py
@@ -57,7 +57,7 @@
 
     def test_run_setup_uses_current_dir(self):
         # This tests that the setup script is run with the current directory
-        # as it's own current directory; this was temporarily broken by a
+        # as its own current directory; this was temporarily broken by a
         # previous patch when TESTFN did not use the current directory.
         sys.stdout = io.StringIO()
         cwd = os.getcwd()
diff --git a/Lib/email/message.py b/Lib/email/message.py
index 471d46b..412a550 100644
--- a/Lib/email/message.py
+++ b/Lib/email/message.py
@@ -21,7 +21,7 @@
 SEMISPACE = '; '
 
 # Regular expression that matches `special' characters in parameters, the
-# existance of which force quoting of the parameter value.
+# existence of which force quoting of the parameter value.
 tspecials = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]')
 
 
diff --git a/Lib/idlelib/AutoComplete.py b/Lib/idlelib/AutoComplete.py
index 9d9a81e..fa1733f 100644
--- a/Lib/idlelib/AutoComplete.py
+++ b/Lib/idlelib/AutoComplete.py
@@ -67,7 +67,7 @@
 
     def try_open_completions_event(self, event):
         """Happens when it would be nice to open a completion list, but not
-        really neccesary, for example after an dot, so function
+        really necessary, for example after an dot, so function
         calls won't be made.
         """
         lastchar = self.text.get("insert-1c")
@@ -79,7 +79,7 @@
                                          COMPLETE_FILES)
 
     def autocomplete_event(self, event):
-        """Happens when the user wants to complete his word, and if neccesary,
+        """Happens when the user wants to complete his word, and if necessary,
         open a completion list after that (if there is more than one
         completion)
         """
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 3279299..6ff8e6f 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -339,7 +339,7 @@
   window raising, especially in the Windows menu and in the debugger.
   IDLEfork 763524.
 
-- If user passes a non-existant filename on the commandline, just
+- If user passes a non-existent filename on the commandline, just
   open a new file, don't raise a dialog.  IDLEfork 854928.
 
 
diff --git a/Lib/io.py b/Lib/io.py
index c2c1067..d41da60 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -3,7 +3,7 @@
 
 At the top of the I/O hierarchy is the abstract base class IOBase. It
 defines the basic interface to a stream. Note, however, that there is no
-seperation between reading and writing to streams; implementations are
+separation between reading and writing to streams; implementations are
 allowed to throw an IOError if they do not support a given operation.
 
 Extending IOBase is RawIOBase which deals simply with the reading and
@@ -1371,7 +1371,7 @@
     enabled.  With this enabled, on input, the lines endings '\n', '\r',
     or '\r\n' are translated to '\n' before being returned to the
     caller. Conversely, on output, '\n' is translated to the system
-    default line seperator, os.linesep. If newline is any other of its
+    default line separator, os.linesep. If newline is any other of its
     legal values, that newline becomes the newline when the file is read
     and it is returned untranslated. On output, '\n' is converted to the
     newline.
diff --git a/Lib/optparse.py b/Lib/optparse.py
index 2511595..7b1734c 100644
--- a/Lib/optparse.py
+++ b/Lib/optparse.py
@@ -1563,7 +1563,7 @@
         """print_usage(file : file = stdout)
 
         Print the usage message for the current program (self.usage) to
-        'file' (default stdout).  Any occurence of the string "%prog" in
+        'file' (default stdout).  Any occurrence of the string "%prog" in
         self.usage is replaced with the name of the current program
         (basename of sys.argv[0]).  Does nothing if self.usage is empty
         or not defined.
@@ -1581,7 +1581,7 @@
         """print_version(file : file = stdout)
 
         Print the version message for this program (self.version) to
-        'file' (default stdout).  As with print_usage(), any occurence
+        'file' (default stdout).  As with print_usage(), any occurrence
         of "%prog" in self.version is replaced by the current program's
         name.  Does nothing if self.version is empty or undefined.
         """
diff --git a/Lib/smtpd.py b/Lib/smtpd.py
index ea59aef..3dc9793 100755
--- a/Lib/smtpd.py
+++ b/Lib/smtpd.py
@@ -419,7 +419,7 @@
         s = StringIO(data)
         msg = Message.Message(s)
         # These headers are required for the proper execution of Mailman.  All
-        # MTAs in existance seem to add these if the original message doesn't
+        # MTAs in existence seem to add these if the original message doesn't
         # have them.
         if not msg.get('from'):
             msg['From'] = mailfrom
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index bd158f6..c461b25 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -446,9 +446,9 @@
     To capture standard error in the result, use stderr=subprocess.STDOUT.
 
     >>> check_output(["/bin/sh", "-c",
-                      "ls -l non_existant_file ; exit 0"],
+                      "ls -l non_existent_file ; exit 0"],
                      stderr=subprocess.STDOUT)
-    'ls: non_existant_file: No such file or directory\n'
+    'ls: non_existent_file: No such file or directory\n'
     """
     if 'stdout' in kwargs:
         raise ValueError('stdout argument not allowed, it will be overridden.')
@@ -850,7 +850,7 @@
                     # cause random failures on win9x.  Specifically a
                     # dialog: "Your program accessed mem currently in
                     # use at xxx" and a hopeful warning about the
-                    # stability of your system.  Cost is Ctrl+C wont
+                    # stability of your system.  Cost is Ctrl+C won't
                     # kill children.
                     creationflags |= CREATE_NEW_CONSOLE
 
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index be7daf1..4264da3 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1753,7 +1753,7 @@
     def getmember(self, name):
         """Return a TarInfo object for member `name'. If `name' can not be
            found in the archive, KeyError is raised. If a member occurs more
-           than once in the archive, its last occurence is assumed to be the
+           than once in the archive, its last occurrence is assumed to be the
            most up-to-date version.
         """
         tarinfo = self._getmember(name)
diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py
index 5debee9..e8b2ca5 100644
--- a/Lib/test/test_calendar.py
+++ b/Lib/test/test_calendar.py
@@ -170,7 +170,7 @@
 
 class OutputTestCase(unittest.TestCase):
     def normalize_calendar(self, s):
-        # Filters out locale dependant strings
+        # Filters out locale dependent strings
         def neitherspacenordigit(c):
             return not c.isspace() and not c.isdigit()
 
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index dcc1a98..a8418ca 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -82,11 +82,11 @@
         # Make sure the right things happen for remove_option();
         # added to include check for SourceForge bug #123324:
         self.failUnless(cf.remove_option('Foo Bar', 'foo'),
-                        "remove_option() failed to report existance of option")
+                        "remove_option() failed to report existence of option")
         self.failIf(cf.has_option('Foo Bar', 'foo'),
                     "remove_option() failed to remove option")
         self.failIf(cf.remove_option('Foo Bar', 'foo'),
-                    "remove_option() failed to report non-existance of option"
+                    "remove_option() failed to report non-existence of option"
                     " that was removed")
 
         self.assertRaises(configparser.NoSectionError,
@@ -254,7 +254,7 @@
         file1 = support.findfile("cfgparser.1")
         # check when we pass a mix of readable and non-readable files:
         cf = self.newconfig()
-        parsed_files = cf.read([file1, "nonexistant-file"])
+        parsed_files = cf.read([file1, "nonexistent-file"])
         self.assertEqual(parsed_files, [file1])
         self.assertEqual(cf.get("Foo Bar", "foo"), "newbar")
         # check when we pass only a filename:
@@ -264,7 +264,7 @@
         self.assertEqual(cf.get("Foo Bar", "foo"), "newbar")
         # check when we pass only missing files:
         cf = self.newconfig()
-        parsed_files = cf.read(["nonexistant-file"])
+        parsed_files = cf.read(["nonexistent-file"])
         self.assertEqual(parsed_files, [])
         # check when we pass no files:
         cf = self.newconfig()
diff --git a/Lib/test/test_codeccallbacks.py b/Lib/test/test_codeccallbacks.py
index 549a348..56f3ac1 100644
--- a/Lib/test/test_codeccallbacks.py
+++ b/Lib/test/test_codeccallbacks.py
@@ -109,7 +109,7 @@
         # useful that the error handler is not called for every single
         # unencodable character, but for a complete sequence of
         # unencodable characters, otherwise we would output many
-        # unneccessary escape sequences.
+        # unnecessary escape sequences.
 
         def uninamereplace(exc):
             if not isinstance(exc, UnicodeEncodeError):
diff --git a/Lib/test/test_descrtut.py b/Lib/test/test_descrtut.py
index 11a3422..2db3d33 100644
--- a/Lib/test/test_descrtut.py
+++ b/Lib/test/test_descrtut.py
@@ -54,7 +54,7 @@
     {1: 3.25}
     >>> print(a[1])                     # show the new item
     3.25
-    >>> print(a[0])                     # a non-existant item
+    >>> print(a[0])                     # a non-existent item
     0.0
     >>> a.merge({1:100, 2:200})         # use a dict method
     >>> print(sortdict(a))              # show the result
diff --git a/Lib/test/test_funcattrs.py b/Lib/test/test_funcattrs.py
index 7aab8b8..5e47d6b 100644
--- a/Lib/test/test_funcattrs.py
+++ b/Lib/test/test_funcattrs.py
@@ -167,7 +167,7 @@
 
     def test_unset_attr(self):
         for func in [self.b, self.fi.a]:
-            try:  func.non_existant_attr
+            try:  func.non_existent_attr
             except AttributeError: pass
             else: self.fail("using unknown attributes should raise "
                             "AttributeError")
diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py
index 16ca301..4529a8f 100644
--- a/Lib/test/test_urllib2net.py
+++ b/Lib/test/test_urllib2net.py
@@ -99,7 +99,7 @@
     def test_ftp(self):
         urls = [
             'ftp://ftp.kernel.org/pub/linux/kernel/README',
-            'ftp://ftp.kernel.org/pub/linux/kernel/non-existant-file',
+            'ftp://ftp.kernel.org/pub/linux/kernel/non-existent-file',
             #'ftp://ftp.kernel.org/pub/leenox/kernel/test',
             'ftp://gatekeeper.research.compaq.com/pub/DEC/SRC'
                 '/research-reports/00README-Legal-Rules-Regs',
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index af49170..3d519ed 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -3300,7 +3300,7 @@
         """Return the color (red, green, blue) of the pixel at X,Y."""
         return self.tk.call(self.name, 'get', x, y)
     def put(self, data, to=None):
-        """Put row formated colors to image starting from
+        """Put row formatted colors to image starting from
         position TO, e.g. image.put("{red green} {blue yellow}", to=(4,6))"""
         args = (self.name, 'put', data)
         if to:
diff --git a/Lib/tkinter/test/test_ttk/test_style.py b/Lib/tkinter/test/test_ttk/test_style.py
index cd9d740..3eebb64 100644
--- a/Lib/tkinter/test/test_ttk/test_style.py
+++ b/Lib/tkinter/test/test_ttk/test_style.py
@@ -61,7 +61,7 @@
 
         # correct layout, but "option" doesn't exist as option
         self.failUnlessRaises(tkinter.TclError, style.layout, 'Treeview',
-            [('name', {'option': 'inexistant'})])
+            [('name', {'option': 'inexistent'})])
 
 
     def test_theme_use(self):
diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py
index af45ca0..29fdce0 100644
--- a/Lib/tkinter/test/test_ttk/test_widgets.py
+++ b/Lib/tkinter/test/test_ttk/test_widgets.py
@@ -861,9 +861,9 @@
 
         # bad values
         self.failUnlessRaises(tkinter.TclError,
-            self.tv.reattach, 'nonexistant', '', 'end')
+            self.tv.reattach, 'nonexistent', '', 'end')
         self.failUnlessRaises(tkinter.TclError,
-            self.tv.detach, 'nonexistant')
+            self.tv.detach, 'nonexistent')
         self.failUnlessRaises(tkinter.TclError,
             self.tv.reattach, item2, 'otherparent', 'end')
         self.failUnlessRaises(tkinter.TclError,
@@ -897,7 +897,7 @@
         self.tv.delete(item1)
         self.failUnlessEqual(self.tv.focus(), '')
 
-        # try focusing inexistant item
+        # try focusing inexistent item
         self.failUnlessRaises(tkinter.TclError, self.tv.focus, 'hi')
 
 
@@ -1064,11 +1064,11 @@
         self.failUnlessEqual(self.tv.item(item, values=None), (123, 'a'))
         self.failUnlessEqual(self.tv.set(item), {'B': 123})
 
-        # inexistant column
+        # inexistent column
         self.failUnlessRaises(tkinter.TclError, self.tv.set, item, 'A')
         self.failUnlessRaises(tkinter.TclError, self.tv.set, item, 'A', 'b')
 
-        # inexistant item
+        # inexistent item
         self.failUnlessRaises(tkinter.TclError, self.tv.set, 'notme')
 
 
diff --git a/Lib/turtle.py b/Lib/turtle.py
index 55da4e9..ded2b27 100644
--- a/Lib/turtle.py
+++ b/Lib/turtle.py
@@ -2793,7 +2793,7 @@
 
     def _drawturtle(self):
         """Manages the correct rendering of the turtle with respect to
-        its shape, resizemode, strech and tilt etc."""
+        its shape, resizemode, stretch and tilt etc."""
         screen = self.screen
         shape = screen._shapes[self.turtle.shapeIndex]
         ttype = shape._type
diff --git a/Lib/wsgiref/headers.py b/Lib/wsgiref/headers.py
index 4e0076c..025067a 100644
--- a/Lib/wsgiref/headers.py
+++ b/Lib/wsgiref/headers.py
@@ -6,7 +6,7 @@
 """
 
 # Regular expression that matches `special' characters in parameters, the
-# existance of which force quoting of the parameter value.
+# existence of which force quoting of the parameter value.
 import re
 tspecials = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]')
 
