diff --git a/clientcredentials/clientcredentials_test.go b/clientcredentials/clientcredentials_test.go
index 5a0170a..061b43b 100644
--- a/clientcredentials/clientcredentials_test.go
+++ b/clientcredentials/clientcredentials_test.go
@@ -5,12 +5,11 @@
 package clientcredentials
 
 import (
+	"context"
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
 	"testing"
-
-	"golang.org/x/oauth2"
 )
 
 func newConf(url string) *Config {
@@ -57,7 +56,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	tok, err := conf.Token(oauth2.NoContext)
+	tok, err := conf.Token(context.Background())
 	if err != nil {
 		t.Error(err)
 	}
@@ -91,6 +90,6 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	c := conf.Client(oauth2.NoContext)
+	c := conf.Client(context.Background())
 	c.Get(ts.URL + "/somethingelse")
 }
diff --git a/example_test.go b/example_test.go
index f5ac863..d861fe7 100644
--- a/example_test.go
+++ b/example_test.go
@@ -5,6 +5,7 @@
 package oauth2_test
 
 import (
+	"context"
 	"fmt"
 	"log"
 
@@ -12,6 +13,7 @@
 )
 
 func ExampleConfig() {
+	ctx := context.Background()
 	conf := &oauth2.Config{
 		ClientID:     "YOUR_CLIENT_ID",
 		ClientSecret: "YOUR_CLIENT_SECRET",
@@ -35,11 +37,11 @@
 	if _, err := fmt.Scan(&code); err != nil {
 		log.Fatal(err)
 	}
-	tok, err := conf.Exchange(oauth2.NoContext, code)
+	tok, err := conf.Exchange(ctx, code)
 	if err != nil {
 		log.Fatal(err)
 	}
 
-	client := conf.Client(oauth2.NoContext, tok)
+	client := conf.Client(ctx, tok)
 	client.Get("...")
 }
diff --git a/jwt/example_test.go b/jwt/example_test.go
index a9533e8..58503d8 100644
--- a/jwt/example_test.go
+++ b/jwt/example_test.go
@@ -5,11 +5,13 @@
 package jwt_test
 
 import (
-	"golang.org/x/oauth2"
+	"context"
+
 	"golang.org/x/oauth2/jwt"
 )
 
 func ExampleJWTConfig() {
+	ctx := context.Background()
 	conf := &jwt.Config{
 		Email: "xxx@developer.com",
 		// The contents of your RSA private key or your PEM file
@@ -26,6 +28,6 @@
 	}
 	// Initiate an http.Client, the following GET request will be
 	// authorized and authenticated on the behalf of user@example.com.
-	client := conf.Client(oauth2.NoContext)
+	client := conf.Client(ctx)
 	client.Get("...")
 }
diff --git a/jwt/jwt_test.go b/jwt/jwt_test.go
index a9c126b..b79b816 100644
--- a/jwt/jwt_test.go
+++ b/jwt/jwt_test.go
@@ -5,11 +5,10 @@
 package jwt
 
 import (
+	"context"
 	"net/http"
 	"net/http/httptest"
 	"testing"
-
-	"golang.org/x/oauth2"
 )
 
 var dummyPrivateKey = []byte(`-----BEGIN RSA PRIVATE KEY-----
@@ -57,7 +56,7 @@
 		PrivateKey: dummyPrivateKey,
 		TokenURL:   ts.URL,
 	}
-	tok, err := conf.TokenSource(oauth2.NoContext).Token()
+	tok, err := conf.TokenSource(context.Background()).Token()
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -91,7 +90,7 @@
 		PrivateKey: dummyPrivateKey,
 		TokenURL:   ts.URL,
 	}
-	tok, err := conf.TokenSource(oauth2.NoContext).Token()
+	tok, err := conf.TokenSource(context.Background()).Token()
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -124,7 +123,7 @@
 		PrivateKey: dummyPrivateKey,
 		TokenURL:   ts.URL,
 	}
-	tok, err := conf.TokenSource(oauth2.NoContext).Token()
+	tok, err := conf.TokenSource(context.Background()).Token()
 	if err == nil {
 		t.Error("got a token; expected error")
 		if tok.AccessToken != "" {
diff --git a/oauth2.go b/oauth2.go
index 0505263..7b06bfe 100644
--- a/oauth2.go
+++ b/oauth2.go
@@ -21,6 +21,8 @@
 
 // NoContext is the default context you should supply if not using
 // your own context.Context (see https://golang.org/x/net/context).
+//
+// Deprecated: Use context.Background() or context.TODO() instead.
 var NoContext = context.TODO()
 
 // RegisterBrokenAuthHeaderProvider registers an OAuth2 server
diff --git a/oauth2_test.go b/oauth2_test.go
index a9aecd6..e6f5cac 100644
--- a/oauth2_test.go
+++ b/oauth2_test.go
@@ -97,7 +97,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	tok, err := conf.Exchange(NoContext, "exchange-code")
+	tok, err := conf.Exchange(context.Background(), "exchange-code")
 	if err != nil {
 		t.Error(err)
 	}
@@ -141,7 +141,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	tok, err := conf.Exchange(NoContext, "exchange-code")
+	tok, err := conf.Exchange(context.Background(), "exchange-code")
 	if err != nil {
 		t.Error(err)
 	}
@@ -236,7 +236,7 @@
 	defer ts.Close()
 	conf := newConf(ts.URL)
 	t1 := time.Now().Add(day)
-	tok, err := conf.Exchange(NoContext, "exchange-code")
+	tok, err := conf.Exchange(context.Background(), "exchange-code")
 	t2 := time.Now().Add(day)
 	// Do a fmt.Sprint comparison so either side can be
 	// nil. fmt.Sprint just stringifies them to "<nil>", and no
@@ -269,7 +269,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	tok, err := conf.Exchange(NoContext, "code")
+	tok, err := conf.Exchange(context.Background(), "code")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -285,7 +285,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	_, err := conf.Exchange(NoContext, "exchange-code")
+	_, err := conf.Exchange(context.Background(), "exchange-code")
 	if err == nil {
 		t.Error("expected error from invalid access_token type")
 	}
@@ -344,7 +344,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	tok, err := conf.PasswordCredentialsToken(NoContext, "user1", "password1")
+	tok, err := conf.PasswordCredentialsToken(context.Background(), "user1", "password1")
 	if err != nil {
 		t.Error(err)
 	}
@@ -380,7 +380,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	c := conf.Client(NoContext, &Token{RefreshToken: "REFRESH_TOKEN"})
+	c := conf.Client(context.Background(), &Token{RefreshToken: "REFRESH_TOKEN"})
 	c.Get(ts.URL + "/somethingelse")
 }
 
@@ -403,7 +403,7 @@
 	}))
 	defer ts.Close()
 	conf := newConf(ts.URL)
-	c := conf.Client(NoContext, nil)
+	c := conf.Client(context.Background(), nil)
 	_, err := c.Get(ts.URL + "/somethingelse")
 	if err == nil {
 		t.Errorf("Fetch should return an error if no refresh token is set")
@@ -420,7 +420,7 @@
 	conf := newConf(ts.URL)
 	tkr := tokenRefresher{
 		conf:         conf,
-		ctx:          NoContext,
+		ctx:          context.Background(),
 		refreshToken: "OLD REFRESH TOKEN",
 	}
 	tk, err := tkr.Token()
@@ -446,7 +446,7 @@
 	defer ts.Close()
 	conf := newConf(ts.URL)
 
-	c := conf.Client(NoContext, tok)
+	c := conf.Client(context.Background(), tok)
 	req, err := http.NewRequest("GET", ts.URL, nil)
 	if err != nil {
 		t.Error(err)
