Index: uspace/app/nav/panel.c
===================================================================
--- uspace/app/nav/panel.c	(revision 1eb0fafe02730740cb438fdf317673266420d48b)
+++ uspace/app/nav/panel.c	(revision fa792e804873bc31ad5aca800b4fa93aa7e9df55)
@@ -44,4 +44,5 @@
 #include <ui/paint.h>
 #include <ui/resource.h>
+#include <vfs/vfs.h>
 #include <qsort.h>
 #include "panel.h"
@@ -93,4 +94,8 @@
 
 	rc = gfx_color_new_ega(0x0f, &panel->act_border_color);
+	if (rc != EOK)
+		goto error;
+
+	rc = gfx_color_new_ega(0x0f, &panel->dir_color);
 	if (rc != EOK)
 		goto error;
@@ -107,4 +112,8 @@
 	if (panel->curs_color != NULL)
 		gfx_color_delete(panel->curs_color);
+	if (panel->act_border_color != NULL)
+		gfx_color_delete(panel->act_border_color);
+	if (panel->dir_color != NULL)
+		gfx_color_delete(panel->dir_color);
 	ui_control_delete(panel->control);
 	free(panel);
@@ -121,4 +130,5 @@
 	gfx_color_delete(panel->curs_color);
 	gfx_color_delete(panel->act_border_color);
+	gfx_color_delete(panel->dir_color);
 	panel_clear_entries(panel);
 	ui_control_delete(panel->control);
@@ -157,4 +167,6 @@
 	if (entry == panel->cursor && panel->active)
 		fmt.color = panel->curs_color;
+	else if (entry->isdir)
+		fmt.color = panel->dir_color;
 	else
 		fmt.color = panel->color;
@@ -402,8 +414,10 @@
  * @param panel Panel
  * @param name File name
- * @param size File size;
+ * @param size File size
+ * @param isdir @c true iff the entry is a directory
  * @return EOK on success or an error code
  */
-errno_t panel_entry_append(panel_t *panel, const char *name, uint64_t size)
+errno_t panel_entry_append(panel_t *panel, const char *name, uint64_t size,
+    bool isdir)
 {
 	panel_entry_t *entry;
@@ -421,4 +435,5 @@
 
 	entry->size = size;
+	entry->isdir = isdir;
 	link_initialize(&entry->lentries);
 	list_append(&entry->lentries, &panel->entries);
@@ -469,4 +484,5 @@
 	DIR *dir;
 	struct dirent *dirent;
+	vfs_stat_t finfo;
 	errno_t rc;
 
@@ -477,7 +493,13 @@
 	dirent = readdir(dir);
 	while (dirent != NULL) {
-		rc = panel_entry_append(panel, dirent->d_name, 1);
+		rc = vfs_stat_path(dirent->d_name, &finfo);
 		if (rc != EOK)
 			goto error;
+
+		rc = panel_entry_append(panel, dirent->d_name, 1,
+		    finfo.is_directory);
+		if (rc != EOK)
+			goto error;
+
 		dirent = readdir(dir);
 	}
@@ -553,4 +575,10 @@
 	panel_entry_t *a = *(panel_entry_t **)pa;
 	panel_entry_t *b = *(panel_entry_t **)pb;
+	int dcmp;
+
+	/* Sort directories first */
+	dcmp = b->isdir - a->isdir;
+	if (dcmp != 0)
+		return dcmp;
 
 	return str_cmp(a->name, b->name);
Index: uspace/app/nav/panel.h
===================================================================
--- uspace/app/nav/panel.h	(revision 1eb0fafe02730740cb438fdf317673266420d48b)
+++ uspace/app/nav/panel.h	(revision fa792e804873bc31ad5aca800b4fa93aa7e9df55)
@@ -58,5 +58,5 @@
 extern void panel_activate(panel_t *);
 extern void panel_deactivate(panel_t *);
-extern errno_t panel_entry_append(panel_t *, const char *, uint64_t);
+extern errno_t panel_entry_append(panel_t *, const char *, uint64_t, bool);
 extern void panel_entry_delete(panel_entry_t *);
 extern void panel_clear_entries(panel_t *);
Index: uspace/app/nav/test/panel.c
===================================================================
--- uspace/app/nav/test/panel.c	(revision 1eb0fafe02730740cb438fdf317673266420d48b)
+++ uspace/app/nav/test/panel.c	(revision fa792e804873bc31ad5aca800b4fa93aa7e9df55)
@@ -73,5 +73,5 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = panel_entry_append(panel, "a", 1);
+	rc = panel_entry_append(panel, "a", 1, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -324,10 +324,10 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = panel_entry_append(panel, "a", 1);
+	rc = panel_entry_append(panel, "a", 1, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
 	PCUT_ASSERT_INT_EQUALS(1, list_count(&panel->entries));
 
-	rc = panel_entry_append(panel, "b", 2);
+	rc = panel_entry_append(panel, "b", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -347,8 +347,8 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -377,8 +377,8 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -456,11 +456,11 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = panel_entry_append(panel, "b", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "c", 3);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "a", 2);
+	rc = panel_entry_append(panel, "b", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "c", 3, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "a", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -494,8 +494,8 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = panel_entry_append(panel, "a", 2);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 1);
+	rc = panel_entry_append(panel, "a", 2, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 1, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -534,5 +534,5 @@
 
 	/* Add one entry */
-	rc = panel_entry_append(panel, "a", 1);
+	rc = panel_entry_append(panel, "a", 1, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -544,5 +544,5 @@
 
 	/* Add another entry */
-	rc = panel_entry_append(panel, "b", 2);
+	rc = panel_entry_append(panel, "b", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -570,5 +570,5 @@
 
 	/* Add one entry */
-	rc = panel_entry_append(panel, "a", 1);
+	rc = panel_entry_append(panel, "a", 1, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -580,5 +580,5 @@
 
 	/* Add another entry */
-	rc = panel_entry_append(panel, "b", 2);
+	rc = panel_entry_append(panel, "b", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -603,5 +603,5 @@
 
 	/* Add one entry */
-	rc = panel_entry_append(panel, "a", 1);
+	rc = panel_entry_append(panel, "a", 1, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -614,5 +614,5 @@
 
 	/* Add another entry */
-	rc = panel_entry_append(panel, "b", 2);
+	rc = panel_entry_append(panel, "b", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -640,5 +640,5 @@
 
 	/* Add one entry */
-	rc = panel_entry_append(panel, "a", 1);
+	rc = panel_entry_append(panel, "a", 1, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -651,5 +651,5 @@
 
 	/* Add another entry */
-	rc = panel_entry_append(panel, "b", 2);
+	rc = panel_entry_append(panel, "b", 2, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -702,11 +702,11 @@
 
 	/* Add tree entries (more than page size, which is 2) */
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "c", 3);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "c", 3, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -783,11 +783,11 @@
 
 	/* Add tree entries (more than page size, which is 2) */
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "c", 3);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "c", 3, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -866,11 +866,11 @@
 
 	/* Add tree entries (more than page size, which is 2) */
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "c", 3);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "c", 3, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -927,11 +927,11 @@
 
 	/* Add tree entries (more than page size, which is 2) */
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "c", 3);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "c", 3, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -989,17 +989,17 @@
 
 	/* Add five entries (2 full pages, one partial) */
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "c", 3);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "d", 4);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "e", 5);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "c", 3, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "d", 4, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "e", 5, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -1077,17 +1077,17 @@
 
 	/* Add five entries (2 full pages, one partial) */
-	rc = panel_entry_append(panel, "a", 1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "b", 2);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "c", 3);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "d", 4);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = panel_entry_append(panel, "e", 5);
+	rc = panel_entry_append(panel, "a", 1, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "b", 2, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "c", 3, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "d", 4, false);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = panel_entry_append(panel, "e", 5, false);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/app/nav/types/panel.h
===================================================================
--- uspace/app/nav/types/panel.h	(revision 1eb0fafe02730740cb438fdf317673266420d48b)
+++ uspace/app/nav/types/panel.h	(revision fa792e804873bc31ad5aca800b4fa93aa7e9df55)
@@ -53,4 +53,6 @@
 	/** File size */
 	uint64_t size;
+	/** @c true iff entry is a directory */
+	bool isdir;
 } panel_entry_t;
 
@@ -77,4 +79,7 @@
 	/** Active border color */
 	gfx_color_t *act_border_color;
+
+	/** Directory-type entry color */
+	gfx_color_t *dir_color;
 
 	/** Panel entries (list of panel_entry_t) */
