diff --git a/src/wrapper/wrap_cl.hpp b/src/wrapper/wrap_cl.hpp
index 7132b27823cb94c02c4aac9c3df94a5eacfbcf3b..0228e75b8edb4365a59bf2ad5c537d389306453e 100644
--- a/src/wrapper/wrap_cl.hpp
+++ b/src/wrapper/wrap_cl.hpp
@@ -2807,12 +2807,20 @@ namespace pyopencl
     std::vector<size_t> local_work_size;
     if (py_local_work_size.ptr() != Py_None)
     {
-      if (work_dim != unsigned(len(py_local_work_size)))
-        throw error("enqueue_nd_range_kernel", CL_INVALID_VALUE,
-            "global/work work sizes have differing dimensions");
+      if (g_times_l)
+        work_dim = std::max(work_dim, unsigned(len(py_local_work_size)));
+      else
+        if (work_dim != unsigned(len(py_local_work_size)))
+          throw error("enqueue_nd_range_kernel", CL_INVALID_VALUE,
+              "global/local work sizes have differing dimensions");
 
       COPY_PY_LIST(size_t, local_work_size);
 
+      while (local_work_size.size() < work_dim)
+        local_work_size.push_back(1);
+      while (global_work_size.size() < work_dim)
+        global_work_size.push_back(1);
+
       local_work_size_ptr = local_work_size.empty( ) ? NULL : &local_work_size.front();
     }