new new & make

R=r
OCL=22166
CL=22166
diff --git a/src/lib/bignum.go b/src/lib/bignum.go
index d8f8000..60d3b87 100755
--- a/src/lib/bignum.go
+++ b/src/lib/bignum.go
@@ -166,7 +166,7 @@
 	}
 
 	c := Digit(0);
-	z := new(Natural, n + 1);
+	z := make(Natural, n + 1);
 	i := 0;
 	for i < m {
 		t := c + x[i] + y[i];
@@ -195,7 +195,7 @@
 	}
 
 	c := Digit(0);
-	z := new(Natural, n);
+	z := make(Natural, n);
 	i := 0;
 	for i < m {
 		t := c + x[i] - y[i];
@@ -253,7 +253,7 @@
 	n := len(x);
 	m := len(y);
 
-	z := new(Natural, n + m);
+	z := make(Natural, n + m);
 	for j := 0; j < m; j++ {
 		d := y[j];
 		if d != 0 {
@@ -280,7 +280,7 @@
 
 func Unpack(x Natural) []Digit2 {
 	n := len(x);
-	z := new([]Digit2, n*2 + 1);  // add space for extra digit (used by DivMod)
+	z := make([]Digit2, n*2 + 1);  // add space for extra digit (used by DivMod)
 	for i := 0; i < n; i++ {
 		t := x[i];
 		z[i*2] = Digit2(t & M2);
@@ -296,7 +296,7 @@
 
 func Pack(x []Digit2) Natural {
 	n := (len(x) + 1) / 2;
-	z := new(Natural, n);
+	z := make(Natural, n);
 	if len(x) & 1 == 1 {
 		// handle odd len(x)
 		n--;
@@ -472,7 +472,7 @@
 func (x Natural) Shl(s uint) Natural {
 	n := uint(len(x));
 	m := n + s/W;
-	z := new(Natural, m+1);
+	z := make(Natural, m+1);
 
 	z[m] = Shl(z[m-n : m], x, s%W);
 
@@ -497,7 +497,7 @@
 	if m > n {  // check for underflow
 		m = 0;
 	}
-	z := new(Natural, m);
+	z := make(Natural, m);
 
 	Shr(z, x[n-m : n], s%W);
 
@@ -512,7 +512,7 @@
 		return y.And(x);
 	}
 
-	z := new(Natural, m);
+	z := make(Natural, m);
 	for i := 0; i < m; i++ {
 		z[i] = x[i] & y[i];
 	}
@@ -536,7 +536,7 @@
 		return y.Or(x);
 	}
 
-	z := new(Natural, n);
+	z := make(Natural, n);
 	for i := 0; i < m; i++ {
 		z[i] = x[i] | y[i];
 	}
@@ -553,7 +553,7 @@
 		return y.Xor(x);
 	}
 
-	z := new(Natural, n);
+	z := make(Natural, n);
 	for i := 0; i < m; i++ {
 		z[i] = x[i] ^ y[i];
 	}
@@ -627,10 +627,10 @@
 	// allocate buffer for conversion
 	assert(2 <= base && base <= 16);
 	n := (x.Log2() + 1) / Log2(Digit(base)) + 1;  // +1: round up
-	s := new([]byte, n);
+	s := make([]byte, n);
 
 	// don't destroy x
-	t := new(Natural, len(x));
+	t := make(Natural, len(x));
 	Copy(t, x);
 
 	// convert
@@ -681,7 +681,7 @@
 func MulAdd1(x Natural, d, c Digit) Natural {
 	assert(IsSmall(d-1) && IsSmall(c));
 	n := len(x);
-	z := new(Natural, n + 1);
+	z := make(Natural, n + 1);
 
 	for i := 0; i < n; i++ {
 		t := c + x[i]*d;
diff --git a/src/lib/bufio.go b/src/lib/bufio.go
index 68be143..52b70b7 100644
--- a/src/lib/bufio.go
+++ b/src/lib/bufio.go
@@ -50,8 +50,8 @@
 	if size <= 0 {
 		return nil, BadBufSize
 	}
-	b = new(*BufRead);
-	b.buf = new([]byte, size);
+	b = new(BufRead);
+	b.buf = make([]byte, size);
 	b.rd = rd;
 	return b, nil
 }
@@ -262,7 +262,7 @@
 		}
 
 		// Read bytes out of buffer.
-		buf := new([]byte, b.Buffered());
+		buf := make([]byte, b.Buffered());
 		var n int;
 		n, e = b.Read(buf);
 		if e != nil {
@@ -278,9 +278,9 @@
 
 		// Grow list if needed.
 		if full == nil {
-			full = new([][]byte, 16);
+			full = make([][]byte, 16);
 		} else if nfull >= len(full) {
-			newfull := new([][]byte, len(full)*2);
+			newfull := make([][]byte, len(full)*2);
 			// BUG slice assignment
 			for i := 0; i < len(full); i++ {
 				newfull[i] = full[i];
@@ -301,7 +301,7 @@
 	n += len(frag);
 
 	// Copy full pieces and fragment in.
-	buf := new([]byte, n);
+	buf := make([]byte, n);
 	n = 0;
 	for i := 0; i < nfull; i++ {
 		CopySlice(buf[n:n+len(full[i])], full[i]);
@@ -339,8 +339,8 @@
 	if size <= 0 {
 		return nil, BadBufSize
 	}
-	b = new(*BufWrite);
-	b.buf = new([]byte, size);
+	b = new(BufWrite);
+	b.buf = make([]byte, size);
 	b.wr = wr;
 	return b, nil
 }
diff --git a/src/lib/bufio_test.go b/src/lib/bufio_test.go
index fecc778..272b8b6 100644
--- a/src/lib/bufio_test.go
+++ b/src/lib/bufio_test.go
@@ -14,7 +14,7 @@
 )
 
 func StringToBytes(s string) []byte {
-	b := new([]byte, len(s));
+	b := make([]byte, len(s));
 	for i := 0; i < len(s); i++ {
 		b[i] = s[i]
 	}
@@ -34,7 +34,7 @@
 }
 
 func NewByteReader(p []byte) io.Read {
-	b := new(*ByteReader);
+	b := new(ByteReader);
 	b.p = p;
 	return b
 }
@@ -56,7 +56,7 @@
 }
 
 func NewHalfByteReader(p []byte) io.Read {
-	b := new(*HalfByteReader);
+	b := new(HalfByteReader);
 	b.p = p;
 	return b
 }
@@ -80,7 +80,7 @@
 }
 
 func NewRot13Reader(r io.Read) *Rot13Reader {
-	r13 := new(*Rot13Reader);
+	r13 := new(Rot13Reader);
 	r13.r = r;
 	return r13
 }
@@ -238,14 +238,14 @@
 }
 
 func NewByteWriter() WriteBuffer {
-	return new(*ByteWriter)
+	return new(ByteWriter)
 }
 
 func (w *ByteWriter) Write(p []byte) (int, *os.Error) {
 	if w.p == nil {
-		w.p = new([]byte, len(p)+100)
+		w.p = make([]byte, len(p)+100)
 	} else if w.n + len(p) >= len(w.p) {
-		newp := new([]byte, len(w.p)*2 + len(p));
+		newp := make([]byte, len(w.p)*2 + len(p));
 		Copy(newp[0:w.n], w.p[0:w.n]);
 		w.p = newp
 	}
@@ -266,7 +266,7 @@
 }
 
 func NewHalfByteWriter() WriteBuffer {
-	w := new(*HalfByteWriter);
+	w := new(HalfByteWriter);
 	w.bw = NewByteWriter();
 	return w
 }
diff --git a/src/lib/container/array/array.go b/src/lib/container/array/array.go
index e87f426..241e8d9 100644
--- a/src/lib/container/array/array.go
+++ b/src/lib/container/array/array.go
@@ -22,7 +22,7 @@
 		if initial_len > n {
 			n = initial_len
 		}
-		a = new([]Element, n);
+		a = make([]Element, n);
 	} else {
 		// nil out entries
 		for j := len(a) - 1; j >= 0; j-- {
@@ -36,7 +36,7 @@
 
 
 export func New(len int) *Array {
-	return new(*Array).Init(len)
+	return new(Array).Init(len)
 }
 
 
@@ -66,7 +66,7 @@
 
 	// grow array by doubling its capacity
 	if n == cap(a) {
-		b := new([]Element, 2*n);
+		b := make([]Element, 2*n);
 		for j := n-1; j >= 0; j-- {
 			b[j] = a[j];
 		}
diff --git a/src/lib/container/array/intarray.go b/src/lib/container/array/intarray.go
index a02e568..eb7e839 100644
--- a/src/lib/container/array/intarray.go
+++ b/src/lib/container/array/intarray.go
@@ -19,7 +19,7 @@
 
 
 export func NewIntArray(len int) *IntArray {
-	return new(*IntArray).Init(len)
+	return new(IntArray).Init(len)
 }
 
 
diff --git a/src/lib/flag.go b/src/lib/flag.go
index bc962f6..6db76bb 100644
--- a/src/lib/flag.go
+++ b/src/lib/flag.go
@@ -318,10 +318,10 @@
 }
 
 func New() *Flags {
-	f := new(*Flags);
+	f := new(Flags);
 	f.first_arg = 1;	// 0 is the program name, 1 is first arg
-	f.actual = new(map[string] *Flag);
-	f.formal = new(map[string] *Flag);
+	f.actual = make(map[string] *Flag);
+	f.formal = make(map[string] *Flag);
 	return f;
 }
 
@@ -361,7 +361,7 @@
 }
 
 func Add(name string, value Value, usage string) *Flag {
-	f := new(*Flag);
+	f := new(Flag);
 	f.name = name;
 	f.usage = usage;
 	f.value = value;
diff --git a/src/lib/fmt/format.go b/src/lib/fmt/format.go
index 42d750d..9b0a126 100644
--- a/src/lib/fmt/format.go
+++ b/src/lib/fmt/format.go
@@ -71,7 +71,7 @@
 }
 
 export func New() *Fmt {
-	f := new(*Fmt);
+	f := new(Fmt);
 	f.init();
 	return f;
 }
@@ -135,7 +135,7 @@
 			if w > NByte {
 				w = NByte;
 			}
-			buf := new([]byte, w);
+			buf := make([]byte, w);
 			for i := 0; i < w; i++ {
 				buf[i] = padchar;
 			}
diff --git a/src/lib/fmt/print.go b/src/lib/fmt/print.go
index 6546e13..6f0b0cf 100644
--- a/src/lib/fmt/print.go
+++ b/src/lib/fmt/print.go
@@ -46,7 +46,7 @@
 }
 
 func Printer() *P {
-	p := new(*P);
+	p := new(P);
 	p.fmt = fmt.New();
 	return p;
 }
@@ -81,7 +81,7 @@
 		if newn < n {
 			newn = n + AllocSize
 		}
-		b := new([]byte, newn);
+		b := make([]byte, newn);
 		for i := 0; i < p.n; i++ {
 			b[i] = p.buf[i];
 		}
diff --git a/src/lib/hash/adler32.go b/src/lib/hash/adler32.go
index f1aa732..4d32fd8 100644
--- a/src/lib/hash/adler32.go
+++ b/src/lib/hash/adler32.go
@@ -52,7 +52,7 @@
 }
 
 func (d *Digest) Sum() []byte {
-	p := new([]byte, 4);
+	p := make([]byte, 4);
 	s := d.Sum32();
 	p[0] = byte(s>>24);
 	p[1] = byte(s>>16);
diff --git a/src/lib/hash/crc32.go b/src/lib/hash/crc32.go
index 9f6aa7d..dca7579 100644
--- a/src/lib/hash/crc32.go
+++ b/src/lib/hash/crc32.go
@@ -29,7 +29,7 @@
 export type Table []uint32
 
 export func MakeTable(poly uint32) Table {
-	t := new(Table, 256);
+	t := make(Table, 256);
 	for i := 0; i < 256; i++ {
 		crc := uint32(i);
 		for j := 0; j < 8; j++ {
@@ -74,7 +74,7 @@
 }
 
 func (d *Digest) Sum() []byte {
-	p := new([]byte, 4);
+	p := make([]byte, 4);
 	s := d.Sum32();
 	p[0] = byte(s>>24);
 	p[1] = byte(s>>16);
diff --git a/src/lib/hash/md5.go b/src/lib/hash/md5.go
index 773ff4a..37dd2a4 100644
--- a/src/lib/hash/md5.go
+++ b/src/lib/hash/md5.go
@@ -27,7 +27,7 @@
 }
 
 export func NewDigest() *Digest {
-	d := new(*Digest);
+	d := new(Digest);
 	d.s[0] = A;
 	d.s[1] = B;
 	d.s[2] = C;
@@ -88,7 +88,7 @@
 		panicln("oops");
 	}
 
-	p := new([]byte, 16);
+	p := make([]byte, 16);
 	j := 0;
 	for i := 0; i < 4; i++ {
 		s := d.s[i];
diff --git a/src/lib/hash/sha1.go b/src/lib/hash/sha1.go
index 9733347..da50e46 100644
--- a/src/lib/hash/sha1.go
+++ b/src/lib/hash/sha1.go
@@ -28,7 +28,7 @@
 }
 
 export func NewDigest() *Digest {
-	d := new(*Digest);
+	d := new(Digest);
 	d.h[0] = H0;
 	d.h[1] = H1;
 	d.h[2] = H2;
@@ -90,7 +90,7 @@
 		panicln("oops");
 	}
 
-	p := new([]byte, 20);
+	p := make([]byte, 20);
 	j := 0;
 	for i := 0; i < 5; i++ {
 		s := d.h[i];
diff --git a/src/lib/http/conn.go b/src/lib/http/conn.go
index ec33d9e..15c0707 100644
--- a/src/lib/http/conn.go
+++ b/src/lib/http/conn.go
@@ -22,7 +22,7 @@
 
 // Create new connection from rwc.
 export func NewConn(rwc io.ReadWriteClose) (c *Conn, err *os.Error) {
-	c = new(*Conn);
+	c = new(Conn);
 	c.rwc = rwc;
 	if c.br, err = bufio.NewBufRead(rwc); err != nil {
 		return nil, err
diff --git a/src/lib/http/request.go b/src/lib/http/request.go
index c997ee8..3d000ab 100644
--- a/src/lib/http/request.go
+++ b/src/lib/http/request.go
@@ -181,7 +181,7 @@
 
 // Read and parse a request from b.
 export func ReadRequest(b *bufio.BufRead) (req *Request, err *os.Error) {
-	req = new(*Request);
+	req = new(Request);
 
 	// First line: GET /index.html HTTP/1.0
 	var s string;
@@ -205,7 +205,7 @@
 
 	// Subsequent lines: Key: value.
 	nheader := 0;
-	req.header = new(map[string] string);
+	req.header = make(map[string] string);
 	for {
 		var key, value string;
 		if key, value, err = ReadKeyValue(b); err != nil {
diff --git a/src/lib/http/url.go b/src/lib/http/url.go
index b985c97..f96f947 100644
--- a/src/lib/http/url.go
+++ b/src/lib/http/url.go
@@ -60,7 +60,7 @@
 		return s, nil
 	}
 
-	t := new([]byte, len(s)-2*n);
+	t := make([]byte, len(s)-2*n);
 	j := 0;
 	for i := 0; i < len(s); {
 		if s[i] == '%' {
@@ -131,7 +131,7 @@
 	if rawurl == "" {
 		return nil, BadURL
 	}
-	url = new(*URL);
+	url = new(URL);
 	url.raw = rawurl;
 
 	// Split off possible leading "http:", "mailto:", etc.
diff --git a/src/lib/io/bytebuffer.go b/src/lib/io/bytebuffer.go
index f85679c..59547af 100644
--- a/src/lib/io/bytebuffer.go
+++ b/src/lib/io/bytebuffer.go
@@ -40,12 +40,12 @@
 	plen := len(p);
 	if len(b.buf) == 0 {
 		b.cap = plen + 1024;
-		b.buf = new([]byte, b.cap);
+		b.buf = make([]byte, b.cap);
 		b.len = 0;
 	}
 	if b.len + len(p) > b.cap {
 		b.cap = 2*(b.cap + plen);
-		nb := new([]byte, b.cap);
+		nb := make([]byte, b.cap);
 		bytecopy(nb, 0, b.buf, 0, b.len);
 		b.buf = nb;
 	}
@@ -81,7 +81,7 @@
 
 
 export func NewByteBufferFromArray(buf []byte) *ByteBuffer {
-	b := new(*ByteBuffer);
+	b := new(ByteBuffer);
 	b.buf = buf;
 	b.off = 0;
 	b.len = len(buf);
diff --git a/src/lib/io/io.go b/src/lib/io/io.go
index af6a9fe..0a512e9 100644
--- a/src/lib/io/io.go
+++ b/src/lib/io/io.go
@@ -31,7 +31,7 @@
 }
 
 export func WriteString(w Write, s string) (n int, err *os.Error) {
-	b := new([]byte, len(s)+1);
+	b := make([]byte, len(s)+1);
 	if !syscall.StringToBytes(b, s) {
 		return -1, os.EINVAL
 	}
@@ -80,7 +80,7 @@
 // Copies n bytes (or until EOF is reached) from src to dst.
 // Returns the number of bytes copied and the error, if any.
 export func Copyn(src Read, dst Write, n int64) (written int64, err *os.Error) {
-	buf := new([]byte, 32*1024);
+	buf := make([]byte, 32*1024);
 	for written < n {
 		l := len(buf);
 		if d := n - written; d < int64(l) {
@@ -116,7 +116,7 @@
 // Copies from src to dst until EOF is reached.
 // Returns the number of bytes copied and the error, if any.
 export func Copy(src Read, dst Write) (written int64, err *os.Error) {
-	buf := new([]byte, 32*1024);
+	buf := make([]byte, 32*1024);
 	for {
 		nr, er := src.Read(buf);
 		if nr > 0 {
@@ -148,7 +148,7 @@
 // Could fill with syscall.StringToBytes but it adds an unnecessary \000
 // so the length would be wrong.
 export func StringBytes(s string) []byte {
-	b := new([]byte, len(s));
+	b := make([]byte, len(s));
 	for i := 0; i < len(s); i++ {
 		b[i] = s[i];
 	}
diff --git a/src/lib/json/generic.go b/src/lib/json/generic.go
index 4f42684..b62f8d9 100644
--- a/src/lib/json/generic.go
+++ b/src/lib/json/generic.go
@@ -269,11 +269,11 @@
 }
 
 func (b *JsonBuilder) Map() {
-	b.Put(&Map{new(map[string]Json), Null{}})
+	b.Put(&Map{make(map[string]Json), Null{}})
 }
 
 func (b *JsonBuilder) Elem(i int) Builder {
-	bb := new(*JsonBuilder);
+	bb := new(JsonBuilder);
 	bb.a = b.Get().(*Array).a;
 	bb.i = i;
 	for i >= bb.a.Len() {
@@ -283,7 +283,7 @@
 }
 
 func (b *JsonBuilder) Key(k string) Builder {
-	bb := new(*JsonBuilder);
+	bb := new(JsonBuilder);
 	bb.m = b.Get().(*Map).m;
 	bb.k = k;
 	bb.m[k] = null;
@@ -293,7 +293,7 @@
 export func StringToJson(s string) (json Json, ok bool, errtok string) {
 	var errindx int;
 	var j Json;
-	b := new(*JsonBuilder);
+	b := new(JsonBuilder);
 	b.ptr = &j;
 	ok, errindx, errtok = Parse(s, b);
 	if !ok {
diff --git a/src/lib/json/generic_test.go b/src/lib/json/generic_test.go
index 0851c1c..41685b4 100644
--- a/src/lib/json/generic_test.go
+++ b/src/lib/json/generic_test.go
@@ -40,7 +40,7 @@
 }
 
 export func TestJsonMap(t *testing.T) {
-	values := new(map[string]Json);
+	values := make(map[string]Json);
 	mapstr := "{";
 	for i := 0; i < len(jsontests); i++ {
 		val, ok, errtok := StringToJson(jsontests[i]);
diff --git a/src/lib/json/parse.go b/src/lib/json/parse.go
index f38bb59..cec2a29 100644
--- a/src/lib/json/parse.go
+++ b/src/lib/json/parse.go
@@ -48,7 +48,7 @@
 	if len(s) < 2 || s[0] != '"' || s[len(s)-1] != '"' {
 		return
 	}
-	b := new([]byte, len(s));
+	b := make([]byte, len(s));
 	w := 0;
 	for r := 1; r < len(s)-1; {
 		switch {
@@ -118,9 +118,9 @@
 }
 
 export func Quote(s string) string {
-	chr := new([]byte, utf8.UTFMax);
+	chr := make([]byte, utf8.UTFMax);
 	chr0 := chr[0:1];
-	b := new(*io.ByteBuffer);
+	b := new(io.ByteBuffer);
 	chr[0] = '"';
 	b.Write(chr0);
 	for i := 0; i < len(s); i++ {
@@ -387,7 +387,7 @@
 }
 
 export func Parse(s string, build Builder) (ok bool, errindx int, errtok string) {
-	lex := new(*Lexer);
+	lex := new(Lexer);
 	lex.s = s;
 	lex.Next();
 	if ParseValue(lex, build) {
diff --git a/src/lib/net/dialgoogle_test.go b/src/lib/net/dialgoogle_test.go
index 684439d..86ef5b9 100644
--- a/src/lib/net/dialgoogle_test.go
+++ b/src/lib/net/dialgoogle_test.go
@@ -22,7 +22,7 @@
 	req := io.StringBytes("GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n");
 	n, errno := fd.Write(req);
 
-	buf := new([]byte, 1000);
+	buf := make([]byte, 1000);
 	n, errno = io.Readn(fd, buf);
 
 	if n < 1000 {
diff --git a/src/lib/net/dnsclient.go b/src/lib/net/dnsclient.go
index eff46f8..f9ca002 100644
--- a/src/lib/net/dnsclient.go
+++ b/src/lib/net/dnsclient.go
@@ -44,7 +44,7 @@
 	if len(name) >= 256 {
 		return nil, DNS_NameTooLong
 	}
-	out := new(*DNS_Msg);
+	out := new(DNS_Msg);
 	out.id = 0x1234;
 	out.question = []DNS_Question{
 		DNS_Question{ name, DNS_TypeA, DNS_ClassINET }
@@ -64,14 +64,14 @@
 		// TODO(rsc): set up timeout or call ReadTimeout.
 		// right now net does not support that.
 
-		buf := new([]byte, 2000);	// More than enough.
+		buf := make([]byte, 2000);	// More than enough.
 		n, err = c.Read(buf);
 		if err != nil {
 			// TODO(rsc): only continue if timed out
 			continue
 		}
 		buf = buf[0:n];
-		in := new(*DNS_Msg);
+		in := new(DNS_Msg);
 		if !in.Unpack(buf) || in.id != out.id {
 			continue
 		}
@@ -85,7 +85,7 @@
 // On return, if err == nil, addrs != nil.
 // TODO(rsc): Maybe return [][]byte (==[]IPAddr) instead?
 func Answer(name string, dns *DNS_Msg) (addrs []string, err *os.Error) {
-	addrs = new([]string, 0, len(dns.answer));
+	addrs = make([]string, 0, len(dns.answer));
 
 	if dns.rcode == DNS_RcodeNameError && dns.authoritative {
 		return nil, DNS_NameNotFound	// authoritative "no such host"
diff --git a/src/lib/net/dnsconfig.go b/src/lib/net/dnsconfig.go
index 5c2b458..04feddb 100644
--- a/src/lib/net/dnsconfig.go
+++ b/src/lib/net/dnsconfig.go
@@ -31,9 +31,9 @@
 	if file == nil {
 		return nil
 	}
-	conf := new(*DNS_Config);
-	conf.servers = new([]string, 3)[0:0];		// small, but the standard limit
-	conf.search = new([]string, 0);
+	conf := new(DNS_Config);
+	conf.servers = make([]string, 3)[0:0];		// small, but the standard limit
+	conf.search = make([]string, 0);
 	conf.ndots = 1;
 	conf.timeout = 1;
 	conf.attempts = 1;
@@ -62,14 +62,14 @@
 
 		case "domain":	// set search path to just this domain
 			if len(f) > 1 {
-				conf.search = new([]string, 1);
+				conf.search = make([]string, 1);
 				conf.search[0] = f[1];
 			} else {
-				conf.search = new([]string, 0)
+				conf.search = make([]string, 0)
 			}
 
 		case "search":	// set search path to given servers
-			conf.search = new([]string, len(f) - 1);
+			conf.search = make([]string, len(f) - 1);
 			for i := 0; i < len(conf.search); i++ {
 				conf.search[i] = f[i+1];
 			}
diff --git a/src/lib/net/dnsmsg.go b/src/lib/net/dnsmsg.go
index 1c85c93..76cdd90 100644
--- a/src/lib/net/dnsmsg.go
+++ b/src/lib/net/dnsmsg.go
@@ -198,18 +198,18 @@
 
 // Map of constructors for each RR wire type.
 var rr_mk = map[int]*()DNS_RR {
-	DNS_TypeCNAME: func() DNS_RR { return new(*DNS_RR_CNAME) },
-	DNS_TypeHINFO: func() DNS_RR { return new(*DNS_RR_HINFO) },
-	DNS_TypeMB: func() DNS_RR { return new(*DNS_RR_MB) },
-	DNS_TypeMG: func() DNS_RR { return new(*DNS_RR_MG) },
-	DNS_TypeMINFO: func() DNS_RR { return new(*DNS_RR_MINFO) },
-	DNS_TypeMR: func() DNS_RR { return new(*DNS_RR_MR) },
-	DNS_TypeMX: func() DNS_RR { return new(*DNS_RR_MX) },
-	DNS_TypeNS: func() DNS_RR { return new(*DNS_RR_NS) },
-	DNS_TypePTR: func() DNS_RR { return new(*DNS_RR_PTR) },
-	DNS_TypeSOA: func() DNS_RR { return new(*DNS_RR_SOA) },
-	DNS_TypeTXT: func() DNS_RR { return new(*DNS_RR_TXT) },
-	DNS_TypeA: func() DNS_RR { return new(*DNS_RR_A) },
+	DNS_TypeCNAME: func() DNS_RR { return new(DNS_RR_CNAME) },
+	DNS_TypeHINFO: func() DNS_RR { return new(DNS_RR_HINFO) },
+	DNS_TypeMB: func() DNS_RR { return new(DNS_RR_MB) },
+	DNS_TypeMG: func() DNS_RR { return new(DNS_RR_MG) },
+	DNS_TypeMINFO: func() DNS_RR { return new(DNS_RR_MINFO) },
+	DNS_TypeMR: func() DNS_RR { return new(DNS_RR_MR) },
+	DNS_TypeMX: func() DNS_RR { return new(DNS_RR_MX) },
+	DNS_TypeNS: func() DNS_RR { return new(DNS_RR_NS) },
+	DNS_TypePTR: func() DNS_RR { return new(DNS_RR_PTR) },
+	DNS_TypeSOA: func() DNS_RR { return new(DNS_RR_SOA) },
+	DNS_TypeTXT: func() DNS_RR { return new(DNS_RR_TXT) },
+	DNS_TypeA: func() DNS_RR { return new(DNS_RR_A) },
 }
 
 // Pack a domain name s into msg[off:].
@@ -424,7 +424,7 @@
 				}
 				n := int(msg[off]);
 				off++;
-				b := new([]byte, n);
+				b := make([]byte, n);
 				for i := 0; i < n; i++ {
 					b[i] = msg[off+i];
 				}
@@ -582,7 +582,7 @@
 	// Could work harder to calculate message size,
 	// but this is far more than we need and not
 	// big enough to hurt the allocator.
-	msg = new([]byte, 2000);
+	msg = make([]byte, 2000);
 
 	// Pack it in: header and then the pieces.
 	off := 0;
@@ -623,10 +623,10 @@
 	dns.rcode = int(dh.bits & 0xF);
 
 	// Arrays.
-	dns.question = new([]DNS_Question, dh.qdcount);
-	dns.answer = new([]DNS_RR, dh.ancount);
-	dns.ns = new([]DNS_RR, dh.nscount);
-	dns.extra = new([]DNS_RR, dh.arcount);
+	dns.question = make([]DNS_Question, dh.qdcount);
+	dns.answer = make([]DNS_RR, dh.ancount);
+	dns.ns = make([]DNS_RR, dh.nscount);
+	dns.extra = make([]DNS_RR, dh.arcount);
 
 	for i := 0; i < len(dns.question); i++ {
 		off, ok = UnpackStruct(&dns.question[i], msg, off);
diff --git a/src/lib/net/fd.go b/src/lib/net/fd.go
index a9c90c8..e155abd 100644
--- a/src/lib/net/fd.go
+++ b/src/lib/net/fd.go
@@ -78,9 +78,9 @@
 func (s *PollServer) Run();
 
 func NewPollServer() (s *PollServer, err *os.Error) {
-	s = new(*PollServer);
-	s.cr = new(chan *FD, 1);
-	s.cw = new(chan *FD, 1);
+	s = new(PollServer);
+	s.cr = make(chan *FD, 1);
+	s.cw = make(chan *FD, 1);
 	if s.pr, s.pw, err = os.Pipe(); err != nil {
 		return nil, err
 	}
@@ -100,7 +100,7 @@
 		s.poll.Close();
 		goto Error
 	}
-	s.pending = new(map[int64] *FD);
+	s.pending = make(map[int64] *FD);
 	go s.Run();
 	return s, nil
 }
@@ -214,11 +214,11 @@
 	if err = SetNonblock(fd); err != nil {
 		return nil, err
 	}
-	f = new(*FD);
+	f = new(FD);
 	f.fd = fd;
 	f.osfd = os.NewFD(fd);
-	f.cr = new(chan *FD, 1);
-	f.cw = new(chan *FD, 1);
+	f.cr = make(chan *FD, 1);
+	f.cw = make(chan *FD, 1);
 	return f, nil
 }
 
diff --git a/src/lib/net/fd_darwin.go b/src/lib/net/fd_darwin.go
index 5a21be5..a92ad78 100644
--- a/src/lib/net/fd_darwin.go
+++ b/src/lib/net/fd_darwin.go
@@ -19,7 +19,7 @@
 }
 
 export func NewPollster() (p *Pollster, err *os.Error) {
-	p = new(*Pollster);
+	p = new(Pollster);
 	var e int64;
 	if p.kq, e = syscall.kqueue(); e != 0 {
 		return nil, os.ErrnoToError(e)
diff --git a/src/lib/net/fd_linux.go b/src/lib/net/fd_linux.go
index e459ddd..77c2747 100644
--- a/src/lib/net/fd_linux.go
+++ b/src/lib/net/fd_linux.go
@@ -25,7 +25,7 @@
 }
 
 export func NewPollster() (p *Pollster, err *os.Error) {
-	p = new(*Pollster);
+	p = new(Pollster);
 	var e int64;
 
 	// The arg to epoll_create is a hint to the kernel
@@ -34,7 +34,7 @@
 	if p.epfd, e = syscall.epoll_create(16); e != 0 {
 		return nil, os.ErrnoToError(e)
 	}
-	p.events = new(map[int64] uint32);
+	p.events = make(map[int64] uint32);
 	return p, nil
 }
 
diff --git a/src/lib/net/ip.go b/src/lib/net/ip.go
index 883a1c6..5ab0c50 100644
--- a/src/lib/net/ip.go
+++ b/src/lib/net/ip.go
@@ -23,7 +23,7 @@
 
 // Make the 4 bytes into an IPv4 address (in IPv6 form)
 func MakeIPv4(a, b, c, d byte) []byte {
-	p := new([]byte, IPv6len);
+	p := make([]byte, IPv6len);
 	for i := 0; i < 10; i++ {
 		p[i] = 0
 	}
@@ -44,11 +44,11 @@
 	IPv4allsys = MakeIPv4(0xe0, 0x00, 0x00, 0x01);
 	IPv4allrouter = MakeIPv4(0xe0, 0x00, 0x00, 0x02);
 	IPv4prefix = MakeIPv4(0, 0, 0, 0);
-	IPallbits = new([]byte, IPv6len);
+	IPallbits = make([]byte, IPv6len);
 	for i := 0; i < IPv6len; i++ {
 		IPallbits[i] = 0xff
 	}
-	IPnoaddr = new([]byte, IPv6len);	// zeroed
+	IPnoaddr = make([]byte, IPv6len);	// zeroed
 }
 
 // Is p all zeros?
@@ -115,7 +115,7 @@
 	if n != len(mask) {
 		return nil
 	}
-	out := new([]byte, n);
+	out := make([]byte, n);
 	for i := 0; i < n; i++ {
 		out[i] = ip[i] & mask[i];
 	}
@@ -280,7 +280,7 @@
 //	* The last 32 bits can be in IPv4 form.
 // Thus, ::ffff:1.2.3.4 is the IPv4 address 1.2.3.4.
 func ParseIPv6(s string) []byte {
-	p := new([]byte, 16);
+	p := make([]byte, 16);
 	ellipsis := -1;	// position of ellipsis in p
 	i := 0;	// index in string s
 
diff --git a/src/lib/net/net.go b/src/lib/net/net.go
index cdf606a..915a354 100644
--- a/src/lib/net/net.go
+++ b/src/lib/net/net.go
@@ -370,7 +370,7 @@
 }
 
 func NewConnTCP(fd *FD, raddr string) *ConnTCP {
-	c := new(*ConnTCP);
+	c := new(ConnTCP);
 	c.fd = fd;
 	c.raddr = raddr;
 	c.SetNoDelay(true);
@@ -398,7 +398,7 @@
 }
 
 func NewConnUDP(fd *FD, raddr string) *ConnUDP {
-	c := new(*ConnUDP);
+	c := new(ConnUDP);
 	c.fd = fd;
 	c.raddr = raddr;
 	return c
@@ -497,7 +497,7 @@
 		syscall.close(fd.fd);
 		return nil, os.ErrnoToError(e1)
 	}
-	l = new(*ListenerTCP);
+	l = new(ListenerTCP);
 	l.fd = fd;
 	return l, nil
 }
diff --git a/src/lib/net/net_darwin.go b/src/lib/net/net_darwin.go
index 9d143d3..2ad0043 100644
--- a/src/lib/net/net_darwin.go
+++ b/src/lib/net/net_darwin.go
@@ -16,7 +16,7 @@
 	if p == nil || port < 0 || port > 0xFFFF {
 		return nil, os.EINVAL
 	}
-	sa := new(*syscall.SockaddrInet4);
+	sa := new(syscall.SockaddrInet4);
 	sa.len = syscall.SizeofSockaddrInet4;
 	sa.family = syscall.AF_INET;
 	sa.port[0] = byte(port>>8);
@@ -32,7 +32,7 @@
 	if p == nil || port < 0 || port > 0xFFFF {
 		return nil, os.EINVAL
 	}
-	sa := new(*syscall.SockaddrInet6);
+	sa := new(syscall.SockaddrInet6);
 	sa.len = syscall.SizeofSockaddrInet6;
 	sa.family = syscall.AF_INET6;
 	sa.port[0] = byte(port>>8);
diff --git a/src/lib/net/net_linux.go b/src/lib/net/net_linux.go
index 028e6e2..19ae0b6 100644
--- a/src/lib/net/net_linux.go
+++ b/src/lib/net/net_linux.go
@@ -16,7 +16,7 @@
 	if p == nil || port < 0 || port > 0xFFFF {
 		return nil, os.EINVAL
 	}
-	sa := new(*syscall.SockaddrInet4);
+	sa := new(syscall.SockaddrInet4);
 	sa.family = syscall.AF_INET;
 	sa.port[0] = byte(port>>8);
 	sa.port[1] = byte(port);
@@ -41,7 +41,7 @@
 		p = IPv6zero;
 	}
 
-	sa := new(*syscall.SockaddrInet6);
+	sa := new(syscall.SockaddrInet6);
 	sa.family = syscall.AF_INET6;
 	sa.port[0] = byte(port>>8);
 	sa.port[1] = byte(port);
diff --git a/src/lib/net/parse.go b/src/lib/net/parse.go
index b9ee185..904eb64 100644
--- a/src/lib/net/parse.go
+++ b/src/lib/net/parse.go
@@ -60,7 +60,7 @@
 	if err != nil {
 		return nil
 	}
-	return &File{fd, new([]byte, 1024)[0:0]};
+	return &File{fd, make([]byte, 1024)[0:0]};
 }
 
 package func ByteIndex(s string, c byte) int {
@@ -85,7 +85,7 @@
 
 // Split s at any bytes in t.
 package func SplitAtBytes(s string, t string) []string {
-	a := new([]string, 1+CountAnyByte(s, t));
+	a := make([]string, 1+CountAnyByte(s, t));
 	n := 0;
 	last := 0;
 	for i := 0; i < len(s); i++ {
diff --git a/src/lib/net/port.go b/src/lib/net/port.go
index efcbc0a..fbf5308 100644
--- a/src/lib/net/port.go
+++ b/src/lib/net/port.go
@@ -17,7 +17,7 @@
 var services map[string] map[string] int
 
 func ReadServices() {
-	services = new(map[string] map[string] int);
+	services = make(map[string] map[string] int);
 	file := Open("/etc/services");
 	for line, ok := file.ReadLine(); ok; line, ok = file.ReadLine() {
 		// "http 80/tcp www www-http # World Wide Web HTTP"
@@ -36,7 +36,7 @@
 		netw := portnet[j+1:len(portnet)];	// "tcp"
 		m, ok1 := services[netw];
 		if !ok1 {
-			m = new(map[string] int);
+			m = make(map[string] int);
 			services[netw] = m;
 		}
 		for i := 0; i < len(f); i++ {
diff --git a/src/lib/net/tcpserver_test.go b/src/lib/net/tcpserver_test.go
index e5520f5..730764c 100644
--- a/src/lib/net/tcpserver_test.go
+++ b/src/lib/net/tcpserver_test.go
@@ -36,7 +36,7 @@
 		if err != nil {
 			break;
 		}
-		echodone := new(chan int);
+		echodone := make(chan int);
 		go Echo(fd, echodone);
 		<-echodone;	// make sure Echo stops
 		l.Close();
@@ -67,8 +67,8 @@
 
 func DoTest(t *testing.T, network, listenaddr, dialaddr string) {
 	t.Logf("Test %s %s %s\n", network, listenaddr, dialaddr);
-	listening := new(chan int);
-	done := new(chan int);
+	listening := make(chan int);
+	done := make(chan int);
 	go Serve(t, network, listenaddr, listening, done);
 	<-listening;	// wait for server to start
 	Connect(t, network, dialaddr);
diff --git a/src/lib/once.go b/src/lib/once.go
index 414f288..a086d77 100644
--- a/src/lib/once.go
+++ b/src/lib/once.go
@@ -22,8 +22,8 @@
 }
 
 // TODO: Would like to use chan Request but 6g rejects it.
-var service = new(chan *Request)
-var jobmap = new(map[*()]*Job)
+var service = make(chan *Request)
+var jobmap = make(map[*()]*Job)
 
 // Moderate access to the jobmap.
 // Even if accesses were thread-safe (they should be but are not)
@@ -34,8 +34,8 @@
 		req := <-service;
 		job, present := jobmap[req.f];
 		if !present {
-			job = new(*Job);
-			job.doit = new(chan bool, 1);
+			job = new(Job);
+			job.doit = make(chan bool, 1);
 			job.doit <- true;
 			jobmap[req.f] = job
 		}
@@ -52,7 +52,7 @@
 	var present bool;
 	// job, present = jobmap[f]
 	if !present {
-		c := new(chan *Job);
+		c := make(chan *Job);
 		req := Request{f, c};
 		service <- &req;
 		job = <-c
diff --git a/src/lib/os/os_error.go b/src/lib/os/os_error.go
index 6db223e..4c03454 100644
--- a/src/lib/os/os_error.go
+++ b/src/lib/os/os_error.go
@@ -12,7 +12,7 @@
 	s string
 }
 
-var ErrorTab = new(map[int64] *Error);
+var ErrorTab = make(map[int64] *Error);
 
 export func NewError(s string) *Error {
 	return &Error{s}
diff --git a/src/lib/os/os_file.go b/src/lib/os/os_file.go
index 4e878aa..5f317c7 100644
--- a/src/lib/os/os_file.go
+++ b/src/lib/os/os_file.go
@@ -85,7 +85,7 @@
 	if fd == nil {
 		return 0, EINVAL
 	}
-	b := new([]byte, len(s)+1);
+	b := make([]byte, len(s)+1);
 	if !syscall.StringToBytes(b, s) {
 		return 0, EINVAL
 	}
diff --git a/src/lib/rand.go b/src/lib/rand.go
index 029a75c..ebdfdf1 100644
--- a/src/lib/rand.go
+++ b/src/lib/rand.go
@@ -166,7 +166,7 @@
 export func
 perm(n int) []int
 {
-	m := new([]int, n);
+	m := make([]int, n);
 	for i:=0; i<n; i++ {
 		m[i] = i;
 	}
diff --git a/src/lib/reflect/all_test.go b/src/lib/reflect/all_test.go
index d2e5bd0..eb0bbf9 100644
--- a/src/lib/reflect/all_test.go
+++ b/src/lib/reflect/all_test.go
@@ -176,7 +176,7 @@
 	}
 	{
 		type C chan *T;	// TODO: should not be necessary
-		var tmp = new(*C);
+		var tmp = new(C);
 		value := reflect.NewValue(tmp);
 		assert(reflect.ValueToString(value), "*reflect.C·all_test(@)");
 	}
diff --git a/src/lib/reflect/type.go b/src/lib/reflect/type.go
index f978e78..2cc3e48 100644
--- a/src/lib/reflect/type.go
+++ b/src/lib/reflect/type.go
@@ -332,7 +332,7 @@
 	return len(t.field)
 }
 
-var NilInterface = NewInterfaceTypeStruct("nil", "", new([]Field, 0));
+var NilInterface = NewInterfaceTypeStruct("nil", "", make([]Field, 0));
 
 // -- Func
 
@@ -397,9 +397,9 @@
 
 	Lock();	// not necessary because of init ordering but be safe.
 
-	types = new(map[string] Type);
-	typestring = new(map[string] string);
-	basicstub = new(map[string] *StubType);
+	types = make(map[string] Type);
+	typestring = make(map[string] string);
+	basicstub = make(map[string] *StubType);
 
 	// Basics go into types table
 	types[MissingString] = Missing;
@@ -674,11 +674,11 @@
 
 // Parse array of fields for struct, interface, and func arguments
 func (p *Parser) Fields(sep, term string) []Field {
-	a := new([]Field, 10);
+	a := make([]Field, 10);
 	nf := 0;
 	for p.token != "" && p.token != term {
 		if nf == len(a) {
-			a1 := new([]Field, 2*nf);
+			a1 := make([]Field, 2*nf);
 			for i := 0; i < nf; i++ {
 				a1[i] = a[i];
 			}
@@ -706,7 +706,7 @@
 
 // A single type packaged as a field for a function return
 func (p *Parser) OneField() []Field {
-	a := new([]Field, 1);
+	a := make([]Field, 1);
 	a[0].name = "";
 	a[0].typ = p.Type("");
 	return a;
@@ -838,7 +838,7 @@
 		// If the typestring is empty, it represents (the type of) a nil interface value
 		return NilInterface
 	}
-	p := new(*Parser);
+	p := new(Parser);
 	p.str = typestring;
 	p.Next();
 	return p.Type(name).Get();
diff --git a/src/lib/reflect/value.go b/src/lib/reflect/value.go
index 1e566f4..2ff4b85 100644
--- a/src/lib/reflect/value.go
+++ b/src/lib/reflect/value.go
@@ -625,7 +625,7 @@
 func ArrayCreator(typ Type, addr Addr) Value {
 	arraytype := typ.(ArrayType);
 	if arraytype.Open() {
-		v := new(*OpenArrayValueStruct);
+		v := new(OpenArrayValueStruct);
 		v.kind = ArrayKind;
 		v.addr = addr;
 		v.typ = typ;
@@ -634,7 +634,7 @@
 		v.array = addr.(*RuntimeArray);
 		return v;
 	}
-	v := new(*FixedArrayValueStruct);
+	v := new(FixedArrayValueStruct);
 	v.kind = ArrayKind;
 	v.addr = addr;
 	v.typ = typ;
@@ -710,7 +710,7 @@
 func StructCreator(typ Type, addr Addr) Value {
 	t := typ.(StructType);
 	nfield := t.Len();
-	v := &StructValueStruct{ Common{StructKind, typ, addr}, new([]Value, nfield) };
+	v := &StructValueStruct{ Common{StructKind, typ, addr}, make([]Value, nfield) };
 	for i := 0; i < nfield; i++ {
 		name, ftype, str, offset := t.Field(i);
 		addr_uint := uintptr(addr) + uintptr(offset);
@@ -783,7 +783,7 @@
 	FuncKind : &FuncCreator,
 }
 
-var typecache = new(map[string] *Type);
+var typecache = make(map[string] *Type);
 
 func NewValueAddr(typ Type, addr Addr) Value {
 	c, ok := creator[typ.Kind()];
@@ -807,7 +807,7 @@
 	if size == 0 {
 		size = 1;
 	}
-	data := new([]uint8, size);
+	data := make([]uint8, size);
 	return NewValueAddr(typ, Addr(&data[0]));
 }
 
@@ -824,12 +824,12 @@
 		return nil
 	}
 
-	array := new(*RuntimeArray);
+	array := new(RuntimeArray);
 	size := typ.Elem().Size() * cap;
 	if size == 0 {
 		size = 1;
 	}
-	data := new([]uint8, size);
+	data := make([]uint8, size);
 	array.data = Addr(&data[0]);
 	array.len = uint32(len);
 	array.cap = uint32(cap);
@@ -874,13 +874,13 @@
 	p, ok := typecache[typestring];
 	if !ok {
 		typ := ParseTypeString("", typestring);
-		p = new(*Type);
+		p = new(Type);
 		*p = typ;
 		typecache[typestring] = p;
 	}
 	// Content of interface is a value; need a permanent copy to take its address
 	// so we can modify the contents. Values contain pointers to 'values'.
-	ap := new(*uint64);
+	ap := new(uint64);
 	*ap = value;
 	return NewValueAddr(*p, ap.(Addr));
 }
diff --git a/src/lib/regexp/all_test.go b/src/lib/regexp/all_test.go
index 99d5d00..143d813 100644
--- a/src/lib/regexp/all_test.go
+++ b/src/lib/regexp/all_test.go
@@ -197,7 +197,7 @@
 	if re == nil {
 		return
 	}
-	strs := new([]string, len(match)/2);
+	strs := make([]string, len(match)/2);
 	for i := 0; i < len(match); i++ {
 		strs[i/2] = str[match[i] : match[i+1]]
 	}
diff --git a/src/lib/regexp/regexp.go b/src/lib/regexp/regexp.go
index 383db09..49f9716 100644
--- a/src/lib/regexp/regexp.go
+++ b/src/lib/regexp/regexp.go
@@ -112,7 +112,7 @@
 func (char *Char) Print() { print("char ", string(char.char)) }
 
 func NewChar(char int) *Char {
-	c := new(*Char);
+	c := new(Char);
 	c.char = char;
 	return c;
 }
@@ -163,7 +163,7 @@
 }
 
 func NewCharClass() *CharClass {
-	c := new(*CharClass);
+	c := new(CharClass);
 	c.ranges = array.NewIntArray(0);
 	return c;
 }
@@ -249,7 +249,7 @@
 }
 
 func NewParser(re *RE) *Parser {
-	parser := new(*Parser);
+	parser := new(Parser);
 	parser.re = re;
 	parser.nextc();	// load p.ch
 	return parser;
@@ -364,15 +364,15 @@
 		p.re.Error(ErrUnmatchedRbkt);
 	case '^':
 		p.nextc();
-		start = p.re.Add(new(*Bot));
+		start = p.re.Add(new(Bot));
 		return start, start;
 	case '$':
 		p.nextc();
-		start = p.re.Add(new(*Eot));
+		start = p.re.Add(new(Eot));
 		return start, start;
 	case '.':
 		p.nextc();
-		start = p.re.Add(new(*Any));
+		start = p.re.Add(new(Any));
 		return start, start;
 	case '[':
 		p.nextc();
@@ -393,9 +393,9 @@
 		}
 		p.nlpar--;
 		p.nextc();
-		bra := new(*Bra);
+		bra := new(Bra);
 		p.re.Add(bra);
-		ebra := new(*Ebra);
+		ebra := new(Ebra);
 		p.re.Add(ebra);
 		bra.n = nbra;
 		ebra.n = nbra;
@@ -437,7 +437,7 @@
 	switch p.c() {
 	case '*':
 		// (start,end)*:
-		alt := new(*Alt);
+		alt := new(Alt);
 		p.re.Add(alt);
 		end.SetNext(alt);	// after end, do alt
 		alt.left = start;	// alternate brach: return to start
@@ -445,16 +445,16 @@
 		end = alt;
 	case '+':
 		// (start,end)+:
-		alt := new(*Alt);
+		alt := new(Alt);
 		p.re.Add(alt);
 		end.SetNext(alt);	// after end, do alt
 		alt.left = start;	// alternate brach: return to start
 		end = alt;	// start is unchanged; end is alt
 	case '?':
 		// (start,end)?:
-		alt := new(*Alt);
+		alt := new(Alt);
 		p.re.Add(alt);
-		nop := new(*Nop);
+		nop := new(Nop);
 		p.re.Add(nop);
 		alt.left = start;	// alternate branch is start
 		alt.next = nop;	// follow on to nop
@@ -478,7 +478,7 @@
 		switch {
 		case nstart == NULL:	// end of this concatenation
 			if start == NULL {	// this is the empty string
-				nop := p.re.Add(new(*Nop));
+				nop := p.re.Add(new(Nop));
 				return nop, nop;
 			}
 			return;
@@ -501,11 +501,11 @@
 		case '|':
 			p.nextc();
 			nstart, nend := p.Concatenation();
-			alt := new(*Alt);
+			alt := new(Alt);
 			p.re.Add(alt);
 			alt.left = start;
 			alt.next = nstart;
-			nop := new(*Nop);
+			nop := new(Nop);
 			p.re.Add(nop);
 			end.SetNext(nop);
 			nend.SetNext(nop);
@@ -550,12 +550,12 @@
 
 func (re *RE) DoParse() {
 	parser := NewParser(re);
-	start := new(*Start);
+	start := new(Start);
 	re.Add(start);
 	s, e := parser.Regexp();
 	start.next = s;
 	re.start = start;
-	e.SetNext(re.Add(new(*End)));
+	e.SetNext(re.Add(new(End)));
 
 	if debug {
 		re.Dump();
@@ -572,7 +572,7 @@
 
 
 func Compiler(str string, ch chan *RE) {
-	re := new(*RE);
+	re := new(RE);
 	re.expr = str;
 	re.inst = array.New(0);
 	re.ch = ch;
@@ -589,7 +589,7 @@
 
 // Compile in separate goroutine; wait for result
 export func Compile(str string) (regexp Regexp, error *os.Error) {
-	ch := new(chan *RE);
+	ch := make(chan *RE);
 	go Compiler(str, ch);
 	re := <-ch;
 	return re, re.error
@@ -615,7 +615,7 @@
 		 }
 	}
 	if l == cap(s) {
-		s1 := new([]State, 2*l)[0:l];
+		s1 := make([]State, 2*l)[0:l];
 		for i := 0; i < l; i++ {
 			s1[i] = s[i];
 		}
@@ -629,15 +629,15 @@
 
 func (re *RE) DoExecute(str string, pos int) []int {
 	var s [2][]State;	// TODO: use a vector when State values (not ptrs) can be vector elements
-	s[0] = new([]State, 10)[0:0];
-	s[1] = new([]State, 10)[0:0];
+	s[0] = make([]State, 10)[0:0];
+	s[1] = make([]State, 10)[0:0];
 	in, out := 0, 1;
 	var final State;
 	found := false;
 	for pos <= len(str) {
 		if !found {
 			// prime the pump if we haven't seen a match yet
-			match := new([]int, 2*(re.nbra+1));
+			match := make([]int, 2*(re.nbra+1));
 			for i := 0; i < len(match); i++ {
 				match[i] = -1;	// no match seen; catches cases like "a(b)?c" on "ac"
 			}
@@ -689,7 +689,7 @@
 			case ALT:
 				s[in] = AddState(s[in], state.inst.(*Alt).left, state.match);
 				// give other branch a copy of this match vector
-				s1 := new([]int, 2*(re.nbra+1));
+				s1 := make([]int, 2*(re.nbra+1));
 				for i := 0; i < len(s1); i++ {
 					s1[i] = state.match[i]
 				}
@@ -729,7 +729,7 @@
 	if r == nil {
 		return nil
 	}
-	a := new([]string, len(r)/2);
+	a := make([]string, len(r)/2);
 	for i := 0; i < len(r); i += 2 {
 		a[i/2] = s[r[i] : r[i+1]]
 	}
diff --git a/src/lib/sort_test.go b/src/lib/sort_test.go
index 1a6b602..03f71da 100644
--- a/src/lib/sort_test.go
+++ b/src/lib/sort_test.go
@@ -76,7 +76,7 @@
 }
 
 export func TestSortLargeRandom(t *testing.T) {
-	data := new([]int, 1000000);
+	data := make([]int, 1000000);
 	for i := 0; i < len(data); i++ {
 		data[i] = rand.rand() % 100;
 	}
diff --git a/src/lib/strconv/atof.go b/src/lib/strconv/atof.go
index b7f5156..8869e20 100644
--- a/src/lib/strconv/atof.go
+++ b/src/lib/strconv/atof.go
@@ -34,7 +34,7 @@
 	}
 
 	// digits
-	b := new(*Decimal);
+	b := new(Decimal);
 	sawdot := false;
 	sawdigits := false;
 	for ; i < len(s); i++ {
diff --git a/src/lib/strconv/decimal.go b/src/lib/strconv/decimal.go
index 9f94e30..440b028 100644
--- a/src/lib/strconv/decimal.go
+++ b/src/lib/strconv/decimal.go
@@ -39,7 +39,7 @@
 		n += -a.dp;
 	}
 
-	buf := new([]byte, n);
+	buf := make([]byte, n);
 	w := 0;
 	switch {
 	case a.nd == 0:
@@ -120,7 +120,7 @@
 }
 
 package func NewDecimal(i uint64) *Decimal {
-	a := new(*Decimal);
+	a := new(Decimal);
 	a.Assign(i);
 	return a;
 }
diff --git a/src/lib/strconv/ftoa.go b/src/lib/strconv/ftoa.go
index 0b6a616..b99d9d5 100644
--- a/src/lib/strconv/ftoa.go
+++ b/src/lib/strconv/ftoa.go
@@ -236,7 +236,7 @@
 
 // %e: -d.ddddde±dd
 func FmtE(neg bool, d *Decimal, prec int) string {
-	buf := new([]byte, 3+Max(prec, 0)+30);	// "-0." + prec digits + exp
+	buf := make([]byte, 3+Max(prec, 0)+30);	// "-0." + prec digits + exp
 	w := 0;	// write index
 
 	// sign
@@ -306,7 +306,7 @@
 
 // %f: -ddddddd.ddddd
 func FmtF(neg bool, d *Decimal, prec int) string {
-	buf := new([]byte, 1+Max(d.dp, 1)+1+Max(prec, 0));
+	buf := make([]byte, 1+Max(d.dp, 1)+1+Max(prec, 0));
 	w := 0;
 
 	// sign
diff --git a/src/lib/strings.go b/src/lib/strings.go
index a553ec4..9da4806 100644
--- a/src/lib/strings.go
+++ b/src/lib/strings.go
@@ -8,7 +8,7 @@
 
 // Split string into array of UTF-8 sequences (still strings)
 export func explode(s string) []string {
-	a := new([]string, utf8.RuneCountInString(s, 0, len(s)));
+	a := make([]string, utf8.RuneCountInString(s, 0, len(s)));
 	j := 0;
 	var size, rune int;
 	for i := 0; i < len(a); i++ {
@@ -57,7 +57,7 @@
 	c := sep[0];
 	start := 0;
 	n := count(s, sep)+1;
-	a := new([]string, n);
+	a := make([]string, n);
 	na := 0;
 	for i := 0; i+len(sep) <= len(s); i++ {
 		if s[i] == c && (len(sep) == 1 || s[i:i+len(sep)] == sep) {
@@ -84,7 +84,7 @@
 		n += len(a[i])
 	}
 
-	b := new([]byte, n);
+	b := make([]byte, n);
 	bp := 0;
 	for i := 0; i < len(a); i++ {
 		s := a[i];
diff --git a/src/lib/sync/mutex_test.go b/src/lib/sync/mutex_test.go
index 0fd204c..876cb0f 100644
--- a/src/lib/sync/mutex_test.go
+++ b/src/lib/sync/mutex_test.go
@@ -20,9 +20,9 @@
 }
 
 export func TestSemaphore(t *testing.T) {
-	s := new(*int32);
+	s := new(int32);
 	*s = 1;
-	c := new(chan bool);
+	c := make(chan bool);
 	for i := 0; i < 10; i++ {
 		go HammerSemaphore(s, c);
 	}
@@ -41,8 +41,8 @@
 }
 
 export func TestMutex(t *testing.T) {
-	m := new(*Mutex);
-	c := new(chan bool);
+	m := new(Mutex);
+	c := make(chan bool);
 	for i := 0; i < 10; i++ {
 		go HammerMutex(m, c);
 	}
diff --git a/src/lib/tabwriter/tabwriter.go b/src/lib/tabwriter/tabwriter.go
index f8df1e1..a004088 100644
--- a/src/lib/tabwriter/tabwriter.go
+++ b/src/lib/tabwriter/tabwriter.go
@@ -21,7 +21,7 @@
 
 
 func (b *ByteArray) Init(initial_size int) {
-	b.a = new([]byte, initial_size)[0 : 0];
+	b.a = make([]byte, initial_size)[0 : 0];
 }
 
 
@@ -50,7 +50,7 @@
 		if m > n2 {
 			n2 = m;
 		}
-		b := new([]byte, n2);
+		b := make([]byte, n2);
 		for i := 0; i < n; i++ {
 			b[i] = a[i];
 		}
@@ -446,5 +446,5 @@
 
 
 export func New(writer io.Write, cellwidth, padding int, padchar byte, align_left, filter_html bool) *Writer {
-	return new(*Writer).Init(writer, cellwidth, padding, padchar, align_left, filter_html)
+	return new(Writer).Init(writer, cellwidth, padding, padchar, align_left, filter_html)
 }
diff --git a/src/lib/tabwriter/tabwriter_test.go b/src/lib/tabwriter/tabwriter_test.go
index 56b7e22..acd377d 100644
--- a/src/lib/tabwriter/tabwriter_test.go
+++ b/src/lib/tabwriter/tabwriter_test.go
@@ -18,7 +18,7 @@
 
 
 func (b *Buffer) Init(n int) {
-	b.a = new([]byte, n)[0 : 0];
+	b.a = make([]byte, n)[0 : 0];
 }
 
 
diff --git a/src/lib/testing.go b/src/lib/testing.go
index 3609a25..6d3275f 100644
--- a/src/lib/testing.go
+++ b/src/lib/testing.go
@@ -92,8 +92,8 @@
 		if chatty {
 			println("=== RUN ", tests[i].name);
 		}
-		t := new(*T);
-		t.ch = new(chan *T);
+		t := new(T);
+		t.ch = make(chan *T);
 		go TRunner(t, &tests[i]);
 		<-t.ch;
 		if t.failed {
diff --git a/src/lib/time/tick.go b/src/lib/time/tick.go
index a4cb786..408dbc2 100644
--- a/src/lib/time/tick.go
+++ b/src/lib/time/tick.go
@@ -53,7 +53,7 @@
 	if ns <= 0 {
 		return nil
 	}
-	c := new(chan int64);
+	c := make(chan int64);
 	go Ticker(ns, c);
 	return c;
 }
diff --git a/src/lib/time/time.go b/src/lib/time/time.go
index c067cbe..1325d26 100644
--- a/src/lib/time/time.go
+++ b/src/lib/time/time.go
@@ -71,7 +71,7 @@
 )
 
 export func SecondsToUTC(sec int64) *Time {
-	t := new(*Time);
+	t := new(Time);
 
 	// Split into time and day.
 	day := sec/SecondsPerDay;
@@ -281,7 +281,7 @@
 // Just enough of strftime to implement the date formats below.
 // Not exported.
 func Format(t *Time, fmt string) string {
-	buf := new([]byte, 128);
+	buf := make([]byte, 128);
 	bp := 0;
 
 	for i := 0; i < len(fmt); i++ {
diff --git a/src/lib/time/zoneinfo.go b/src/lib/time/zoneinfo.go
index 9ac9807..cdd656c 100644
--- a/src/lib/time/zoneinfo.go
+++ b/src/lib/time/zoneinfo.go
@@ -162,7 +162,7 @@
 	// Now we can build up a useful data structure.
 	// First the zone information.
 	//	utcoff[4] isdst[1] nameindex[1]
-	zone := new([]Zone, n[NZone]);
+	zone := make([]Zone, n[NZone]);
 	for i := 0; i < len(zone); i++ {
 		var ok bool;
 		var n uint32;
@@ -182,7 +182,7 @@
 	}
 
 	// Now the transition time info.
-	zt = new([]Zonetime, n[NTime]);
+	zt = make([]Zonetime, n[NTime]);
 	for i := 0; i < len(zt); i++ {
 		var ok bool;
 		var n uint32;
@@ -209,7 +209,7 @@
 	if e != nil {
 		return nil, e
 	}
-	p = new([]byte, max+1)[0:0];
+	p = make([]byte, max+1)[0:0];
 	n := 0;
 	for len(p) < max {
 		nn, e := fd.Read(p[n:cap(p)]);
diff --git a/src/run.bash b/src/run.bash
index 30166f7..bba8c22 100755
--- a/src/run.bash
+++ b/src/run.bash
@@ -52,11 +52,11 @@
 make smoketest
 ) || exit $?
 
-(xcd ../usr/gri/gosrc
-make clean
-time make
-# make test
-) || exit $?
+# (xcd ../usr/gri/gosrc
+# make clean
+# time make
+# # make test
+# ) || exit $?
 
 (xcd ../test
 ./run