diff --git a/server/handlers.go b/server/handlers.go
index d9700f3029a796c35454baaa0962bee0189a9be1..926b4000097a81c1dd0015b41d3fa42ddffa2103 100644
--- a/server/handlers.go
+++ b/server/handlers.go
@@ -996,7 +996,7 @@ func (s *Server) writeAccessToken(w http.ResponseWriter, idToken, accessToken, r
 }
 
 func (s *Server) renderError(w http.ResponseWriter, status int, description string) {
-	if err := s.templates.err(w, http.StatusText(status), description); err != nil {
+	if err := s.templates.err(w, status, description); err != nil {
 		s.logger.Errorf("Server template error: %v", err)
 	}
 }
diff --git a/server/templates.go b/server/templates.go
index 5cadefa37261b0e839919e23f1251b7bed01263f..87567e40e1482348c41aaa26516ddde430d637fc 100644
--- a/server/templates.go
+++ b/server/templates.go
@@ -226,12 +226,16 @@ func (t *templates) oob(w http.ResponseWriter, code string) error {
 	return renderTemplate(w, t.oobTmpl, data)
 }
 
-func (t *templates) err(w http.ResponseWriter, errType string, errMsg string) error {
+func (t *templates) err(w http.ResponseWriter, errCode int, errMsg string) error {
+	w.WriteHeader(errCode)
 	data := struct {
 		ErrType string
 		ErrMsg  string
-	}{errType, errMsg}
-	return renderTemplate(w, t.errorTmpl, data)
+	}{http.StatusText(errCode), errMsg}
+	if err := t.errorTmpl.Execute(w, data); err != nil {
+		return fmt.Errorf("Error rendering template %s: %s", t.errorTmpl.Name(), err)
+	}
+	return nil
 }
 
 // small io.Writer utility to determine if executing the template wrote to the underlying response writer.