diff --git a/Lib/idlelib/CodeContext.py b/Lib/idlelib/CodeContext.py
index 32dec82..d8f9237 100644
--- a/Lib/idlelib/CodeContext.py
+++ b/Lib/idlelib/CodeContext.py
@@ -13,49 +13,61 @@
 import Tkinter
 from configHandler import idleConf
 from PyShell import PyShell
-from string import whitespace
 import re
 
 BLOCKOPENERS = dict([(x, None) for x in ("class", "def", "elif", "else",
                                          "except", "finally", "for", "if",
                                          "try", "while")])
 INFINITY = 1 << 30
-UPDATEINTERVAL = 100 #ms
-FONTUPDATEINTERVAL = 1000 #ms
+UPDATEINTERVAL = 100 # millisec
+FONTUPDATEINTERVAL = 1000 # millisec
 
 getspacesfirstword = lambda s, c=re.compile(r"^(\s*)(\w*)"): c.match(s).groups()
 
 class CodeContext:
-    menudefs = []
+    menudefs = [('options', [('!Code Conte_xt', '<<toggle-code-context>>')])]
+
     numlines = idleConf.GetOption("extensions", "CodeContext",
                                   "numlines", type="int", default=3)
     bgcolor = idleConf.GetOption("extensions", "CodeContext",
                                  "bgcolor", type="str", default="LightGray")
     fgcolor = idleConf.GetOption("extensions", "CodeContext",
                                  "fgcolor", type="str", default="Black")
+    default_on = idleConf.GetOption("extensions", "CodeContext",
+                                    "default_on", type="int", default=0)
     def __init__(self, editwin):
         if isinstance(editwin, PyShell):
             return
         self.editwin = editwin
         self.text = editwin.text
         self.textfont = self.text["font"]
-        self.label = Tkinter.Label(self.editwin.top,
-                                   text="\n" * (self.numlines - 1),
-                                   anchor="w", justify="left",
-                                   font=self.textfont,
-                                   bg=self.bgcolor, fg=self.fgcolor,
-                                   relief="sunken",
-                                   width=1, # Don't request more than we get
-                                   )
-        self.label.pack(side="top", fill="x", expand=0,
-                        after=self.editwin.status_bar)
+        self.label = None
         # Dummy line, which starts the "block" of the whole document:
         self.info = list(self.interesting_lines(1))
         self.lastfirstline = 1
+        if self.default_on:
+            self.toggle_code_context_event()
+            self.editwin.setvar('<<toggle-code-context>>', True)
         # Start two update cycles, one for context lines, one for font changes.
         self.text.after(UPDATEINTERVAL, self.timer_event)
         self.text.after(FONTUPDATEINTERVAL, self.font_timer_event)
 
+    def toggle_code_context_event(self, event=None):
+        if not self.label:
+            self.label = Tkinter.Label(self.editwin.top,
+                                      text="\n" * (self.numlines - 1),
+                                      anchor="w", justify="left",
+                                      font=self.textfont,
+                                      bg=self.bgcolor, fg=self.fgcolor,
+                                      relief="sunken",
+                                      width=1, # Don't request more than we get
+                                      )
+            self.label.pack(side="top", fill="x", expand=0,
+                            after=self.editwin.status_bar)
+        else:
+            self.label.destroy()
+            self.label = None
+
     def get_line_info(self, linenum):
         """Get the line indent value, text, and any block start keyword
 
@@ -107,7 +119,6 @@
                 del self.info[-1]
             if self.info[-1][0] == line_index:
                 break
-            # Add the block starting line info to tmpstack
             tmpstack.append((line_index, text))
         while tmpstack:
             self.info.append(tmpstack.pop())
@@ -116,12 +127,13 @@
         self.label["text"] = '\n'.join(lines)
 
     def timer_event(self):
-        self.update_label()
+        if self.label:
+            self.update_label()
         self.text.after(UPDATEINTERVAL, self.timer_event)
 
     def font_timer_event(self):
         newtextfont = self.text["font"]
-        if newtextfont != self.textfont:
+        if self.label and newtextfont != self.textfont:
             self.textfont = newtextfont
             self.label["font"] = self.textfont
         self.text.after(FONTUPDATEINTERVAL, self.font_timer_event)
diff --git a/Lib/idlelib/config-extensions.def b/Lib/idlelib/config-extensions.def
index 00162a0..39f9098 100644
--- a/Lib/idlelib/config-extensions.def
+++ b/Lib/idlelib/config-extensions.def
@@ -3,13 +3,14 @@
 #
 # Each extension must have at least one section, named after the extension
 # module. This section must contain an 'enable' item (=1 to enable the
-# extension, =0 to disable it) and also contain any other general
-# configuration items for the extension. Each extension may also define up to
-# two optional sections named ExtensionName_bindings and
-# ExtensionName_cfgBindings. If present, ExtensionName_bindings defines virtual
-# event bindings for the extension that are not sensibly re-configurable. If
-# present, ExtensionName_cfgBindings defines virtual event bindings for the
-# extension that may be sensibly re-configured.
+# extension, =0 to disable it) and also contain any other general configuration
+# items for the extension. Each extension must define at least one section
+# named ExtensionName_bindings or ExtensionName_cfgBindings. If present,
+# ExtensionName_bindings defines virtual event bindings for the extension that
+# are not user re-configurable. If present, ExtensionName_cfgBindings
+# defines virtual event bindings for the extension that may be sensibly
+# re-configured.  If there are no keybindings for a menus' virtual events,
+# include lines like <<toggle-code-context>>=   (See [CodeContext], below.)
 
 # Currently it is necessary to manually modify this file to change extension
 # key bindings and default values. To customize, create
@@ -65,5 +66,8 @@
 [CodeContext]
 enable=1
 numlines=3
+default_on=0
 bgcolor=LightGray
 fgcolor=Black
+[CodeContext_bindings]
+toggle-code-context=
diff --git a/Lib/idlelib/help.txt b/Lib/idlelib/help.txt
index 9af8e0d..e91e8c6 100644
--- a/Lib/idlelib/help.txt
+++ b/Lib/idlelib/help.txt
@@ -88,9 +88,9 @@
                           Startup Preferences may be set, and Additional Help
                           Souces can be specified.
 	---
-	Revert to Default Settings -- Restore original settings.  Not
-	                              currently implemented - simply delete
-                                      your .idlerc file.
+	Code Context --	  Open a pane at the top of the edit window which
+			  shows the block context of the section of code
+			  which is scrolling off the top or the window.
 
 Windows Menu:
 
