diff --git a/src/util.c b/src/util.c
index 2d92718d04d465ee808b6978e986aef7be8c2fdb..5a1abeaf22740fab5f64bcf6d6ec3aa83f70eab2 100644
--- a/src/util.c
+++ b/src/util.c
@@ -134,13 +134,13 @@ char *fmtmode(unsigned short mode) {
          : ft == S_IFBLK  ? 'b' : '?';
   buf[1] = mode & 0400 ? 'r' : '-';
   buf[2] = mode & 0200 ? 'w' : '-';
-  buf[3] = mode & 0100 ? 'x' : '-';
+  buf[3] = mode &04000 ? 's' : mode & 0100 ? 'x' : '-';
   buf[4] = mode & 0040 ? 'r' : '-';
   buf[5] = mode & 0020 ? 'w' : '-';
-  buf[6] = mode & 0010 ? 'x' : '-';
+  buf[6] = mode &02000 ? 's' : mode & 0010 ? 'x' : '-';
   buf[7] = mode & 0004 ? 'r' : '-';
   buf[8] = mode & 0002 ? 'w' : '-';
-  buf[9] = mode & 0001 ? 'x' : '-';
+  buf[9] = mode &01000 ? (S_ISDIR(mode) ? 't' : 'T') : mode & 0001 ? 'x' : '-';
   buf[10] = 0;
   return buf;
 }