diff --git a/mnexec.c b/mnexec.c
index 7f17494dedc3a9e117112553eb7e2c9be14efd73..ed44f60810c0354854fb827ca799b51a11f566a1 100644
--- a/mnexec.c
+++ b/mnexec.c
@@ -29,7 +29,7 @@
 #define VERSION "(devel)"
 #endif
 
-void usage(char *name) 
+void usage(char *name)
 {
     printf("Execution utility for Mininet\n\n"
            "Usage: %s [-cdnp] [-a pid] [-g group] [-r rtprio] cmd args...\n\n"
@@ -99,6 +99,7 @@ int main(int argc, char *argv[])
     char path[PATH_MAX];
     int nsid;
     int pid;
+
     static struct sched_param sp;
     while ((c = getopt(argc, argv, "+cdnpa:g:r:vh")) != -1)
         switch(c) {
@@ -156,12 +157,18 @@ int main(int argc, char *argv[])
             sprintf(path, "/proc/%d/ns/mnt", pid);
             nsid = open(path, O_RDONLY);
             if (nsid < 0 || setns(nsid, 0) != 0) {
-                /* Plan B: chroot into pid's root file system */
+                char *cwd = get_current_dir_name();
+                /* Plan B: chroot/chdir into pid's root file system */
                 sprintf(path, "/proc/%d/root", pid);
                 if (chroot(path) < 0) {
                     perror(path);
                     return 1;
                 }
+                /* need to chdir to correct working directory */
+                if (chdir(cwd) != 0) {
+                    perror(cwd);
+                    return 1;
+                }
             }
             break;
         case 'g':
@@ -184,7 +191,7 @@ int main(int argc, char *argv[])
             exit(0);
         default:
             usage(argv[0]);
-            exit(1); 
+            exit(1);
         }
 
     if (optind < argc) {
@@ -192,7 +199,7 @@ int main(int argc, char *argv[])
         perror(argv[optind]);
         return 1;
     }
-    
+
     usage(argv[0]);
 
     return 0;