diff --git a/pykd/pyeventhandler.cpp b/pykd/pyeventhandler.cpp
index 83707e2..099186e 100644
--- a/pykd/pyeventhandler.cpp
+++ b/pykd/pyeventhandler.cpp
@@ -700,6 +700,18 @@ void Breakpoint::removeBreakpointByIndex(unsigned long index)
 
 /////////////////////////////////////////////////////////////////////////////////
 
+void Breakpoint::removeAllBreakpoints()
+{
+    AutoRestorePyState  pystate;
+
+    while (kdlib::getNumberBreakpoints() > 0)
+    {
+        kdlib::BreakpointPtr  bp = kdlib::getBreakpointByIndex(0);
+        bp->remove();
+    }
+}
+
+/////////////////////////////////////////////////////////////////////////////////
 
 
 } // end namespace pykd
diff --git a/pykd/pyeventhandler.h b/pykd/pyeventhandler.h
index 2d7e716..127409d 100644
--- a/pykd/pyeventhandler.h
+++ b/pykd/pyeventhandler.h
@@ -66,6 +66,8 @@ public:
 
     static void removeBreakpointByIndex(unsigned long index);
 
+    static void removeAllBreakpoints();
+
 public:
 
     explicit Breakpoint(kdlib::BreakpointPtr bp, bool weakbp = true);
diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index f3bdc62..04b12ae 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -389,12 +389,14 @@ BOOST_PYTHON_MODULE( pykd )
         setSoftwareBreakpoint_( python::args( "offset", "callback" ),"Set software breakpoint on executiont" )[python::return_value_policy<python::manage_new_object>()]);
     python::def( "setBp", &Breakpoint::setHardwareBreakpoint, 
         setHardwareBreakpoint_( python::args( "offset", "size", "accsessType", "callback" ),"Set hardware breakpoint")[python::return_value_policy<python::manage_new_object>()]);
-    python::def( "getNumberBreakpoints", &Breakpoint::getNumberBreakpoints,
+    python::def("getNumberBreakpoints", &Breakpoint::getNumberBreakpoints,
         "Return number of breakpoints in the current process" );
     python::def( "getBp", &Breakpoint::getBreakpointByIndex, python::return_value_policy<python::manage_new_object>(), 
         "Return breakpoint object by index");
     python::def("removeBp", &Breakpoint::removeBreakpointByIndex,
         "Remove breakpoint by index");
+    python::def("removeAllBp", &Breakpoint::removeAllBreakpoints,
+        "Remove all breakpoints");
 
     // processes and threads
     python::def ( "getNumberProcesses", pykd::getNumberProcesses,
diff --git a/test/scripts/breakpoint.py b/test/scripts/breakpoint.py
index ca9f12e..7023cdf 100644
--- a/test/scripts/breakpoint.py
+++ b/test/scripts/breakpoint.py
@@ -44,16 +44,25 @@ class BreakpointTest( unittest.TestCase ):
         bp.remove()
         self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
 
+    def testDeleteBp(self):
+        bp = pykd.setBp( self.targetModule.CdeclFunc )
+        del bp
+        self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
+
     def testRemoveByIndex(self):
         bp1 = pykd.setBp( self.targetModule.CdeclFunc )
         bp2 = pykd.getBp(0)
         bp2.remove()
         self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
 
-    def disable_testDeleteBp(self):
-        bp = pykd.setBp( self.targetModule.CdeclFunc )
-        del bp
-        self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
+    def testRemoveAllBp(self):
+          bp1 =  pykd.setBp( self.targetModule.CdeclFunc )
+          bp2 =  pykd.setBp( self.targetModule.CdeclFunc + 1)
+          bp3 =  pykd.setBp( self.targetModule.CdeclFunc + 2 )
+          self.assertEqual( 3, pykd.getNumberBreakpoints() )
+          pykd.removeAllBp()
+          self.assertEqual( 0, pykd.getNumberBreakpoints() )
+          self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
 
     def testBreakCallback(self):
         breakCount = callCounter(stopOnBreak)