diff --git a/acceptance/README.md b/acceptance/README.md
index 1e86c9f..3199837 100644
--- a/acceptance/README.md
+++ b/acceptance/README.md
@@ -29,7 +29,7 @@
 |`OS_TENANT_NAME`|Your API tenant name|
 |`OS_TENANT_ID`|Your API tenant ID|
 |`RS_USERNAME`|Your Rackspace username|
-|`RS_APIKEY`|Your Rackspace API key|
+|`RS_API_KEY`|Your Rackspace API key|
 
 #### General
 
diff --git a/acceptance/openstack/compute/v2/servers_test.go b/acceptance/openstack/compute/v2/servers_test.go
index 2c47a86..67b1b46 100644
--- a/acceptance/openstack/compute/v2/servers_test.go
+++ b/acceptance/openstack/compute/v2/servers_test.go
@@ -12,7 +12,6 @@
 	"github.com/rackspace/gophercloud/openstack"
 	"github.com/rackspace/gophercloud/openstack/compute/v2/servers"
 	"github.com/rackspace/gophercloud/openstack/networking/v2/networks"
-	"github.com/rackspace/gophercloud/openstack/utils"
 	"github.com/rackspace/gophercloud/pagination"
 )
 
@@ -47,7 +46,7 @@
 }
 
 func networkingClient() (*gophercloud.ServiceClient, error) {
-	opts, err := utils.AuthOptions()
+	opts, err := openstack.AuthOptionsFromEnv()
 	if err != nil {
 		return nil, err
 	}
diff --git a/acceptance/openstack/identity/v3/endpoint_test.go b/acceptance/openstack/identity/v3/endpoint_test.go
index 9032ec3..ea893c2 100644
--- a/acceptance/openstack/identity/v3/endpoint_test.go
+++ b/acceptance/openstack/identity/v3/endpoint_test.go
@@ -46,6 +46,9 @@
 func TestNavigateCatalog(t *testing.T) {
 	// Create a service client.
 	client := createAuthenticatedClient(t)
+	if client == nil {
+		return
+	}
 
 	var compute *services3.Service
 	var endpoint *endpoints3.Endpoint
diff --git a/acceptance/openstack/identity/v3/identity_test.go b/acceptance/openstack/identity/v3/identity_test.go
index 293606b..ce64345 100644
--- a/acceptance/openstack/identity/v3/identity_test.go
+++ b/acceptance/openstack/identity/v3/identity_test.go
@@ -7,14 +7,13 @@
 
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/openstack"
+	th "github.com/rackspace/gophercloud/testhelper"
 )
 
 func createAuthenticatedClient(t *testing.T) *gophercloud.ServiceClient {
 	// Obtain credentials from the environment.
 	ao, err := openstack.AuthOptionsFromEnv()
-	if err != nil {
-		t.Fatalf("Unable to acquire credentials: %v", err)
-	}
+	th.AssertNoErr(t, err)
 
 	// Trim out unused fields.
 	ao.Username, ao.TenantID, ao.TenantName = "", "", ""
diff --git a/acceptance/rackspace/client_test.go b/acceptance/rackspace/client_test.go
index 825e3ac..61214c0 100644
--- a/acceptance/rackspace/client_test.go
+++ b/acceptance/rackspace/client_test.go
@@ -5,17 +5,17 @@
 import (
 	"testing"
 
+	"github.com/rackspace/gophercloud/acceptance/tools"
 	"github.com/rackspace/gophercloud/rackspace"
+	th "github.com/rackspace/gophercloud/testhelper"
 )
 
 func TestAuthenticatedClient(t *testing.T) {
 	// Obtain credentials from the environment.
 	ao, err := rackspace.AuthOptionsFromEnv()
-	if err != nil {
-		t.Fatalf("Unable to acquire credentials: %v", err)
-	}
+	th.AssertNoErr(t, err)
 
-	client, err := rackspace.AuthenticatedClient(ao)
+	client, err := rackspace.AuthenticatedClient(tools.OnlyRS(ao))
 	if err != nil {
 		t.Fatalf("Unable to authenticate: %v", err)
 	}
diff --git a/acceptance/rackspace/compute/v2/compute_test.go b/acceptance/rackspace/compute/v2/compute_test.go
index 3419c10..3ca6dc9 100644
--- a/acceptance/rackspace/compute/v2/compute_test.go
+++ b/acceptance/rackspace/compute/v2/compute_test.go
@@ -7,22 +7,24 @@
 	"os"
 
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/acceptance/tools"
 	"github.com/rackspace/gophercloud/rackspace"
 )
 
 func newClient() (*gophercloud.ServiceClient, error) {
 	// Obtain credentials from the environment.
-	options := gophercloud.AuthOptions{
-		Username: os.Getenv("RS_USERNAME"),
-		APIKey:   os.Getenv("RS_APIKEY"),
+	options, err := rackspace.AuthOptionsFromEnv()
+	if err != nil {
+		return nil, err
 	}
+	options = tools.OnlyRS(options)
 	region := os.Getenv("RS_REGION")
 
 	if options.Username == "" {
 		return nil, errors.New("Please provide a Rackspace username as RS_USERNAME.")
 	}
 	if options.APIKey == "" {
-		return nil, errors.New("Please provide a Rackspace API key as RS_APIKEY.")
+		return nil, errors.New("Please provide a Rackspace API key as RS_API_KEY.")
 	}
 	if region == "" {
 		return nil, errors.New("Please provide a Rackspace region as RS_REGION.")
diff --git a/acceptance/rackspace/identity/v2/identity_test.go b/acceptance/rackspace/identity/v2/identity_test.go
index 019a9e6..576e40f 100644
--- a/acceptance/rackspace/identity/v2/identity_test.go
+++ b/acceptance/rackspace/identity/v2/identity_test.go
@@ -3,7 +3,6 @@
 package v2
 
 import (
-	"os"
 	"testing"
 
 	"github.com/rackspace/gophercloud"
@@ -13,16 +12,15 @@
 
 func rackspaceAuthOptions(t *testing.T) gophercloud.AuthOptions {
 	// Obtain credentials from the environment.
-	options := gophercloud.AuthOptions{
-		Username: os.Getenv("RS_USERNAME"),
-		APIKey:   os.Getenv("RS_APIKEY"),
-	}
+	options, err := rackspace.AuthOptionsFromEnv()
+	th.AssertNoErr(t, err)
+	options = tools.OnlyRS(options)
 
 	if options.Username == "" {
 		t.Fatal("Please provide a Rackspace username as RS_USERNAME.")
 	}
 	if options.APIKey == "" {
-		t.Fatal("Please provide a Rackspace API key as RS_APIKEY.")
+		t.Fatal("Please provide a Rackspace API key as RS_API_KEY.")
 	}
 
 	return options
diff --git a/acceptance/rackspace/objectstorage/v1/common.go b/acceptance/rackspace/objectstorage/v1/common.go
index 6422203..59457c1 100644
--- a/acceptance/rackspace/objectstorage/v1/common.go
+++ b/acceptance/rackspace/objectstorage/v1/common.go
@@ -13,16 +13,15 @@
 
 func rackspaceAuthOptions(t *testing.T) gophercloud.AuthOptions {
 	// Obtain credentials from the environment.
-	options := gophercloud.AuthOptions{
-		Username: os.Getenv("RS_USERNAME"),
-		APIKey:   os.Getenv("RS_APIKEY"),
-	}
+	options, err := rackspace.AuthOptionsFromEnv()
+	th.AssertNoErr(t, err)
+	options = tools.OnlyRS(options)
 
 	if options.Username == "" {
 		t.Fatal("Please provide a Rackspace username as RS_USERNAME.")
 	}
 	if options.APIKey == "" {
-		t.Fatal("Please provide a Rackspace API key as RS_APIKEY.")
+		t.Fatal("Please provide a Rackspace API key as RS_API_KEY.")
 	}
 
 	return options
diff --git a/acceptance/tools/tools.go b/acceptance/tools/tools.go
index ffade12..b3f3ea7 100644
--- a/acceptance/tools/tools.go
+++ b/acceptance/tools/tools.go
@@ -5,12 +5,34 @@
 import (
 	"crypto/rand"
 	"errors"
+	"os"
 	"time"
+
+	"github.com/rackspace/gophercloud"
 )
 
 // ErrTimeout is returned if WaitFor takes longer than 300 second to happen.
 var ErrTimeout = errors.New("Timed out")
 
+// OnlyRS overrides the default Gophercloud behavior of using OS_-prefixed environment variables
+// if RS_ variables aren't present. Otherwise, they'll stomp over each other here in the acceptance
+// tests, where you need to have both defined.
+func OnlyRS(original gophercloud.AuthOptions) gophercloud.AuthOptions {
+	if os.Getenv("RS_AUTH_URL") == "" {
+		original.IdentityEndpoint = ""
+	}
+	if os.Getenv("RS_USERNAME") == "" {
+		original.Username = ""
+	}
+	if os.Getenv("RS_PASSWORD") == "" {
+		original.Password = ""
+	}
+	if os.Getenv("RS_API_KEY") == "" {
+		original.APIKey = ""
+	}
+	return original
+}
+
 // WaitFor polls a predicate function once per second to wait for a certain state to arrive.
 func WaitFor(predicate func() (bool, error)) error {
 	for i := 0; i < 300; i++ {
diff --git a/rackspace/auth_env.go b/rackspace/auth_env.go
index 1706cc4..5852c3c 100644
--- a/rackspace/auth_env.go
+++ b/rackspace/auth_env.go
@@ -10,21 +10,29 @@
 var nilOptions = gophercloud.AuthOptions{}
 
 // ErrNoAuthUrl, ErrNoUsername, and ErrNoPassword errors indicate of the
-// required RAX_AUTH_URL, RAX_USERNAME, or RAX_PASSWORD environment variables,
+// required RS_AUTH_URL, RS_USERNAME, or RS_PASSWORD environment variables,
 // respectively, remain undefined.  See the AuthOptions() function for more details.
 var (
-	ErrNoAuthURL  = fmt.Errorf("Environment variable RAX_AUTH_URL needs to be set.")
-	ErrNoUsername = fmt.Errorf("Environment variable RAX_USERNAME needs to be set.")
-	ErrNoPassword = fmt.Errorf("Environment variable RAX_API_KEY or RAX_PASSWORD needs to be set.")
+	ErrNoAuthURL  = fmt.Errorf("Environment variable RS_AUTH_URL or OS_AUTH_URL need to be set.")
+	ErrNoUsername = fmt.Errorf("Environment variable RS_USERNAME or OS_USERNAME need to be set.")
+	ErrNoPassword = fmt.Errorf("Environment variable RS_API_KEY or RS_PASSWORD needs to be set.")
 )
 
+func prefixedEnv(base string) string {
+	value := os.Getenv("RS_" + base)
+	if value == "" {
+		value = os.Getenv("OS_" + base)
+	}
+	return value
+}
+
 // AuthOptionsFromEnv fills out an identity.AuthOptions structure with the
-// settings found on the various Rackspace RAX_* environment variables.
+// settings found on the various Rackspace RS_* environment variables.
 func AuthOptionsFromEnv() (gophercloud.AuthOptions, error) {
-	authURL := os.Getenv("RAX_AUTH_URL")
-	username := os.Getenv("RAX_USERNAME")
-	password := os.Getenv("RAX_PASSWORD")
-	apiKey := os.Getenv("RAX_API_KEY")
+	authURL := prefixedEnv("AUTH_URL")
+	username := prefixedEnv("USERNAME")
+	password := prefixedEnv("PASSWORD")
+	apiKey := prefixedEnv("API_KEY")
 
 	if authURL == "" {
 		return nilOptions, ErrNoAuthURL
