diff --git a/PCbuild/build_tkinter.py b/PCbuild/build_tkinter.py
index 0590b0f..21e89cc 100644
--- a/PCbuild/build_tkinter.py
+++ b/PCbuild/build_tkinter.py
@@ -11,14 +11,9 @@
 here = os.path.abspath(os.path.dirname(__file__))
 par = os.path.pardir
 
-if 1:
-    TCL = "tcl8.4.16"
-    TK = "tk8.4.16"
-    TIX = "tix-8.4.0"
-else:
-    TCL = "tcl8.5b3"
-    TK = "tcl8.5b3"
-    TIX = "Tix8.4.2"
+TCL = "tcl8.5.2"
+TK = "tk8.5.2"
+TIX = "tix-8.4.0.x"
 
 ROOT = os.path.abspath(os.path.join(here, par, par))
 # Windows 2000 compatibility: WINVER 0x0500
@@ -38,9 +33,9 @@
     if platform == "Win32":
         dest = os.path.join(ROOT, "tcltk")
         machine = "X86"
-    elif platform == "x64":
+    elif platform == "AMD64":
         dest = os.path.join(ROOT, "tcltk64")
-        machine = "X64"
+        machine = "AMD64"
     else:
         raise ValueError(platform)
 
@@ -50,16 +45,16 @@
         os.chdir(os.path.join(tcldir, "win"))
         if clean:
             nmake("makefile.vc", "clean")
-        nmake("makefile.vc")
-        nmake("makefile.vc", "install", INSTALLDIR=dest)
+        nmake("makefile.vc", MACHINE=machine)
+        nmake("makefile.vc", "install", INSTALLDIR=dest, MACHINE=machine)
 
     # TK
     if 1:
         os.chdir(os.path.join(ROOT, TK, "win"))
         if clean:
             nmake("makefile.vc", "clean", TCLDIR=tcldir)
-        nmake("makefile.vc", TCLDIR=tcldir)
-        nmake("makefile.vc", "install", TCLDIR=tcldir, INSTALLDIR=dest)
+        nmake("makefile.vc", TCLDIR=tcldir, MACHINE=machine)
+        nmake("makefile.vc", "install", TCLDIR=tcldir, INSTALLDIR=dest, MACHINE=machine)
 
     # TIX
     if 1:
@@ -67,12 +62,12 @@
         os.chdir(os.path.join(ROOT, TIX, "win"))
         if clean:
             nmake("python9.mak", "clean")
-        nmake("python9.mak", MACHINE=machine)
-        nmake("python9.mak", "install")
+        nmake("python9.mak", MACHINE=machine, INSTALL_DIR=dest)
+        nmake("python9.mak", "install", INSTALL_DIR=dest)
 
 def main():
-    if len(sys.argv) < 2 or sys.argv[1] not in ("Win32", "x64"):
-        print("%s Win32|x64" % sys.argv[0])
+    if len(sys.argv) < 2 or sys.argv[1] not in ("Win32", "AMD64"):
+        print("%s Win32|AMD64" % sys.argv[0])
         sys.exit(1)
 
     if "-c" in sys.argv:
diff --git a/PCbuild/pyproject.vsprops b/PCbuild/pyproject.vsprops
index d1e5d86..3633aeb 100644
--- a/PCbuild/pyproject.vsprops
+++ b/PCbuild/pyproject.vsprops
@@ -94,18 +94,18 @@
 	/>
 	<UserMacro
 		Name="tcltkLib"
-		Value="$(tcltkDir)\lib\tcl84.lib $(tcltkDir)\lib\tk84.lib"
+		Value="$(tcltkDir)\lib\tcl85.lib $(tcltkDir)\lib\tk85.lib"
 	/>
 	<UserMacro
 		Name="tcltkLibDebug"
-		Value="$(tcltkDir)\lib\tcl84g.lib $(tcltkDir)\lib\tk84g.lib"
+		Value="$(tcltkDir)\lib\tcl85g.lib $(tcltkDir)\lib\tk85g.lib"
 	/>
 	<UserMacro
 		Name="tcltk64Lib"
-		Value="$(tcltk64Dir)\lib\tcl84.lib $(tcltk64Dir)\lib\tk84.lib"
+		Value="$(tcltk64Dir)\lib\tcl85.lib $(tcltk64Dir)\lib\tk85.lib"
 	/>
 	<UserMacro
 		Name="tcltk64LibDebug"
-		Value="$(tcltk64Dir)\lib\tcl84g.lib $(tcltk64Dir)\lib\tk84g.lib"
+		Value="$(tcltk64Dir)\lib\tcl85g.lib $(tcltk64Dir)\lib\tk85g.lib"
 	/>
 </VisualStudioPropertySheet>
diff --git a/Tools/buildbot/external-amd64.bat b/Tools/buildbot/external-amd64.bat
index fdd695a..d82f54b 100644
--- a/Tools/buildbot/external-amd64.bat
+++ b/Tools/buildbot/external-amd64.bat
@@ -4,14 +4,14 @@
 call "Tools\buildbot\external-common.bat"
 call "%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64
 
-if not exist tcltk64\bin\tcl84g.dll (
-    cd tcl-8.4.18.2\win
+if not exist tcltk64\bin\tcl85g.dll (
+    cd tcl-8.5.2.1\win
     nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
     cd ..\..
 )
 
-if not exist tcltk64\bin\tk84g.dll (
-    cd tk-8.4.18.1\win    
-    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 TCLDIR=..\..\tcl-8.4.18.2 clean all install
+if not exist tcltk64\bin\tk85g.dll (
+    cd tk-8.5.2.1\win    
+    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 TCLDIR=..\..\tcl-8.5.2.1 clean all install
     cd ..\..
 )
diff --git a/Tools/buildbot/external-common.bat b/Tools/buildbot/external-common.bat
index ecf9901..d14ff52 100644
--- a/Tools/buildbot/external-common.bat
+++ b/Tools/buildbot/external-common.bat
@@ -27,8 +27,11 @@
 if not exist openssl-0.9.8g svn export http://svn.python.org/projects/external/openssl-0.9.8g
 
 @rem tcl/tk
-if not exist tcl-8.4.18.2 svn export http://svn.python.org/projects/external/tcl-8.4.18.2
-if not exist tk-8.4.18.1 svn export http://svn.python.org/projects/external/tk-8.4.18.1
+if not exist tcl-8.5.2.1 (
+   rd /s/q tcltk tcltk64
+   svn export http://svn.python.org/projects/external/tcl-8.5.2.1
+)
+if not exist tk-8.5.2.0 svn export http://svn.python.org/projects/external/tk-8.5.2.0
 
 @rem sqlite3
 if not exist sqlite-source-3.3.4 svn export http://svn.python.org/projects/external/sqlite-source-3.3.4
diff --git a/Tools/buildbot/external.bat b/Tools/buildbot/external.bat
index 4113605..592c585 100644
--- a/Tools/buildbot/external.bat
+++ b/Tools/buildbot/external.bat
@@ -4,14 +4,18 @@
 call "Tools\buildbot\external-common.bat"
 call "%VS90COMNTOOLS%\vsvars32.bat"
 
-if not exist tcltk\bin\tcl84g.dll (
-    cd tcl-8.4.18.2\win
-    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk clean all install
+if not exist tcltk\bin\tcl85.dll (
+    @rem all and install need to be separate invocations, otherwise nmakehlp is not found on install
+    cd tcl-8.5.2.1\win
+    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk clean all 
+    nmake -f makefile.vc DEBUG=1 INSTALLDIR=..\..\tcltk install
     cd ..\..
 )
 
-if not exist tcltk\bin\tk84g.dll (
-    cd tk-8.4.18.1\win    
-    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk TCLDIR=..\..\tcl-8.4.18.2 clean all install
+if not exist tcltk\bin\tk85.dll (
+    cd tk-8.5.2.0\win    
+    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk TCLDIR=..\..\tcl-8.5.2.1 clean
+    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk TCLDIR=..\..\tcl-8.5.2.1 all
+    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 INSTALLDIR=..\..\tcltk TCLDIR=..\..\tcl-8.5.2.1 install
     cd ..\..
 )
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index 03ccc57..174a334 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -849,17 +849,18 @@
     import shutil, glob
     out = open("LICENSE.txt", "w")
     shutil.copyfileobj(open(os.path.join(srcdir, "LICENSE")), out)
-    for dir, file in (("bzip2","LICENSE"),
-                      ("db", "LICENSE"),
-                      ("openssl", "LICENSE"),
-                      ("tcl", "license.terms"),
-                      ("tk", "license.terms")):
-        out.write("\nThis copy of Python includes a copy of %s, which is licensed under the following terms:\n\n" % dir)
-        dirs = glob.glob(srcdir+"/../"+dir+"-*")
+    for name, pat, file in (("bzip2","bzip2-*", "LICENSE"),
+                      ("Berkeley DB", "db-*", "LICENSE"),
+                      ("openssl", "openssl-*", "LICENSE"),
+                      ("Tcl", "tcl8*", "license.terms"),
+                      ("Tk", "tk8*", "license.terms"),
+                      ("Tix", "tix-*", "license.terms")):
+        out.write("\nThis copy of Python includes a copy of %s, which is licensed under the following terms:\n\n" % name)
+        dirs = glob.glob(srcdir+"/../"+pat)
         if not dirs:
-            raise ValueError, "Could not find "+srcdir+"/../"+dir+"-*"
+            raise ValueError, "Could not find "+srcdir+"/../"+pat
         if len(dirs) > 2:
-            raise ValueError, "Multiple copies of "+dir
+            raise ValueError, "Multiple copies of "+pat
         dir = dirs[0]
         shutil.copyfileobj(open(os.path.join(dir, file)), out)
     out.close()
diff --git a/Tools/msi/msilib.py b/Tools/msi/msilib.py
index e5d73c7..9245a22 100644
--- a/Tools/msi/msilib.py
+++ b/Tools/msi/msilib.py
@@ -328,6 +328,7 @@
     #str = str.replace(".", "_") # colons are allowed
     str = str.replace(" ", "_")
     str = str.replace("-", "_")
+    str = str.replace("+", "_")
     if str[0] in string.digits:
         str = "_"+str
     assert re.match("^[A-Za-z_][A-Za-z0-9_.]*$", str), "FILE"+str
@@ -472,6 +473,7 @@
                         [(feature.id, component)])
 
     def make_short(self, file):
+        file = re.sub(r'[\?|><:/*"+,;=\[\]]', '_', file) # restrictions on short names
         parts = file.split(".")
         if len(parts)>1:
             suffix = parts[-1].upper()
@@ -500,7 +502,6 @@
                 if pos in (10, 100, 1000):
                     prefix = prefix[:-1]
         self.short_names.add(file)
-        assert not re.search(r'[\?|><:/*"+,;=\[\]]', file) # restrictions on short names
         return file
 
     def add_file(self, file, src=None, version=None, language=None):
