diff --git a/src/c_wrapper/image.cpp b/src/c_wrapper/image.cpp
index d2b9bc774ca3774a148930eed172807a2464392a..9c53e8c5f73237b8dc8a87a17e8404333405f083 100644
--- a/src/c_wrapper/image.cpp
+++ b/src/c_wrapper/image.cpp
@@ -190,7 +190,7 @@ enqueue_read_image(clobj_t *evt, clobj_t _queue, clobj_t _mem,
     auto queue = static_cast<command_queue*>(_queue);
     auto img = static_cast<image*>(_mem);
     ConstBuffer<size_t, 3> origin(_origin, origin_l);
-    ConstBuffer<size_t, 3> region(_region, region_l);
+    ConstBuffer<size_t, 3> region(_region, region_l, 1);
     return c_handle_error([&] {
             retry_mem_error([&] {
                     pyopencl_call_guarded(
@@ -215,7 +215,7 @@ enqueue_copy_image(clobj_t *evt, clobj_t _queue, clobj_t _src, clobj_t _dst,
     auto dst = static_cast<image*>(_dst);
     ConstBuffer<size_t, 3> src_origin(_src_origin, src_origin_l);
     ConstBuffer<size_t, 3> dst_origin(_dst_origin, dst_origin_l);
-    ConstBuffer<size_t, 3> region(_region, region_l);
+    ConstBuffer<size_t, 3> region(_region, region_l, 1);
     return c_handle_error([&] {
             retry_mem_error([&] {
                     pyopencl_call_guarded(
@@ -237,7 +237,7 @@ enqueue_write_image(clobj_t *evt, clobj_t _queue, clobj_t _mem,
     auto img = static_cast<image*>(_mem);
     const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for);
     ConstBuffer<size_t, 3> origin(_origin, origin_l);
-    ConstBuffer<size_t, 3> region(_region, region_l);
+    ConstBuffer<size_t, 3> region(_region, region_l, 1);
     return c_handle_error([&] {
             retry_mem_error([&] {
                     pyopencl_call_guarded(
diff --git a/src/c_wrapper/memory_map.cpp b/src/c_wrapper/memory_map.cpp
index 0963c8b7b6954ae93be0e8586d06e5f71046d7ef..c0332e9287de2b33f24628f4eb76b1ee1682a1b1 100644
--- a/src/c_wrapper/memory_map.cpp
+++ b/src/c_wrapper/memory_map.cpp
@@ -94,7 +94,7 @@ enqueue_map_image(clobj_t *evt, clobj_t *map, clobj_t _queue, clobj_t _mem,
     auto img = static_cast<image*>(_mem);
     const auto wait_for = buf_from_class<event>(_wait_for, num_wait_for);
     ConstBuffer<size_t, 3> origin(_origin, origin_l);
-    ConstBuffer<size_t, 3> region(_region, region_l);
+    ConstBuffer<size_t, 3> region(_region, region_l, 1);
     return c_handle_error([&] {
             void *res = retry_mem_error([&] {
                     return pyopencl_call_guarded(
diff --git a/src/c_wrapper/utils.h b/src/c_wrapper/utils.h
index 813c42d750cc011fbffe45aa6c2506c36f4b4a7a..2ac9383b340f5935ed5d458d1b06d0e2538e421b 100644
--- a/src/c_wrapper/utils.h
+++ b/src/c_wrapper/utils.h
@@ -347,11 +347,16 @@ private:
     ConstBuffer(ConstBuffer<T, n, AT>&&) = delete;
     ConstBuffer() = delete;
 public:
-    ConstBuffer(const T *buf, size_t l)
+    ConstBuffer(const T *buf, size_t l, T content=0)
         : ArgBuffer<const T, AT>(buf, n)
     {
         if (l < n) {
-            memcpy(m_intern_buf, buf, sizeof(T) * std::min(l, n));
+            memcpy(m_intern_buf, buf, sizeof(T) * l);
+            if (content) {
+                for (size_t i = l;i < n;i++) {
+                    m_intern_buf[i] = content;
+                }
+            }
             this->set(m_intern_buf);
         }
     }