diff --git a/examples/particles_above_salt/particles_above_salt_bc_3d.py b/examples/particles_above_salt/particles_above_salt_bc_3d.py
index 195dea731ba8af9b8306e4ab12fcee313c9da634..014f03bf8df9f0a1b08c2d20cec486c4ab24e68f 100644
--- a/examples/particles_above_salt/particles_above_salt_bc_3d.py
+++ b/examples/particles_above_salt/particles_above_salt_bc_3d.py
@@ -74,7 +74,7 @@ def compute(args):
     if (dim==2):
         (Sc, tau, Vp, Rs, Xo, Xn, N) = (0.70,  25, 0.04, 2.0, (-600,0), (600,750), (1537, 512))
     elif (dim==3):
-        (Sc, tau, Vp, Rs, Xo, Xn, N) = (15.00, 25, 0.04, 2.0, (-110,0,0), (65,100,100), (3073, 1024, 1024))
+        (Sc, tau, Vp, Rs, Xo, Xn, N) = (30.00, 25, 0.04, 2.0, (-110,0,0), (65,100,100), (3073, 1024, 1024))
     else:
         raise NotImplementedError
 
diff --git a/hysop/backend/device/codegen/kernels/tests/test_transpose.py b/hysop/backend/device/codegen/kernels/tests/test_transpose.py
index f0e3bbc91a29175084ba1516a74f0697e4aa0723..8ec832c650ed5eb8fe4a8b785dfb2578b313f593 100644
--- a/hysop/backend/device/codegen/kernels/tests/test_transpose.py
+++ b/hysop/backend/device/codegen/kernels/tests/test_transpose.py
@@ -365,7 +365,7 @@ class TestTranspose(object):
                         buffers = (('Tin',  Tin_cpu,  Tin,  in_view),
                                    ('Tout', Tout_cpu, Tout, out_view))
                     good, err_buffers = self._cmp_buffers(buffers,dak,dim)
-                except cl.cffi_cl.RuntimeError as error:
+                except cl._cl.RuntimeError as error:
                     e = error
                     print 'ERROR: ',e
                     good = False
diff --git a/hysop/backend/device/device_buffer.py b/hysop/backend/device/device_buffer.py
index 861361b5b96b3c868d024149874328c1149fdf29..8f81290a74bf0332bb8ff07640d4ba578e5b171c 100644
--- a/hysop/backend/device/device_buffer.py
+++ b/hysop/backend/device/device_buffer.py
@@ -6,4 +6,4 @@ class DeviceBuffer(Buffer):
     """
     Abstract device buffer class.
     """
-    __metaclass__=ABCMeta
+    pass
diff --git a/hysop/backend/device/opencl/__init__.py b/hysop/backend/device/opencl/__init__.py
index 05c7889d2b070a66673ef77b1136f900d91cab98..07d478dcda6566cca785df3934b0dd80f49efa78 100644
--- a/hysop/backend/device/opencl/__init__.py
+++ b/hysop/backend/device/opencl/__init__.py
@@ -51,9 +51,6 @@ clElementwise = pyopencl.elementwise
 clCharacterize = pyopencl.characterize
 """PyOpenCL characterize"""
 
-from pyopencl._cffi import ffi as cl_ffi, lib as cl_lib
-from pyopencl import cffi_cl
-
 if ('CLFFT_REQUEST_NOMEMALLOC' not in os.environ):
     os.environ['CLFFT_REQUEST_NOMEMALLOC'] = '1'
 if ('CLFFT_CACHE_PATH' not in os.environ):
diff --git a/hysop/backend/device/opencl/opencl_allocator.py b/hysop/backend/device/opencl/opencl_allocator.py
index d1cb7dc7eb717a3567f0872e812983dbd28702da..e3137b8bb3b2ce23fcd8cda119f89a6d13e08e5c 100644
--- a/hysop/backend/device/opencl/opencl_allocator.py
+++ b/hysop/backend/device/opencl/opencl_allocator.py
@@ -85,7 +85,7 @@ class OpenClImmediateAllocator(OpenClAllocator):
         buf = OpenClBuffer(context=self.context, mem_flags=self.mem_flags, size=nbytes)
 
         try:
-            from pyopencl.cffi_cl import _enqueue_write_buffer
+            from pyopencl._cl import _enqueue_write_buffer
             _enqueue_write_buffer(
                     self.queue, buf,
                     self._zero[:min(len(self._zero), nbytes)],
diff --git a/hysop/backend/device/opencl/opencl_buffer.py b/hysop/backend/device/opencl/opencl_buffer.py
index c051863114951e6b9ca546a1233ecbc7441bf709..42b7e52eb21c58026aa94c81aeb47e23592890a5 100644
--- a/hysop/backend/device/opencl/opencl_buffer.py
+++ b/hysop/backend/device/opencl/opencl_buffer.py
@@ -1,6 +1,6 @@
 from hysop.core.memory.buffer import PooledBuffer
 from hysop.backend.device.device_buffer import DeviceBuffer
-from hysop.backend.device.opencl import cl, cl_ffi, cl_lib, cffi_cl
+from hysop.backend.device.opencl import cl
 
 class OpenClBuffer(DeviceBuffer, cl.Buffer):
     """
diff --git a/hysop/backend/device/opencl/opencl_device.py b/hysop/backend/device/opencl/opencl_device.py
index b83bd0181c3d747bdceb7cb5b55ca6cbe3e86ac3..6539b6cacdcf033f9025a58b7f54a4e57ad4819d 100644
--- a/hysop/backend/device/opencl/opencl_device.py
+++ b/hysop/backend/device/opencl/opencl_device.py
@@ -152,7 +152,7 @@ class OpenClDevice(LogicalDevice):
                 if isinstance(val, str):
                     val = val.strip()
                 setattr(self, '_'+attr, val)
-            except (cl.cffi_cl.LogicError, AttributeError):
+            except (cl._cl.LogicError, AttributeError):
                 _not_found += (attr,)
                 setattr(self, '_'+attr, UnknownDeviceAttribute())
             except RuntimeError as e:
diff --git a/hysop/backend/device/opencl/opencl_kernel_autotuner.py b/hysop/backend/device/opencl/opencl_kernel_autotuner.py
index d3edab02cd28690c778c8362f444824760fea90e..dd9256ff9680770172d24fe3d1ba0d1bea8ec61e 100644
--- a/hysop/backend/device/opencl/opencl_kernel_autotuner.py
+++ b/hysop/backend/device/opencl/opencl_kernel_autotuner.py
@@ -145,7 +145,7 @@ class OpenClKernelAutotuner(KernelAutotuner):
                 while(stats.nruns < target_nruns) and (not pruned):
                     try:
                         evt = cl.enqueue_nd_range_kernel(queue, kernel, global_size, local_size)
-                    except cl.cffi_cl.RuntimeError:
+                    except cl._cl.RuntimeError:
                         raise KernelGenerationError()
                     evt.wait()
                     stats += OpenClKernelStatistics(events=[evt])
diff --git a/hysop/core/memory/buffer.py b/hysop/core/memory/buffer.py
index e33cbf23e9feeb3ca8dfc85f962a5c978ffd0af9..c95c52c6e58fa4ae1def9f61dfe25c218d4a3360 100644
--- a/hysop/core/memory/buffer.py
+++ b/hysop/core/memory/buffer.py
@@ -16,7 +16,6 @@ class Buffer(object):
     """
     
     #/!\ ptr, size and int_ptr properties should be redefined in child classes.
-    __metaclass__ = ABCMeta
     _DEBUG=False
 
     def __init__(self, size, **kwds):
@@ -73,11 +72,6 @@ class PooledBuffer(Buffer):
     """
     Memory pool allocated buffer wrapper.
     """
-    __metaclass__ = ABCMeta
-
-    """
-    Extra flag for debugging PooledBuffers.
-    """
 
     def __init__(self, pool, buf, alloc_sz, size, alignment, **kwds):
         """
diff --git a/requirements.txt b/requirements.txt
index c0c1b05dc6b530a3ac74aa86eb02236dd871d45e..b44b42fb480f3c6487bcd7bc3fb1cfc964d87a31 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,4 @@
+wheel
 numpy
 scipy
 sympy
@@ -13,6 +14,7 @@ ansicolors
 backports.weakref
 argparse_color_formatter
 primefac
+pybind11
 pyopencl
 pyfftw
 mpi4py