diff --git a/Lib/glob.py b/Lib/glob.py
index d5e508a..4ba4138 100644
--- a/Lib/glob.py
+++ b/Lib/glob.py
@@ -13,7 +13,7 @@
 
     """
     if not has_magic(pathname):
-        if os.path.exists(pathname):
+        if os.path.lexists(pathname):
             return [pathname]
         else:
             return []
@@ -29,7 +29,7 @@
         for dirname in list:
             if basename or os.path.isdir(dirname):
                 name = os.path.join(dirname, basename)
-                if os.path.exists(name):
+                if os.path.lexists(name):
                     result.append(name)
     else:
         result = []
diff --git a/Lib/macpath.py b/Lib/macpath.py
index 1d3fa56..bca410e 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -150,7 +150,7 @@
     return os.stat(filename).st_ctime
 
 def exists(s):
-    """Return True if the pathname refers to an existing file or directory."""
+    """Test whether a path exists.  Returns False for broken symbolic links"""    
 
     try:
         st = os.stat(s)
@@ -158,6 +158,18 @@
         return False
     return True
 
+# Is `stat`/`lstat` a meaningful difference on the Mac?  This is safe in any
+# case.
+
+def lexists(path):
+    """Test whether a path exists.  Returns True for broken symbolic links"""
+
+    try:
+        st = os.lstat(path)
+    except os.error:
+        return False
+    return True
+
 # Return the longest prefix of all list elements.
 
 def commonprefix(m):
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 1f355ec..649e424 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -249,7 +249,6 @@
 
 
 # Does a path exist?
-# This is false for dangling symbolic links.
 
 def exists(path):
     """Test whether a path exists"""
@@ -259,6 +258,8 @@
         return False
     return True
 
+lexists = exists
+
 
 # Is a path a dos directory?
 # This follows symbolic links, so both islink() and isdir() can be true
diff --git a/Lib/os2emxpath.py b/Lib/os2emxpath.py
index 9f8a1dd..4c64324 100644
--- a/Lib/os2emxpath.py
+++ b/Lib/os2emxpath.py
@@ -220,6 +220,8 @@
         return False
     return True
 
+lexists = exists
+
 
 # Is a path a directory?
 
diff --git a/Lib/plat-riscos/riscospath.py b/Lib/plat-riscos/riscospath.py
index 27b5732..97b4f65 100644
--- a/Lib/plat-riscos/riscospath.py
+++ b/Lib/plat-riscos/riscospath.py
@@ -218,6 +218,8 @@
     except swi.error:
         return 0
 
+lexists = exists
+
 
 def isdir(p):
     """
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 1a25934..b29eedc 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -174,6 +174,17 @@
     return True
 
 
+# Being true for dangling symbolic links is also useful.
+
+def lexists(path):
+    """Test whether a path exists.  Returns True for broken symbolic links"""
+    try:
+        st = os.lstat(path)
+    except os.error:
+        return False
+    return True
+
+
 # Is a path a directory?
 # This follows symbolic links, so both islink() and isdir() can be true
 # for the same path.
diff --git a/Lib/test/test_glob.py b/Lib/test/test_glob.py
index 31de30d..af81dab 100644
--- a/Lib/test/test_glob.py
+++ b/Lib/test/test_glob.py
@@ -48,6 +48,9 @@
         self.mktemp('ZZZ')
         self.mktemp('a', 'bcd', 'EF')
         self.mktemp('a', 'bcd', 'efg', 'ha')
+        if hasattr(os, 'symlink'):
+            os.symlink(self.norm('broken'), self.norm('sym1'))
+            os.symlink(self.norm('broken'), self.norm('sym2'))
 
     def tearDown(self):
         deltree(self.tempdir)
@@ -98,6 +101,13 @@
         eq(self.glob('?a?', '*F'), map(self.norm, [os.path.join('aaa', 'zzzF'),
                                                    os.path.join('aab', 'F')]))
 
+    def test_glob_broken_symlinks(self):
+        if hasattr(os, 'symlink'):
+            eq = self.assertSequencesEqual_noorder
+            eq(self.glob('sym*'), [self.norm('sym1'), self.norm('sym2')])
+            eq(self.glob('sym1'), [self.norm('sym1')])
+            eq(self.glob('sym2'), [self.norm('sym2')])
+
 
 def test_main():
     run_unittest(GlobTests)
diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py
index 1fc3e7c..0a6ed99 100644
--- a/Lib/test/test_posixpath.py
+++ b/Lib/test/test_posixpath.py
@@ -150,6 +150,7 @@
                 os.remove(test_support.TESTFN + "1")
                 self.assertIs(posixpath.islink(test_support.TESTFN + "2"), True)
                 self.assertIs(posixpath.exists(test_support.TESTFN + "2"), False)
+                self.assertIs(posixpath.lexists(test_support.TESTFN + "2"), True)
         finally:
             if not f.close():
                 f.close()
@@ -171,6 +172,7 @@
             f.write("foo")
             f.close()
             self.assertIs(posixpath.exists(test_support.TESTFN), True)
+            self.assertIs(posixpath.lexists(test_support.TESTFN), True)
         finally:
             if not f.close():
                 f.close()
