diff --git a/Lib/dos-8x3/cgihttps.py b/Lib/dos-8x3/cgihttps.py
index 24bdeef..806ef57 100755
--- a/Lib/dos-8x3/cgihttps.py
+++ b/Lib/dos-8x3/cgihttps.py
@@ -145,7 +145,7 @@
                 if line[:1] in string.whitespace:
                     accept.append(string.strip(line))
                 else:
-                    accept = accept + string.split(line[7:])
+                    accept = accept + string.split(line[7:], ',')
             env['HTTP_ACCEPT'] = string.joinfields(accept, ',')
             ua = self.headers.getheader('user-agent')
             if ua:
diff --git a/Lib/dos-8x3/compilea.py b/Lib/dos-8x3/compilea.py
index f695b3a..69a59b3 100755
--- a/Lib/dos-8x3/compilea.py
+++ b/Lib/dos-8x3/compilea.py
@@ -13,10 +13,11 @@
 """
 
 import os
+import stat
 import sys
 import py_compile
 
-def compile_dir(dir, maxlevels=10, ddir=None):
+def compile_dir(dir, maxlevels=10, ddir=None, force=0):
     """Byte-compile all modules in the given directory tree.
 
     Arguments (only dir is required):
@@ -25,6 +26,7 @@
     maxlevels: maximum recursion level (default 10)
     ddir:      if given, purported directory name (this is the
                directory name that will show up in error messages)
+    force:     if 1, force compilation, even if timestamps are up-to-date
 
     """
     print 'Listing', dir, '...'
@@ -43,6 +45,11 @@
         if os.path.isfile(fullname):
             head, tail = name[:-3], name[-3:]
             if tail == '.py':
+                cfile = fullname + (__debug__ and 'c' or 'o')
+                ftime = os.stat(fullname)[stat.ST_MTIME]
+                try: ctime = os.stat(cfile)[stat.ST_MTIME]
+                except os.error: ctime = 0
+                if (ctime > ftime) and not force: continue
                 print 'Compiling', fullname, '...'
                 try:
                     py_compile.compile(fullname, None, dfile)
@@ -58,40 +65,44 @@
              name != os.curdir and name != os.pardir and \
              os.path.isdir(fullname) and \
              not os.path.islink(fullname):
-            compile_dir(fullname, maxlevels - 1, dfile)
+            compile_dir(fullname, maxlevels - 1, dfile, force)
 
-def compile_path(skip_curdir=1, maxlevels=0):
+def compile_path(skip_curdir=1, maxlevels=0, force=0):
     """Byte-compile all module on sys.path.
 
     Arguments (all optional):
 
     skip_curdir: if true, skip current directory (default true)
     maxlevels:   max recursion level (default 0)
+    force: as for compile_dir() (default 0)
 
     """
     for dir in sys.path:
         if (not dir or dir == os.curdir) and skip_curdir:
             print 'Skipping current directory'
         else:
-            compile_dir(dir, maxlevels)
+            compile_dir(dir, maxlevels, None, force)
 
 def main():
     """Script main program."""
     import getopt
     try:
-        opts, args = getopt.getopt(sys.argv[1:], 'ld:')
+        opts, args = getopt.getopt(sys.argv[1:], 'lfd:')
     except getopt.error, msg:
         print msg
-        print "usage: compileall [-l] [-d destdir] [directory ...]"
+        print "usage: compileall [-l] [-f] [-d destdir] [directory ...]"
         print "-l: don't recurse down"
+        print "-f: force rebuild even if timestamps are up-to-date"
         print "-d destdir: purported directory name for error messages"
-        print "if no arguments, -l sys.path is assumed"
+        print "if no directory arguments, -l sys.path is assumed"
         sys.exit(2)
     maxlevels = 10
     ddir = None
+    force = 0
     for o, a in opts:
         if o == '-l': maxlevels = 0
         if o == '-d': ddir = a
+        if o == '-f': force = 1
     if ddir:
         if len(args) != 1:
             print "-d destdir require exactly one directory argument"
@@ -99,7 +110,7 @@
     try:
         if args:
             for dir in args:
-                compile_dir(dir, maxlevels, ddir)
+                compile_dir(dir, maxlevels, ddir, force)
         else:
             compile_path()
     except KeyboardInterrupt:
diff --git a/Lib/dos-8x3/exceptio.py b/Lib/dos-8x3/exceptio.py
index 9c733ce..12da416 100644
--- a/Lib/dos-8x3/exceptio.py
+++ b/Lib/dos-8x3/exceptio.py
@@ -12,9 +12,11 @@
 
 Here is a rundown of the class hierarchy.  You can change this by editing this
 file, but it isn't recommended.  The class names described here are expected
-to be found by the bltinmodule.c file.
+to be found by the bltinmodule.c file.  If you add classes here, you must
+modify bltinmodule.c or the exceptions won't be available in the __builtin__
+module, nor will they be accessible from C.
 
-The classes with a `*' are new as of Python 1.5.  They are defined as tuples
+The classes with a `*' are new since Python 1.5.  They are defined as tuples
 containing the derived exceptions when string-based exceptions are used.  If
 you define your own class based exceptions, they should be derived from
 Exception.
@@ -33,6 +35,9 @@
       |
       +-- EOFError
       +-- RuntimeError
+      |    |
+      |    +-- NotImplementedError(*)
+      |
       +-- NameError
       +-- AttributeError
       +-- SyntaxError
@@ -130,6 +135,9 @@
 class RuntimeError(StandardError):
     pass
 
+class NotImplementedError(RuntimeError):
+    pass
+
 class SystemError(StandardError):
     pass
 
diff --git a/Lib/dos-8x3/simpleht.py b/Lib/dos-8x3/simpleht.py
index 7126855..9260e7e 100755
--- a/Lib/dos-8x3/simpleht.py
+++ b/Lib/dos-8x3/simpleht.py
@@ -64,7 +64,7 @@
             self.send_error(403, "Directory listing not supported")
             return None
         try:
-            f = open(path)
+            f = open(path, 'rb')
         except IOError:
             self.send_error(404, "File not found")
             return None
@@ -148,7 +148,7 @@
 
 
 def test(HandlerClass = SimpleHTTPRequestHandler,
-         ServerClass = SocketServer.TCPServer):
+         ServerClass = BaseHTTPServer.HTTPServer):
     BaseHTTPServer.test(HandlerClass, ServerClass)
 
 
diff --git a/Lib/dos-8x3/socketse.py b/Lib/dos-8x3/socketse.py
index 0d0caac..23f3a8e 100755
--- a/Lib/dos-8x3/socketse.py
+++ b/Lib/dos-8x3/socketse.py
@@ -273,18 +273,6 @@
         pass
 
 
-if hasattr(socket, 'AF_UNIX'):
-
-    class UnixStreamServer(TCPServer):
-
-        address_family = socket.AF_UNIX
-
-
-    class UnixDatagramServer(UDPServer):
-
-        address_family = socket.AF_UNIX
-
-
 class ForkingMixIn:
 
     """Mix-in class to handle each request in a new process."""
@@ -339,6 +327,17 @@
 class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
 class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
 
+if hasattr(socket, 'AF_UNIX'):
+
+    class UnixStreamServer(TCPServer):
+        address_family = socket.AF_UNIX
+
+    class UnixDatagramServer(UDPServer):
+        address_family = socket.AF_UNIX
+
+    class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass
+
+    class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass
 
 class BaseRequestHandler:
 
@@ -351,7 +350,7 @@
     defines a handle() method.
 
     The handle() method can find the request as self.request, the
-    client address as self.client_request, and the server (in case it
+    client address as self.client_address, and the server (in case it
     needs access to per-server information) as self.server.  Since a
     separate instance is created for each request, the handle() method
     can define arbitrary other instance variariables.
diff --git a/Lib/dos-8x3/userlist.py b/Lib/dos-8x3/userlist.py
index 5dfd182..1d5065f 100755
--- a/Lib/dos-8x3/userlist.py
+++ b/Lib/dos-8x3/userlist.py
@@ -19,7 +19,7 @@
 	def __setitem__(self, i, item): self.data[i] = item
 	def __delitem__(self, i): del self.data[i]
 	def __getslice__(self, i, j):
-		userlist = UserList()
+		userlist = self.__class__()
 		userlist.data[:] = self.data[i:j]
 		return userlist
 	def __setslice__(self, i, j, list):
