diff --git a/src/read_restart.cpp b/src/read_restart.cpp
index 9ba8a3f32d405dd59b8b8830171aa7a0cbf6a8fa..2436ea5785672f51286e0892eb82762541c20335 100644
--- a/src/read_restart.cpp
+++ b/src/read_restart.cpp
@@ -269,23 +269,41 @@ void ReadRestart::command(int narg, char **arg)
 }
 
 /* ----------------------------------------------------------------------
-   search for all files in dir matching infile which contains a "*"
+   search for all files matching infile which contains a "*"
    replace "*" with latest timestep value to create outfile name
+   search dir referenced by initial pathname of file
    if infile also contains "%", need to use "base" when search directory
 ------------------------------------------------------------------------- */
 
 void ReadRestart::file_search(char *infile, char *outfile)
 {
+  char *ptr;
+
+  // separate infile into dir + filename
+
+  char *dirname = new char[strlen(infile) + 1];
+  char *filename = new char[strlen(infile) + 1];
+
+  if (strchr(infile,'/')) {
+    ptr = strrchr(infile,'/');
+    *ptr = '\0';
+    strcpy(dirname,infile);
+    strcpy(filename,ptr+1);
+    *ptr = '/';
+  } else {
+    strcpy(dirname,"./");
+    strcpy(filename,infile);
+  }
+
   // if filename contains "%" replace "%" with "base"
 
-  char *pattern = new char[strlen(infile) + 16];
-  char *ptr;
+  char *pattern = new char[strlen(filename) + 16];
 
-  if (ptr = strchr(infile,'%')) {
+  if (ptr = strchr(filename,'%')) {
     *ptr = '\0';
-    sprintf(pattern,"%s%s%s",infile,"base",ptr+1);
+    sprintf(pattern,"%s%s%s",filename,"base",ptr+1);
     *ptr = '%';
-  } else strcpy(pattern,infile);
+  } else strcpy(pattern,filename);
 
   // scan all files in directory, searching for files that match pattern
   // maxnum = largest int that matches "*"
@@ -304,7 +322,7 @@ void ReadRestart::file_search(char *infile, char *outfile)
 
   if (me == 0) {
     struct dirent *ep;
-    DIR *dp = opendir("./");
+    DIR *dp = opendir(dirname);
     if (dp == NULL) 
       error->one("Cannot open dir to search for restart file");
     while (ep = readdir(dp)) {
@@ -321,11 +339,6 @@ void ReadRestart::file_search(char *infile, char *outfile)
     if (maxnum < 0) error->one("Found no restart file matching pattern");
   }
 
-  delete [] pattern;
-  delete [] begin;
-  delete [] middle;
-  delete [] end;
-
   // create outfile with maxint substituted for "*"
   // use original infile, not pattern, since need to retain "%" in filename
 
@@ -333,6 +346,15 @@ void ReadRestart::file_search(char *infile, char *outfile)
   *ptr = '\0';
   sprintf(outfile,"%s%d%s",infile,maxnum,ptr+1);
   *ptr = '*';
+
+  // clean up
+
+  delete [] dirname;
+  delete [] filename;
+  delete [] pattern;
+  delete [] begin;
+  delete [] middle;
+  delete [] end;
 }
 
 /* ----------------------------------------------------------------------