diff --git a/Mac/OSX/fixversions.py b/Mac/OSX/fixversions.py
new file mode 100644
index 0000000..e782e8c
--- /dev/null
+++ b/Mac/OSX/fixversions.py
@@ -0,0 +1,70 @@
+"""fixversions - Fix version numbers in .plist files to match current
+python version and date"""
+
+import sys
+import os
+import time
+import plistlib
+
+SHORTVERSION = "%d.%d" % (sys.version_info[0], sys.version_info[1])
+if sys.version_info[2]:
+	SHORTVERSION = SHORTVERSION + ".%d" % sys.version_info[2]
+if sys.version_info[3] != 'final':
+	SHORTVERSION = SHORTVERSION + "%s%d" % (sys.version_info[3], sys.version_info[4])
+
+COPYRIGHT = "(c) %d Python Software Foundation." % time.gmtime()[0]
+
+LONGVERSION = SHORTVERSION + ", " + COPYRIGHT
+
+def fix(file):
+	plist = plistlib.Plist.fromFile(file)
+	changed = False
+	if plist.has_key("CFBundleGetInfoString") and \
+			plist["CFBundleGetInfoString"] != LONGVERSION:
+		plist["CFBundleGetInfoString"] = LONGVERSION
+		changed = True
+	if plist.has_key("CFBundleLongVersionString") and \
+			plist["CFBundleLongVersionString"] != LONGVERSION:
+		plist["CFBundleLongVersionString"] = LONGVERSION
+		changed = True
+	if plist.has_key("NSHumanReadableCopyright") and \
+			plist["NSHumanReadableCopyright"] != COPYRIGHT:
+		plist["NSHumanReadableCopyright"] = COPYRIGHT
+		changed = True
+	if plist.has_key("CFBundleVersion") and \
+			plist["CFBundleVersion"] != SHORTVERSION:
+		plist["CFBundleVersion"] = SHORTVERSION
+		changed = True
+	if plist.has_key("CFBundleShortVersionString") and \
+			plist["CFBundleShortVersionString"] != SHORTVERSION:
+		plist["CFBundleShortVersionString"] = SHORTVERSION
+		changed = True
+	if changed:
+		os.rename(file, file + '~')
+		plist.write(file)
+		
+def main():
+	if len(sys.argv) < 2:
+		print "Usage: %s plistfile ..." % sys.argv[0]
+		print "or: %s -a      fix standard Python plist files"
+		sys.exit(1)
+	if sys.argv[1] == "-a":
+		files = [
+			"../OSXResources/app/Info.plist",
+			"../OSXResources/framework/version.plist",
+			"../Tools/IDE/PackageManager.plist",
+			"../Tools/IDE/PythonIDE.plist",
+			"../scripts/BuildApplet.plist"
+		]
+		if not os.path.exists(files[0]):
+			print "%s -a must be run from Mac/OSX directory"
+			sys.exit(1)
+	else:
+		files = sys.argv[1:]
+	for file in files:
+		fix(file)
+	sys.exit(0)
+	
+if __name__ == "__main__":
+	main()
+	
\ No newline at end of file
