diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index ba89c3b..4d790cc 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -27,6 +27,10 @@
 project_base = os.path.dirname(os.path.abspath(sys.executable))
 if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
     project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
+# PC/VS7.1
+if os.name == "nt" and "\\pc\\v" in project_base[-10:].lower():
+    project_base = os.path.abspath(os.path.join(project_base, os.path.pardir,
+                                                os.path.pardir))
 
 # python_build: (Boolean) if true, we're either building Python or
 # building an extension with an un-installed Python, so we use
diff --git a/Lib/sqlite3/test/types.py b/Lib/sqlite3/test/types.py
index 8845e0c..46bed7d 100644
--- a/Lib/sqlite3/test/types.py
+++ b/Lib/sqlite3/test/types.py
@@ -341,8 +341,7 @@
         if sqlite.sqlite_version_info < (3, 1):
             return
 
-        # SQLite's current_timestamp uses UTC time, while datetime.datetime.now() uses local time.
-        now = datetime.datetime.now()
+        now = datetime.datetime.utcnow()
         self.cur.execute("insert into test(ts) values (current_timestamp)")
         self.cur.execute("select ts from test")
         ts = self.cur.fetchone()[0]
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index ea47181..0926817 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -1204,6 +1204,7 @@
 	}
 	
 	new =  PyObject_CallFunction(type, "OOOO", get, set, del, doc);
+	Py_DECREF(type);
 	if (new == NULL)
 		return NULL;
 	pnew = (propertyobject *)new;
diff --git a/PC/VS7.1/_ssl.mak b/PC/VS7.1/_ssl.mak
index 3420ef1..8476a63 100644
--- a/PC/VS7.1/_ssl.mak
+++ b/PC/VS7.1/_ssl.mak
@@ -12,25 +12,25 @@
 SSL_LIB_DIR=$(SSL_DIR)/out32
 !ENDIF
 
-INCLUDES=-I ../Include -I ../PC -I $(SSL_DIR)/inc32
+INCLUDES=-I ../../Include -I ../../PC -I $(SSL_DIR)/inc32
 
 SSL_LIBS=gdi32.lib wsock32.lib user32.lib advapi32.lib /LIBPATH:$(SSL_LIB_DIR) libeay32.lib ssleay32.lib
-SSL_SOURCE=../Modules/_ssl.c 
+SSL_SOURCE=../../Modules/_ssl.c 
 
 HASH_LIBS=gdi32.lib user32.lib advapi32.lib /libpath:$(SSL_LIB_DIR) libeay32.lib
-HASH_SOURCE=../Modules/_hashopenssl.c 
+HASH_SOURCE=../../Modules/_hashopenssl.c 
 
 all: _ssl$(SUFFIX) _hashlib$(SUFFIX)
 
 # Split compile/link into two steps to better support VSExtComp
-_ssl$(SUFFIX): $(SSL_SOURCE) $(SSL_LIB_DIR)/libeay32.lib $(SSL_LIB_DIR)/ssleay32.lib ../PC/*.h ../Include/*.h
+_ssl$(SUFFIX): $(SSL_SOURCE) $(SSL_LIB_DIR)/libeay32.lib $(SSL_LIB_DIR)/ssleay32.lib ../../PC/*.h ../../Include/*.h
 	@if not exist "$(TEMP)/_ssl/." mkdir "$(TEMP)/_ssl"
 	cl /nologo /c $(SSL_SOURCE) $(CFLAGS) /Fo$(TEMP)\_ssl\$*.obj $(INCLUDES)
 	link /nologo @<<
              /dll /out:_ssl$(SUFFIX) $(TEMP)\_ssl\$*.obj $(SSL_LIBS) $(EXTRA_LIBS)
 <<
 
-_hashlib$(SUFFIX): $(HASH_SOURCE) $(SSL_LIB_DIR)/libeay32.lib ../PC/*.h ../Include/*.h
+_hashlib$(SUFFIX): $(HASH_SOURCE) $(SSL_LIB_DIR)/libeay32.lib ../../PC/*.h ../../Include/*.h
     @if not exist "$(TEMP)/_hashlib/." mkdir "$(TEMP)/_hashlib"
     cl /nologo /c $(HASH_SOURCE) $(CFLAGS) $(EXTRA_CFLAGS) /Fo$(TEMP)\_hashlib\$*.obj $(INCLUDES) 
     link /nologo @<<
diff --git a/PC/VS7.1/make_buildinfo.c b/PC/VS7.1/make_buildinfo.c
index 4cebf45..27580bb 100644
--- a/PC/VS7.1/make_buildinfo.c
+++ b/PC/VS7.1/make_buildinfo.c
@@ -5,9 +5,9 @@
 
 /* This file creates the getbuildinfo.o object, by first
    invoking subwcrev.exe (if found), and then invoking cl.exe.
-   As a side effect, it might generate PCBuild\getbuildinfo2.c
+   As a side effect, it might generate PC\VS7.1\getbuildinfo2.c
    also. If this isn't a subversion checkout, or subwcrev isn't
-   found, it compiles ..\\Modules\\getbuildinfo.c instead.
+   found, it compiles ..\\..\\Modules\\getbuildinfo.c instead.
 
    Currently, subwcrev.exe is found from the registry entries
    of TortoiseSVN.
@@ -44,7 +44,7 @@
 	if (_stat(command+1, &st) < 0)
 		/* subwcrev.exe not part of the release */
 		return 0;
-	strcat(command, "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c");
+	strcat(command, "\" ..\\.. ..\\..\\Modules\\getbuildinfo.c getbuildinfo2.c");
 	puts(command); fflush(stdout);
 	if (system(command) < 0)
 		return 0;
@@ -80,8 +80,8 @@
 	if ((do_unlink = make_buildinfo2()))
 		strcat(command, "getbuildinfo2.c -DSUBWCREV ");
 	else
-		strcat(command, "..\\Modules\\getbuildinfo.c");
-	strcat(command, " -Fogetbuildinfo.o -I..\\Include -I..\\PC");
+		strcat(command, "..\\..\\Modules\\getbuildinfo.c");
+	strcat(command, " -Fogetbuildinfo.o -I..\\..\\Include -I..\\..\\PC");
 	puts(command); fflush(stdout);
 	result = system(command);
 	if (do_unlink)
@@ -89,4 +89,4 @@
 	if (result < 0)
 		return EXIT_FAILURE;
 	return 0;
-}
\ No newline at end of file
+}
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index 9de57b5..bedfade 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -27,8 +27,8 @@
 # Where is sqlite3.dll located, relative to srcdir?
 sqlite_dir = "../sqlite-source-3.3.4"
 # path to PCbuild directory
-PCBUILD="PC/VS7.1"
-#PCBUILD="PCbuild9"
+PCBUILD="PC\\VS7.1"
+#PCBUILD="PCbuild"
 # msvcrt version
 MSVCR = "71"
 #MSVCR = "90"
@@ -335,7 +335,7 @@
     if not os.path.exists(srcdir+r"\PC\python_icon.exe"):
         raise "Run icons.mak in PC directory"
     add_data(db, "Binary",
-             [("PythonWin", msilib.Binary(r"%s\%s\installer.bmp" % (srcdir, PCBUILD))), # 152x328 pixels
+             [("PythonWin", msilib.Binary(r"%s\PCbuild\installer.bmp" % srcdir)), # 152x328 pixels
               ("py.ico",msilib.Binary(srcdir+r"\PC\py.ico")),
              ])
     add_data(db, "Icon",
@@ -990,8 +990,10 @@
             lib.glob("*.gif")
             lib.add_file("idle.icns")
         if dir=="command" and parent.physical=="distutils":
-            lib.add_file("wininst-6.exe")
+            lib.add_file("wininst-6.0.exe")
             lib.add_file("wininst-7.1.exe")
+            lib.add_file("wininst-8.0.exe")
+            lib.add_file("wininst-9.0.exe")
         if dir=="setuptools":
             lib.add_file("cli.exe")
             lib.add_file("gui.exe")
@@ -1009,8 +1011,8 @@
     # Add DLLs
     default_feature.set_current()
     lib = PyDirectory(db, cab, root, srcdir + "/" + PCBUILD, "DLLs", "DLLS|DLLs")
-    lib.add_file("py.ico", src="../PC/py.ico")
-    lib.add_file("pyc.ico", src="../PC/pyc.ico")
+    lib.add_file("py.ico", src=srcdir+"/PC/py.ico")
+    lib.add_file("pyc.ico", src=srcdir+"/PC/pyc.ico")
     dlls = []
     tclfiles = []
     for f in extensions:
