diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index 343331c..be0dbdb 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -521,7 +521,7 @@ BOOST_PYTHON_MODULE( pykd )
             "Return current thread" )
         .def("getNumberBreakpoints", TargetProcessAdapter::getNumberBreakpoints,
             "Return number of breakpoints for this process" )
-        .def("breakpoint", TargetProcessAdapter::getBreakpointByIndex,
+        .def("breakpoint", TargetProcessAdapter::getBreakpointByIndex, python::return_value_policy<python::manage_new_object>(),
             "Return a breakpoint by it's index" )
          ;
 
diff --git a/pykd/pyprocess.h b/pykd/pyprocess.h
index 8d8c3c7..df5bfd3 100644
--- a/pykd/pyprocess.h
+++ b/pykd/pyprocess.h
@@ -3,6 +3,7 @@
 #include <kdlib/process.h>
 
 #include "pythreadstate.h"
+#include "pyeventhandler.h"
 
 namespace pykd {
 
@@ -68,10 +69,16 @@ struct TargetProcessAdapter {
         return process.getNumberBreakpoints();
     }
 
-    static kdlib::BreakpointPtr getBreakpointByIndex(kdlib::TargetProcess& process, unsigned long index)
+    static Breakpoint* getBreakpointByIndex(kdlib::TargetProcess& process, unsigned long index)
     {
-        AutoRestorePyState  pystate;
-        return process.getBreakpoint(index);
+        kdlib::BreakpointPtr  bp;
+
+        {
+            AutoRestorePyState  pystate;
+            bp = process.getBreakpoint(index);
+        }
+
+        return new Breakpoint(bp);
     }
 };
 
diff --git a/test/scripts/targetprocess.py b/test/scripts/targetprocess.py
index f7fd8d8..a33e3fe 100644
--- a/test/scripts/targetprocess.py
+++ b/test/scripts/targetprocess.py
@@ -42,6 +42,10 @@ class ProcessTest(unittest.TestCase):
             thread = proc.thread(i)
             thread.setCurrent()
 
+    def testGetBreakpoint(self):
+        proc = pykd.targetProcess.getCurrent()
+        self.assertEqual(0, proc.getNumberBreakpoints())
+