diff --git a/src/wrapper/wrap_cl.hpp b/src/wrapper/wrap_cl.hpp
index 78946cb82b5de5ab76727f7123856d3b87ad9d1e..27d671d41b2b09bc0b4a7e35cd8633d797bd66ef 100644
--- a/src/wrapper/wrap_cl.hpp
+++ b/src/wrapper/wrap_cl.hpp
@@ -1308,6 +1308,12 @@ namespace pyopencl
   }
 #endif
 
+  inline
+  memory_object *memory_object_from_int(intptr_t cl_mem_as_int)
+  {
+    return new memory_object((cl_mem) cl_mem_as_int, true);
+  }
+
   // }}}
 
   // {{{ buffer
diff --git a/src/wrapper/wrap_cl_part_1.cpp b/src/wrapper/wrap_cl_part_1.cpp
index bb8cdda097aaf08a7eba809026c3449c91d3b09c..48095b04e3bbcfda63d417eceedd57cb18276b22 100644
--- a/src/wrapper/wrap_cl_part_1.cpp
+++ b/src/wrapper/wrap_cl_part_1.cpp
@@ -151,6 +151,10 @@ void pyopencl_expose_part_1()
       .DEF_SIMPLE_METHOD(release)
       .add_property("obj_ptr", &cls::obj_ptr)
       .add_property("hostbuf", &cls::hostbuf)
+      .def("from_cl_mem_as_int", memory_object_from_int,
+          py::return_value_policy<py::manage_new_object>(),
+          py::args("cl_mem_as_int"))
+      .staticmethod("from_cl_mem_as_int")
       ;
   }