diff --git a/swig/bytes.i b/swig/bytes.i
index 0044bb1..2ebe7fc 100644
--- a/swig/bytes.i
+++ b/swig/bytes.i
@@ -76,15 +76,16 @@
 
 %rename (nextthat) py_nextthat;
 %rename (prevthat) py_prevthat;
+%rename (get_many_bytes) py_get_many_bytes;
 
 %{
 //<code(py_bytes)>
 //------------------------------------------------------------------------
 static bool idaapi py_testf_cb(flags_t flags, void *ud)
 {
-  PyObject *py_flags = PyLong_FromLong(flags);
+  PyObject *py_flags = PyLong_FromUnsignedLong(flags);
   PyObject *result = PyObject_CallFunctionObjArgs((PyObject *) ud, py_flags, NULL);
-  bool ret = result != NULL && result == Py_True;
+  bool ret = result != NULL && PyObject_IsTrue(result);
   Py_XDECREF(result);
   Py_XDECREF(py_flags);
   return ret;
@@ -92,12 +93,10 @@ static bool idaapi py_testf_cb(flags_t flags, void *ud)
 
 //------------------------------------------------------------------------
 // Wraps the (next|prev)that()
-ea_t py_npthat(ea_t ea, ea_t bound, PyObject *py_callable, bool next)
+static ea_t py_npthat(ea_t ea, ea_t bound, PyObject *py_callable, bool next)
 {
   if (!PyCallable_Check(py_callable))
     return BADADDR;
-//  ea_t (ida_export *np_that_t)(ea_t, ea_t, testf_t *, void *ud);
-//  np_that_t = ;
   return (next ? nextthat : prevthat)(ea, bound, py_testf_cb, py_callable);
 }
 //</code(py_bytes)>
@@ -105,14 +104,47 @@ ea_t py_npthat(ea_t ea, ea_t bound, PyObject *py_callable, bool next)
 
 %inline %{
 //<inline(py_bytes)>
-ea_t py_nextthat(ea_t ea, ea_t maxea, PyObject *callable)
+
+//------------------------------------------------------------------------
+static ea_t py_nextthat(ea_t ea, ea_t maxea, PyObject *callable)
 {
   return py_npthat(ea, maxea, callable, true);
 }
 
-ea_t py_prevthat(ea_t ea, ea_t minea, PyObject *callable)
+static ea_t py_prevthat(ea_t ea, ea_t minea, PyObject *callable)
 {
   return py_npthat(ea, minea, callable, false);
 }
+
+//------------------------------------------------------------------------
+// Get the specified number of bytes of the program into the buffer.
+static PyObject *py_get_many_bytes(ea_t ea, int size)
+{
+  do 
+  {
+    if (size <= 0)
+      break;
+    // Allocate memory
+    char *buf = (char *) qalloc(size);
+    if (buf == NULL)
+      break;
+
+    // Read bytes
+    bool ok = get_many_bytes(ea, buf, size);
+
+    // If ok, create a python string
+    PyObject *py_buf;
+    if (ok)
+      py_buf = PyString_FromStringAndSize(buf, size);
+
+    // Free buffer
+    qfree(buf);
+    
+    // Return buffer to Python
+    if (ok)
+      return py_buf;
+  } while (false);
+  Py_RETURN_NONE;
+}
 //</inline(py_bytes)>
 %}