diff --git a/src/pkg/netchan/common.go b/src/pkg/netchan/common.go
index 010b957acdf374aea04e8baa91a6cd42b8752379..3f99868490bcf284c2bfad49df7e76146d7c4444 100644
--- a/src/pkg/netchan/common.go
+++ b/src/pkg/netchan/common.go
@@ -21,6 +21,16 @@ const (
 	Send
 )
 
+func (dir Dir) String() string {
+	switch dir {
+	case Recv:
+		return "Recv"
+	case Send:
+		return "Send"
+	}
+	return "???"
+}
+
 // Payload types
 const (
 	payRequest = iota // request structure follows
diff --git a/src/pkg/netchan/export.go b/src/pkg/netchan/export.go
index c42e35c56d988dfc580d7390a85d53bffbec0f31..a58797e630c1717348e02839a3aaea48f3440f8f 100644
--- a/src/pkg/netchan/export.go
+++ b/src/pkg/netchan/export.go
@@ -19,7 +19,7 @@
 */
 package netchan
 
-// BUG: can't use range clause to receive when using ImportNValues with N non-zero.
+// BUG: can't use range clause to receive when using ImportNValues to limit the count.
 
 import (
 	"log"
@@ -94,6 +94,7 @@ func (client *expClient) run() {
 	reqValue := reflect.NewValue(req)
 	error := new(error)
 	for {
+		*hdr = header{}
 		if err := client.decode(hdrValue); err != nil {
 			log.Stderr("error decoding client header:", err)
 			break
diff --git a/src/pkg/netchan/import.go b/src/pkg/netchan/import.go
index 77ec24d77ba6f4816a26974e5e078ed18f3c8b44..028a25f7f800bef682d2a8807df0ceddf0b05052 100644
--- a/src/pkg/netchan/import.go
+++ b/src/pkg/netchan/import.go
@@ -64,6 +64,7 @@ func (imp *Importer) run() {
 	err := new(error)
 	errValue := reflect.NewValue(err)
 	for {
+		*hdr = header{}
 		if e := imp.decode(hdrValue); e != nil {
 			log.Stderr("importer header:", e)
 			imp.shutdown()
@@ -152,7 +153,7 @@ func (imp *Importer) ImportNValues(name string, chT interface{}, dir Dir, n int)
 	}
 	if dir == Send {
 		go func() {
-			for i := 0; n == 0 || i < n; i++ {
+			for i := 0; n == -1 || i < n; i++ {
 				val := ch.Recv()
 				if err := imp.encode(hdr, payData, val.Interface()); err != nil {
 					log.Stderr("error encoding client response:", err)