diff --git a/pyopencl/scan.py b/pyopencl/scan.py
index 9e2487feaedd18a36d3f9b58c3e64d41670ccae5..b2226e1eb62338a9a5fb92f33e94cb1b7e4169a7 100644
--- a/pyopencl/scan.py
+++ b/pyopencl/scan.py
@@ -270,7 +270,7 @@ void ${name_prefix}_scan_intervals(
 
                     const index_type o_mod_k = offset % K;
                     const index_type o_div_k = offset / K;
-                    ldata[o_mod_k][offset / K].value = scan_value;
+                    ldata[o_mod_k][o_div_k].value = scan_value;
 
                     %if is_segmented:
                         bool is_seg_start = IS_SEG_START(read_i, scan_value);
@@ -1086,7 +1086,8 @@ class GenericScanKernel(_GenericScanKernelBase):
 
         while True:
             candidate_scan_info = self.build_scan_kernel(
-                    max_scan_wg_size, self.parsed_args, self.input_expr,
+                    max_scan_wg_size, self.parsed_args,
+                    _process_code_for_macro(self.input_expr),
                     self.is_segment_start_expr,
                     input_fetch_exprs=self.input_fetch_exprs,
                     is_first_level=True,
@@ -1439,6 +1440,7 @@ class GenericDebugScanKernel(_GenericScanKernelBase):
 
         allocator = kwargs.get("allocator")
         queue = kwargs.get("queue")
+        n = kwargs.get("size")
 
         if len(args) != len(self.parsed_args):
             raise TypeError("expected %d arguments, got %d" %
@@ -1448,7 +1450,8 @@ class GenericDebugScanKernel(_GenericScanKernelBase):
         allocator = allocator or first_array.allocator
         queue = queue or first_array.queue
 
-        n, = first_array.shape
+        if n is None:
+            n, = first_array.shape
 
         data_args = []
         from pyopencl.tools import VectorArg