diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py
index 75e6cc8..7a9d02f 100644
--- a/Lib/idlelib/Debugger.py
+++ b/Lib/idlelib/Debugger.py
@@ -84,7 +84,7 @@
         pyshell = self.pyshell
         self.flist = pyshell.flist
         self.root = root = pyshell.root
-        self.top = top =ListedToplevel(root)
+        self.top = top = ListedToplevel(root)
         self.top.wm_title("Debug Control")
         self.top.wm_iconname("Debug")
         top.wm_protocol("WM_DELETE_WINDOW", self.close)
@@ -155,7 +155,6 @@
         if self.vglobals.get():
             self.show_globals()
 
-
     def interaction(self, message, frame, info=None):
         self.frame = frame
         self.status.configure(text=message)
@@ -191,7 +190,7 @@
         for b in self.buttons:
             b.configure(state="normal")
         #
-        self.top.tkraise()
+        self.top.wakeup()
         self.root.mainloop()
         #
         for b in self.buttons:
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index e427479..5d63991 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -75,7 +75,7 @@
         root = root or flist.root
         self.root = root
         self.menubar = Menu(root)
-        self.top = top = self.Toplevel(root, menu=self.menubar)
+        self.top = top = WindowList.ListedToplevel(root, menu=self.menubar)
         if flist:
             self.tkinter_vars = flist.vars
             #self.top.instance_dict makes flist.inversedict avalable to
@@ -102,6 +102,7 @@
                         'cursor',fgBg='fg'),
                 width=self.width,
                 height=idleConf.GetOption('main','EditorWindow','height') )
+        self.top.focused_widget = self.text
 
         self.createmenubar()
         self.apply_bindings()
@@ -236,13 +237,6 @@
         self.status_bar.set_label('column', 'Col: %s' % column)
         self.status_bar.set_label('line', 'Ln: %s' % line)
 
-    def wakeup(self):
-        if self.top.wm_state() == "iconic":
-            self.top.wm_deiconify()
-        else:
-            self.top.tkraise()
-        self.text.focus_set()
-
     menu_specs = [
         ("file", "_File"),
         ("edit", "_Edit"),
diff --git a/Lib/idlelib/FileList.py b/Lib/idlelib/FileList.py
index 198055a..4b57901 100644
--- a/Lib/idlelib/FileList.py
+++ b/Lib/idlelib/FileList.py
@@ -1,27 +1,12 @@
-# changes by dscherer@cmu.edu
-#   - FileList.open() takes an optional 3rd parameter action, which is
-#       called instead of creating a new EditorWindow.  This enables
-#       things like 'open in same window'.
-
 import os
 from Tkinter import *
 import tkMessageBox
 
-import WindowList
-
-#$ event <<open-new-window>>
-#$ win <Control-n>
-#$ unix <Control-x><Control-n>
-
-# (This is labeled as 'Exit'in the File menu)
-#$ event <<close-all-windows>>
-#$ win <Control-q>
-#$ unix <Control-x><Control-c>
 
 class FileList:
 
-    from EditorWindow import EditorWindow
-    EditorWindow.Toplevel = WindowList.ListedToplevel # XXX Patch it!
+    from EditorWindow import EditorWindow  # class variable, may be overridden
+                                           # e.g. by PyShellFileList
 
     def __init__(self, root):
         self.root = root
@@ -33,25 +18,22 @@
         assert filename
         filename = self.canonize(filename)
         if os.path.isdir(filename):
+            # This can happen when bad filename is passed on command line:
             tkMessageBox.showerror(
-                "Is A Directory",
-                "The path %r is a directory." % (filename,),
+                "File Error",
+                "%r is a directory." % (filename,),
                 master=self.root)
             return None
         key = os.path.normcase(filename)
         if self.dict.has_key(key):
             edit = self.dict[key]
-            edit.wakeup()
+            edit.top.wakeup()
             return edit
-        if not os.path.exists(filename):
-            tkMessageBox.showinfo(
-                "New File",
-                "Opening non-existent file %r" % (filename,),
-                master=self.root)
-        if action is None:
-            return self.EditorWindow(self, filename, key)
-        else:
+        if action:
+            # Don't create window, perform 'action', e.g. open in same window
             return action(filename)
+        else:
+            return self.EditorWindow(self, filename, key)
 
     def gotofileline(self, filename, lineno=None):
         edit = self.open(filename)
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 32657bb..09b6747 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -1,8 +1,24 @@
+What's New in IDLE 1.1a3?
+=========================
+
+*Release date: 02-SEP-2004*
+
+- Improve keyboard focus binding, especially in Windows menu.  Improve
+  window raising, especially in the Windows menu and in the debugger.
+  IDLEfork 763524.
+
+- If user passes a non-existant filename on the commandline, just
+  open a new file, don't raise a dialog.  IDLEfork 854928.
+
+
 What's New in IDLE 1.1a2?
 =========================
 
 *Release date: 05-AUG-2004*
 
+- EditorWindow.py was not finding the .chm help file on Windows.  Typo
+  at Rev 1.54.  Python Bug 990954
+
 - checking sys.platform for substring 'win' was breaking IDLE docs on Mac
   (darwin).  Also, Mac Safari browser requires full file:// URIs.  SF 900580.
 
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 5b920b2..313c95d 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -96,7 +96,7 @@
 
 
 class PyShellEditorWindow(EditorWindow):
-    "Regular text edit window when a shell is present"
+    "Regular text edit window in IDLE, supports breakpoints"
 
     def __init__(self, *args):
         self.breakpoints = []
@@ -258,15 +258,17 @@
 
 
 class PyShellFileList(FileList):
-    "Extend base class: file list when a shell is present"
+    "Extend base class: IDLE supports a shell and breakpoints"
 
+    # override FileList's class variable, instances return PyShellEditorWindow
+    # instead of EditorWindow when new edit windows are created.
     EditorWindow = PyShellEditorWindow
 
     pyshell = None
 
     def open_shell(self, event=None):
         if self.pyshell:
-            self.pyshell.wakeup()
+            self.pyshell.top.wakeup()
         else:
             self.pyshell = PyShell(self)
             if self.pyshell:
@@ -802,7 +804,6 @@
         text.bind("<<end-of-file>>", self.eof_callback)
         text.bind("<<open-stack-viewer>>", self.open_stack_viewer)
         text.bind("<<toggle-debugger>>", self.toggle_debugger)
-        text.bind("<<open-python-shell>>", self.flist.open_shell)
         text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer)
         if use_subprocess:
             text.bind("<<view-restart>>", self.view_restart_mark)
diff --git a/Lib/idlelib/WindowList.py b/Lib/idlelib/WindowList.py
index ba9f3b3..658502b 100644
--- a/Lib/idlelib/WindowList.py
+++ b/Lib/idlelib/WindowList.py
@@ -60,6 +60,7 @@
     def __init__(self, master, **kw):
         Toplevel.__init__(self, master, kw)
         registry.add(self)
+        self.focused_widget = self
 
     def destroy(self):
         registry.delete(self)
@@ -79,10 +80,10 @@
     def wakeup(self):
         try:
             if self.wm_state() == "iconic":
+                self.wm_withdraw()
                 self.wm_deiconify()
-            else:
-                self.tkraise()
-            self.focus_set()
+            self.tkraise()
+            self.focused_widget.focus_set()
         except TclError:
             # This can happen when the window menu was torn off.
             # Simply ignore it.
diff --git a/Lib/idlelib/idlever.py b/Lib/idlelib/idlever.py
index 18f3fe3..8bceaf8 100644
--- a/Lib/idlelib/idlever.py
+++ b/Lib/idlelib/idlever.py
@@ -1 +1 @@
-IDLE_VERSION = "1.1a2"
+IDLE_VERSION = "1.1a3"
