openstack errors
diff --git a/openstack/auth_env.go b/openstack/auth_env.go
index 41e41e4..2309783 100644
--- a/openstack/auth_env.go
+++ b/openstack/auth_env.go
@@ -1,7 +1,6 @@
 package openstack
 
 import (
-	"fmt"
 	"os"
 
 	"github.com/gophercloud/gophercloud"
@@ -9,14 +8,6 @@
 
 var nilOptions = gophercloud.AuthOptions{}
 
-// ErrNoAuthUrl, ErrNoUsername, and ErrNoPassword errors indicate of the required OS_AUTH_URL, OS_USERNAME, or OS_PASSWORD
-// environment variables, respectively, remain undefined.  See the AuthOptions() function for more details.
-var (
-	ErrNoAuthURL  = fmt.Errorf("Environment variable OS_AUTH_URL needs to be set.")
-	ErrNoUsername = fmt.Errorf("Environment variable OS_USERNAME needs to be set.")
-	ErrNoPassword = fmt.Errorf("Environment variable OS_PASSWORD needs to be set.")
-)
-
 // AuthOptionsFromEnv fills out an identity.AuthOptions structure with the settings found on the various OpenStack
 // OS_* environment variables.  The following variables provide sources of truth: OS_AUTH_URL, OS_USERNAME,
 // OS_PASSWORD, OS_TENANT_ID, and OS_TENANT_NAME.  Of these, OS_USERNAME, OS_PASSWORD, and OS_AUTH_URL must
@@ -32,15 +23,24 @@
 	domainName := os.Getenv("OS_DOMAIN_NAME")
 
 	if authURL == "" {
-		return nilOptions, ErrNoAuthURL
+		err := &ErrNoAuthURL{}
+		err.Function = "openstack.AuthOptionsFromEnv"
+		err.Argument = "authURL"
+		return nilOptions, err
 	}
 
 	if username == "" && userID == "" {
-		return nilOptions, ErrNoUsername
+		err := &ErrNoUsername{}
+		err.Function = "openstack.AuthOptionsFromEnv"
+		err.Argument = "username"
+		return nilOptions, err
 	}
 
 	if password == "" {
-		return nilOptions, ErrNoPassword
+		err := &ErrNoPassword{}
+		err.Function = "openstack.AuthOptionsFromEnv"
+		err.Argument = "password"
+		return nilOptions, err
 	}
 
 	ao := gophercloud.AuthOptions{