diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index 93c18b4..df51610 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -902,6 +902,13 @@
             kw['componentflags'] = 2 #msidbComponentAttributesOptional
         Directory.__init__(self, *args, **kw)
 
+    def check_unpackaged(self):
+        self.unpackaged_files.discard('__pycache__')
+        self.unpackaged_files.discard('.svn')
+        if self.unpackaged_files:
+            print "Warning: Unpackaged files in %s" % self.absolute
+            print self.unpackaged_files
+
 # See "File Table", "Component Table", "Directory Table",
 # "FeatureComponents Table"
 def add_files(db):
@@ -965,13 +972,13 @@
         extensions.remove("_ctypes.pyd")
 
     # Add all .py files in Lib, except tkinter, test
-    dirs={}
+    dirs = []
     pydirs = [(root,"Lib")]
     while pydirs:
         # Commit every now and then, or else installer will complain
         db.Commit()
         parent, dir = pydirs.pop()
-        if dir == ".svn" or dir.startswith("plat-"):
+        if dir == ".svn" or dir == '__pycache__' or dir.startswith("plat-"):
             continue
         elif dir in ["tkinter", "idlelib", "Icons"]:
             if not have_tcl:
@@ -989,7 +996,7 @@
             default_feature.set_current()
         lib = PyDirectory(db, cab, parent, dir, dir, "%s|%s" % (parent.make_short(dir), dir))
         # Add additional files
-        dirs[dir]=lib
+        dirs.append(lib)
         lib.glob("*.txt")
         if dir=='site-packages':
             lib.add_file("README.txt", src="README")
@@ -999,18 +1006,13 @@
         if files:
             # Add an entry to the RemoveFile table to remove bytecode files.
             lib.remove_pyc()
-        if dir.endswith('.egg-info'):
-            lib.add_file('entry_points.txt')
-            lib.add_file('PKG-INFO')
-            lib.add_file('top_level.txt')
-            lib.add_file('zip-safe')
-            continue
+        # package READMEs if present
+        lib.glob("README")
+        if dir=='Lib':
+            lib.add_file('wsgiref.egg-info')
         if dir=='test' and parent.physical=='Lib':
             lib.add_file("185test.db")
             lib.add_file("audiotest.au")
-            lib.add_file("cfgparser.1")
-            lib.add_file("cfgparser.2")
-            lib.add_file("cfgparser.3")
             lib.add_file("sgml_input.html")
             lib.add_file("testtar.tar")
             lib.add_file("test_difflib_expect.html")
@@ -1020,7 +1022,10 @@
             lib.glob("*.uue")
             lib.glob("*.pem")
             lib.glob("*.pck")
+            lib.glob("cfgparser.*")
             lib.add_file("zipdir.zip")
+        if dir=='capath':
+            lib.glob("*.0")
         if dir=='tests' and parent.physical=='distutils':
             lib.add_file("Setup.sample")
         if dir=='decimaltestdata':
@@ -1030,19 +1035,26 @@
             lib.add_file("test.xml.out")
         if dir=='output':
             lib.glob("test_*")
+        if dir=='sndhdrdata':
+            lib.glob("sndhdr.*")
         if dir=='idlelib':
             lib.glob("*.def")
             lib.add_file("idle.bat")
+            lib.add_file("ChangeLog")
         if dir=="Icons":
             lib.glob("*.gif")
             lib.add_file("idle.icns")
         if dir=="command" and parent.physical=="distutils":
             lib.glob("wininst*.exe")
+            lib.add_file("command_template")
         if dir=="setuptools":
             lib.add_file("cli.exe")
             lib.add_file("gui.exe")
         if dir=="lib2to3":
             lib.removefile("pickle", "*.pickle")
+        if dir=="macholib":
+            lib.add_file("README.ctypes")
+            lib.glob("fetch_macholib*")
         if dir=="data" and parent.physical=="test" and parent.basedir.physical=="email":
             # This should contain all non-.svn files listed in subversion
             for f in os.listdir(lib.absolute):
@@ -1054,6 +1066,8 @@
         for f in os.listdir(lib.absolute):
             if os.path.isdir(os.path.join(lib.absolute, f)):
                 pydirs.append((lib, f))
+    for d in dirs:
+        d.check_unpackaged()
     # Add DLLs
     default_feature.set_current()
     lib = DLLs
diff --git a/Tools/msi/msilib.py b/Tools/msi/msilib.py
index 6f49b4c..38fef8c 100644
--- a/Tools/msi/msilib.py
+++ b/Tools/msi/msilib.py
@@ -451,6 +451,12 @@
         else:
             self.absolute = physical
             blogical = None
+        # initially assume that all files in this directory are unpackaged
+        # as files from self.absolute get added, this set is reduced
+        self.unpackaged_files = set()
+        for f in os.listdir(self.absolute):
+            if os.path.isfile(os.path.join(self.absolute, f)):
+                self.unpackaged_files.add(f)
         add_data(db, "Directory", [(logical, blogical, default)])
 
     def start_component(self, component = None, feature = None, flags = None, keyfile = None, uuid=None):
@@ -527,6 +533,11 @@
             src = file
             file = os.path.basename(file)
         absolute = os.path.join(self.absolute, src)
+        if absolute.startswith(self.absolute):
+            # mark file as packaged
+            relative = absolute[len(self.absolute)+1:]
+            if relative in self.unpackaged_files:
+                self.unpackaged_files.remove(relative)
         assert not re.search(r'[\?|><:/*]"', file) # restrictions on long names
         if self.keyfiles.has_key(file):
             logical = self.keyfiles[file]
