diff --git a/.travis.yml b/.travis.yml
index b5ffbe0..597bc99 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,19 +1,18 @@
 sudo: false
 language: go
-go:
-  - 1.6.x
-  - 1.7.x
-  - 1.8.x
-  - 1.9.x
-  - master
 matrix:
   allow_failures:
     - go: master
   fast_finish: true
+  include:
+    - go: 1.10.x
+    - go: 1.11.x
+      env: GOFMT=1
+    - go: master
 install:
   - # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step).
 script:
   - go get -t -v ./...
-  - diff -u <(echo -n) <(gofmt -d .)
+  - if test -n "${GOFMT}"; then gofmt -w -s . && git diff --exit-code; fi
   - go tool vet .
   - go test -v -race ./...
diff --git a/README.md b/README.md
index 09c9e7c..51e7d23 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,8 @@ Package httpcache provides a http.RoundTripper implementation that works as a mo
 
 It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client and not for a shared proxy).
 
+This project isn't actively maintained; it works for what I, and seemingly others, want to do with it, and I consider it "done". That said, if you find any issues, please open a Pull Request and I will try to review it. Any changes now that change the public API won't be considered.
+
 Cache Backends
 --------------
 
@@ -19,6 +21,8 @@ Cache Backends
 - [`github.com/die-net/lrucache/twotier`](https://github.com/die-net/lrucache/tree/master/twotier) allows caches to be combined, for example to use lrucache above with a persistent disk-cache.
 - [`github.com/birkelund/boltdbcache`](https://github.com/birkelund/boltdbcache) provides a BoltDB implementation (based on the [bbolt](https://github.com/coreos/bbolt) fork).
 
+If you implement any other backend and wish it to be linked here, please send a PR editing this file.
+
 License
 -------
 
diff --git a/debian/changelog b/debian/changelog
index f91869b..0ec415e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,11 @@
-golang-github-gregjones-httpcache (0.0~git20180305.9cad4c3-2) UNRELEASED; urgency=low
+golang-github-gregjones-httpcache (0.0~git20190611.901d907-1) UNRELEASED; urgency=low
 
   * Bump debhelper from old 11 to 12.
   * Set debhelper-compat version in Build-Depends.
   * Set upstream metadata fields: Repository, Repository-Browse.
+  * New upstream snapshot.
 
- -- Debian Janitor <janitor@jelmer.uk>  Sat, 06 Jun 2020 17:14:43 -0000
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 16 Apr 2022 23:41:15 -0000
 
 golang-github-gregjones-httpcache (0.0~git20180305.9cad4c3-1) unstable; urgency=medium
 
diff --git a/diskcache/diskcache_test.go b/diskcache/diskcache_test.go
index 35c76cb..98e168b 100644
--- a/diskcache/diskcache_test.go
+++ b/diskcache/diskcache_test.go
@@ -1,10 +1,11 @@
 package diskcache
 
 import (
-	"bytes"
 	"io/ioutil"
 	"os"
 	"testing"
+
+	"github.com/gregjones/httpcache/test"
 )
 
 func TestDiskCache(t *testing.T) {
@@ -14,29 +15,5 @@ func TestDiskCache(t *testing.T) {
 	}
 	defer os.RemoveAll(tempDir)
 
-	cache := New(tempDir)
-
-	key := "testKey"
-	_, ok := cache.Get(key)
-	if ok {
-		t.Fatal("retrieved key before adding it")
-	}
-
-	val := []byte("some bytes")
-	cache.Set(key, val)
-
-	retVal, ok := cache.Get(key)
-	if !ok {
-		t.Fatal("could not retrieve an element we just added")
-	}
-	if !bytes.Equal(retVal, val) {
-		t.Fatal("retrieved a different value than what we put in")
-	}
-
-	cache.Delete(key)
-
-	_, ok = cache.Get(key)
-	if ok {
-		t.Fatal("deleted key still present")
-	}
+	test.Cache(t, New(tempDir))
 }
diff --git a/httpcache.go b/httpcache.go
index f6a2ec4..b41a63d 100644
--- a/httpcache.go
+++ b/httpcache.go
@@ -416,14 +416,14 @@ func canStaleOnError(respHeaders, reqHeaders http.Header) bool {
 func getEndToEndHeaders(respHeaders http.Header) []string {
 	// These headers are always hop-by-hop
 	hopByHopHeaders := map[string]struct{}{
-		"Connection":          struct{}{},
-		"Keep-Alive":          struct{}{},
-		"Proxy-Authenticate":  struct{}{},
-		"Proxy-Authorization": struct{}{},
-		"Te":                struct{}{},
-		"Trailers":          struct{}{},
-		"Transfer-Encoding": struct{}{},
-		"Upgrade":           struct{}{},
+		"Connection":          {},
+		"Keep-Alive":          {},
+		"Proxy-Authenticate":  {},
+		"Proxy-Authorization": {},
+		"Te":                  {},
+		"Trailers":            {},
+		"Transfer-Encoding":   {},
+		"Upgrade":             {},
 	}
 
 	for _, extra := range strings.Split(respHeaders.Get("connection"), ",") {
@@ -433,7 +433,7 @@ func getEndToEndHeaders(respHeaders http.Header) []string {
 		}
 	}
 	endToEndHeaders := []string{}
-	for respHeader, _ := range respHeaders {
+	for respHeader := range respHeaders {
 		if _, ok := hopByHopHeaders[respHeader]; !ok {
 			endToEndHeaders = append(endToEndHeaders, respHeader)
 		}
diff --git a/leveldbcache/leveldbcache_test.go b/leveldbcache/leveldbcache_test.go
index b885c01..e301e7b 100644
--- a/leveldbcache/leveldbcache_test.go
+++ b/leveldbcache/leveldbcache_test.go
@@ -1,11 +1,12 @@
 package leveldbcache
 
 import (
-	"bytes"
 	"io/ioutil"
 	"os"
 	"path/filepath"
 	"testing"
+
+	"github.com/gregjones/httpcache/test"
 )
 
 func TestDiskCache(t *testing.T) {
@@ -20,27 +21,5 @@ func TestDiskCache(t *testing.T) {
 		t.Fatalf("New leveldb,: %v", err)
 	}
 
-	key := "testKey"
-	_, ok := cache.Get(key)
-	if ok {
-		t.Fatal("retrieved key before adding it")
-	}
-
-	val := []byte("some bytes")
-	cache.Set(key, val)
-
-	retVal, ok := cache.Get(key)
-	if !ok {
-		t.Fatal("could not retrieve an element we just added")
-	}
-	if !bytes.Equal(retVal, val) {
-		t.Fatal("retrieved a different value than what we put in")
-	}
-
-	cache.Delete(key)
-
-	_, ok = cache.Get(key)
-	if ok {
-		t.Fatal("deleted key still present")
-	}
+	test.Cache(t, cache)
 }
diff --git a/memcache/appengine_test.go b/memcache/appengine_test.go
index 818b277..f46c379 100644
--- a/memcache/appengine_test.go
+++ b/memcache/appengine_test.go
@@ -3,10 +3,10 @@
 package memcache
 
 import (
-	"bytes"
 	"testing"
 
 	"appengine/aetest"
+	"github.com/gregjones/httpcache/test"
 )
 
 func TestAppEngine(t *testing.T) {
@@ -16,29 +16,5 @@ func TestAppEngine(t *testing.T) {
 	}
 	defer ctx.Close()
 
-	cache := New(ctx)
-
-	key := "testKey"
-	_, ok := cache.Get(key)
-	if ok {
-		t.Fatal("retrieved key before adding it")
-	}
-
-	val := []byte("some bytes")
-	cache.Set(key, val)
-
-	retVal, ok := cache.Get(key)
-	if !ok {
-		t.Fatal("could not retrieve an element we just added")
-	}
-	if !bytes.Equal(retVal, val) {
-		t.Fatal("retrieved a different value than what we put in")
-	}
-
-	cache.Delete(key)
-
-	_, ok = cache.Get(key)
-	if ok {
-		t.Fatal("deleted key still present")
-	}
+	test.Cache(t, New(ctx))
 }
diff --git a/memcache/memcache_test.go b/memcache/memcache_test.go
index 4dcc547..cce9e02 100644
--- a/memcache/memcache_test.go
+++ b/memcache/memcache_test.go
@@ -3,9 +3,10 @@
 package memcache
 
 import (
-	"bytes"
 	"net"
 	"testing"
+
+	"github.com/gregjones/httpcache/test"
 )
 
 const testServer = "localhost:11211"
@@ -19,29 +20,5 @@ func TestMemCache(t *testing.T) {
 	conn.Write([]byte("flush_all\r\n")) // flush memcache
 	conn.Close()
 
-	cache := New(testServer)
-
-	key := "testKey"
-	_, ok := cache.Get(key)
-	if ok {
-		t.Fatal("retrieved key before adding it")
-	}
-
-	val := []byte("some bytes")
-	cache.Set(key, val)
-
-	retVal, ok := cache.Get(key)
-	if !ok {
-		t.Fatal("could not retrieve an element we just added")
-	}
-	if !bytes.Equal(retVal, val) {
-		t.Fatal("retrieved a different value than what we put in")
-	}
-
-	cache.Delete(key)
-
-	_, ok = cache.Get(key)
-	if ok {
-		t.Fatal("deleted key still present")
-	}
+	test.Cache(t, New(testServer))
 }
diff --git a/redis/redis.go b/redis/redis.go
index 3143d44..3d69c6c 100644
--- a/redis/redis.go
+++ b/redis/redis.go
@@ -2,7 +2,7 @@
 package redis
 
 import (
-	"github.com/garyburd/redigo/redis"
+	"github.com/gomodule/redigo/redis"
 	"github.com/gregjones/httpcache"
 )
 
diff --git a/redis/redis_test.go b/redis/redis_test.go
index 72f6f61..800863c 100644
--- a/redis/redis_test.go
+++ b/redis/redis_test.go
@@ -1,10 +1,10 @@
 package redis
 
 import (
-	"bytes"
 	"testing"
 
-	"github.com/garyburd/redigo/redis"
+	"github.com/gomodule/redigo/redis"
+	"github.com/gregjones/httpcache/test"
 )
 
 func TestRedisCache(t *testing.T) {
@@ -15,29 +15,5 @@ func TestRedisCache(t *testing.T) {
 	}
 	conn.Do("FLUSHALL")
 
-	cache := NewWithClient(conn)
-
-	key := "testKey"
-	_, ok := cache.Get(key)
-	if ok {
-		t.Fatal("retrieved key before adding it")
-	}
-
-	val := []byte("some bytes")
-	cache.Set(key, val)
-
-	retVal, ok := cache.Get(key)
-	if !ok {
-		t.Fatal("could not retrieve an element we just added")
-	}
-	if !bytes.Equal(retVal, val) {
-		t.Fatal("retrieved a different value than what we put in")
-	}
-
-	cache.Delete(key)
-
-	_, ok = cache.Get(key)
-	if ok {
-		t.Fatal("deleted key still present")
-	}
+	test.Cache(t, NewWithClient(conn))
 }
diff --git a/test/test.go b/test/test.go
new file mode 100644
index 0000000..c2ff257
--- /dev/null
+++ b/test/test.go
@@ -0,0 +1,35 @@
+package test
+
+import (
+	"bytes"
+	"testing"
+
+	"github.com/gregjones/httpcache"
+)
+
+// Cache excercises a httpcache.Cache implementation.
+func Cache(t *testing.T, cache httpcache.Cache) {
+	key := "testKey"
+	_, ok := cache.Get(key)
+	if ok {
+		t.Fatal("retrieved key before adding it")
+	}
+
+	val := []byte("some bytes")
+	cache.Set(key, val)
+
+	retVal, ok := cache.Get(key)
+	if !ok {
+		t.Fatal("could not retrieve an element we just added")
+	}
+	if !bytes.Equal(retVal, val) {
+		t.Fatal("retrieved a different value than what we put in")
+	}
+
+	cache.Delete(key)
+
+	_, ok = cache.Get(key)
+	if ok {
+		t.Fatal("deleted key still present")
+	}
+}
diff --git a/test/test_test.go b/test/test_test.go
new file mode 100644
index 0000000..41a9c20
--- /dev/null
+++ b/test/test_test.go
@@ -0,0 +1,12 @@
+package test_test
+
+import (
+	"testing"
+
+	"github.com/gregjones/httpcache"
+	"github.com/gregjones/httpcache/test"
+)
+
+func TestMemoryCache(t *testing.T) {
+	test.Cache(t, httpcache.NewMemoryCache())
+}