diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst
index 7f275a4..82eae01 100644
--- a/Doc/howto/clinic.rst
+++ b/Doc/howto/clinic.rst
@@ -1583,7 +1583,7 @@
 
     preserve
 
-This tells Clinic that the current contents of the output should be kept, unmodifed.
+This tells Clinic that the current contents of the output should be kept, unmodified.
 This is used internally by Clinic when dumping output into ``file`` files; wrapping
 it in a Clinic block lets Clinic use its existing checksum functionality to ensure
 the file was not modified by hand before it gets overwritten.
diff --git a/Doc/howto/sockets.rst b/Doc/howto/sockets.rst
index 04394d4..bc71d85 100644
--- a/Doc/howto/sockets.rst
+++ b/Doc/howto/sockets.rst
@@ -106,7 +106,7 @@
 There's actually 3 general ways in which this loop could work - dispatching a
 thread to handle ``clientsocket``, create a new process to handle
 ``clientsocket``, or restructure this app to use non-blocking sockets, and
-mulitplex between our "server" socket and any active ``clientsocket``\ s using
+multiplex between our "server" socket and any active ``clientsocket``\ s using
 ``select``. More about that later. The important thing to understand now is
 this: this is *all* a "server" socket does. It doesn't send any data. It doesn't
 receive any data. It just produces "client" sockets. Each ``clientsocket`` is
diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst
index eeae96a..a9a5f5a 100644
--- a/Doc/library/configparser.rst
+++ b/Doc/library/configparser.rst
@@ -66,7 +66,7 @@
 <#supported-ini-file-structure>`_.  Essentially, the file
 consists of sections, each of which contains keys with values.
 :mod:`configparser` classes can read and write such files.  Let's start by
-creating the above configuration file programatically.
+creating the above configuration file programmatically.
 
 .. doctest::
 
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index ff7cc91..06e9ea3 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -629,7 +629,7 @@
     .. method:: path_stats(path)
 
         Optional abstract method which returns a :class:`dict` containing
-        metadata about the specifed path.  Supported dictionary keys are:
+        metadata about the specified path.  Supported dictionary keys are:
 
         - ``'mtime'`` (mandatory): an integer or floating-point number
           representing the modification time of the source code;
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index e73d8ee..4265bc2 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -1900,7 +1900,7 @@
    On Unix, *path* can be of type :class:`str` or :class:`bytes` (use
    :func:`~os.fsencode` and :func:`~os.fsdecode` to encode and decode
    :class:`bytes` paths). On Windows, *path* must be of type :class:`str`.
-   On both sytems, the type of the :attr:`~DirEntry.name` and
+   On both systems, the type of the :attr:`~DirEntry.name` and
    :attr:`~DirEntry.path` attributes of each :class:`DirEntry` will be of
    the same type as *path*.
 
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index 48311c5..02f2350 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -1211,7 +1211,7 @@
    much data, if any, was successfully sent.
 
    .. versionchanged:: 3.5
-      The socket timeout is no more reset each time data is sent successfuly.
+      The socket timeout is no more reset each time data is sent successfully.
       The socket timeout is now the maximum total duration to send all data.
 
    .. versionchanged:: 3.5
diff --git a/Include/longobject.h b/Include/longobject.h
index aed59ce..2a2eecf 100644
--- a/Include/longobject.h
+++ b/Include/longobject.h
@@ -159,7 +159,7 @@
      example, if is_signed is 0 and there are more digits in the v than
      fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of
      being large enough to hold a sign bit.  OverflowError is set in this
-     case, but bytes holds the least-signficant n bytes of the true value.
+     case, but bytes holds the least-significant n bytes of the true value.
 */
 PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
     unsigned char* bytes, size_t n,
diff --git a/Lib/ctypes/test/test_numbers.py b/Lib/ctypes/test/test_numbers.py
index 2afca26..ba4f563 100644
--- a/Lib/ctypes/test/test_numbers.py
+++ b/Lib/ctypes/test/test_numbers.py
@@ -76,7 +76,7 @@
             self.assertEqual(t(v).value, truth(v))
 
     def test_typeerror(self):
-        # Only numbers are allowed in the contructor,
+        # Only numbers are allowed in the constructor,
         # otherwise TypeError is raised
         for t in signed_types + unsigned_types + float_types:
             self.assertRaises(TypeError, t, "")
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
index d998c27..c4a651c 100644
--- a/Lib/ctypes/test/test_structures.py
+++ b/Lib/ctypes/test/test_structures.py
@@ -106,7 +106,7 @@
         self.assertEqual(alignment(XX), alignment(X))
         self.assertEqual(sizeof(XX), calcsize("3s 3s 0s"))
 
-    def test_emtpy(self):
+    def test_empty(self):
         # I had problems with these
         #
         # Although these are pathological cases: Empty Structures!
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 2f94218..a2178c7 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -706,7 +706,7 @@
 
     @classmethod
     def fromordinal(cls, n):
-        """Contruct a date from a proleptic Gregorian ordinal.
+        """Construct a date from a proleptic Gregorian ordinal.
 
         January 1 of year 1 is day 1.  Only the year, month and day are
         non-zero in the result.
diff --git a/Lib/idlelib/CallTipWindow.py b/Lib/idlelib/CallTipWindow.py
index 8e68a76..9eec175 100644
--- a/Lib/idlelib/CallTipWindow.py
+++ b/Lib/idlelib/CallTipWindow.py
@@ -9,7 +9,7 @@
 HIDE_SEQUENCES = ("<Key-Escape>", "<FocusOut>")
 CHECKHIDE_VIRTUAL_EVENT_NAME = "<<calltipwindow-checkhide>>"
 CHECKHIDE_SEQUENCES = ("<KeyRelease>", "<ButtonRelease>")
-CHECKHIDE_TIME = 100 # miliseconds
+CHECKHIDE_TIME = 100 # milliseconds
 
 MARK_RIGHT = "calltipwindowregion_right"
 
diff --git a/Lib/idlelib/ParenMatch.py b/Lib/idlelib/ParenMatch.py
index 19bad8c..47e10f3 100644
--- a/Lib/idlelib/ParenMatch.py
+++ b/Lib/idlelib/ParenMatch.py
@@ -9,7 +9,7 @@
 from idlelib.configHandler import idleConf
 
 _openers = {')':'(',']':'[','}':'{'}
-CHECK_DELAY = 100 # miliseconds
+CHECK_DELAY = 100 # milliseconds
 
 class ParenMatch:
     """Highlight matching parentheses
diff --git a/Lib/platform.py b/Lib/platform.py
index d58494c..b8f3ebc 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -61,7 +61,7 @@
 #            though
 #    0.5.2 - fixed uname() to return '' instead of 'unknown' in all
 #            return values (the system uname command tends to return
-#            'unknown' instead of just leaving the field emtpy)
+#            'unknown' instead of just leaving the field empty)
 #    0.5.1 - included code for slackware dist; added exception handlers
 #            to cover up situations where platforms don't have os.popen
 #            (e.g. Mac) or fail on socket.gethostname(); fixed libc
diff --git a/Lib/shutil.py b/Lib/shutil.py
index 37124a0..3174648 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -853,7 +853,7 @@
     _UNPACK_FORMATS[name] = extensions, function, extra_args, description
 
 def unregister_unpack_format(name):
-    """Removes the pack format from the registery."""
+    """Removes the pack format from the registry."""
     del _UNPACK_FORMATS[name]
 
 def _ensure_directory(path):
diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py
index 9931a55..e3f1aa5 100644
--- a/Lib/test/eintrdata/eintr_tester.py
+++ b/Lib/test/eintrdata/eintr_tester.py
@@ -372,7 +372,7 @@
     @unittest.skipUnless(hasattr(signal, 'sigwaitinfo'),
                          'need signal.sigwaitinfo()')
     def test_sigwaitinfo(self):
-        # Issue #25277, #25868: give a few miliseconds to the parent process
+        # Issue #25277, #25868: give a few milliseconds to the parent process
         # between os.write() and signal.sigwaitinfo() to works around a race
         # condition
         self.sleep_time = 0.100
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 4c32e09..5238382 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -114,7 +114,7 @@
         self.assertEqual(f['b'], 5)                                    # find first in chain
         self.assertEqual(f.parents['b'], 2)                            # look beyond maps[0]
 
-    def test_contructor(self):
+    def test_constructor(self):
         self.assertEqual(ChainMap().maps, [{}])                        # no-args --> one new dict
         self.assertEqual(ChainMap({1:2}).maps, [{1:2}])                # 1 arg --> list
 
diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py
index f525429..18e1df0 100644
--- a/Lib/test/test_deque.py
+++ b/Lib/test/test_deque.py
@@ -494,7 +494,7 @@
         d.clear()
         self.assertEqual(len(d), 0)
         self.assertEqual(list(d), [])
-        d.clear()               # clear an emtpy deque
+        d.clear()               # clear an empty deque
         self.assertEqual(list(d), [])
 
     def test_remove(self):
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index e970a26..630b155 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -654,7 +654,7 @@
                  self.Season.SPRING]
                 )
 
-    def test_programatic_function_string(self):
+    def test_programmatic_function_string(self):
         SummerMonth = Enum('SummerMonth', 'june july august')
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
@@ -671,7 +671,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_string_with_start(self):
+    def test_programmatic_function_string_with_start(self):
         SummerMonth = Enum('SummerMonth', 'june july august', start=10)
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
@@ -688,7 +688,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_string_list(self):
+    def test_programmatic_function_string_list(self):
         SummerMonth = Enum('SummerMonth', ['june', 'july', 'august'])
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
@@ -705,7 +705,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_string_list_with_start(self):
+    def test_programmatic_function_string_list_with_start(self):
         SummerMonth = Enum('SummerMonth', ['june', 'july', 'august'], start=20)
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
@@ -722,7 +722,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_iterable(self):
+    def test_programmatic_function_iterable(self):
         SummerMonth = Enum(
                 'SummerMonth',
                 (('june', 1), ('july', 2), ('august', 3))
@@ -742,7 +742,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_from_dict(self):
+    def test_programmatic_function_from_dict(self):
         SummerMonth = Enum(
                 'SummerMonth',
                 OrderedDict((('june', 1), ('july', 2), ('august', 3)))
@@ -762,7 +762,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_type(self):
+    def test_programmatic_function_type(self):
         SummerMonth = Enum('SummerMonth', 'june july august', type=int)
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
@@ -778,7 +778,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_type_with_start(self):
+    def test_programmatic_function_type_with_start(self):
         SummerMonth = Enum('SummerMonth', 'june july august', type=int, start=30)
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
@@ -794,7 +794,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_type_from_subclass(self):
+    def test_programmatic_function_type_from_subclass(self):
         SummerMonth = IntEnum('SummerMonth', 'june july august')
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
@@ -810,7 +810,7 @@
             self.assertIn(e, SummerMonth)
             self.assertIs(type(e), SummerMonth)
 
-    def test_programatic_function_type_from_subclass_with_start(self):
+    def test_programmatic_function_type_from_subclass_with_start(self):
         SummerMonth = IntEnum('SummerMonth', 'june july august', start=40)
         lst = list(SummerMonth)
         self.assertEqual(len(lst), len(SummerMonth))
diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py
index a782608..49c01ae 100644
--- a/Lib/test/test_http_cookiejar.py
+++ b/Lib/test/test_http_cookiejar.py
@@ -396,7 +396,7 @@
 ##   comma-separated list, it'll be a headache to parse (at least my head
 ##   starts hurting every time I think of that code).
 ## - Expires: You'll get all sorts of date formats in the expires,
-##   including emtpy expires attributes ("expires="). Be as flexible as you
+##   including empty expires attributes ("expires="). Be as flexible as you
 ##   can, and certainly don't expect the weekday to be there; if you can't
 ##   parse it, just ignore it and pretend it's a session cookie.
 ## - Domain-matching: Netscape uses the 2-dot rule for _all_ domains, not
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index 6c7b99d..a379a6a 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -1254,8 +1254,8 @@
                                              (1.0e200, .999999999999999e200)]
         self.assertAllNotClose(zero_tolerance_not_close_examples, rel_tol=0.0)
 
-    def test_assymetry(self):
-        # test the assymetry example from PEP 485
+    def test_asymmetry(self):
+        # test the asymmetry example from PEP 485
         self.assertAllClose([(9, 10), (10, 9)], rel_tol=0.1)
 
     def test_integers(self):
diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py
index 994532b..2ef6d02 100644
--- a/Lib/test/test_nntplib.py
+++ b/Lib/test/test_nntplib.py
@@ -1465,14 +1465,14 @@
     def test_service_temporarily_unavailable(self):
         #Test service temporarily unavailable
         class Handler(NNTPv1Handler):
-            welcome = '400 Service temporarily unavilable'
+            welcome = '400 Service temporarily unavailable'
         self.check_constructor_error_conditions(
             Handler, nntplib.NNTPTemporaryError, Handler.welcome)
 
     def test_service_permanently_unavailable(self):
         #Test service permanently unavailable
         class Handler(NNTPv1Handler):
-            welcome = '502 Service permanently unavilable'
+            welcome = '502 Service permanently unavailable'
         self.check_constructor_error_conditions(
             Handler, nntplib.NNTPPermanentError, Handler.welcome)
 
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 13b30b9..1d5e01a 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -1257,7 +1257,7 @@
         self.assertRaises(shutil.ReadError, unpack_archive, TESTFN)
         self.assertRaises(ValueError, unpack_archive, TESTFN, format='xxx')
 
-    def test_unpack_registery(self):
+    def test_unpack_registry(self):
 
         formats = get_unpack_formats()
 
diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py
index 3ecb27d..36630a1 100644
--- a/Lib/test/test_structseq.py
+++ b/Lib/test/test_structseq.py
@@ -97,7 +97,7 @@
         class Exc(Exception):
             pass
 
-        # Devious code could crash structseqs' contructors
+        # Devious code could crash structseqs' constructors
         class C:
             def __getitem__(self, i):
                 raise Exc
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 4704d49..4b409b7 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -1354,7 +1354,7 @@
             desired_exception = e
             desired_exception.strerror += ': ' + repr(self._nonexistent_dir)
         else:
-            self.fail("chdir to nonexistant directory %s succeeded." %
+            self.fail("chdir to nonexistent directory %s succeeded." %
                       self._nonexistent_dir)
         return desired_exception
 
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 524a7b1..1e4090c 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -836,7 +836,7 @@
            between the two objects is more than the given delta.
 
            Note that decimal places (from zero) are usually not the same
-           as significant digits (measured from the most signficant digit).
+           as significant digits (measured from the most significant digit).
 
            If the two objects compare equal then they will automatically
            compare almost equal.
@@ -875,7 +875,7 @@
            between the two objects is less than the given delta.
 
            Note that decimal places (from zero) are usually not the same
-           as significant digits (measured from the most signficant digit).
+           as significant digits (measured from the most significant digit).
 
            Objects that are equal automatically fail.
         """
diff --git a/Misc/NEWS b/Misc/NEWS
index 799e1f0..7790b78 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -2210,7 +2210,7 @@
   the FTP connection failed to fix a ResourceWarning.
 
 - Issue #23853: :meth:`socket.socket.sendall` does no more reset the socket
-  timeout each time data is sent successfuly. The socket timeout is now the
+  timeout each time data is sent successfully. The socket timeout is now the
   maximum total duration to send all data.
 
 - Issue #22721: An order of multiline pprint output of set or dict containing
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index a7a8105..b20039f 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -332,7 +332,7 @@
 
 /*
   PyCStructType_Type - a meta type/class.  Creating a new class using this one as
-  __metaclass__ will call the contructor StructUnionType_new.  It replaces the
+  __metaclass__ will call the constructor StructUnionType_new.  It replaces the
   tp_dict member with a new instance of StgDict, and initializes the C
   accessible fields somehow.
 */
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 409922a..6ff241e 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -1911,7 +1911,7 @@
 PyDoc_STRVAR(chain_from_iterable_doc,
 "chain.from_iterable(iterable) --> chain object\n\
 \n\
-Alternate chain() contructor taking a single iterable argument\n\
+Alternate chain() constructor taking a single iterable argument\n\
 that evaluates lazily.");
 
 static PyMethodDef chain_methods[] = {
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index aaff0bc..c7cae2e 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -1855,7 +1855,7 @@
         return PyUnicode_FromString("");
 
     /* Get reason and encoding as strings, which they might not be if
-       they've been modified after we were contructed. */
+       they've been modified after we were constructed. */
     reason_str = PyObject_Str(uself->reason);
     if (reason_str == NULL)
         goto done;
@@ -1980,7 +1980,7 @@
         return PyUnicode_FromString("");
 
     /* Get reason and encoding as strings, which they might not be if
-       they've been modified after we were contructed. */
+       they've been modified after we were constructed. */
     reason_str = PyObject_Str(uself->reason);
     if (reason_str == NULL)
         goto done;
@@ -2078,7 +2078,7 @@
         return PyUnicode_FromString("");
 
     /* Get reason as a string, which it might not be if it's been
-       modified after we were contructed. */
+       modified after we were constructed. */
     reason_str = PyObject_Str(uself->reason);
     if (reason_str == NULL)
         goto done;
diff --git a/Objects/longobject.c b/Objects/longobject.c
index f68d15e..cd04e36 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -775,10 +775,10 @@
         size_t i;
         const unsigned char* p = pendbyte;
         const int pincr = -incr;  /* search MSB to LSB */
-        const unsigned char insignficant = is_signed ? 0xff : 0x00;
+        const unsigned char insignificant = is_signed ? 0xff : 0x00;
 
         for (i = 0; i < n; ++i, p += pincr) {
-            if (*p != insignficant)
+            if (*p != insignificant)
                 break;
         }
         numsignificantbytes = n - i;
diff --git a/Tools/clinic/clinic_test.py b/Tools/clinic/clinic_test.py
index ac0640c..a9479a6 100644
--- a/Tools/clinic/clinic_test.py
+++ b/Tools/clinic/clinic_test.py
@@ -90,7 +90,7 @@
         # the "end line" for the block if it
         # didn't end in "\n" (as in, the last)
         # byte of the file was '/'.
-        # so it woudl spit out an end line for you.
+        # so it would spit out an end line for you.
         # and since you really already had one,
         # the last line of the block got corrupted.
         c = clinic.Clinic(clinic.CLanguage(None))
diff --git a/Tools/demo/redemo.py b/Tools/demo/redemo.py
index b10b030..8335d4c 100755
--- a/Tools/demo/redemo.py
+++ b/Tools/demo/redemo.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 
-"""Basic regular expression demostration facility (Perl style syntax)."""
+"""Basic regular expression demonstration facility (Perl style syntax)."""
 
 from tkinter import *
 import re
diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py
index c075807..44edd57 100755
--- a/Tools/freeze/freeze.py
+++ b/Tools/freeze/freeze.py
@@ -159,7 +159,7 @@
     except getopt.error as msg:
         usage('getopt error: ' + str(msg))
 
-    # proces option arguments
+    # process option arguments
     for o, a in opts:
         if o == '-h':
             print(__doc__)
