--- busybox/miscutils/man.c	2008-07-05 09:20:18.000000000 +0200
+++ busybox2/miscutils/man.c	2008-07-05 10:53:54.000000000 +0200
@@ -147,28 +147,20 @@
 					char *next_sect = strchrnul(cur_sect, ':');
 					int sect_len = next_sect - cur_sect;
 					char *man_filename;
-					int found_here;
+					int mode = 0;
 
-					/* Search for cat page first */
-					man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2",
-							path_len, cur_path,
-							"cat",
-							sect_len, cur_sect,
-							*argv,
-							sect_len, cur_sect);
-					found_here = show_manpage(pager, man_filename, 1);
-					free(man_filename);
-					if (!found_here) {
+					/* We search first for a cat page, then for a man page */
+					while (mode < 2) {
 						man_filename = xasprintf("%.*s/%s%.*s/%s.%.*s" ".bz2",
-							path_len, cur_path,
-							"man",
-							sect_len, cur_sect,
-							*argv,
-							sect_len, cur_sect);
-						found_here = show_manpage(pager, man_filename, 0);
+								path_len, cur_path,
+								mode?"man":"cat",
+								sect_len, cur_sect,
+								*argv,
+								sect_len, cur_sect);
+						found = show_manpage(pager, man_filename, 1-mode);
 						free(man_filename);
+						mode += found + 1;
 					}
-					found |= found_here;
 
 					if (found && !(opt & OPT_a))
 						goto next_arg;
