diff --git a/README.md b/README.md
index 3ab395e620591deb943acdec6909890cc9c5e130..f6afbd8c7f4e7f296b770f67aee62e176840370d 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,9 @@ go get nhooyr.io/websocket
 
 For a production quality example that shows off the full API, see the [echo example on the godoc](https://godoc.org/nhooyr.io/websocket#example-package--Echo). On github, the example is at [example_echo_test.go](./example_echo_test.go).
 
-Use the [errors.As](https://golang.org/pkg/errors/#As) function [new in Go 1.13](https://golang.org/doc/go1.13#error_wrapping) to check for [websocket.CloseError](https://godoc.org/nhooyr.io/websocket#CloseError). See the [CloseError godoc example](https://godoc.org/nhooyr.io/websocket#example-CloseError).
+Use the [errors.As](https://golang.org/pkg/errors/#As) function [new in Go 1.13](https://golang.org/doc/go1.13#error_wrapping) to check for [websocket.CloseError](https://godoc.org/nhooyr.io/websocket#CloseError).
+There is also [websocket.CloseStatus](https://godoc.org/nhooyr.io/websocket#CloseStatus) to quickly grab the close status code out of a [websocket.CloseError](https://godoc.org/nhooyr.io/websocket#CloseError).
+See the [CloseError godoc example](https://godoc.org/nhooyr.io/websocket#example-CloseError).
 
 ### Server
 
diff --git a/conn_test.go b/conn_test.go
index 6ef77829b904531bccd4cfb14ffd67dd5ad683fe..0e012bf7bdb3e7c745a907f868a4a0859cd764f9 100644
--- a/conn_test.go
+++ b/conn_test.go
@@ -586,8 +586,8 @@ func TestConn(t *testing.T) {
 					return err
 				}
 				_, _, err = c.Read(ctx)
-				cerr := &websocket.CloseError{}
-				if !errors.As(err, cerr) || cerr.Code != websocket.StatusProtocolError {
+				var cerr websocket.CloseError
+				if !errors.As(err, &cerr) || cerr.Code != websocket.StatusProtocolError {
 					return fmt.Errorf("expected close error with StatusProtocolError: %+v", err)
 				}
 				return nil
diff --git a/doc.go b/doc.go
index a17bfb05f7438956789413d57c3e839ba37ad2a9..1610eed1e33b8bb0264e92f190409a70d196c388 100644
--- a/doc.go
+++ b/doc.go
@@ -16,6 +16,7 @@
 // comparison with existing implementations.
 //
 // Use the errors.As function new in Go 1.13 to check for websocket.CloseError.
+// Or use the CloseStatus function to grab the StatusCode out of a websocket.CloseError
 // See the CloseError example.
 //
 // Wasm
diff --git a/example_test.go b/example_test.go
index 2cedddf384e3b37931670ecf5e79cde470471a31..1cb3d799910ddab411f697ae2d009bd72766afc6 100644
--- a/example_test.go
+++ b/example_test.go
@@ -4,7 +4,6 @@ package websocket_test
 
 import (
 	"context"
-	"errors"
 	"log"
 	"net/http"
 	"time"
@@ -76,8 +75,7 @@ func ExampleCloseError() {
 	defer c.Close(websocket.StatusInternalError, "the sky is falling")
 
 	_, _, err = c.Reader(ctx)
-	var cerr websocket.CloseError
-	if !errors.As(err, &cerr) || cerr.Code != websocket.StatusNormalClosure {
+	if websocket.CloseStatus(err) != websocket.StatusNormalClosure {
 		log.Fatalf("expected to be disconnected with StatusNormalClosure but got: %+v", err)
 		return
 	}
diff --git a/frame.go b/frame.go
index 796c1c85d57afe5ae1f68905b190897d6f53a41d..b5301d782d4e61f74dfae302c0315c8ddaafba98 100644
--- a/frame.go
+++ b/frame.go
@@ -253,11 +253,11 @@ func (ce CloseError) Error() string {
 	return fmt.Sprintf("status = %v and reason = %q", ce.Code, ce.Reason)
 }
 
-// CloseStatus is a convenience wrapper around xerrors.As to grab
+// CloseStatus is a convenience wrapper around errors.As to grab
 // the status code from a *CloseError. If the passed error is nil
 // or not a *CloseError, the returned StatusCode will be -1.
 func CloseStatus(err error) StatusCode {
-	var ce *CloseError
+	var ce CloseError
 	if errors.As(err, &ce) {
 		return ce.Code
 	}
diff --git a/frame_test.go b/frame_test.go
index a4fead4937f576d37cfc6f2e1c13c9448b304671..8c5760e8db8835283b65ac6fed60f12fda74eb44 100644
--- a/frame_test.go
+++ b/frame_test.go
@@ -399,7 +399,7 @@ func TestCloseStatus(t *testing.T) {
 		},
 		{
 			name: "StatusInternalError",
-			in: &CloseError{
+			in: CloseError{
 				Code: StatusInternalError,
 			},
 			exp: StatusInternalError,