struct ynl_parse_arg yarg = {};
        int ret;
 
-       ret = ynl_check_alien(ds->ys, nlh, ds->rsp_cmd);
+       ret = ynl_check_alien(ds->yarg.ys, nlh, ds->rsp_cmd);
        if (ret)
                return ret < 0 ? MNL_CB_ERROR : MNL_CB_OK;
 
                ds->last->next = obj;
        ds->last = obj;
 
-       yarg.ys = ds->ys;
-       yarg.rsp_policy = ds->rsp_policy;
+       yarg = ds->yarg;
        yarg.data = &obj->data;
 
        return ds->cb(nlh, &yarg);
 
 
     ri.cw.write_func_lvar(local_vars)
 
-    ri.cw.p('yds.ys = ys;')
+    ri.cw.p('yds.yarg.ys = ys;')
+    ri.cw.p(f"yds.yarg.rsp_policy = &{ri.struct['reply'].render_name}_nest;")
+    ri.cw.p("yds.yarg.data = NULL;")
     ri.cw.p(f"yds.alloc_sz = sizeof({type_name(ri, rdir(direction))});")
     ri.cw.p(f"yds.cb = {op_prefix(ri, 'reply', deref=True)}_parse;")
     if ri.op.value is not None:
         ri.cw.p(f'yds.rsp_cmd = {ri.op.enum_name};')
     else:
         ri.cw.p(f'yds.rsp_cmd = {ri.op.rsp_value};')
-    ri.cw.p(f"yds.rsp_policy = &{ri.struct['reply'].render_name}_nest;")
     ri.cw.nl()
     ri.cw.p(f"nlh = ynl_gemsg_start_dump(ys, {ri.nl.get_family_id()}, {ri.op.enum_name}, 1);")