diff --git a/procrank/procrank.c b/procrank/procrank.c
index 061f40f..cc06bcc 100644
--- a/procrank/procrank.c
+++ b/procrank/procrank.c
@@ -16,6 +16,7 @@
 
 #include <dirent.h>
 #include <errno.h>
+#include <stdbool.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <unistd.h>
@@ -41,6 +42,7 @@
 declare_sort(rss);
 declare_sort(pss);
 declare_sort(uss);
+declare_sort(swap);
 
 int (*compfn)(const void *a, const void *b);
 static int order;
@@ -122,8 +124,10 @@
     size_t num_procs;
     unsigned long total_pss;
     unsigned long total_uss;
+    unsigned long total_swap;
     char cmdline[256]; // this must be within the range of int
     int error;
+    bool has_swap = false;
 
     #define WS_OFF   0
     #define WS_ONLY  1
@@ -143,6 +147,7 @@
         if (!strcmp(argv[arg], "-r")) { compfn = &sort_by_rss; continue; }
         if (!strcmp(argv[arg], "-p")) { compfn = &sort_by_pss; continue; }
         if (!strcmp(argv[arg], "-u")) { compfn = &sort_by_uss; continue; }
+        if (!strcmp(argv[arg], "-s")) { compfn = &sort_by_swap; continue; }
         if (!strcmp(argv[arg], "-w")) { ws = WS_ONLY; continue; }
         if (!strcmp(argv[arg], "-W")) { ws = WS_RESET; continue; }
         if (!strcmp(argv[arg], "-R")) { order *= -1; continue; }
@@ -201,6 +206,10 @@
             fprintf(stderr, "warning: could not read usage for %d\n", pids[i]);
         }
 
+        if (ws != WS_RESET && procs[i]->usage.swap) {
+            has_swap = true;
+        }
+
         pm_process_destroy(proc);
     }
 
@@ -220,13 +229,24 @@
 
     qsort(procs, num_procs, sizeof(procs[0]), compfn);
 
-    if (ws)
-        printf("%5s  %7s  %7s  %7s  %s\n", "PID", "WRss", "WPss", "WUss", "cmdline");
-    else
-        printf("%5s  %7s  %7s  %7s  %7s  %s\n", "PID", "Vss", "Rss", "Pss", "Uss", "cmdline");
+    printf("%5s  ", "PID");
+    if (ws) {
+        printf("%s  %7s  %7s  ", "WRss", "WPss", "WUss");
+        if (has_swap) {
+            printf("%7s  ", "WSwap");
+        }
+    } else {
+        printf("%8s  %7s  %7s  %7s  ", "Vss", "Rss", "Pss", "Uss");
+        if (has_swap) {
+            printf("%7s  ", "Swap");
+        }
+    }
+
+    printf("%s\n", "cmdline");
 
     total_pss = 0;
     total_uss = 0;
+    total_swap = 0;
 
     for (i = 0; i < num_procs; i++) {
         if (getprocname(procs[i]->pid, cmdline, (int)sizeof(cmdline)) < 0) {
@@ -240,42 +260,67 @@
 
         total_pss += procs[i]->usage.pss;
         total_uss += procs[i]->usage.uss;
+        total_swap += procs[i]->usage.swap;
 
-        if (ws)
-            printf("%5d  %6dK  %6dK  %6dK  %s\n",
-                procs[i]->pid,
+        printf("%5d  ", procs[i]->pid);
+
+        if (ws) {
+            printf("%6dK  %6dK  %6dK  ",
                 procs[i]->usage.rss / 1024,
                 procs[i]->usage.pss / 1024,
-                procs[i]->usage.uss / 1024,
-                cmdline
+                procs[i]->usage.uss / 1024
             );
-        else
-            printf("%5d  %6dK  %6dK  %6dK  %6dK  %s\n",
-                procs[i]->pid,
+        } else {
+            printf("%7dK  %6dK  %6dK  %6dK  ",
                 procs[i]->usage.vss / 1024,
                 procs[i]->usage.rss / 1024,
                 procs[i]->usage.pss / 1024,
-                procs[i]->usage.uss / 1024,
-                cmdline
+                procs[i]->usage.uss / 1024
             );
+        }
+
+        if (has_swap) {
+            printf("%6dK  ", procs[i]->usage.swap / 1024);
+        }
+
+        printf("%s\n", cmdline);
 
         free(procs[i]);
     }
 
     free(procs);
 
+    /* Print the separator line */
+    printf("%5s  ", "");
+
     if (ws) {
-        printf("%5s  %7s  %7s  %7s  %s\n",
-            "", "", "------", "------", "------");
-        printf("%5s  %7s  %6ldK  %6ldK  %s\n",
-            "", "", total_pss / 1024, total_uss / 1024, "TOTAL");
+        printf("%7s  %7s  %7s  ", "", "------", "------");
     } else {
-        printf("%5s  %7s  %7s  %7s  %7s  %s\n",
-            "", "", "", "------", "------", "------");
-        printf("%5s  %7s  %7s  %6ldK  %6ldK  %s\n",
-            "", "", "", total_pss / 1024, total_uss / 1024, "TOTAL");
+        printf("%8s  %7s  %7s  %7s  ", "", "", "------", "------");
     }
 
+    if (has_swap) {
+        printf("%7s  ", "------");
+    }
+
+    printf("%s\n", "------");
+
+    /* Print the total line */
+    printf("%5s  ", "");
+    if (ws) {
+        printf("%7s  %6ldK  %6ldK  ",
+            "", total_pss / 1024, total_uss / 1024);
+    } else {
+        printf("%8s  %7s  %6ldK  %6ldK  ",
+            "", "", total_pss / 1024, total_uss / 1024);
+    }
+
+    if (has_swap) {
+        printf("%6ldK  ", total_swap);
+    }
+
+    printf("TOTAL\n");
+
     printf("\n");
     print_mem_info();
 
@@ -283,11 +328,12 @@
 }
 
 static void usage(char *myname) {
-    fprintf(stderr, "Usage: %s [ -W ] [ -v | -r | -p | -u | -h ]\n"
+    fprintf(stderr, "Usage: %s [ -W ] [ -v | -r | -p | -u | -s | -h ]\n"
                     "    -v  Sort by VSS.\n"
                     "    -r  Sort by RSS.\n"
                     "    -p  Sort by PSS.\n"
                     "    -u  Sort by USS.\n"
+                    "    -s  Sort by swap.\n"
                     "        (Default sort order is PSS.)\n"
                     "    -R  Reverse sort order (default is descending).\n"
                     "    -w  Display statistics for working set only.\n"
@@ -373,3 +419,4 @@
 create_sort(rss, numcmp)
 create_sort(pss, numcmp)
 create_sort(uss, numcmp)
+create_sort(swap, numcmp)
