diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 49f9869..c2ee115 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -98,13 +98,13 @@
         self.flist = flist
         root = root or flist.root
         self.root = root
-        if flist:
-            self.vars = flist.vars
         self.menubar = Menu(root)
         self.top = top = self.Toplevel(root, menu=self.menubar)
-        #self.top.instanceDict makes flist.inversedict avalable to
-        #configDialog.py so it can access all EditorWindow instaces
-        self.top.instanceDict=flist.inversedict
+        if flist:
+            self.vars = flist.vars
+            #self.top.instanceDict makes flist.inversedict avalable to
+            #configDialog.py so it can access all EditorWindow instaces
+            self.top.instanceDict=flist.inversedict
         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,
@@ -213,7 +213,7 @@
         if self.extensions.has_key('AutoIndent'):
             self.extensions['AutoIndent'].set_indentation_params(
                 self.ispythonsource(filename))
-
+ 
     def set_status_bar(self):
         self.status_bar = self.MultiStatusBar(self.top)
         self.status_bar.set_label('column', 'Col: ?', side=RIGHT)
@@ -253,6 +253,7 @@
             menudict[name] = menu = Menu(mbar, name=name)
             mbar.add_cascade(label=label, menu=menu, underline=underline)
         self.fill_menus()
+        self.ResetExtraHelpMenu()
 
     def postwindowsmenu(self):
         # Only called when Windows menu exists
@@ -323,7 +324,10 @@
         del fn
 
     def python_docs(self, event=None):
-        webbrowser.open(self.help_url)
+        self.display_docs(self.help_url)
+
+    def display_docs(self, url):
+        webbrowser.open(url)
 
     def select_all(self, event=None):
         self.text.tag_add("sel", "1.0", "end-1c")
@@ -525,6 +529,25 @@
                             menu.entryconfig(index,accelerator=accel)
                             #print 'accel now:',accel,'\n'
 
+    def ResetExtraHelpMenu(self):
+        #load or update the Extra Help menu if required
+        menuList=idleConf.GetAllExtraHelpSourcesList()
+        helpMenu=self.menudict['help']
+        cascadeIndex=helpMenu.index(END)-1
+        if menuList:
+            if not hasattr(self,'menuExtraHelp'):
+                self.menuExtraHelp=Menu(self.menubar)
+                helpMenu.insert_cascade(cascadeIndex,label='Extra Help',
+                        underline=1,menu=self.menuExtraHelp)
+            self.menuExtraHelp.delete(1,END)
+            for menuItem in menuList:
+                self.menuExtraHelp.add_command(label=menuItem[0],
+                        command=lambda:self.display_docs(menuItem[1]))
+        else: #no extra help items
+            if hasattr(self,'menuExtraHelp'): 
+                helpMenu.delete(cascadeIndex-1)                    
+                del(self.menuExtraHelp)
+                    
     def saved_change_hook(self):
         short = self.short_title()
         long = self.long_title()
