diff --git a/lib/modules/Filesystem.pmod/Tar.pmod b/lib/modules/Filesystem.pmod/Tar.pmod
index 8c06a9f7ad2b8fc1223369eeeecc49340367c35d..58088267f1cdb18cd08c21523bd04dfdb5374363 100644
--- a/lib/modules/Filesystem.pmod/Tar.pmod
+++ b/lib/modules/Filesystem.pmod/Tar.pmod
@@ -351,13 +351,6 @@ class _Tar
     }
 #endif
 
-    if (!(which_bits & EXTRACT_SKIP_MODE) && !r->islnk) {
-      if (which_bits & EXTRACT_SKIP_EXT_MODE)
-	chmod (dest, r->mode & 0777);
-      else
-	chmod (dest, r->mode & 07777);
-    }
-
 #if constant (chown)
     if (which_bits & EXTRACT_CHOWN) {
       int uid;
@@ -375,6 +368,13 @@ class _Tar
       chown (dest, uid, gid, 1);
     }
 #endif
+
+    if (!(which_bits & EXTRACT_SKIP_MODE) && !r->islnk) {
+      if (which_bits & EXTRACT_SKIP_EXT_MODE)
+	chmod (dest, r->mode & 0777);
+      else
+	chmod (dest, r->mode & 07777);
+    }
   }
 
   void extract (string src_dir, string dest_dir,