diff --git a/Lib/inspect.py b/Lib/inspect.py
index ddd7529..ceaea5a 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -39,12 +39,16 @@
 import imp
 import tokenize
 import linecache
+from abc import ABCMeta
 from operator import attrgetter
 from collections import namedtuple
 # These constants are from Include/code.h.
 CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 0x1, 0x2, 0x4, 0x8
 CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40
 
+# See Include/object.h
+TPFLAGS_IS_ABSTRACT = 1 << 20
+
 # ----------------------------------------------------------- type-checking
 def ismodule(object):
     """Return true if the object is a module.
@@ -241,6 +245,10 @@
     """Return true if the object is a generator object."""
     return isinstance(object, types.GeneratorType)
 
+def isabstract(object):
+    """Return true if the object is an abstract base class (ABC)."""
+    return object.__flags__ & TPFLAGS_IS_ABSTRACT
+
 def getmembers(object, predicate=None):
     """Return all members of an object as (name, value) pairs sorted by name.
     Optionally, only return members that satisfy a given predicate."""
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 50ed93e..cb7cf75 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -135,6 +135,7 @@
 import re
 import io
 import traceback
+from inspect import isabstract
 
 # I see no other way to suppress these warnings;
 # putting them in test_grammar.py has no effect:
@@ -689,7 +690,6 @@
 def dash_R(the_module, test, indirect_test, huntrleaks):
     # This code is hackish and inelegant, but it seems to do the job.
     import copy_reg, _abcoll
-    from abc import _Abstract
 
     if not hasattr(sys, 'gettotalrefcount'):
         raise Exception("Tracking reference leaks requires a debug build "
@@ -701,7 +701,7 @@
     pic = sys.path_importer_cache.copy()
     abcs = {}
     for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]:
-        if not issubclass(abc, _Abstract):
+        if not isabstract(abc):
             continue
         for obj in abc.__subclasses__() + [abc]:
             abcs[obj] = obj._abc_registry.copy()
@@ -741,7 +741,6 @@
     import _strptime, linecache, dircache
     import urlparse, urllib, urllib2, mimetypes, doctest
     import struct, filecmp, _abcoll
-    from abc import _Abstract
     from distutils.dir_util import _path_created
     from weakref import WeakSet
 
@@ -757,7 +756,7 @@
 
     # Clear ABC registries, restoring previously saved ABC registries.
     for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]:
-        if not issubclass(abc, _Abstract):
+        if not isabstract(abc):
             continue
         for obj in abc.__subclasses__() + [abc]:
             obj._abc_registry = abcs.get(obj, WeakSet()).copy()
diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py
index 7a932fc..d631c3e 100644
--- a/Lib/test/test_abc.py
+++ b/Lib/test/test_abc.py
@@ -7,6 +7,7 @@
 from test import test_support
 
 import abc
+from inspect import isabstract
 
 
 class TestABC(unittest.TestCase):
@@ -41,19 +42,23 @@
                 def bar(self): pass  # concrete
             self.assertEqual(C.__abstractmethods__, {"foo"})
             self.assertRaises(TypeError, C)  # because foo is abstract
+            self.assert_(isabstract(C))
             class D(C):
                 def bar(self): pass  # concrete override of concrete
             self.assertEqual(D.__abstractmethods__, {"foo"})
             self.assertRaises(TypeError, D)  # because foo is still abstract
+            self.assert_(isabstract(D))
             class E(D):
                 def foo(self): pass
             self.assertEqual(E.__abstractmethods__, set())
             E()  # now foo is concrete, too
+            self.failIf(isabstract(E))
             class F(E):
                 @abstractthing
                 def bar(self): pass  # abstract override of concrete
             self.assertEqual(F.__abstractmethods__, {"bar"})
             self.assertRaises(TypeError, F)  # because bar is abstract now
+            self.assert_(isabstract(F))
 
     def test_subclass_oldstyle_class(self):
         class A:
