diff --git a/Lib/Cookie.py b/Lib/Cookie.py
index 99a94da..600d212 100644
--- a/Lib/Cookie.py
+++ b/Lib/Cookie.py
@@ -534,6 +534,8 @@
     r"(?P<val>"                   # Start of group 'val'
     r'"(?:[^\\"]|\\.)*"'            # Any doublequoted string
     r"|"                            # or
+    r"\w{3},\s[\w\d-]{9,11}\s[\d:]{8}\sGMT" # Special case for "expires" attr
+    r"|"                            # or
     ""+ _LegalCharsPatt +"*"        # Any word or empty string
     r")"                          # End of group 'val'
     r"\s*;?"                      # Probably ending in a semi-colon
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
old mode 100755
new mode 100644
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 44519d4..6e2ee175 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -178,6 +178,9 @@
 
 def ismount(path):
     """Test whether a path is a mount point"""
+    if islink(path):
+        # A symlink can never be a mount point
+        return False
     try:
         s1 = os.lstat(path)
         s2 = os.lstat(join(path, '..'))
diff --git a/Lib/pstats.py b/Lib/pstats.py
index a6844fb..08f2318 100644
--- a/Lib/pstats.py
+++ b/Lib/pstats.py
@@ -597,7 +597,10 @@
             print >> self.stream, "  that match it are printed."
 
         def do_add(self, line):
-            self.stats.add(line)
+            if self.stats:
+                self.stats.add(line)
+            else:
+                print >> self.stream, "No statistics object is loaded."
             return 0
         def help_add(self):
             print >> self.stream, "Add profile info from given file to current statistics object."
@@ -632,22 +635,33 @@
                 except IOError, args:
                     print >> self.stream, args[1]
                     return
+                except Exception as err:
+                    print >> self.stream, err.__class__.__name__ + ':', err
+                    return
                 self.prompt = line + "% "
             elif len(self.prompt) > 2:
-                line = self.prompt[-2:]
+                line = self.prompt[:-2]
+                self.do_read(line)
             else:
                 print >> self.stream, "No statistics object is current -- cannot reload."
             return 0
         def help_read(self):
             print >> self.stream, "Read in profile data from a specified file."
+            print >> self.stream, "Without argument, reload the current file."
 
         def do_reverse(self, line):
-            self.stats.reverse_order()
+            if self.stats:
+                self.stats.reverse_order()
+            else:
+                print >> self.stream, "No statistics object is loaded."
             return 0
         def help_reverse(self):
             print >> self.stream, "Reverse the sort order of the profiling report."
 
         def do_sort(self, line):
+            if not self.stats:
+                print >> self.stream, "No statistics object is loaded."
+                return
             abbrevs = self.stats.get_sort_arg_defs()
             if line and not filter(lambda x,a=abbrevs: x not in a,line.split()):
                 self.stats.sort_stats(*line.split())
@@ -669,11 +683,16 @@
             self.generic_help()
 
         def do_strip(self, line):
-            self.stats.strip_dirs()
-            return 0
+            if self.stats:
+                self.stats.strip_dirs()
+            else:
+                print >> self.stream, "No statistics object is loaded."
         def help_strip(self):
             print >> self.stream, "Strip leading path information from filenames in the report."
 
+        def help_help(self):
+            print >> self.stream, "Show help for a given command."
+
         def postcmd(self, stop, line):
             if stop:
                 return stop
diff --git a/Lib/test/test_cookie.py b/Lib/test/test_cookie.py
index e7c0cf1..474b856 100644
--- a/Lib/test/test_cookie.py
+++ b/Lib/test/test_cookie.py
@@ -66,6 +66,16 @@
         </script>
         """)
 
+        # loading 'expires'
+        C = Cookie.SimpleCookie()
+        C.load('Customer="W"; expires=Wed, 01-Jan-2010 00:00:00 GMT')
+        self.assertEqual(C['Customer']['expires'],
+                         'Wed, 01-Jan-2010 00:00:00 GMT')
+        C = Cookie.SimpleCookie()
+        C.load('Customer="W"; expires=Wed, 01-Jan-98 00:00:00 GMT')
+        self.assertEqual(C['Customer']['expires'],
+                         'Wed, 01-Jan-98 00:00:00 GMT')
+
     def test_quoted_meta(self):
         # Try cookie with quoted meta-data
         C = Cookie.SimpleCookie()
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py
index d53b916..c2e2ad1 100644
--- a/Lib/test/test_set.py
+++ b/Lib/test/test_set.py
@@ -751,7 +751,7 @@
         result = self.set ^ self.set
         self.assertEqual(result, empty_set)
 
-    def checkempty_symmetric_difference(self):
+    def test_empty_symmetric_difference(self):
         result = self.set ^ empty_set
         self.assertEqual(result, self.set)
 
diff --git a/Lib/timeit.py b/Lib/timeit.py
index 9054243..09f37c4 100644
--- a/Lib/timeit.py
+++ b/Lib/timeit.py
@@ -9,7 +9,7 @@
 Library usage: see the Timer class.
 
 Command line usage:
-    python timeit.py [-n N] [-r N] [-s S] [-t] [-c] [-h] [statement]
+    python timeit.py [-n N] [-r N] [-s S] [-t] [-c] [-h] [--] [statement]
 
 Options:
   -n/--number N: how many times to execute 'statement' (default: see below)
@@ -19,6 +19,7 @@
   -c/--clock: use time.clock() (default on Windows)
   -v/--verbose: print raw timing results; repeat for more digits precision
   -h/--help: print this usage message and exit
+  --: separate options from statement, use when statement starts with -
   statement: statement to be timed (default 'pass')
 
 A multi-line statement may be given by specifying each line as a
diff --git a/Lib/trace.py b/Lib/trace.py
index 6d5aef0..3611f88 100644
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -195,11 +195,13 @@
         base = path[len(longest) + 1:]
     else:
         base = path
+    # the drive letter is never part of the module name
+    drive, base = os.path.splitdrive(base)
     base = base.replace(os.sep, ".")
     if os.altsep:
         base = base.replace(os.altsep, ".")
     filename, ext = os.path.splitext(base)
-    return filename
+    return filename.lstrip(".")
 
 class CoverageResults:
     def __init__(self, counts=None, calledfuncs=None, infile=None,
@@ -798,7 +800,16 @@
                   ignoredirs=ignore_dirs, infile=counts_file,
                   outfile=counts_file, timing=timing)
         try:
-            t.run('execfile(%r)' % (progname,))
+            with open(progname) as fp:
+                code = compile(fp.read(), progname, 'exec')
+            # try to emulate __main__ namespace as much as possible
+            globs = {
+                '__file__': progname,
+                '__name__': '__main__',
+                '__package__': None,
+                '__cached__': None,
+            }
+            t.runctx(code, globs, globs)
         except IOError, err:
             _err_exit("Cannot run file %r because: %s" % (sys.argv[0], err))
         except SystemExit:
