*/
 void *pnd_box_find_by_key ( pnd_box_handle box, char *key );
 
+/* merge two box lists */
+unsigned char pnd_box_append ( pnd_box_handle box, pnd_box_handle append );
+
 /* should the user want to walk around the container, a couple basic functions are
  * provided.
  */
 
 
   return ( count );
 }
+
+unsigned char pnd_box_append ( pnd_box_handle box, pnd_box_handle append ) {
+  pnd_box_t *pbox = (pnd_box_t*) box;
+  pnd_box_t *pappend = (pnd_box_t*) append;
+
+  if ( pbox -> head ) {
+    pnd_box_node_t *n = pbox -> head;
+    while ( n -> next ) {
+      n = n -> next;
+    }
+    // by now, n -> next == NULL
+    n -> next = pappend -> head;
+  } else {
+    pbox -> head = pappend -> head;
+  }
+
+  return ( 1 );
+}
 
   ui_discoverscreen ( 1 /* clear screen */ );
 
   // determine current app list, cache icons
-  pnd_log ( pndn_debug, "Looking for pnd applications here: %s\n", pnd_conf_get_as_char ( g_desktopconf, "desktop.searchpath" ) );
-  g_active_apps = pnd_disco_search ( pnd_conf_get_as_char ( g_desktopconf, "desktop.searchpath" ), NULL ); // ignore overrides for now
+  // - ignore overrides for now
+  pnd_log ( pndn_debug, "Looking for pnd applications here: %s\n",
+           pnd_conf_get_as_char ( g_desktopconf, "desktop.searchpath" ) );
+  g_active_apps = pnd_disco_search ( pnd_conf_get_as_char ( g_desktopconf, "desktop.searchpath" ), NULL );
+  pnd_log ( pndn_debug, "Looking for pnd applications here: %s\n",
+           pnd_conf_get_as_char ( g_desktopconf, "menu.searchpath" ) );
+  pnd_box_handle menu_apps = pnd_disco_search ( pnd_conf_get_as_char ( g_desktopconf, "menu.searchpath" ), NULL );
+
+  pnd_box_append ( g_active_apps, menu_apps );
+
   g_active_appcount = pnd_box_get_size ( g_active_apps );
 
   unsigned char maxwidth, maxheight;