diff -Naur a/toys/posix/df.c b/toys/posix/df.c
--- a/toys/posix/df.c	2014-10-02 18:23:27.000000000 +0530
+++ b/toys/posix/df.c	2014-10-07 08:48:46.072917278 +0530
@@ -69,7 +69,7 @@
   size = (block * mt->statvfs.f_blocks) / TT.units;
   used = (block * (mt->statvfs.f_blocks-mt->statvfs.f_bfree)) / TT.units;
   avail = (block * (getuid() ? mt->statvfs.f_bavail : mt->statvfs.f_bfree))
-      / TT.units;
+    / TT.units;
   if (!(used+avail)) percent = 0;
   else {
     percent = (used*100)/(used+avail);
@@ -83,11 +83,11 @@
   len = 25 - strlen(device);
   if (len < 1) len = 1;
   if (CFG_DF_PEDANTIC && (toys.optflags & FLAG_P)) {
-    xprintf("%s %lld %lld %lld %lld%% %s\n", device, size, used, avail,
-      percent, mt->dir);
-  } else {
-    xprintf("%s% *lld % 10lld % 9lld % 3lld%% %s\n", device, len,
-      size, used, avail, percent, mt->dir);
+    xprintf("%s% *lld % 10lld % 10lld % 7lld%% %s\n", device, len,
+        size, used, avail, percent, mt->dir);
+  } else { 
+    xprintf("%s% *lld % 10lld % 10lld % 3lld%% %s\n", device, len,
+        size, used, avail, percent, mt->dir);
   }
 
   if (device != mt->device) free(device);
@@ -97,14 +97,16 @@
 {
   struct mtab_list *mt, *mtstart, *mtend;
 
+  if (getenv("POSIXLY_CORRECT")) toys.optflags |= FLAG_P;
+
   // Handle -P and -k
   TT.units = 1024;
   if (CFG_DF_PEDANTIC && (toys.optflags & FLAG_P)) {
     // Units are 512 bytes if you select "pedantic" without "kilobytes".
     if ((toys.optflags&(FLAG_P|FLAG_k)) == FLAG_P) TT.units = 512;
-    printf("Filesystem %ld-blocks Used Available Capacity Mounted on\n",
-      TT.units);
-  } else puts("Filesystem\t1K-blocks\tUsed Available Use% Mounted on");
+    printf("Filesystem\t%ld-blocks\tUsed  Available Capacity Mounted on\n",
+        TT.units);
+  } else puts("Filesystem\t1K-blocks\tUsed  Available Use% Mounted on");
 
   if (!(mtstart = xgetmountlist(0))) return;
   mtend = dlist_terminate(mtstart);
@@ -118,14 +120,15 @@
 
       // Stat it (complain if we can't).
       if(stat(*next, &st)) {
-        perror_msg("`%s'", *next);
+        perror_msg("'%s'", *next);
         continue;
       }
 
       // Find and display this filesystem.  Use _last_ hit in case of
       // overmounts (which is first hit in the reversed list).
       for (mt = mtend; mt; mt = mt->prev) {
-        if (st.st_dev == mt->stat.st_dev) {
+        if ((st.st_dev == mt->stat.st_dev) ||
+            (st.st_rdev && (st.st_rdev == mt->stat.st_dev))) {
           show_mt(mt);
           break;
         }
