diff --git a/top/top.c b/top/top.c
index 294ff496..fb5ff49f 100644
--- a/top/top.c
+++ b/top/top.c
@@ -1527,29 +1527,6 @@ static const char *user_certify (WIN_t *q, const char *str, char typ) {
    }
    return NULL;
 } // end: user_certify
-
-
-        /*
-         * Determine if this proc_t matches the 'u/U' selection criteria
-         * for a given window -- it's called from only one place, and
-         * likely inlined even without the directive */
-static inline int user_matched (const WIN_t *q, const proc_t *p) {
-   switch(q->usrseltyp) {
-      case 0:                                    // uid selection inactive
-         return 1;
-      case 'U':                                  // match any uid
-         if (p->ruid == q->usrseluid) return q->usrselflg;
-         if (p->suid == q->usrseluid) return q->usrselflg;
-         if (p->fuid == q->usrseluid) return q->usrselflg;
-      // fall through...
-      case 'u':                                  // match effective uid
-         if (p->euid == q->usrseluid) return q->usrselflg;
-      // fall through...
-      default:                                   // no match...
-         ;
-   }
-   return !q->usrselflg;
-} // end: user_matched
 
 /*######  Basic Formatting support  ######################################*/
 
@@ -4673,6 +4650,29 @@ static void wins_stage_2 (void) {
    sigaddset(&Sigwinch_set, SIGWINCH);
 #endif
 } // end: wins_stage_2
+
+
+        /*
+         * Determine if this task matches the 'u/U' selection
+         * criteria for a given window */
+static inline int wins_usrselect (const WIN_t *q, const int idx) {
+   proc_t *p = q->ppt[idx];
+   switch(q->usrseltyp) {
+      case 0:                                    // uid selection inactive
+         return 1;
+      case 'U':                                  // match any uid
+         if (p->ruid == q->usrseluid) return q->usrselflg;
+         if (p->suid == q->usrseluid) return q->usrselflg;
+         if (p->fuid == q->usrseluid) return q->usrselflg;
+      // fall through...
+      case 'u':                                  // match effective uid
+         if (p->euid == q->usrseluid) return q->usrselflg;
+      // fall through...
+      default:                                   // no match...
+         ;
+   }
+   return !q->usrselflg;
+} // end: wins_usrselect
 
 /*######  Forest View support  ###########################################*/
 
@@ -4689,8 +4689,8 @@ static int      Tree_idx;                   // frame_make resets to zero
            positive pid values represent parents with collapsed children
            while a negative pid value means children have been expanded.
            ( both of these are managed under the 'keys_task()' routine ) */
-static int     *Hide_pid;                   // collapsible process array
-static int      Hide_tot;                   // total used in above array
+static int *Hide_pid;                       // collapsible process array
+static int  Hide_tot;                       // total used in above array
 
         /*
          * This little recursive guy is the real forest view workhorse.
@@ -4750,10 +4750,10 @@ static void forest_create (WIN_t *q) {
 #ifndef TREE_SCANALL
       qsort(Seed_ppt, Frame_maxtask, sizeof(proc_t*), (QFP_t)forest_based);
 #endif
-      for (i = 0; i < Frame_maxtask; i++)   // avoid any hidepid distortions
-         if (!Seed_ppt[i]->pad_3)           // identify real or pretend trees
-            forest_adds(i, 0);              // add as parent plus its children
-
+      for (i = 0; i < Frame_maxtask; i++) { // avoid any hidepid distortions
+         if (!Seed_ppt[i]->pad_3)           // real & pseudo parents == zero
+            forest_adds(i, 0);              // add a parent and its children
+      }
       /* we're borrowing some pad bytes in the proc_t,
          pad_2: 'x' means a collapsed thread, 'z' means an unseen child
          pad_3: where level number is stored (0 - 100) */
@@ -4761,16 +4761,17 @@ static void forest_create (WIN_t *q) {
          if (Hide_pid[i] > 0) {
             for (j = 0; j < Frame_maxtask; j++) {
                if (Tree_ppt[j]->tid == Hide_pid[i]) {
-                  int  idx = j;
-                  char lvl = Tree_ppt[j]->pad_3;
-                  Tree_ppt[j]->pad_2 = 'x';
-                  while (j+1 < Frame_maxtask && Tree_ppt[j+1]->pad_3 > lvl) {
+                  int parent = j;
+                  int children = 0;
+                  char level = Tree_ppt[j]->pad_3;
+
+                  while (j+1 < Frame_maxtask && Tree_ppt[j+1]->pad_3 > level) {
                      Tree_ppt[j+1]->pad_2 = 'z';
-                     idx = 0;
+                     children = 1;
                      ++j;
                   }
-                  // no children found, so unmark this puppy
-                  if (idx) Tree_ppt[idx]->pad_2 = '\0';
+                  // children found (and collapsed), so mark that puppy
+                  if (children) Tree_ppt[parent]->pad_2 = 'x';
                }
             }
          }
@@ -4830,7 +4831,7 @@ static inline int find_ofs (const WIN_t *q, const char *buf) {
    /* This is currently the one true prototype require by top.
       It is placed here, instead of top.h, so as to avoid a compiler
       warning when top_nls.c is compiled. */
-static const char *task_show (const WIN_t *q, const proc_t *p);
+static const char *task_show (const WIN_t *q, const int idx);
 
 static void find_string (int ch) {
  #define reDUX (found) ? N_txt(WORD_another_txt) : ""
@@ -4855,7 +4856,7 @@ static void find_string (int ch) {
    if (Curwin->findstr[0]) {
       SETw(Curwin, NOPRINT_xxx);
       for (i = Curwin->begtask; i < Frame_maxtask; i++) {
-         const char *row = task_show(Curwin, Curwin->ppt[i]);
+         const char *row = task_show(Curwin, i);
          if (*row && -1 < find_ofs(Curwin, row)) {
             found = 1;
             if (i == Curwin->begtask) continue;
@@ -5916,7 +5917,7 @@ numa_nope:
         /*
          * Build the information for a single task row and
          * display the results or return them to the caller. */
-static const char *task_show (const WIN_t *q, const proc_t *p) {
+static const char *task_show (const WIN_t *q, const int idx) {
 #ifndef SCROLLVAR_NO
  #define makeVAR(v)  { const char *pv = v; \
     if (!q->varcolbeg) cp = make_str(pv, q->varcolsz, Js, AUTOX_NO); \
@@ -5933,6 +5934,7 @@ static const char *task_show (const WIN_t *q, const proc_t *p) {
    static char rbuf[ROWMINSIZ];
    char *rp;
    int x;
+   proc_t *p = q->ppt[idx];
 
    /* we're borrowing some pad bytes in the proc_t,
       pad_2: 'x' means a collapsed thread, 'z' means an unseen child
@@ -6217,8 +6219,8 @@ static void window_hlp (void) {
    if (w->begnext > 0) {
 fwd_redux:
       for (i = w->begtask; i < Frame_maxtask; i++) {
-         if (user_matched(w, w->ppt[i])
-         && (*task_show(w, w->ppt[i])))
+         if (wins_usrselect(w, i)
+         && (*task_show(w, i)))
             break;
       }
       if (i < Frame_maxtask) {
@@ -6231,14 +6233,14 @@ fwd_redux:
 
    // potentially scroll backward ...
    for (i = w->begtask; i > 0; i--) {
-      if (user_matched(w, w->ppt[i])
-      && (*task_show(w, w->ppt[i])))
+      if (wins_usrselect(w, i)
+      && (*task_show(w, i)))
          break;
    }
    // reached the top, but maybe this guy ain't visible
    if (!(w->begtask = i) && !reversed) {
-      if (!(user_matched(w, w->ppt[0]))
-      || (!(*task_show(w, w->ppt[0])))) {
+      if (!(wins_usrselect(w, 0))
+      || (!(*task_show(w, 0)))) {
          reversed = 1;
          goto fwd_redux;
       }
@@ -6285,14 +6287,14 @@ static int window_show (WIN_t *q, int wmax) {
       checking some stuff with each iteration and check it just once... */
    if (CHKw(q, Show_IDLEPS) && !q->usrseltyp)
       while (i < Frame_maxtask && lwin < wmax) {
-         if (*task_show(q, q->ppt[i++]))
+         if (*task_show(q, i++))
             ++lwin;
       }
    else
       while (i < Frame_maxtask && lwin < wmax) {
          if ((CHKw(q, Show_IDLEPS) || isBUSY(q->ppt[i]))
-         && user_matched(q, q->ppt[i])
-         && *task_show(q, q->ppt[i]))
+         && wins_usrselect(q, i)
+         && *task_show(q, i))
             ++lwin;
          ++i;
       }
diff --git a/top/top.h b/top/top.h
index afbf6c22..fbbe1331 100644
--- a/top/top.h
+++ b/top/top.h
@@ -718,7 +718,6 @@ typedef struct WIN_t {
 //atic int           get_int (const char *prompt);
 //atic inline const char *hex_make (KLONG num, int noz);
 //atic const char   *user_certify (WIN_t *q, const char *str, char typ);
-//atic inline int    user_matched (const WIN_t *q, const proc_t *p);
 /*------  Basic Formatting support  --------------------------------------*/
 //atic inline const char *justify_pad (const char *str, int width, int justr);
 //atic inline const char *make_chr (const char ch, int width, int justr);
@@ -787,6 +786,7 @@ typedef struct WIN_t {
 //atic void          wins_reflag (int what, int flg);
 //atic void          wins_stage_1 (void);
 //atic void          wins_stage_2 (void);
+//atic inline int    wins_usrselect (const WIN_t *q, const int idx);
 /*------  Forest View support  -------------------------------------------*/
 //atic void          forest_adds (const int self, int level);
 #ifndef TREE_SCANALL
@@ -810,7 +810,7 @@ typedef struct WIN_t {
 //atic void          do_key (int ch);
 //atic void          summary_hlp (CPU_t *cpu, const char *pfx);
 //atic void          summary_show (void);
-//atic const char   *task_show (const WIN_t *q, const proc_t *p);
+//atic const char   *task_show (const WIN_t *q, const int idx);
 //atic void          window_hlp (void);
 //atic int           window_show (WIN_t *q, int wmax);
 /*------  Entry point plus two  ------------------------------------------*/