diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index c2ee115..26400f3 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -105,6 +105,8 @@
             #self.top.instanceDict makes flist.inversedict avalable to
             #configDialog.py so it can access all EditorWindow instaces
             self.top.instanceDict=flist.inversedict
+        self.recentFilesPath=os.path.join(idleConf.GetUserCfgDir(),
+                'recent-files.lst')
         self.vbar = vbar = Scrollbar(top, name='vbar')
         self.text_frame = text_frame = Frame(top)
         self.text = text = Text(text_frame, name='text', padx=5, wrap=None,
@@ -178,6 +180,11 @@
             self.color = None
         self.undo = undo = self.UndoDelegator(); per.insertfilter(undo)
         self.io = io = self.IOBinding(self)
+        #create the Recent Files submenu
+        self.menuRecentFiles=Menu(self.menubar)
+        self.menudict['file'].insert_cascade(3,label='Recent Files',
+                underline=0,menu=self.menuRecentFiles)
+        self.UpdateRecentFilesList()
 
         text.undo_block_start = undo.undo_block_start
         text.undo_block_stop = undo.undo_block_stop
@@ -253,6 +260,7 @@
             menudict[name] = menu = Menu(mbar, name=name)
             mbar.add_cascade(label=label, menu=menu, underline=underline)
         self.fill_menus()
+        #create the ExtraHelp menu, if required
         self.ResetExtraHelpMenu()
 
     def postwindowsmenu(self):
@@ -542,12 +550,69 @@
             self.menuExtraHelp.delete(1,END)
             for menuItem in menuList:
                 self.menuExtraHelp.add_command(label=menuItem[0],
-                        command=lambda:self.display_docs(menuItem[1]))
+                        command=self.__DisplayExtraHelpCallback(menuItem[1]))
         else: #no extra help items
             if hasattr(self,'menuExtraHelp'): 
                 helpMenu.delete(cascadeIndex-1)                    
                 del(self.menuExtraHelp)
+    
+    def __DisplayExtraHelpCallback(self,helpFile):
+        def DisplayExtraHelp(helpFile=helpFile):
+            self.display_docs(helpFile)
+        return DisplayExtraHelp
                     
+    def UpdateRecentFilesList(self,newFile=None):
+        #load or update the recent files list, and menu if required
+        rfList=[]
+        if os.path.exists(self.recentFilesPath):
+            RFfile=open(self.recentFilesPath,'r')
+            try:
+                rfList=RFfile.readlines()
+            finally:
+                RFfile.close()
+        if newFile: 
+            newFile=os.path.abspath(newFile)+'\n'
+            if newFile in rfList:
+                rfList.remove(newFile)
+            rfList.insert(0,newFile)
+        rfList=self.__CleanRecentFiles(rfList)
+        print self.top.instanceDict
+        print self
+        if rfList:
+            for instance in self.top.instanceDict.keys():
+                instance.menuRecentFiles.delete(1,END)
+                for file in rfList:
+                    fileName=file[0:-1]
+                    instance.menuRecentFiles.add_command(label=fileName,
+                            command=instance.__RecentFileCallback(fileName))
+                    
+    def __CleanRecentFiles(self,rfList):
+        origRfList=rfList[:]
+        count=0
+        nonFiles=[]
+        for path in rfList:
+            if not os.path.exists(path[0:-1]): 
+                nonFiles.append(count)
+            count=count+1
+        if nonFiles:
+            nonFiles.reverse()
+            for index in nonFiles:
+                del(rfList[index])
+        if len(rfList)>19:
+            rfList=rfList[0:19]
+        #if rfList != origRfList:
+        RFfile=open(self.recentFilesPath,'w')
+        try:
+            RFfile.writelines(rfList)
+        finally:
+            RFfile.close()
+        return rfList
+    
+    def __RecentFileCallback(self,fileName):
+        def OpenRecentFile(fileName=fileName):
+            self.io.open(editFile=fileName)
+        return OpenRecentFile
+    
     def saved_change_hook(self):
         short = self.short_title()
         long = self.long_title()
@@ -628,6 +693,10 @@
         return reply
 
     def _close(self):
+        print self.io.filename
+        if self.io.filename:
+            self.UpdateRecentFilesList(newFile=self.io.filename)
+            
         WindowList.unregister_callback(self.postwindowsmenu)
         if self.close_hook:
             self.close_hook()
diff --git a/Lib/idlelib/IOBinding.py b/Lib/idlelib/IOBinding.py
index 4875d11..17c196d 100644
--- a/Lib/idlelib/IOBinding.py
+++ b/Lib/idlelib/IOBinding.py
@@ -72,9 +72,12 @@
         if self.filename_change_hook:
             self.filename_change_hook()
 
-    def open(self, event):
+    def open(self, event=None, editFile=None):
         if self.editwin.flist:
-            filename = self.askopenfile()
+            if not editFile:
+                filename = self.askopenfile()
+            else:
+                filename=editFile
             if filename:
                 # if the current window has no filename and hasn't been
                 #   modified, we replace it's contents (no loss).  Otherwise
@@ -93,7 +96,10 @@
             if reply == "cancel":
                 self.text.focus_set()
                 return "break"
-        filename = self.askopenfile()
+        if not editFile:
+            filename = self.askopenfile()
+        else:
+            filename=editFile
         if filename:
             self.loadfile(filename)
         else:
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index 978cbf1..2d05ed2 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -1072,12 +1072,9 @@
         """
         save all configuration changes to user config files.
         """
-        #if self.changedItems['main'].has_key('HelpFiles'):
         #this section gets completely replaced
-        print idleConf.GetAllExtraHelpSourcesList()
         idleConf.userCfg['main'].remove_section('HelpFiles')
         idleConf.userCfg['main'].Save()
-        print idleConf.GetAllExtraHelpSourcesList()
         for configType in self.changedItems.keys():
             cfgTypeHasChanges=0
             for section in self.changedItems[configType].keys():
@@ -1086,7 +1083,6 @@
                     if self.SetUserValue(configType,section,item,value):
                         cfgTypeHasChanges=1
             if cfgTypeHasChanges: 
-                print configType,'- changed'
                 idleConf.userCfg[configType].Save()                
         self.ResetChangedItems() #clear the changed items dict
          
