Index: /trunk/Ohana/src/opihi/cmd.basic/output.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/output.c	(revision 15790)
+++ /trunk/Ohana/src/opihi/cmd.basic/output.c	(revision 15791)
@@ -31,4 +31,5 @@
   if ((N = get_argument (argc, argv, "-dump"))) {
     buffer = gprintGetBuffer (dest);
+    if (buffer == NULL) return (FALSE);
 
     /* save the current buffer contents */
@@ -39,9 +40,10 @@
     /* set the output target to the specified name */
     remove_argument (N, &argc, argv);
-    gprintSetFile (dest, argv[N]);
+    gprintSetFileAllThreads (dest, argv[N]);
     remove_argument (N, &argc, argv);
 
     /* send the output to the appropriate destination */
     gwrite (output, 1, Noutput, dest);
+    free (output);
     return (TRUE);
   }
@@ -52,5 +54,5 @@
   }
 
-  gprintSetFile (dest, argv[1]);
+  gprintSetFileAllThreads (dest, argv[1]);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/include/shell.h
===================================================================
--- /trunk/Ohana/src/opihi/include/shell.h	(revision 15790)
+++ /trunk/Ohana/src/opihi/include/shell.h	(revision 15791)
@@ -152,5 +152,7 @@
 void          gprintSetBuffer 		PROTO((gpDest dest));
 IOBuffer     *gprintGetBuffer 		PROTO((gpDest dest));
-void          gprintSetFile   		PROTO((gpDest dest, char *filename));
+void          gprintSetFileAllThreads   PROTO((gpDest dest, char *filename));
+void          gprintSetFileThisThread   PROTO((gpDest dest, char *filename));
+void          gprintSetFile   		PROTO((gpStream *stream, gpDest dest, char *filename));
 FILE         *gprintGetFile   		PROTO((gpDest dest));
 char         *gprintGetName   		PROTO((gpDest dest));
Index: /trunk/Ohana/src/opihi/lib.shell/gprint.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/gprint.c	(revision 15790)
+++ /trunk/Ohana/src/opihi/lib.shell/gprint.c	(revision 15791)
@@ -126,8 +126,25 @@
 }
 
-void gprintSetFile (gpDest dest, char *filename) {
-
-  gpStream *stream;
-  stream = gprintGetStream (dest);
+void gprintSetFileAllThreads (gpDest dest, char *filename) {
+
+  int i;
+
+  for (i = 0; i < Nstreams; i++) {
+    if (streams[i].dest != dest) continue;
+    gprintSetFile (&streams[i], dest, filename);
+  }
+  return;
+}
+
+void gprintSetFileThisThread (gpDest dest, char *filename) {
+
+  gpStream *stream;
+  stream = gprintGetStream (dest);
+
+  gprintSetFile (stream, dest, filename);
+  return;
+}
+
+void gprintSetFile (gpStream *stream, gpDest dest, char *filename) {
 
   /* if we have an open buffer, free it and null it */
@@ -146,31 +163,33 @@
   }
 skip_close:
-  
-  free (stream[0].name);
+
+  // if NULL, reuse exising stream name
+  if (filename != NULL) {
+    free (stream[0].name);
+    stream[0].name = strcreate (filename);
+  }
 
   /* we allow the user to set stdout to ERR and stderr to LOG if they want */
-  if (!strcmp (filename, "stdout")) {
+  if (!strcmp (stream[0].name, "stdout")) {
     stream[0].file = stdout;
-    stream[0].name = strcreate (filename);
     goto skip_open;
   }
-  if (!strcmp (filename, "stderr")) {
+  if (!strcmp (stream[0].name, "stderr")) {
     stream[0].file = stderr;
-    stream[0].name = strcreate (filename);
     goto skip_open;
   }
   
   /* open the file */
-  stream[0].file = fopen (filename, "a");
+  stream[0].file = fopen (stream[0].name, "a");
   if (stream[0].file == NULL) {
-    fprintf (stderr, "cannot open file %s\n", filename);
+    fprintf (stderr, "cannot open file %s\n", stream[0].name);
+    free (stream[0].name);
     stream[0].file = (dest == GP_LOG) ? stdout : stderr;
     stream[0].name = (dest == GP_LOG) ? strcreate ("stdout") : strcreate("stderr");
-  } else {
-    stream[0].name = strcreate (filename);
   }
 
 skip_open:
   stream[0].mode = GP_FILE;
+  return;
 }
 
Index: /trunk/Ohana/src/opihi/pantasks/ListenClients.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/ListenClients.c	(revision 15790)
+++ /trunk/Ohana/src/opihi/pantasks/ListenClients.c	(revision 15791)
@@ -72,10 +72,10 @@
   // define server output log files
   if (VarConfig ("PANTASKS_SERVER_STDOUT", "%s", log_stdout) != NULL) {
-    gprintSetFile (GP_LOG, log_stdout);
+    gprintSetFileThisThread (GP_LOG, log_stdout);
   } else {
     strcpy (log_stdout, "stdout");
   }
   if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
-      gprintSetFile (GP_ERR, log_stderr);
+    gprintSetFileThisThread (GP_ERR, log_stderr);
   } else {
     strcpy (log_stderr, "stderr");
@@ -151,13 +151,21 @@
 	// return the stderr messages first
 	outbuffer = gprintGetBuffer (GP_ERR);
-	SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
+	if (outbuffer) {
+	  SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
+	} else {
+	  SendMessageFixed (clients[i], 0, "");
+	}	  
 
 	// return the stdout messages first
 	outbuffer = gprintGetBuffer (GP_LOG);
-	SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
+	if (outbuffer) {
+	  SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
+	} else {
+	  SendMessageFixed (clients[i], 0, "");
+	}	  
 	
-	/* clear and reset the output buffers */
-	gprintSetFile (GP_LOG, log_stdout);
-	gprintSetFile (GP_ERR, log_stderr);
+	/* clear and reset the output buffers to their last output file names */
+	gprintSetFileAllThreads (GP_LOG, NULL);
+	gprintSetFileAllThreads (GP_ERR, NULL);
       }
       free (line);
Index: /trunk/Ohana/src/opihi/pantasks/controller_threads.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller_threads.c	(revision 15790)
+++ /trunk/Ohana/src/opihi/pantasks/controller_threads.c	(revision 15791)
@@ -19,8 +19,8 @@
   // define server output log files
   if (VarConfig ("PANTASKS_SERVER_STDOUT", "%s", log_stdout) != NULL) {
-      gprintSetFile (GP_LOG, log_stdout);
+      gprintSetFileThisThread (GP_LOG, log_stdout);
   }
   if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
-      gprintSetFile (GP_ERR, log_stderr);
+      gprintSetFileThisThread (GP_ERR, log_stderr);
   }
 
Index: /trunk/Ohana/src/opihi/pantasks/input_threads.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/input_threads.c	(revision 15790)
+++ /trunk/Ohana/src/opihi/pantasks/input_threads.c	(revision 15791)
@@ -20,8 +20,8 @@
   // define server output log files
   if (VarConfig ("PANTASKS_SERVER_STDOUT", "%s", log_stdout) != NULL) {
-      gprintSetFile (GP_LOG, log_stdout);
+      gprintSetFileThisThread (GP_LOG, log_stdout);
   }
   if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
-      gprintSetFile (GP_ERR, log_stderr);
+      gprintSetFileThisThread (GP_ERR, log_stderr);
   }
 
Index: /trunk/Ohana/src/opihi/pantasks/job_threads.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/job_threads.c	(revision 15790)
+++ /trunk/Ohana/src/opihi/pantasks/job_threads.c	(revision 15791)
@@ -21,8 +21,8 @@
   // define server output log files
   if (VarConfig ("PANTASKS_SERVER_STDOUT", "%s", log_stdout) != NULL) {
-      gprintSetFile (GP_LOG, log_stdout);
+      gprintSetFileThisThread (GP_LOG, log_stdout);
   }
   if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
-      gprintSetFile (GP_ERR, log_stderr);
+      gprintSetFileThisThread (GP_ERR, log_stderr);
   }
 
Index: /trunk/Ohana/src/opihi/pantasks/pantasks_server.c.in
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/pantasks_server.c.in	(revision 15790)
+++ /trunk/Ohana/src/opihi/pantasks/pantasks_server.c.in	(revision 15791)
@@ -29,8 +29,8 @@
   // define server output log files
   if (VarConfig ("PANTASKS_SERVER_STDOUT", "%s", log_stdout) != NULL) {
-      gprintSetFile (GP_LOG, log_stdout);
+      gprintSetFileThisThread (GP_LOG, log_stdout);
   }
   if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
-      gprintSetFile (GP_ERR, log_stderr);
+      gprintSetFileThisThread (GP_ERR, log_stderr);
   }
 
Index: /trunk/Ohana/src/opihi/pantasks/task_threads.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task_threads.c	(revision 15790)
+++ /trunk/Ohana/src/opihi/pantasks/task_threads.c	(revision 15791)
@@ -21,8 +21,8 @@
   // define server output log files
   if (VarConfig ("PANTASKS_SERVER_STDOUT", "%s", log_stdout) != NULL) {
-      gprintSetFile (GP_LOG, log_stdout);
+      gprintSetFileThisThread (GP_LOG, log_stdout);
   }
   if (VarConfig ("PANTASKS_SERVER_STDERR", "%s", log_stderr) != NULL) {
-      gprintSetFile (GP_ERR, log_stderr);
+      gprintSetFileThisThread (GP_ERR, log_stderr);
   }
 
