diff --git a/oauth.go b/oauth.go
index 350c780..c186e6c 100644
--- a/oauth.go
+++ b/oauth.go
@@ -41,6 +41,16 @@
 }
 
 /*
+ErrorResponse delivers the errors back to the caller, once validation
+has failed
+*/
+type ErrorResponse struct {
+	Status  string   `json:"status"`
+	Message string   `json:"message"`
+	Errors  []string `json:"errors"`
+}
+
+/*
 OAuthService offers interface functions that act on OAuth param,
 used to verify JWT tokens for the Http handler functions client
 wishes to validate against (via SSOHandler).
@@ -129,17 +139,17 @@
 WriteErrorResponse write a non 200 error response
 */
 func WriteErrorResponse(statusCode int, message string, w http.ResponseWriter) {
-	errors := Errors{message}
-	WriteErrorResponses(statusCode, errors, w)
-}
+	var errstr []string
 
-/*
-WriteErrorResponses write our error responses
-*/
-func WriteErrorResponses(statusCode int, errors Errors, w http.ResponseWriter) {
-	w.WriteHeader(statusCode)
 	w.Header().Set("Content-Type", "application/json")
-	json.NewEncoder(w).Encode(errors)
+	w.WriteHeader(statusCode)
+	errstr = append(errstr, http.StatusText(statusCode))
+	resp := ErrorResponse{
+		Status:  http.StatusText(statusCode),
+		Message: message,
+		Errors:  errstr,
+	}
+	json.NewEncoder(w).Encode(resp)
 }
 
 /*
diff --git a/scaffold_test.go b/scaffold_test.go
index b2007b7..7a2cd4c 100644
--- a/scaffold_test.go
+++ b/scaffold_test.go
@@ -380,6 +380,9 @@
 	})
 
 	It("SSO handler validation", func() {
+
+		var vals ErrorResponse
+
 		router := httprouter.New()
 		Expect(router).ShouldNot(BeNil())
 		scaf := CreateHTTPScaffold()
@@ -415,9 +418,18 @@
 		Expect(err).Should(Succeed())
 		defer resp.Body.Close()
 		Expect(resp.StatusCode).Should(Equal(400))
+		body, err := ioutil.ReadAll(resp.Body)
+		Expect(err).Should(Succeed())
+		err = json.Unmarshal(body, &vals)
+		Expect(err).Should(Succeed())
+		Expect(vals.Status).Should(Equal("Bad Request"))
+		Expect(vals.Message).Should(Equal("not a compact JWS"))
 	})
 
 	It("SSO handler validation bad public key", func() {
+
+		var vals ErrorResponse
+
 		router := httprouter.New()
 		Expect(router).ShouldNot(BeNil())
 		scaf := CreateHTTPScaffold()
@@ -441,6 +453,12 @@
 		Expect(err).Should(Succeed())
 		defer resp.Body.Close()
 		Expect(resp.StatusCode).Should(Equal(400))
+		body, err := ioutil.ReadAll(resp.Body)
+		Expect(err).Should(Succeed())
+		err = json.Unmarshal(body, &vals)
+		Expect(err).Should(Succeed())
+		Expect(vals.Status).Should(Equal("Bad Request"))
+		Expect(vals.Message).Should(Equal("Public key not configured. Validation failed."))
 	})
 
 	It("Get stack trace", func() {
