diff --git a/storage/kubernetes/client.go b/storage/kubernetes/client.go
index dc238a9c3f7a63d71da2be8216e859bf218d758b..9f5d0d3f7843e5045214c051fd0d9d130ea92e89 100644
--- a/storage/kubernetes/client.go
+++ b/storage/kubernetes/client.go
@@ -135,6 +135,9 @@ func checkHTTPErr(r *http.Response, validStatusCodes ...int) error {
 	if r.StatusCode == http.StatusNotFound {
 		return storage.ErrNotFound
 	}
+	if r.Request.Method == "POST" && r.StatusCode == http.StatusConflict {
+		return storage.ErrAlreadyExists
+	}
 
 	var url, method string
 	if r.Request != nil {
diff --git a/storage/kubernetes/storage.go b/storage/kubernetes/storage.go
index 421b74c90b7e67ee46d61aa6638f413af598104c..fd7f04ad4559b283c6a1bd3fd9dfc95293f11fcb 100644
--- a/storage/kubernetes/storage.go
+++ b/storage/kubernetes/storage.go
@@ -31,7 +31,7 @@ const (
 	resourceRefreshToken    = "refreshtokens"
 	resourceKeys            = "signingkeies" // Kubernetes attempts to pluralize.
 	resourcePassword        = "passwords"
-	resourceOfflineSessions = "offlinesessions"
+	resourceOfflineSessions = "offlinesessionses" // Again attempts to pluralize.
 )
 
 // Config values for the Kubernetes storage type.
diff --git a/storage/kubernetes/types.go b/storage/kubernetes/types.go
index 81dc01c32a34d94857b6b9dc86e9669a7fb75589..c362452fca26a45eefbff3aeb82a9c1e1db710ee 100644
--- a/storage/kubernetes/types.go
+++ b/storage/kubernetes/types.go
@@ -502,9 +502,14 @@ func (cli *client) fromStorageOfflineSessions(o storage.OfflineSessions) Offline
 }
 
 func toStorageOfflineSessions(o OfflineSessions) storage.OfflineSessions {
-	return storage.OfflineSessions{
+	s := storage.OfflineSessions{
 		UserID:  o.UserID,
 		ConnID:  o.ConnID,
 		Refresh: o.Refresh,
 	}
+	if s.Refresh == nil {
+		// Server code assumes this will be non-nil.
+		s.Refresh = make(map[string]*storage.RefreshTokenRef)
+	}
+	return s
 }