1. Debugger Breakpoints, finish implementation
2. Debugger Clear Breakpoints, implement
3. Nice yellow breakpoints for Chui  :)
diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py
index f5646e0..4653146 100644
--- a/Lib/idlelib/Debugger.py
+++ b/Lib/idlelib/Debugger.py
@@ -52,7 +52,6 @@
 
 class Debugger:
 
-    # interacting = 0  # XXX KBK 14Jun02 move to __init__
     vstack = vsource = vlocals = vglobals = None
 
     def __init__(self, pyshell, idb=None):
@@ -157,7 +156,6 @@
         if self.vglobals.get():
             self.show_globals()
 
-    # frame = None  # XXX KBK 14Jun02  Move to __init__
 
     def interaction(self, message, frame, info=None):
         self.frame = frame
@@ -321,16 +319,18 @@
             return
         text.tag_add("BREAK", "insert linestart", "insert lineend +1char")
 
-    # A literal copy of Bdb.set_break() without the print statement at the end
-    #def set_break(self, filename, lineno, temporary=0, cond = None):
-    #    import linecache # Import as late as possible
-    #    filename = self.canonic(filename)
-    #    line = linecache.getline(filename, lineno)
-    #    if not line:
-    #        return 'That line does not exist!'
-    #    if not self.breaks.has_key(filename):
-    #        self.breaks[filename] = []
-    #    list = self.breaks[filename]
-    #    if not lineno in list:
-    #        list.append(lineno)
-    #    bp = bdb.Breakpoint(filename, lineno, temporary, cond)
+    def clear_breakpoint_here(self, edit):
+         text = edit.text
+         filename = edit.io.filename
+         if not filename:
+                 text.bell()
+                 return
+         lineno = int(float(text.index("insert")))
+         msg = self.idb.clear_break(filename, lineno)
+         if msg:
+             text.bell()
+             return
+         text.tag_remove("BREAK", "insert linestart",\
+                         "insert lineend +1char")
+
+
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index d84e2e1..f418a57 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -96,10 +96,13 @@
     def __init__(self, *args):
         apply(EditorWindow.__init__, (self,) + args)
         self.text.bind("<<set-breakpoint-here>>", self.set_breakpoint_here)
+        self.text.bind("<<clear-breakpoint-here>>",
+                       self.clear_breakpoint_here)
         self.text.bind("<<open-python-shell>>", self.flist.open_shell)
 
     rmenu_specs = [
-        ("Set breakpoint here", "<<set-breakpoint-here>>"),
+        ("Set Breakpoint", "<<set-breakpoint-here>>"),
+        ("Clear Breakpoint", "<<clear-breakpoint-here>>")
     ]
 
     def set_breakpoint_here(self, event=None):
@@ -108,6 +111,12 @@
             return
         self.flist.pyshell.interp.debugger.set_breakpoint_here(self)
 
+    def clear_breakpoint_here(self, event=None):
+        if not self.flist.pyshell or not self.flist.pyshell.interp.debugger:
+            self.text.bell()
+            return
+        self.flist.pyshell.interp.debugger.clear_breakpoint_here(self)
+                                    
 
 class PyShellFileList(FileList):
 
diff --git a/Lib/idlelib/RemoteDebugger.py b/Lib/idlelib/RemoteDebugger.py
index 5131065..a5b4e7e 100644
--- a/Lib/idlelib/RemoteDebugger.py
+++ b/Lib/idlelib/RemoteDebugger.py
@@ -26,7 +26,9 @@
 
 debugging = 0
 
-# In the PYTHON subprocess
+#=======================================
+#
+# In the PYTHON subprocess:
 
 frametable = {}
 dicttable = {}
@@ -59,6 +61,8 @@
     def __init__(self, idb):
         self.idb = idb
 
+    #----------called by an IdbProxy----------
+
     def set_step(self):
         self.idb.set_step()
 
@@ -90,6 +94,15 @@
         import __main__
         self.idb.run(cmd, __main__.__dict__)
 
+    def set_break(self, filename, lineno):
+        msg = self.idb.set_break(filename, lineno)
+        return msg
+
+    def clear_break(self, filename, lineno):
+        msg = self.idb.clear_break(filename, lineno)
+
+    #----------called by a FrameProxy----------
+
     def frame_attr(self, fid, name):
         frame = frametable[fid]
         return getattr(frame, name)
@@ -115,6 +128,8 @@
         codetable[cid] = code
         return cid
 
+    #----------called by a CodeProxy----------
+
     def code_name(self, cid):
         code = codetable[cid]
         return code.co_name
@@ -123,6 +138,8 @@
         code = codetable[cid]
         return code.co_filename
 
+    #----------called by a DictProxy----------
+
     def dict_keys(self, did):
         dict = dicttable[did]
         return dict.keys()
@@ -141,8 +158,18 @@
 #              #value = None
         return value
 
+#----------end class IdbAdapter----------
+
+
 def start_debugger(conn, gui_adap_oid):
-    "Launch debugger in the remote python subprocess"
+    """Start the debugger and its RPC link in the Python subprocess
+
+    Start the subprocess side of the split debugger and set up that side of the
+    RPC link by instantiating the GUIProxy, Idle debugger, and IdbAdapter
+    objects and linking them together.  Register the IdbAdapter to handle RPC
+    requests from the split Debugger GUI via the IdbProxy.
+
+    """
     gui_proxy = GUIProxy(conn, gui_adap_oid)
     idb = Debugger.Idb(gui_proxy)
     idb_adap = IdbAdapter(idb)
@@ -150,7 +177,11 @@
     conn.register(idb_adap_oid, idb_adap)
     return idb_adap_oid
 
-# In the IDLE process
+
+#=======================================
+#
+# In the IDLE process:
+
 
 class FrameProxy:
 
@@ -193,6 +224,7 @@
         self._dictcache[did] = dp
         return dp
 
+
 class CodeProxy:
 
     def __init__(self, conn, oid, cid):
@@ -208,6 +240,7 @@
             return self._conn.remotecall(self._oid, "code_filename",
                                          (self._cid,), {})
 
+
 class DictProxy:
 
     def __init__(self, conn, oid, did):
@@ -226,6 +259,7 @@
         ##print >>sys.__stderr__, "failed DictProxy.__getattr__:", name
         raise AttributeError, name
 
+
 class GUIAdapter:
 
     def __init__(self, conn, gui):
@@ -238,6 +272,7 @@
         info = None # XXX for now
         self.gui.interaction(message, frame, info)
 
+
 class IdbProxy:
 
     def __init__(self, conn, oid):
@@ -274,14 +309,22 @@
     def set_quit(self):
         self.call("set_quit")
 
+    def set_break(self, filename, lineno):
+        msg = self.call("set_break", filename, lineno)
+        return msg
+
+    def clear_break(self, filename, lineno):
+        msg = self.call("clear_break", filename, lineno)
+
 def start_remote_debugger(conn, pyshell):
     """Start the subprocess debugger, initialize the debugger GUI and RPC link
 
-    Start the debugger in the remote Python process.  Instantiate IdbProxy,
-    Debugger GUI, and Debugger GUIAdapter objects, and link them together.
+    Request the RPCServer start the Python subprocess debugger and link.  Set
+    up the Idle side of the split debugger by instantiating the IdbProxy,
+    Debugger GUI, and Debugger GUIAdapter objects and linking them together.
 
-    The GUIAdapter will handle debugger GUI interaction requests coming from
-    the subprocess debugger via the GUIProxy.
+    Register the GUIAdapter to handle debugger GUI interaction requests coming
+    from the subprocess debugger via the GUIProxy.
 
     The IdbAdapter will pass execution and environment requests coming from the
     Idle debugger GUI to the subprocess debugger via the IdbProxy.
diff --git a/Lib/idlelib/config-highlight.def b/Lib/idlelib/config-highlight.def
index 81c4ba5..2b7deab 100644
--- a/Lib/idlelib/config-highlight.def
+++ b/Lib/idlelib/config-highlight.def
@@ -14,8 +14,8 @@
 definition-background= #ffffff
 hilite-foreground= #000000
 hilite-background= gray
-break-foreground= #ff7777
-break-background= #ffffff
+break-foreground= black
+break-background= #ffff55
 hit-foreground= #ffffff
 hit-background= #000000
 error-foreground= #000000
@@ -43,8 +43,8 @@
 definition-background= #ffffff
 hilite-foreground= #000000
 hilite-background= gray
-break-foreground= #ff7777
-break-background= #ffffff
+break-foreground= black
+break-background= #ffff55
 hit-foreground= #ffffff
 hit-background= #000000
 error-foreground= #000000