static struct object_id head_oid;
 static int recurse_submodules = 0;
 static int submodule_propagate_branches = 0;
-static int omit_empty = 0;
 
 static int branch_use_color = -1;
 static char branch_colors[][COLOR_MAXLEN] = {
                        string_list_append(output, out.buf);
                } else {
                        fwrite(out.buf, 1, out.len, stdout);
-                       if (out.len || !omit_empty)
+                       if (out.len || !format->array_opts.omit_empty)
                                putchar('\n');
                }
        }
                OPT_BIT('D', NULL, &delete, N_("delete branch (even if not merged)"), 2),
                OPT_BIT('m', "move", &rename, N_("move/rename a branch and its reflog"), 1),
                OPT_BIT('M', NULL, &rename, N_("move/rename a branch, even if target exists"), 2),
-               OPT_BOOL(0, "omit-empty",  &omit_empty,
+               OPT_BOOL(0, "omit-empty",  &format.array_opts.omit_empty,
                        N_("do not output a newline after empty formatted refs")),
                OPT_BIT('c', "copy", ©, N_("copy a branch and its reflog"), 1),
                OPT_BIT('C', NULL, ©, N_("copy a branch, even if target exists"), 2),
 
 
 int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
 {
-       int i;
+       int i, total;
        struct ref_sorting *sorting;
        struct string_list sorting_options = STRING_LIST_INIT_DUP;
-       int maxcount = 0, icase = 0, omit_empty = 0;
+       int icase = 0;
        struct ref_array array;
        struct ref_filter filter = REF_FILTER_INIT;
        struct ref_format format = REF_FORMAT_INIT;
                        N_("quote placeholders suitably for python"), QUOTE_PYTHON),
                OPT_BIT(0 , "tcl",  &format.quote_style,
                        N_("quote placeholders suitably for Tcl"), QUOTE_TCL),
-               OPT_BOOL(0, "omit-empty",  &omit_empty,
+               OPT_BOOL(0, "omit-empty",  &format.array_opts.omit_empty,
                        N_("do not output a newline after empty formatted refs")),
 
                OPT_GROUP(""),
-               OPT_INTEGER( 0 , "count", &maxcount, N_("show only <n> matched refs")),
+               OPT_INTEGER( 0 , "count", &format.array_opts.max_count, N_("show only <n> matched refs")),
                OPT_STRING(  0 , "format", &format.format, N_("format"), N_("format to use for the output")),
                OPT__COLOR(&format.use_color, N_("respect format colors")),
                OPT_REF_FILTER_EXCLUDE(&filter),
        string_list_append(&sorting_options, "refname");
 
        parse_options(argc, argv, prefix, opts, for_each_ref_usage, 0);
-       if (maxcount < 0) {
-               error("invalid --count argument: `%d'", maxcount);
+       if (format.array_opts.max_count < 0) {
+               error("invalid --count argument: `%d'", format.array_opts.max_count);
                usage_with_options(for_each_ref_usage, opts);
        }
        if (HAS_MULTI_BITS(format.quote_style)) {
 
        ref_array_sort(sorting, &array);
 
-       if (!maxcount || array.nr < maxcount)
-               maxcount = array.nr;
-       for (i = 0; i < maxcount; i++) {
+       total = format.array_opts.max_count;
+       if (!total || array.nr < total)
+               total = array.nr;
+       for (i = 0; i < total; i++) {
                strbuf_reset(&err);
                strbuf_reset(&output);
                if (format_ref_array_item(array.items[i], &format, &output, &err))
                        die("%s", err.buf);
                fwrite(output.buf, 1, output.len, stdout);
-               if (output.len || !omit_empty)
+               if (output.len || !format.array_opts.omit_empty)
                        putchar('\n');
        }
 
 
 static unsigned int colopts;
 static int force_sign_annotate;
 static int config_sign_tag = -1; /* unspecified */
-static int omit_empty = 0;
 
 static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting,
                     struct ref_format *format)
                if (format_ref_array_item(array.items[i], format, &output, &err))
                        die("%s", err.buf);
                fwrite(output.buf, 1, output.len, stdout);
-               if (output.len || !omit_empty)
+               if (output.len || !format->array_opts.omit_empty)
                        putchar('\n');
        }
 
                OPT_WITHOUT(&filter.no_commit, N_("print only tags that don't contain the commit")),
                OPT_MERGED(&filter, N_("print only tags that are merged")),
                OPT_NO_MERGED(&filter, N_("print only tags that are not merged")),
-               OPT_BOOL(0, "omit-empty",  &omit_empty,
+               OPT_BOOL(0, "omit-empty",  &format.array_opts.omit_empty,
                        N_("do not output a newline after empty formatted refs")),
                OPT_REF_SORT(&sorting_options),
                {
 
 
        /* List of bases for ahead-behind counts. */
        struct string_list bases;
+
+       struct {
+               int max_count;
+               int omit_empty;
+       } array_opts;
 };
 
 #define REF_FILTER_INIT { \