diff --git a/Dockerfile b/Dockerfile
index c472a53..849d506 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,7 +7,7 @@
 # https://github.com/google/google-java-format/releases/download/google-java-format-1.7/google-java-format-1.7-all-deps.jar
 COPY google-java-format-1.7-all-deps.jar /usr/bin/google-java-format-all-deps.jar
 
-# go build github.com/google/fmtserver/cmd/fmtserver
+# go build github.com/google/gerritfmt/cmd/fmtserver
 COPY fmtserver /usr/bin/fmtserver
 
 # go get github.com/bazelbuild/buildtools/buildifier
diff --git a/api.go b/api.go
index 4f907cb..3888cea 100644
--- a/api.go
+++ b/api.go
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package fmtserver
+package gerritfmt
 
 type File struct {
 	Name    string
diff --git a/cmd/checker/checker.go b/cmd/checker/checker.go
index 71bce05..ced64df 100644
--- a/cmd/checker/checker.go
+++ b/cmd/checker/checker.go
@@ -24,8 +24,8 @@
 	"strings"
 	"time"
 
-	"github.com/google/fmtserver"
-	"github.com/google/fmtserver/gerrit"
+	"github.com/google/gerritfmt"
+	"github.com/google/gerritfmt/gerrit"
 )
 
 type gerritChecker struct {
@@ -45,7 +45,7 @@
 		todo:      make(chan *gerrit.PendingChecksInfo, 5),
 	}
 
-	// XXX It would be nicer to query for the scheme "fmtserver:"
+	// XXX It would be nicer to query for the scheme "gerritfmt:"
 	if out, err := ListCheckers(server); err != nil {
 		return nil, err
 	} else {
@@ -63,15 +63,15 @@
 	if err != nil {
 		return nil, err
 	}
-	req := fmtserver.FormatRequest{}
+	req := gerritfmt.FormatRequest{}
 	for n, f := range ch.Files {
 		req.Files = append(req.Files,
-			fmtserver.File{
+			gerritfmt.File{
 				Name:    n,
 				Content: f.Content,
 			})
 	}
-	rep := fmtserver.FormatReply{}
+	rep := gerritfmt.FormatReply{}
 	if err := c.fmtClient.Call("Server.Format", &req, &rep); err != nil {
 		_, ok := err.(rpc.ServerError)
 		if ok {
@@ -131,7 +131,7 @@
 	for p := range gc.todo {
 		// TODO: parallel.
 		if err := gc.executeCheck(p); err != nil {
-			log.Printf("executeCheck(%s): %v", p, err)
+			log.Printf("executeCheck(%v): %v", p, err)
 		}
 	}
 }
@@ -171,7 +171,7 @@
 		msg = msg[:77] + "..."
 	}
 
-	fmt.Printf("status %s for %v", status, string(pc.PatchSet))
+	fmt.Printf("status %s for %v", status, pc.PatchSet)
 	for uuid := range pc.PendingChecks {
 		_, err := gc.server.PostCheck(changeID, psID,
 			&gerrit.CheckInput{
diff --git a/cmd/checker/main.go b/cmd/checker/main.go
index 8387cc0..54e2a1d 100644
--- a/cmd/checker/main.go
+++ b/cmd/checker/main.go
@@ -29,7 +29,7 @@
 	"os"
 	"strings"
 
-	"github.com/google/fmtserver/gerrit"
+	"github.com/google/gerritfmt/gerrit"
 	"github.com/google/slothfs/cookie"
 )
 
@@ -127,7 +127,7 @@
 	if nm := *cookieJar; nm != "" {
 		jar, err := cookie.NewJar(nm)
 		if err != nil {
-			log.Fatal("NewJar(%s): %v", nm, err)
+			log.Fatalf("NewJar(%s): %v", nm, err)
 		}
 		if err := cookie.WatchJar(jar, nm); err != nil {
 			log.Printf("WatchJar: %v", err)
diff --git a/cmd/fmtserver/main.go b/cmd/fmtserver/main.go
index 03e3222..1c12c8a 100644
--- a/cmd/fmtserver/main.go
+++ b/cmd/fmtserver/main.go
@@ -23,7 +23,7 @@
 	"os/exec"
 	"strconv"
 
-	"github.com/google/fmtserver"
+	"github.com/google/gerritfmt"
 )
 
 func main() {
@@ -37,7 +37,7 @@
 	*gofmt, _ = exec.LookPath("gofmt")
 	flag.Parse()
 
-	s := fmtserver.NewServer()
+	s := gerritfmt.NewServer()
 	var err error
 	s.JavaJar = *java
 	s.Buildifier = *buildifier
diff --git a/go.mod b/go.mod
index a477b9e..a654f9a 100644
--- a/go.mod
+++ b/go.mod
@@ -1,4 +1,4 @@
-module github.com/google/fmtserver
+module github.com/google/gerritfmt
 
 require (
 	github.com/bazelbuild/buildtools v0.0.0-20190405103555-895625218c56 // indirect
diff --git a/server.go b/server.go
index b0dcdb9..9398ebc 100644
--- a/server.go
+++ b/server.go
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package fmtserver
+package gerritfmt
 
 import (
 	"bytes"
@@ -164,7 +164,7 @@
 }
 
 func (s *Server) inlineFixTool(cmd *exec.Cmd, in []File, outSink io.Writer) (out []FormattedFile, err error) {
-	tmpDir, err := ioutil.TempDir("", "fmtserver")
+	tmpDir, err := ioutil.TempDir("", "gerritfmt")
 	if err != nil {
 		return nil, err
 	}
@@ -190,7 +190,7 @@
 	cmd.Stderr = &errBuf
 	log.Println("running", cmd.Args, "in", tmpDir)
 	if err := cmd.Run(); err != nil {
-		log.Println("error %v, stderr %s, stdout %s", err, errBuf.String(),
+		log.Printf("error %v, stderr %s, stdout %s", err, errBuf.String(),
 			outBuf.String())
 		return nil, err
 	}
