diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py
index 179a6c122718d9528f6acbcbd3388a8ade50ca42..03c9ae5a77bc3656e6f328236126380c0d291b63 100644
--- a/pyopencl/cffi_cl.py
+++ b/pyopencl/cffi_cl.py
@@ -111,19 +111,12 @@ def _generic_info_to_python(info):
             _lib.CLASS_COMMAND_QUEUE: CommandQueue
             }[info.opaque_class]
 
-        def ci(ptr):
-            ins = klass._create(ptr)
-            if info.opaque_class == _lib.CLASS_PROGRAM:  # TODO: HACK?
-                from . import Program
-                return Program(ins)
-            return ins
-
         if type_.endswith(']'):
-            ret = map(ci, value)
+            ret = map(klass._create, value)
             _lib.free_pointer(info.value)
             return ret
         else:
-            return ci(value)
+            return klass._create(value)
     if type_ == 'char*':
         ret = _ffi_pystr(value)
     elif type_.startswith('char*['):