diff --git a/cmd/checker/checker.go b/cmd/checker/checker.go
index db9ec39..1f6557b 100644
--- a/cmd/checker/checker.go
+++ b/cmd/checker/checker.go
@@ -69,7 +69,7 @@
 }
 
 // PostChecker modifies a checker.
-func (gc *gerritChecker) PostChecker(repo, language string, create bool) (*gerrit.CheckerInfo, error) {
+func (gc *gerritChecker) PostChecker(repo, language string, update bool) (*gerrit.CheckerInfo, error) {
 	hash := sha1.New()
 	hash.Write([]byte(repo))
 
@@ -88,10 +88,8 @@
 		return nil, err
 	}
 
-	log.Println(string(body))
-
 	path := "a/plugins/checks/checkers/"
-	if !create {
+	if update {
 		path += uuid
 	}
 	content, err := gc.server.PostPath(path, "application/json", body)
diff --git a/cmd/checker/main.go b/cmd/checker/main.go
index da30e6b..0ef56b6 100644
--- a/cmd/checker/main.go
+++ b/cmd/checker/main.go
@@ -21,15 +21,75 @@
 	"flag"
 	"io/ioutil"
 	"log"
+	"net/http"
 	"net/url"
 	"os"
 	"path/filepath"
+	"strings"
+	"sync"
+	"time"
 
 	"github.com/google/gerritfmt"
 	"github.com/google/gerritfmt/gerrit"
 	"github.com/google/slothfs/cookie"
 )
 
+type hardcodedJar struct {
+	mu      sync.Mutex
+	cookies []*http.Cookie
+}
+
+func NewHardcodedJar(nm string) (*hardcodedJar, error) {
+	j := &hardcodedJar{}
+	if err := j.read(nm); err != nil {
+		return nil, err
+	}
+	go func() {
+		// TODO: use inotify
+		for range time.Tick(time.Minute) {
+			if err := j.read(nm); err != nil {
+				log.Println("read %s: %v", nm, err)
+			}
+		}
+	}()
+	return j, nil
+}
+
+func (j *hardcodedJar) read(nm string) error {
+	f, err := os.Open(nm)
+	if err != nil {
+		return err
+	}
+	defer f.Close()
+
+	cs, err := cookie.ParseCookieJar(f)
+	if err != nil {
+		return err
+	}
+
+	j.mu.Lock()
+	defer j.mu.Unlock()
+	j.cookies = cs
+	return nil
+}
+
+func (j *hardcodedJar) Cookies(u *url.URL) []*http.Cookie {
+	j.mu.Lock()
+	defer j.mu.Unlock()
+
+	var r []*http.Cookie
+	for _, c := range j.cookies {
+		if strings.HasSuffix(u.Host, c.Domain) {
+			r = append(r, c)
+		}
+	}
+	return r
+}
+
+func (w *hardcodedJar) SetCookies(u *url.URL, cs []*http.Cookie) {
+	log.Println("SetCookies", u, cs)
+}
+
 func main() {
 	gerritURL := flag.String("gerrit", "", "URL to gerrit host")
 	register := flag.Bool("register", false, "Register with the host")
@@ -62,15 +122,10 @@
 	g := gerrit.New(*u)
 
 	if nm := *cookieJar; nm != "" {
-		jar, err := cookie.NewJar(nm)
+		g.Client.Jar, err = NewHardcodedJar(nm)
 		if err != nil {
-			log.Fatalf("NewJar(%s): %v", nm, err)
+			log.Fatal("NewHardcodedJar: %v", err)
 		}
-		if err := cookie.WatchJar(jar, nm); err != nil {
-			log.Printf("WatchJar: %v", err)
-			log.Println("continuing despite WatchJar failure", err)
-		}
-		g.Client.Jar = jar
 	}
 	g.UserAgent = *agent
 
