diff --git a/misc/dashboard/builder/http.go b/misc/dashboard/builder/http.go
index 45ecb78..4546f85 100644
--- a/misc/dashboard/builder/http.go
+++ b/misc/dashboard/builder/http.go
@@ -59,7 +59,7 @@
 func dashStatus(meth, cmd string, args param) os.Error {
 	var resp struct {
 		Status string
-		Error string
+		Error  string
 	}
 	err := dash(meth, cmd, &resp, args)
 	if err != nil {
@@ -68,12 +68,12 @@
 	if resp.Status != "OK" {
 		return os.NewError("/build: " + resp.Error)
 	}
-	return nil	
+	return nil
 }
-	
+
 // todo returns the next hash to build.
 func (b *Builder) todo() (rev string, err os.Error) {
-	var resp []struct{
+	var resp []struct {
 		Hash string
 	}
 	if err = dash("GET", "todo", &resp, param{"builder": b.name}); err != nil {
@@ -128,12 +128,12 @@
 // postCommit informs the dashboard of a new commit
 func postCommit(key string, l *HgLog) os.Error {
 	return dashStatus("POST", "commit", param{
-		"key": key,
-		"node": l.Hash,
-		"date": l.Date,
-		"user": l.Author,
+		"key":    key,
+		"node":   l.Hash,
+		"date":   l.Date,
+		"user":   l.Author,
 		"parent": l.Parent,
-		"desc": l.Desc,
+		"desc":   l.Desc,
 	})
 }
 
diff --git a/misc/dashboard/builder/main.go b/misc/dashboard/builder/main.go
index 86cc0c1..c1536ab 100644
--- a/misc/dashboard/builder/main.go
+++ b/misc/dashboard/builder/main.go
@@ -48,7 +48,7 @@
 
 var (
 	buildroot     = flag.String("buildroot", path.Join(os.TempDir(), "gobuilder"), "Directory under which to build")
-	commitFlag = flag.Bool("commit", false, "upload information about new commits")
+	commitFlag    = flag.Bool("commit", false, "upload information about new commits")
 	dashboard     = flag.String("dashboard", "godashboard.appspot.com", "Go Dashboard Host")
 	buildRelease  = flag.Bool("release", false, "Build and upload binary release archives")
 	buildRevision = flag.String("rev", "", "Build specified revision and exit")
@@ -93,7 +93,7 @@
 	if err := run(nil, *buildroot, "hg", "clone", hgUrl, goroot); err != nil {
 		log.Fatal("Error cloning repository:", err)
 	}
-	
+
 	if *commitFlag {
 		if len(flag.Args()) == 0 {
 			commitWatcher()
@@ -242,7 +242,7 @@
 		return false
 	}
 	// Look for hash locally before running hg pull.
-	
+
 	if _, err := fullHash(hash[:12]); err != nil {
 		// Don't have hash, so run hg pull.
 		if err := run(nil, goroot, "hg", "pull"); err != nil {
@@ -389,12 +389,12 @@
 
 // HgLog represents a single Mercurial revision.
 type HgLog struct {
-	Hash string
+	Hash   string
 	Author string
-	Date string
-	Desc string
+	Date   string
+	Desc   string
 	Parent string
-	
+
 	// Internal metadata
 	added bool
 }
@@ -429,23 +429,23 @@
 		log.Printf("hg pull: %v", err)
 		return
 	}
-	
-	const N = 20   // how many revisions to grab
+
+	const N = 20 // how many revisions to grab
 
 	data, _, err := runLog(nil, "", goroot, "hg", "log",
 		"--encoding=utf-8",
-		"--limit=" + strconv.Itoa(N),
-		"--template=" + xmlLogTemplate,
+		"--limit="+strconv.Itoa(N),
+		"--template="+xmlLogTemplate,
 	)
 	if err != nil {
 		log.Printf("hg log: %v", err)
 		return
 	}
-	
+
 	var logStruct struct {
 		Log []HgLog
 	}
-	err = xml.Unmarshal(strings.NewReader("<top>" + data + "</top>"), &logStruct)
+	err = xml.Unmarshal(strings.NewReader("<top>"+data+"</top>"), &logStruct)
 	if err != nil {
 		log.Printf("unmarshal hg log: %v", err)
 		return
@@ -468,7 +468,7 @@
 			// Can't create node without parent.
 			continue
 		}
-		
+
 		if logByHash[l.Hash] == nil {
 			// Make copy to avoid pinning entire slice when only one entry is new.
 			t := *l
@@ -496,7 +496,7 @@
 	if l.added {
 		return true
 	}
-	
+
 	// Check for already added, perhaps in an earlier run.
 	if dashboardCommit(hash) {
 		log.Printf("%s already on dashboard\n", hash)
diff --git a/src/pkg/go/printer/nodes.go b/src/pkg/go/printer/nodes.go
index 6657cbb..0fca8a1 100644
--- a/src/pkg/go/printer/nodes.go
+++ b/src/pkg/go/printer/nodes.go
@@ -215,12 +215,13 @@
 		}
 
 		if i > 0 {
-			if mode&commaSep != 0 {
+			switch {
+			case mode&commaSep != 0:
 				p.print(token.COMMA)
-			}
-			if mode&periodSep != 0 {
+			case mode&periodSep != 0:
 				p.print(token.PERIOD)
 			}
+			needsBlank := mode&periodSep == 0 // period-separated list elements don't need a blank
 			if prevLine < line && prevLine > 0 && line > 0 {
 				// lines are broken using newlines so comments remain aligned
 				// unless forceFF is set or there are multiple expressions on
@@ -229,11 +230,12 @@
 					ws = ignore
 					*multiLine = true
 					prevBreak = i
+					needsBlank = false // we got a line break instead
 				}
-			} else if mode&periodSep == 0 {
+			}
+			if needsBlank {
 				p.print(blank)
 			}
-			// period-separated list elements don't need a blank
 		}
 
 		if isPair && size > 0 && len(list) > 1 {
diff --git a/src/pkg/go/printer/testdata/expressions.golden b/src/pkg/go/printer/testdata/expressions.golden
index 3d0f144e..a5e2fdc 100644
--- a/src/pkg/go/printer/testdata/expressions.golden
+++ b/src/pkg/go/printer/testdata/expressions.golden
@@ -644,7 +644,7 @@
 func f() {
 	// os.Open parameters should remain on two lines
 	if writer, err = os.Open(outfile, s.O_WRONLY|os.O_CREATE|
-		os.O_TRUNC,0666); err != nil {
+		os.O_TRUNC, 0666); err != nil {
 		log.Fatal(err)
 	}
 }
diff --git a/src/pkg/go/printer/testdata/expressions.raw b/src/pkg/go/printer/testdata/expressions.raw
index 72ab850..308d9ed 100644
--- a/src/pkg/go/printer/testdata/expressions.raw
+++ b/src/pkg/go/printer/testdata/expressions.raw
@@ -644,7 +644,7 @@
 func f() {
 	// os.Open parameters should remain on two lines
 	if writer, err = os.Open(outfile, s.O_WRONLY|os.O_CREATE|
-		os.O_TRUNC,0666); err != nil {
+		os.O_TRUNC, 0666); err != nil {
 		log.Fatal(err)
 	}
 }
diff --git a/src/pkg/http/serve_test.go b/src/pkg/http/serve_test.go
index 60d41ed..120a026 100644
--- a/src/pkg/http/serve_test.go
+++ b/src/pkg/http/serve_test.go
@@ -624,7 +624,7 @@
 		"POST / HTTP/1.1\r\n"+
 			"Host: test\r\n"+
 			"Content-Length: %d\r\n"+
-			"\r\n",len(body))))
+			"\r\n", len(body))))
 	conn.readBuf.Write([]byte(body))
 
 	done := make(chan bool)
diff --git a/src/pkg/mime/multipart/multipart_test.go b/src/pkg/mime/multipart/multipart_test.go
index a7efc20..ec564b1 100644
--- a/src/pkg/mime/multipart/multipart_test.go
+++ b/src/pkg/mime/multipart/multipart_test.go
@@ -315,7 +315,7 @@
 
 
 --MyBoundary--
-`,"\n", "\r\n", -1)
+`, "\n", "\r\n", -1)
 	r := NewReader(strings.NewReader(testBody), "MyBoundary")
 	part, err := r.NextPart()
 	if err != nil {
diff --git a/src/pkg/os/user/user_test.go b/src/pkg/os/user/user_test.go
index de953ca..ee917b5 100644
--- a/src/pkg/os/user/user_test.go
+++ b/src/pkg/os/user/user_test.go
@@ -56,6 +56,6 @@
 	if !reflect.DeepEqual(u, un) {
 		t.Errorf("Lookup by userid vs. name didn't match\n"+
 			"LookupId(%d): %#v\n"+
-			"Lookup(%q): %#v\n",uid, u, u.Username, un)
+			"Lookup(%q): %#v\n", uid, u, u.Username, un)
 	}
 }
