diff --git a/PCbuild9/_tkinter.vcproj b/PCbuild9/_tkinter.vcproj
index 1d7f99d..f89894c 100644
--- a/PCbuild9/_tkinter.vcproj
+++ b/PCbuild9/_tkinter.vcproj
@@ -104,7 +104,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				AdditionalIncludeDirectories="&quot;$(tcltk64Dir)\include&quot;"
 				PreprocessorDefinitions="WITH_APPINIT"
 			/>
 			<Tool
@@ -118,7 +118,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="$(tcltkDir)\lib\tcl84.lib $(tcltkDir)\lib\tk84.lib $(tcltkDir)\lib\tix8.4\tix84.lib"
+				AdditionalDependencies="$(tcltk64Dir)\lib\tcl84.lib $(tcltk64Dir)\lib\tk84.lib $(tcltk64Dir)\lib\tix8.4\tix84.lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -229,7 +229,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				AdditionalIncludeDirectories="&quot;$(tcltk64Dir)\include&quot;"
 				PreprocessorDefinitions="WITH_APPINIT"
 			/>
 			<Tool
@@ -243,7 +243,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="$(tcltkDir)\lib\tcl84.lib $(tcltkDir)\lib\tk84.lib $(tcltkDir)\lib\tix8.4\tix84.lib"
+				AdditionalDependencies="$(tcltk64Dir)\lib\tcl84.lib $(tcltk64Dir)\lib\tk84.lib $(tcltk64Dir)\lib\tix8.4\tix84.lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -354,7 +354,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				AdditionalIncludeDirectories="&quot;$(tcltk64Dir)\include&quot;"
 				PreprocessorDefinitions="WITH_APPINIT"
 			/>
 			<Tool
@@ -368,7 +368,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="$(tcltkDir)\lib\tcl84.lib $(tcltkDir)\lib\tk84.lib $(tcltkDir)\lib\tix8.4\tix84.lib"
+				AdditionalDependencies="$(tcltk64Dir)\lib\tcl84.lib $(tcltk64Dir)\lib\tk84.lib $(tcltk64Dir)\lib\tix8.4\tix84.lib"
 				TargetMachine="17"
 			/>
 			<Tool
@@ -480,7 +480,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="$(tcltkDir)\include"
+				AdditionalIncludeDirectories="&quot;$(tcltk64Dir)\include&quot;"
 				PreprocessorDefinitions="WITH_APPINIT"
 			/>
 			<Tool
@@ -494,7 +494,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="$(tcltkDir)\lib\tcl84.lib $(tcltkDir)\lib\tk84.lib $(tcltkDir)\lib\tix8.4\tix84.lib"
+				AdditionalDependencies="$(tcltk64Dir)\lib\tcl84.lib $(tcltk64Dir)\lib\tk84.lib $(tcltk64Dir)\lib\tix8.4\tix84.lib"
 				TargetMachine="17"
 			/>
 			<Tool
diff --git a/PCbuild9/build_tkinter.py b/PCbuild9/build_tkinter.py
new file mode 100644
index 0000000..5423a3b
--- /dev/null
+++ b/PCbuild9/build_tkinter.py
@@ -0,0 +1,79 @@
+"""Script to compile the dependencies of _tkinter
+
+Copyright (c) 2007 by Christian Heimes <christian@cheimes.de>
+
+Licensed to PSF under a Contributor Agreement.
+"""
+
+import os
+import sys
+import shutil
+
+here = os.path.abspath(os.path.dirname(__file__))
+par = os.path.pardir
+
+#TCL = "tcl8.4.16"
+#TIX = "Tix8.4.2"
+#TK = "tk8.4.16"
+TCL = "tcl8.4.12"
+TIX = "Tix8.4.0"
+TK = "tk8.4.12"
+ROOT = os.path.abspath(os.path.join(here, par, par))
+NMAKE = "nmake /nologo "
+
+def system(cmd):
+    if os.system(cmd) != 0:
+        raise RuntimeError(cmd)
+
+def build(platform, clean):
+    if platform == "Win32":
+        dest = os.path.join(ROOT, "tcltk")
+        machine = "X86"
+    elif platform == "x64":
+        dest = os.path.join(ROOT, "tcltk64")
+        machine = "X64"
+    else:
+        raise ValueError(platform)
+
+    # TCL
+    tcldir = os.path.join(ROOT, TCL)
+    if True:
+        os.chdir(os.path.join(tcldir, "win"))
+        if clean:
+            system(NMAKE + "/f makefile.vc clean")
+        system(NMAKE + "/f makefile.vc")
+        system(NMAKE + "/f makefile.vc INSTALLDIR=%s install" % dest)
+
+    # TK
+    if True:
+        os.chdir(os.path.join(ROOT, TK, "win"))
+        if clean:
+            system(NMAKE + "/f makefile.vc clean")
+        system(NMAKE + "/f makefile.vc TCLDIR=%s" % tcldir)
+        system(NMAKE + "/f makefile.vc TCLDIR=%s INSTALLDIR=%s install" %
+            (tcldir, dest))
+
+    # TIX
+    if True:
+        os.chdir(os.path.join(ROOT, TIX, "win"))
+        if clean:
+            system(NMAKE + "/f makefile.vc clean")
+        system(NMAKE + "/f makefile.vc MACHINE=%s" % machine)
+        system(NMAKE + "/f makefile.vc INSTALL_DIR=%s install" % dest)
+
+
+def main():
+    if len(sys.argv) < 2 or sys.argv[1] not in ("Win32", "x64"):
+        print("%s Win32|x64" % sys.argv[0])
+        sys.exit(1)
+
+    if "-c" in sys.argv:
+        clean = True
+    else:
+        clean = False
+
+    build(sys.argv[1], clean)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/PCbuild9/pyd.vsprops b/PCbuild9/pyd.vsprops
index 6f86565..2a69d95 100644
--- a/PCbuild9/pyd.vsprops
+++ b/PCbuild9/pyd.vsprops
@@ -20,8 +20,4 @@
 		Name="VCPostBuildEventTool"
 		CommandLine=""
 	/>
-	<UserMacro
-		Name="PythonExe"
-		Value="$(OutDir)python.exe"
-	/>
 </VisualStudioPropertySheet>
diff --git a/PCbuild9/pyd_d.vsprops b/PCbuild9/pyd_d.vsprops
index ea90417..f0dc87c 100644
--- a/PCbuild9/pyd_d.vsprops
+++ b/PCbuild9/pyd_d.vsprops
@@ -26,6 +26,6 @@
 	/>
 	<UserMacro
 		Name="PythonExe"
-		Value="$(OutDir)python_d.exe"
+		Value="$(SolutionDir)python_d.exe"
 	/>
 </VisualStudioPropertySheet>
diff --git a/PCbuild9/pyproject.vsprops b/PCbuild9/pyproject.vsprops
index 6d91957..b6e3245 100644
--- a/PCbuild9/pyproject.vsprops
+++ b/PCbuild9/pyproject.vsprops
@@ -41,6 +41,10 @@
 		Value="python26"
 	/>
 	<UserMacro
+		Name="PythonExe"
+		Value="$(SolutionDir)\python.exe"
+	/>
+	<UserMacro
 		Name="bsddbDir"
 		Value="..\..\db-4.4.20\build_win32\"
 	/>
@@ -60,4 +64,8 @@
 		Name="tcltkDir"
 		Value="..\..\tcltk\"
 	/>
+	<UserMacro
+		Name="tcltk64Dir"
+		Value="..\..\tcltk64"
+	/>
 </VisualStudioPropertySheet>
diff --git a/PCbuild9/readme.txt b/PCbuild9/readme.txt
index 1fd8cc3..025684b 100644
--- a/PCbuild9/readme.txt
+++ b/PCbuild9/readme.txt
@@ -5,27 +5,37 @@
 (a.k.a. Visual Studio .NET 2008).
 (For other Windows platforms and compilers, see ../PC/readme.txt.)
 
-All you need to do is open the workspace "pcbuild.sln" in MSVC++, select
-the Debug or Release setting (using "Solution Configuration" from
-the "Standard" toolbar"), and build the projects.
+All you need to do is open the workspace "pcbuild.sln" in Visual Studio,
+select the desired combination of configuration and platform and eventually
+build the solution. Unless you are going to debug a problem in the core or
+you are going to create an optimized build you want to select "Release" as
+configuration.
 
-The proper order to build subprojects:
+The PCbuild9 directory is compatible with all versions of Visual Studio from
+VS C++ Express Edition over the standard edition up to the professional
+edition. However the express edition does support features like solution
+folders or profile guided optimization (PGO). The missing bits and pieces
+won't stop you from building Python.
 
-1) pythoncore (this builds the main Python DLL and library files,
-               python30.{dll, lib} in Release mode)
+The solution is configured to build the projects in the correct order. "Build
+Solution" or F6 takes care of dependencies except for x64 builds. To make
+cross compiling x64 builds on a 32bit OS possible the x64 builds require a 
+32bit version of Python.
 
-2) python (this builds the main Python executable,
-           python.exe in Release mode)
 
-3) the other subprojects, as desired or needed (note:  you probably don't
-   want to build most of the other subprojects, unless you're building an
-   entire Python distribution from scratch, or specifically making changes
-   to the subsystems they implement, or are running a Python core buildbot
-   test slave; see SUBPROJECTS below)
+note:
+   you probably don't want to build most of the other subprojects, unless
+   you're building an entire Python distribution from scratch, or
+   specifically making changes to the subsystems they implement, or are
+   running a Python core buildbot test slave; see SUBPROJECTS below)
 
 When using the Debug setting, the output files have a _d added to
 their name:  python30_d.dll, python_d.exe, parser_d.pyd, and so on.
 
+The 32bit builds end up in the solution folder PCbuild9 while the x64 builds
+land in the amd64 subfolder. The PGI and PGO builds for profile guided
+optimization end up in their own folders, too.
+
 SUBPROJECTS
 -----------
 These subprojects should build out of the box.  Subprojects other than the
@@ -54,15 +64,17 @@
 winsound
     play sounds (typically .wav files) under Windows
 
-The following subprojects will generally NOT build out of the box.  They
+The following subprojects will generally NOT build out of the box. They
 wrap code Python doesn't control, and you'll need to download the base
 packages first and unpack them into siblings of PCbuilds's parent
-directory; for example, if your PCbuild is  .......\dist\src\PCbuild\,
-unpack into new subdirectories of dist\.
+directory; for example, if your PCbuild9 is  ..\dist\py3k\PCbuild9\,
+unpack into new subdirectories of ..\dist\.
 
 _tkinter
     Python wrapper for the Tk windowing system.  Requires building
     Tcl/Tk first.  Following are instructions for Tcl/Tk 8.4.12.
+    
+    NOTE: The 64 build builds must land in tcltk64 instead of tcltk.
 
     Get source
     ----------
@@ -124,33 +136,30 @@
 
     A custom pre-link step in the bz2 project settings should manage to
     build bzip2-1.0.3\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is
-    linked in PCbuild\.
+    linked in PCbuild9\.
     However, the bz2 project is not smart enough to remove anything under
     bzip2-1.0.3\ when you do a clean, so if you want to rebuild bzip2.lib
     you need to clean up bzip2-1.0.3\ by hand.
 
-    The build step shouldn't yield any warnings or errors, and should end
-    by displaying 6 blocks each terminated with
-        FC: no differences encountered
-
-    All of this managed to build bzip2-1.0.3\libbz2.lib, which the Python
-    project links in.
+    All of this managed to build libbz2.lib in 
+    bzip2-1.0.3\$platform-$configuration\, which the Python project links in.
 
 
 _bsddb
     To use the version of bsddb that Python is built with by default, invoke
     (in the dist directory)
 
-     svn export http://svn.python.org/projects/external/db-4.4.20
+      svn export http://svn.python.org/projects/external/db-4.4.20
 
-
-    Then open a VS.NET 2003 shell, and invoke:
-
-       devenv db-4.4.20\build_win32\Berkeley_DB.sln /build Release /project db_static
-
-    and do that a second time for a Debug build too:
-
-       devenv db-4.4.20\build_win32\Berkeley_DB.sln /build Debug /project db_static
+    Next open the solution file db-4.4.20\build_win32\Berkeley_DB.sln with
+    Visual Studio and convert the projects to the new format. The standard
+    and professional version of VS 2008 builds the necessary libraries
+    in a pre-link step of _bsddb. However the express edition is missing
+    some pieces and you have to build the libs yourself.
+    
+    The _bsddb subprojects depends only on the db_static project of 
+    Berkeley DB. You have to choose either "Release", "Release AMD64", "Debug"
+    or "Debug AMD64" as configuration.
 
     Alternatively, if you want to start with the original sources,
     go to Sleepycat's download page:
@@ -168,7 +177,7 @@
     Now apply any patches that apply to your version.
 
     Open
-        dist\db-4.4.20\docs\index.html
+        db-4.4.20\docs\ref\build_win\intro.html
 
     and follow the "Windows->Building Berkeley DB with Visual C++ .NET"
     instructions for building the Sleepycat
@@ -178,40 +187,6 @@
     To run extensive tests, pass "-u bsddb" to regrtest.py.  test_bsddb3.py
     is then enabled.  Running in verbose mode may be helpful.
 
-    XXX The test_bsddb3 tests don't always pass, on Windows (according to
-    XXX me) or on Linux (according to Barry).  (I had much better luck
-    XXX on Win2K than on Win98SE.)  The common failure mode across platforms
-    XXX is
-    XXX     DBAgainError: (11, 'Resource temporarily unavailable -- unable
-    XXX                         to join the environment')
-    XXX
-    XXX and it appears timing-dependent.  On Win2K I also saw this once:
-    XXX
-    XXX test02_SimpleLocks (bsddb.test.test_thread.HashSimpleThreaded) ...
-    XXX Exception in thread reader 1:
-    XXX Traceback (most recent call last):
-    XXX File "C:\Code\python\lib\threading.py", line 411, in __bootstrap
-    XXX    self.run()
-    XXX File "C:\Code\python\lib\threading.py", line 399, in run
-    XXX    self.__target(*self.__args, **self.__kwargs)
-    XXX File "C:\Code\python\lib\bsddb\test\test_thread.py", line 268, in
-    XXX                  readerThread
-    XXX    rec = c.next()
-    XXX DBLockDeadlockError: (-30996, 'DB_LOCK_DEADLOCK: Locker killed
-    XXX                                to resolve a deadlock')
-    XXX
-    XXX I'm told that DBLockDeadlockError is expected at times.  It
-    XXX doesn't cause a test to fail when it happens (exceptions in
-    XXX threads are invisible to unittest).
-
-    Building for Win64:
-    - open a VS.NET 2003 command prompt
-    - run the SDK setenv.cmd script, passing /RETAIL and the target
-      architecture (/SRV64 for Itanium, /X64 for AMD64)
-    - build BerkeleyDB with the solution configuration matching the
-      target ("Release IA64" for Itanium, "Release AMD64" for AMD64), e.g.
-    devenv db-4.4.20\build_win32\Berkeley_DB.sln /build "Release AMD64" /project db_static /useenv
-
 _sqlite3
     Python wrapper for SQLite library.
     
@@ -220,7 +195,8 @@
     svn export http://svn.python.org/projects/external/sqlite-source-3.3.4
     
     To use the extension module in a Python build tree, copy sqlite3.dll into
-    the PCbuild folder.
+    the PCbuild folder. The source directory in svn also contains a .def file
+    from the binary release of sqlite3.
 
 _ssl
     Python wrapper for the secure sockets library.
@@ -235,11 +211,19 @@
 
     You must also install ActivePerl from
         http://www.activestate.com/Products/ActivePerl/
-    as this is used by the OpenSSL build process.  Complain to them <wink>.
+    if you like to use the official sources instead of the files from 
+    python's subversion repository. The svn version contains pre-build
+    makefiles and assembly files.
 
     You also need the NASM assembler
     from http://www.kernel.org/pub/software/devel/nasm/binaries/win32/
     Put nasmw.exe anywhere in your PATH.
+    
+    The build process makes sure that no patented algorithms are included.
+    For now RC5, MDC2 and IDEA are excluded from the build. You may have 
+    to manually remove $(OBJ_D)\i_*.obj from ms\nt.mak if the build process
+    complains about missing files or forbidden IDEA. Again the files provided
+    in the subversion repository are already fixed.
 
     The MSVC project simply invokes PCBuild/build_ssl.py to perform
     the build.  This Python script locates and builds your OpenSSL
@@ -259,6 +243,10 @@
 Building for Itanium
 --------------------
 
+NOTE:
+Official support for Itanium builds have been dropped from the build. Please
+contact as and provide patches if you are interested in Itanium builds.
+
 The project files support a ReleaseItanium configuration which creates
 Win64/Itanium binaries. For this to work, you need to install the Platform
 SDK, in particular the 64-bit support. This includes an Itanium compiler
@@ -271,155 +259,20 @@
 Building for AMD64
 ------------------
 
-The build process for the ReleaseAMD64 configuration is very similar
-to the Itanium configuration; make sure you use the latest version of
-vsextcomp.
+The build process for AMD64 / x64 is very similar to standard builds. You just
+have to set x64 as platform. 
 
 Building Python Using the free MS Toolkit Compiler
 --------------------------------------------------
 
-The build process for Visual C++ can be used almost unchanged with the free MS
-Toolkit Compiler. This provides a way of building Python using freely
-available software.
-
 Note that Microsoft have withdrawn the free MS Toolkit Compiler, so this can
-no longer be considered a supported option. The instructions are still
-correct, but you need to already have a copy of the compiler in order to use
-them. Microsoft now supply Visual C++ 2005 Express Edition for free, but this
-is NOT compatible with Visual C++ 7.1 (it uses a different C runtime), and so
-cannot be used to build a version of Python compatible with the standard
-python.org build. If you are interested in using Visual C++ 2005 Express
-Edition, however, you should look at the PCBuild8 directory.
+no longer be considered a supported option. Instead you can use the free
+VS C++ Express Edition
 
-Requirements
+Profile Guided Optimization
+---------------------------
 
-    To build Python, the following tools are required:
-
-    * The Visual C++ Toolkit Compiler
-        no longer available for download - see above
-    * A recent Platform SDK
-        from http://www.microsoft.com/downloads/details.aspx?FamilyID=484269e2-3b89-47e3-8eb7-1f2be6d7123a
-    * The .NET 1.1 SDK
-        from http://www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-4070-9f41-a333c6b9181d
-
-    [Does anyone have better URLs for the last 2 of these?]
-
-    The toolkit compiler is needed as it is an optimising compiler (the
-    compiler supplied with the .NET SDK is a non-optimising version). The
-    platform SDK is needed to provide the Windows header files and libraries
-    (the Windows 2003 Server SP1 edition, typical install, is known to work -
-    other configurations or versions are probably fine as well). The .NET 1.1
-    SDK is needed because it contains a version of msvcrt.dll which links to
-    the msvcr71.dll CRT. Note that the .NET 2.0 SDK is NOT acceptable, as it
-    references msvcr80.dll.
-
-    All of the above items should be installed as normal.
-
-    If you intend to build the openssl (needed for the _ssl extension) you
-    will need the C runtime sources installed as part of the platform SDK.
-
-    In addition, you will need Nant, available from
-    http://nant.sourceforge.net. The 0.85 release candidate 3 version is known
-    to work. This is the latest released version at the time of writing. Later
-    "nightly build" versions are known NOT to work - it is not clear at
-    present whether future released versions will work.
-
-Setting up the environment
-
-    Start a platform SDK "build environment window" from the start menu. The
-    "Windows XP 32-bit retail" version is known to work.
-
-    Add the following directories to your PATH:
-        * The toolkit compiler directory
-        * The SDK "Win64" binaries directory
-	* The Nant directory
-    Add to your INCLUDE environment variable:
-        * The toolkit compiler INCLUDE directory
-    Add to your LIB environment variable:
-        * The toolkit compiler LIB directory
-	* The .NET SDK Visual Studio 2003 VC7\lib directory
-
-    The following commands should set things up as you need them:
-
-        rem Set these values according to where you installed the software
-        set TOOLKIT=C:\Program Files\Microsoft Visual C++ Toolkit 2003
-        set SDK=C:\Program Files\Microsoft Platform SDK
-        set NET=C:\Program Files\Microsoft Visual Studio .NET 2003
-        set NANT=C:\Utils\Nant
-
-        set PATH=%TOOLKIT%\bin;%PATH%;%SDK%\Bin\win64;%NANT%\bin
-        set INCLUDE=%TOOLKIT%\include;%INCLUDE%
-        set LIB=%TOOLKIT%\lib;%NET%\VC7\lib;%LIB%
-
-    The "win64" directory from the SDK is added to supply executables such as
-    "cvtres" and "lib", which are not available elsewhere. The versions in the
-    "win64" directory are 32-bit programs, so they are fine to use here.
-
-    That's it. To build Python (the core only, no binary extensions which
-    depend on external libraries) you just need to issue the command
-
-        nant -buildfile:python.build all
-
-    from within the PCBuild directory.
-
-Extension modules
-
-    To build those extension modules which require external libraries
-    (_tkinter, bz2, _bsddb, _sqlite3, _ssl) you can follow the instructions
-    for the Visual Studio build above, with a few minor modifications. These
-    instructions have only been tested using the sources in the Python
-    subversion repository - building from original sources should work, but
-    has not been tested.
-
-    For each extension module you wish to build, you should remove the
-    associated include line from the excludeprojects section of pc.build.
-
-    The changes required are:
-
-    _tkinter
-        The tix makefile (tix-8.4.0\win\makefile.vc) must be modified to
-	remove references to TOOLS32. The relevant lines should be changed to
-	read:
-            cc32 = cl.exe
-            link32 = link.exe
-            include32 = 
-	The remainder of the build instructions will work as given.
-
-    bz2
-        No changes are needed
-
-    _bsddb
-        The file db.build should be copied from the Python PCBuild directory
-	to the directory db-4.4.20\build_win32.
-
-	The file db_static.vcproj in db-4.4.20\build_win32 should be edited to
-	remove the string "$(SolutionDir)" - this occurs in 2 places, only
-	relevant for 64-bit builds. (The edit is required as otherwise, nant
-	wants to read the solution file, which is not in a suitable form).
-
-	The bsddb library can then be build with the command
-	    nant -buildfile:db.build all
-	run from the db-4.4.20\build_win32 directory.
-
-    _sqlite3
-        No changes are needed. However, in order for the tests to succeed, a
-	copy of sqlite3.dll must be downloaded, and placed alongside
-	python.exe.
-
-    _ssl
-        The documented build process works as written. However, it needs a
-	copy of the file setargv.obj, which is not supplied in the platform
-	SDK. However, the sources are available (in the crt source code). To
-	build setargv.obj, proceed as follows:
-
-        Copy setargv.c, cruntime.h and internal.h from %SDK%\src\crt to a
-	temporary directory.
-	Compile using "cl /c /I. /MD /D_CRTBLD setargv.c"
-	Copy the resulting setargv.obj to somewhere on your LIB environment
-	(%SDK%\lib is a reasonable place).
-
-	With setargv.obj in place, the standard build process should work
-	fine.
+http://msdn2.microsoft.com/en-us/library/e7k32f4k(VS.90).aspx
 
 YOUR OWN EXTENSION DLLs
 -----------------------
