diff --git a/cmd/gotext/common.go b/cmd/gotext/common.go
new file mode 100644
index 0000000..6496a21
--- /dev/null
+++ b/cmd/gotext/common.go
@@ -0,0 +1,30 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+	"go/build"
+	"go/parser"
+
+	"golang.org/x/tools/go/loader"
+)
+
+func loadPackages(conf *loader.Config, args []string) (*loader.Program, error) {
+	if len(args) == 0 {
+		args = []string{"."}
+	}
+
+	conf.Build = &build.Default
+	conf.ParserMode = parser.ParseComments
+
+	// Use the initial packages from the command line.
+	args, err := conf.FromArgs(args, false)
+	if err != nil {
+		return nil, err
+	}
+
+	// Load, parse and type-check the whole program.
+	return conf.Load()
+}
diff --git a/cmd/gotext/extract.go b/cmd/gotext/extract.go
index 2a3d5b3..b5cd65b 100644
--- a/cmd/gotext/extract.go
+++ b/cmd/gotext/extract.go
@@ -9,10 +9,8 @@
 	"encoding/json"
 	"fmt"
 	"go/ast"
-	"go/build"
 	"go/constant"
 	"go/format"
-	"go/parser"
 	"go/token"
 	"go/types"
 	"io/ioutil"
@@ -52,23 +50,8 @@
 }
 
 func runExtract(cmd *Command, args []string) error {
-	if len(args) == 0 {
-		args = []string{"."}
-	}
-
-	conf := loader.Config{
-		Build:      &build.Default,
-		ParserMode: parser.ParseComments,
-	}
-
-	// Use the initial packages from the command line.
-	args, err := conf.FromArgs(args, false)
-	if err != nil {
-		return err
-	}
-
-	// Load, parse and type-check the whole program.
-	iprog, err := conf.Load()
+	conf := loader.Config{}
+	prog, err := loadPackages(&conf, args)
 	if err != nil {
 		return err
 	}
@@ -82,10 +65,10 @@
 
 	var messages []Message
 
-	for _, info := range iprog.AllPackages {
+	for _, info := range prog.AllPackages {
 		for _, f := range info.Files {
 			// Associate comments with nodes.
-			cmap := ast.NewCommentMap(iprog.Fset, f, f.Comments)
+			cmap := ast.NewCommentMap(prog.Fset, f, f.Comments)
 			getComment := func(n ast.Node) string {
 				cs := cmap.Filter(n).Comments()
 				if len(cs) > 0 {
diff --git a/cmd/gotext/rewrite.go b/cmd/gotext/rewrite.go
index af97d41..e1c4833 100644
--- a/cmd/gotext/rewrite.go
+++ b/cmd/gotext/rewrite.go
@@ -8,10 +8,8 @@
 	"bytes"
 	"fmt"
 	"go/ast"
-	"go/build"
 	"go/constant"
 	"go/format"
-	"go/parser"
 	"go/token"
 	"log"
 	"os"
@@ -38,7 +36,7 @@
 
 var cmdRewrite = &Command{
 	Run:       runRewrite,
-	UsageLine: "rewrite <package>*",
+	UsageLine: "rewrite <package>",
 	Short:     "rewrite rewrites fmt functions to use a message Printer",
 	Long: `
 rewrite is typically done once for a project. It rewrites all usages of
@@ -49,34 +47,20 @@
 }
 
 func runRewrite(cmd *Command, args []string) error {
-	if len(args) == 0 {
-		args = []string{"."}
-	}
-
-	conf := loader.Config{
-		Build:       &build.Default,
-		ParserMode:  parser.ParseComments,
+	conf := &loader.Config{
 		AllowErrors: true, // Allow unused instances of message.Printer.
 	}
-
-	// Use the initial packages from the command line.
-	args, err := conf.FromArgs(args, false)
+	prog, err := loadPackages(conf, args)
 	if err != nil {
 		return err
 	}
 
-	// Load, parse and type-check the whole program.
-	iprog, err := conf.Load()
-	if err != nil {
-		return err
-	}
-
-	for _, info := range iprog.InitialPackages() {
+	for _, info := range prog.InitialPackages() {
 		for _, f := range info.Files {
 			// Associate comments with nodes.
 
 			// Pick up initialized Printers at the package level.
-			r := rewriter{info: info, conf: &conf}
+			r := rewriter{info: info, conf: conf}
 			for _, n := range info.InitOrder {
 				if t := r.info.Types[n.Rhs].Type.String(); strings.HasSuffix(t, printerType) {
 					r.printerVar = n.Lhs[0].Name()
