diff --git a/src/lib/fmt/print.go b/src/lib/fmt/print.go
index 97fb146..67d56e1 100644
--- a/src/lib/fmt/print.go
+++ b/src/lib/fmt/print.go
@@ -45,7 +45,7 @@
 	fmt	*Fmt;
 }
 
-func Printer() *pp {
+func newPrinter() *pp {
 	p := new(pp);
 	p.fmt = fmt.New();
 	return p;
@@ -130,7 +130,7 @@
 
 export func Fprintf(w io.Write, format string, a ...) (n int, error *os.Error) {
 	v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
-	p := Printer();
+	p := newPrinter();
 	p.doprintf(format, v);
 	n, error = w.Write(p.buf[0:p.n]);
 	return n, error;
@@ -143,7 +143,7 @@
 
 export func Sprintf(format string, a ...) string {
 	v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
-	p := Printer();
+	p := newPrinter();
 	p.doprintf(format, v);
 	s := string(p.buf)[0 : p.n];
 	return s;
@@ -154,7 +154,7 @@
 
 export func Fprint(w io.Write, a ...) (n int, error *os.Error) {
 	v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
-	p := Printer();
+	p := newPrinter();
 	p.doprint(v, false, false);
 	n, error = w.Write(p.buf[0:p.n]);
 	return n, error;
@@ -167,7 +167,7 @@
 
 export func Sprint(a ...) string {
 	v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
-	p := Printer();
+	p := newPrinter();
 	p.doprint(v, false, false);
 	s := string(p.buf)[0 : p.n];
 	return s;
@@ -179,7 +179,7 @@
 
 export func Fprintln(w io.Write, a ...) (n int, error *os.Error) {
 	v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
-	p := Printer();
+	p := newPrinter();
 	p.doprint(v, true, true);
 	n, error = w.Write(p.buf[0:p.n]);
 	return n, error;
@@ -192,7 +192,7 @@
 
 export func Sprintln(a ...) string {
 	v := reflect.NewValue(a).(reflect.PtrValue).Sub().(reflect.StructValue);
-	p := Printer();
+	p := newPrinter();
 	p.doprint(v, true, true);
 	s := string(p.buf)[0 : p.n];
 	return s;
