Index: src/jvm/clojure/lang/Repl.java
===================================================================
--- src/jvm/clojure/lang/Repl.java	(revision 1053)
+++ src/jvm/clojure/lang/Repl.java	(working copy)
@@ -14,6 +14,7 @@
 
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 
 public class Repl{
 static final Symbol USER = Symbol.create("user");
@@ -58,7 +59,7 @@
 				}
 			catch(Exception e)
 				{
-				e.printStackTrace();
+				e.printStackTrace((PrintWriter)RT.ERR.get());
 				}
 
 		//repl IO support
@@ -94,14 +95,14 @@
 				Throwable c = e;
 				while(c.getCause() != null)
 					c = c.getCause();
-				System.err.println(e instanceof Compiler.CompilerException ? e : c);
+				((PrintWriter)RT.ERR.get()).println(e instanceof Compiler.CompilerException ? e : c);
 				stare.set(e);
 				}
 			}
 		}
 	catch(Exception e)
 		{
-		e.printStackTrace();
+		e.printStackTrace((PrintWriter)RT.ERR.get());
 		}
 	finally
 		{
Index: src/jvm/clojure/lang/Script.java
===================================================================
--- src/jvm/clojure/lang/Script.java	(revision 1053)
+++ src/jvm/clojure/lang/Script.java	(working copy)
@@ -13,6 +13,7 @@
 package clojure.lang;
 
 import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 import java.io.IOException;
 import java.util.List;
 import java.util.Arrays;
@@ -75,7 +76,7 @@
 			}
 		catch(IOException e)
 			{
-			e.printStackTrace();
+			e.printStackTrace((PrintWriter)RT.ERR.get());
 			}
 		}
 }
Index: src/jvm/clojure/lang/Compiler.java
===================================================================
--- src/jvm/clojure/lang/Compiler.java	(revision 1053)
+++ src/jvm/clojure/lang/Compiler.java	(working copy)
@@ -846,7 +846,7 @@
 		this.line = line;
 		if(field == null && RT.booleanCast(RT.WARN_ON_REFLECTION.get()))
 			{
-			System.err.format("Reflection warning, line: %d - reference to field %s can't be resolved.\n", line,
+			((PrintWriter)RT.ERR.get()).format("Reflection warning, line: %d - reference to field %s can't be resolved.\n", line,
 			                  fieldName);
 			}
 	}
@@ -1045,7 +1045,7 @@
 				}
 			catch(Exception e1)
 				{
-				e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+				e1.printStackTrace((PrintWriter)RT.ERR.get());  //To change body of catch statement use File | Settings | File Templates.
 				}
 
 			}
@@ -1102,7 +1102,7 @@
 
 		if(method == null && RT.booleanCast(RT.WARN_ON_REFLECTION.get()))
 			{
-			System.err.format("Reflection warning, line: %d - call to %s can't be resolved.\n", line, methodName);
+			((PrintWriter)RT.ERR.get()).format("Reflection warning, line: %d - call to %s can't be resolved.\n", line, methodName);
 			}
 	}
 
@@ -1237,7 +1237,7 @@
 		method = (java.lang.reflect.Method) (methodidx >= 0 ? methods.get(methodidx) : null);
 		if(method == null && RT.booleanCast(RT.WARN_ON_REFLECTION.get()))
 			{
-			System.err.format("Reflection warning, line: %d - call to %s can't be resolved.\n", line, methodName);
+			((PrintWriter)RT.ERR.get()).format("Reflection warning, line: %d - call to %s can't be resolved.\n", line, methodName);
 			}
 	}
 
@@ -2060,7 +2060,7 @@
 		this.ctor = ctoridx >= 0 ? (Constructor) ctors.get(ctoridx) : null;
 		if(ctor == null && RT.booleanCast(RT.WARN_ON_REFLECTION.get()))
 			{
-			System.err.format("Reflection warning, line: %d - call to %s ctor can't be resolved.\n", line, c.getName());
+			((PrintWriter)RT.ERR.get()).format("Reflection warning, line: %d - call to %s ctor can't be resolved.\n", line, c.getName());
 			}
 	}
 
Index: src/jvm/clojure/lang/RT.java
===================================================================
--- src/jvm/clojure/lang/RT.java	(revision 1053)
+++ src/jvm/clojure/lang/RT.java	(working copy)
@@ -171,6 +171,9 @@
 final static public Var IN =
 		Var.intern(CLOJURE_NS, Symbol.create("*in*"),
 		           new LineNumberingPushbackReader(new InputStreamReader(System.in, UTF8)));
+final static public Var ERR =
+		Var.intern(CLOJURE_NS, Symbol.create("*err*"),
+		           new PrintWriter(new OutputStreamWriter(System.err, UTF8), true));
 final static Keyword TAG_KEY = Keyword.intern(null, "tag");
 final static public Var AGENT = Var.intern(CLOJURE_NS, Symbol.create("*agent*"), null);
 final static public Var MACRO_META = Var.intern(CLOJURE_NS, Symbol.create("*macro-meta*"), null);
@@ -368,7 +371,7 @@
 }
 
 static public void init() throws Exception{
-	System.err.println("No need to call RT.init() anymore");
+	((PrintWriter)RT.ERR.get()).println("No need to call RT.init() anymore");
 }
 
 static void doInit() throws Exception{
