diff --git a/Mac/Tools/IDE/PyEdit.py b/Mac/Tools/IDE/PyEdit.py
index ef31486..6cac553 100644
--- a/Mac/Tools/IDE/PyEdit.py
+++ b/Mac/Tools/IDE/PyEdit.py
@@ -63,6 +63,7 @@
 			text = f.read()
 			f.close()
 			self._creator, filetype = MacOS.GetCreatorAndType(path)
+			self.addrecentfile(path)
 		else:
 			raise IOError, "file '%s' does not exist" % path
 		self.path = path
@@ -399,6 +400,7 @@
 			del linecache.cache[self.path]
 		import macostools
 		macostools.touched(self.path)
+		self.addrecentfile(self.path)
 	
 	def can_save(self, menuitem):
 		return self.editgroup.editor.changed or self.editgroup.editor.selchanged
@@ -780,6 +782,10 @@
 	
 	def selectline(self, lineno, charoffset = 0):
 		self.editgroup.editor.selectline(lineno - 1, charoffset)
+		
+	def addrecentfile(self, filename):
+		app = W.getapplication()
+		app.addrecentfile(filename)
 
 class _saveoptions:
 	
diff --git a/Mac/Tools/IDE/PythonIDEMain.py b/Mac/Tools/IDE/PythonIDEMain.py
index c79d9fc..9efaa22 100644
--- a/Mac/Tools/IDE/PythonIDEMain.py
+++ b/Mac/Tools/IDE/PythonIDEMain.py
@@ -76,6 +76,8 @@
 		newitem = FrameWork.MenuItem(m, "New", "N", 'new')
 		openitem = FrameWork.MenuItem(m, "Open"+ELIPSES, "O", 'open')
 		openbynameitem = FrameWork.MenuItem(m, "Open File by Name"+ELIPSES, "D", 'openbyname')
+		self.openrecentmenu = FrameWork.SubMenu(m, "Open Recent")
+		self.makeopenrecentmenu()
 		FrameWork.Separator(m)
 		closeitem = FrameWork.MenuItem(m, "Close", "W", 'close')
 		saveitem = FrameWork.MenuItem(m, "Save", "S", 'save')
@@ -278,11 +280,49 @@
 		self._openwindowscheckmark = 0
 		self.checkopenwindowsmenu()
 		
+	def makeopenrecentmenu(self):
+		for i in range(len(self.openrecentmenu.items)):
+			self.openrecentmenu.menu.DeleteMenuItem(1)
+			self.openrecentmenu.items = []
+		prefs = self.getprefs()
+		filelist = prefs.recentfiles
+		if not filelist:
+			self.openrecentmenu.enable(0)
+			return
+		self.openrecentmenu.enable(1)
+		for filename in filelist:
+			item = FrameWork.MenuItem(self.openrecentmenu, filename, None, callback = self.domenu_openrecent)
+		
+	def addrecentfile(self, file):
+		prefs = self.getprefs()
+		filelist = prefs.recentfiles
+		if not filelist:
+			filelist = []
+		
+		if file in filelist:
+			if file == filelist[0]:
+				return
+			filelist.remove(file)
+		filelist.insert(0, file)
+		filelist = filelist[:10]
+		prefs.recentfiles = filelist
+		prefs.save()
+		self.makeopenrecentmenu()
+		
 	def domenu_openwindows(self, id, item, window, event):
 		w = self._openwindows[item]
 		w.ShowWindow()
 		w.SelectWindow()
 	
+	def domenu_openrecent(self, id, item, window, event):
+		prefs = self.getprefs()
+		filelist = prefs.recentfiles
+		if not filelist:
+			filelist = []
+		item = item - 1
+		filename = filelist[item]
+		self.openscript(filename)
+	
 	def domenu_quit(self):
 		self._quit()
 	
