diff --git a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
index 7c17b12..7e5c920 100644
--- a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
+++ b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
@@ -54,9 +54,12 @@
 
             if (pipes.isEmpty())
             {
-                current.setIn(session.in);
-                current.setOut(session.out);
-                current.setErr(session.err);    // XXX: derek.baum@paremus.com
+		if (current.out == null)
+		{
+		    current.setIn(session.in);
+		    current.setOut(session.out);
+		    current.setErr(session.err);
+		}
             }
             else
             {
diff --git a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java
index 3b1b253..ed92238 100644
--- a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java
+++ b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java
@@ -16,19 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-// DWB16: redirect System.err when creating pipe
 package org.apache.felix.gogo.runtime.shell;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.io.PrintStream;
+import java.util.List;
+
 import org.osgi.service.command.Converter;
 
-import java.io.*;
-import java.util.List;
-
 public class Pipe extends Thread
 {
+    static final ThreadLocal<InputStream> tIn = new ThreadLocal<InputStream>();
+    static final ThreadLocal<PrintStream> tOut = new ThreadLocal<PrintStream>();
+    static final ThreadLocal<PrintStream> tErr = new ThreadLocal<PrintStream>();
     InputStream in;
     PrintStream out;
-    PrintStream err;    // derek
+    PrintStream err;
     PipedOutputStream pout;
     Closure closure;
     Exception exception;
@@ -40,6 +46,10 @@
         super("pipe-" + statements);
         this.closure = closure;
         this.statements = statements;
+
+        in = tIn.get();
+        out = tOut.get();
+        err = tErr.get();
     }
 
     public void setIn(InputStream in)
@@ -65,13 +75,15 @@
         next.setIn(new PipedInputStream(pout));
         out = new PrintStream(pout);
         return next;
-
     }
 
     public void run()
     {
-        //closure.session.service.threadIO.setStreams(in, out, System.err);
-        closure.session.service.threadIO.setStreams(in, out, err);    // derek
+        tIn.set(in);
+        tOut.set(out);
+        tErr.set(err);
+        closure.session.service.threadIO.setStreams(in, out, err);
+
         try
         {
             for (List<CharSequence> statement : statements)
@@ -91,6 +103,10 @@
         {
             out.flush();
             closure.session.service.threadIO.close();
+            tIn.set(in);
+            tOut.set(out);
+            tErr.set(err);
+
             try
             {
                 if (in instanceof PipedInputStream)
diff --git a/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java b/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java
index 3e0e27b..df6018f 100644
--- a/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java
+++ b/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java
@@ -85,7 +85,11 @@
         c.addCommand("echo", this);
         c.addCommand("capture", this);
         c.addCommand("grep", this);
+        c.addCommand("echoout", this);
+        c.execute("myecho = { echoout $args }");
         assertEquals("def", c.execute("echo def|grep (d.*)|capture"));
+        assertEquals("def", c.execute("echoout def|grep (d.*)|capture"));
+        assertEquals("def", c.execute("myecho def|grep (d.*)|capture"));
         assertEquals("def", c.execute("echo abc; echo def; echo ghi|grep (d.*)|capture"));
         assertEquals("hello world", c.execute("echo hello world|capture"));
         assertEquals("defghi", c.execute("echo abc; echo def; echo ghi|grep (def|ghi)|capture"));
@@ -241,6 +245,11 @@
         return sb;
     }
 
+    public void echoout(Object args[])
+    {
+        System.out.println(echo(args));
+    }
+
     public void testContext() throws Exception
     {
         Context c = new Context();
