diff --git a/pyopencl/array.py b/pyopencl/array.py
index 22f49cf004756db9c13e20fa782771e44ae2c469..05af9f4e3c733a8b9c40883c8cd865853da3d3c3 100644
--- a/pyopencl/array.py
+++ b/pyopencl/array.py
@@ -1540,10 +1540,16 @@ def multi_put(arrays, dest_indices, dest_shape=None, out=None, queue=None):
                     cl.kernel_work_group_info.WORK_GROUP_SIZE,
                     queue.device))
 
+        from pytools import flatten
         knl(queue, gs, ls,
-                *([o.data for o in out[chunk_slice]]
-                    + [dest_indices.data]
-                    + [i.data for i in arrays[chunk_slice]]
+                *(
+                    list(flatten(
+                        (o.base_data, o.offset)
+                        for o in out[chunk_slice]))
+                    + [dest_indices.base_data, dest_indices.offset]
+                    + list(flatten(
+                        (i.base_data, i.offset)
+                        for i in arrays[chunk_slice]))
                     + [dest_indices.size]))
 
     return out