diff --git a/src/cmd/gofmt/gofmt.go b/src/cmd/gofmt/gofmt.go
index 115ddb9..f0f23cb 100644
--- a/src/cmd/gofmt/gofmt.go
+++ b/src/cmd/gofmt/gofmt.go
@@ -74,7 +74,7 @@
 
 
 func initPrinterMode() {
-	printerMode = printer.NoStringConcat;
+	printerMode = uint(0);
 	if *tabIndent {
 		printerMode |= printer.TabIndent
 	}
diff --git a/src/pkg/go/printer/nodes.go b/src/pkg/go/printer/nodes.go
index 545a5f0..2e1417a 100644
--- a/src/pkg/go/printer/nodes.go
+++ b/src/pkg/go/printer/nodes.go
@@ -17,9 +17,7 @@
 
 // Disabled formatting - enable eventually and remove the flag.
 const (
-	compositeLitBlank	= false;
-	fewerSemis		= true;
-	stringListMode		= exprListMode(0);	// previously: noIndent
+	compositeLitBlank = false;
 )
 
 
@@ -28,7 +26,7 @@
 // - better comment formatting for /*-style comments at the end of a line (e.g. a declaration)
 //   when the comment spans multiple lines; if such a comment is just two lines, formatting is
 //   not idempotent
-// - formatting of expression lists; especially for string lists (stringListMode)
+// - formatting of expression lists; especially for string lists
 // - blank after { and before } in one-line composite literals probably looks better
 // - should use blank instead of tab to separate one-line function bodies from
 //   the function header unless there is a group of consecutive one-liners
@@ -127,11 +125,7 @@
 	for i, x := range list {
 		xlist[i] = x
 	}
-	mode := stringListMode;
-	if p.Mode&NoStringConcat != 0 {
-		mode |= plusSep
-	}
-	p.exprList(noPos, xlist, 1, mode, multiLine);
+	p.exprList(noPos, xlist, 1, plusSep, multiLine);
 }
 
 
@@ -833,7 +827,7 @@
 		// in those cases each clause is a new section
 		p.linebreak(s.Pos().Line, 1, maxStmtNewlines, ignore, i == 0 || _indent == 0 || multiLine);
 		multiLine = false;
-		if !p.stmt(s, &multiLine) && (!fewerSemis || len(list) > 1) && p.Mode&NoSemis == 0 {
+		if !p.stmt(s, &multiLine) && len(list) > 1 && p.Mode&NoSemis == 0 {
 			p.print(token.SEMICOLON)
 		}
 	}
@@ -855,8 +849,10 @@
 
 
 // block prints an *ast.BlockStmt; it always spans at least two lines.
-func (p *printer) block(s *ast.BlockStmt, indent int) {
-	p.moveCommentsAfter(s.Pos());
+func (p *printer) block(s *ast.BlockStmt, indent int, moveComments bool) {
+	if moveComments {
+		p.moveCommentsAfter(s.Pos())
+	}
 	p.print(s.Pos(), token.LBRACE);
 	p.stmtList(s.List, indent);
 	p.linebreak(s.Rbrace.Line, 1, maxStmtNewlines, ignore, true);
@@ -976,14 +972,14 @@
 		}
 
 	case *ast.BlockStmt:
-		p.block(s, 1);
+		p.block(s, 1, false);
 		*multiLine = true;
 		optSemi = true;
 
 	case *ast.IfStmt:
 		p.print(token.IF);
 		p.controlClause(false, s.Init, s.Cond, nil);
-		p.block(s.Body, 1);
+		p.block(s.Body, 1, true);
 		*multiLine = true;
 		optSemi = true;
 		if s.Else != nil {
@@ -1012,7 +1008,7 @@
 	case *ast.SwitchStmt:
 		p.print(token.SWITCH);
 		p.controlClause(false, s.Init, s.Tag, nil);
-		p.block(s.Body, 0);
+		p.block(s.Body, 0, true);
 		*multiLine = true;
 		optSemi = true;
 
@@ -1037,7 +1033,7 @@
 		p.print(blank);
 		p.stmt(s.Assign, ignoreMultiLine);
 		p.print(blank);
-		p.block(s.Body, 0);
+		p.block(s.Body, 0, true);
 		*multiLine = true;
 		optSemi = true;
 
@@ -1058,14 +1054,14 @@
 
 	case *ast.SelectStmt:
 		p.print(token.SELECT, blank);
-		p.block(s.Body, 0);
+		p.block(s.Body, 0, false);
 		*multiLine = true;
 		optSemi = true;
 
 	case *ast.ForStmt:
 		p.print(token.FOR);
 		p.controlClause(true, s.Init, s.Cond, s.Post);
-		p.block(s.Body, 1);
+		p.block(s.Body, 1, true);
 		*multiLine = true;
 		optSemi = true;
 
@@ -1079,7 +1075,7 @@
 		p.print(blank, s.TokPos, s.Tok, blank, token.RANGE, blank);
 		p.expr(s.X, multiLine);
 		p.print(blank);
-		p.block(s.Body, 1);
+		p.block(s.Body, 1, true);
 		*multiLine = true;
 		optSemi = true;
 
@@ -1284,7 +1280,7 @@
 	}
 
 	p.print(blank);
-	p.block(b, 1);
+	p.block(b, 1, true);
 	*multiLine = true;
 }
 
diff --git a/src/pkg/go/printer/printer.go b/src/pkg/go/printer/printer.go
index 727b7af..50f0007 100644
--- a/src/pkg/go/printer/printer.go
+++ b/src/pkg/go/printer/printer.go
@@ -895,7 +895,6 @@
 	TabIndent;		// use tabs for indentation independent of UseSpaces
 	UseSpaces;		// use spaces instead of tabs for alignment
 	NoSemis;		// don't print semicolons at the end of a line
-	NoStringConcat;		// don't print string lists without "+"
 )
 
 
diff --git a/src/pkg/testing/regexp.go b/src/pkg/testing/regexp.go
index 0675a4e..3100136 100644
--- a/src/pkg/testing/regexp.go
+++ b/src/pkg/testing/regexp.go
@@ -76,8 +76,7 @@
 }
 
 const (
-	_START	=	// beginning of program
-	iota;
+	_START		= iota;	// beginning of program
 	_END;		// end of program: success
 	_BOT;		// '^' beginning of text
 	_EOT;		// '$' end of text
