1. Prevent Undo before IOmark in PyShell.PyShell
2. Consolidate Undo code in EditorWindow.EditorWindow
3. Remove Formatting and Run menus from PyShell
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index a7aa185..c8b0d41 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -151,10 +151,8 @@
             text.bind("<<open-path-browser>>", self.open_path_browser)
 
         self.set_status_bar()
-        
         vbar['command'] = text.yview
         vbar.pack(side=RIGHT, fill=Y)
-
         text['yscrollcommand'] = vbar.set
         fontWeight='normal'
         if idleConf.GetOption('main','EditorWindow','font-bold',type='bool'):
@@ -168,30 +166,34 @@
 
         self.per = per = self.Percolator(text)
         if self.ispythonsource(filename):
-            self.color = color = self.ColorDelegator(); per.insertfilter(color)
+            self.color = color = self.ColorDelegator()
+            per.insertfilter(color)
             ##print "Initial colorizer"
         else:
             ##print "No initial colorizer"
             self.color = None
-        self.undo = undo = self.UndoDelegator(); per.insertfilter(undo)
+
+        self.undo = undo = self.UndoDelegator()
+        per.insertfilter(undo)
+        text.undo_block_start = undo.undo_block_start
+        text.undo_block_stop = undo.undo_block_stop
+        undo.set_saved_change_hook(self.saved_change_hook)
+
+        # IOBinding implements file I/O and printing functionality
         self.io = io = self.IOBinding(self)
+        io.set_filename_change_hook(self.filename_change_hook)
+
         #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
-        undo.set_saved_change_hook(self.saved_change_hook)
-        io.set_filename_change_hook(self.filename_change_hook)
-
         if filename:
             if os.path.exists(filename):
                 io.loadfile(filename)
             else:
                 io.set_filename(filename)
-
         self.saved_change_hook()
 
         self.load_extensions()
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 4771d2e..f2ac36d 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -450,9 +450,15 @@
     ColorDelegator = ModifiedColorDelegator
     UndoDelegator = ModifiedUndoDelegator
 
-    # Override menu bar specs
-    menu_specs = PyShellEditorWindow.menu_specs[:]
-    menu_specs.insert(len(menu_specs)-3, ("debug", "_Debug"))
+    # Override menus: Run and Format not desired in shell; add Debug
+    menu_specs = [
+        ("file", "_File"),
+        ("edit", "_Edit"),
+        ("debug", "_Debug"),
+        ("settings", "_Settings"),
+        ("windows", "_Windows"),
+        ("help", "_Help"),
+    ]
 
     # New classes
     from IdleHistory import History
@@ -825,6 +831,7 @@
         self.console.write(s)
         self.text.mark_set("insert", "end-1c")
         self.set_line_and_column()
+        self.io.reset_undo()
 
     def resetoutput(self):
         source = self.text.get("iomark", "end-1c")