diff --git a/openstack/utils/client.go b/openstack/utils/client.go
new file mode 100644
index 0000000..d1f0359
--- /dev/null
+++ b/openstack/utils/client.go
@@ -0,0 +1,102 @@
+package utils
+
+import (
+	"fmt"
+	identity "github.com/rackspace/gophercloud/openstack/identity/v2"
+)
+
+// Client contains information that defines a generic Openstack Client.
+type Client struct {
+	// Endpoint is the URL against which to authenticate.
+	Endpoint string
+	// Authority holds the results of authenticating against the Endpoint.
+	Authority identity.AuthResults
+	// Options holds the authentication options. Useful for auto-reauthentication.
+	Options identity.AuthOptions
+}
+
+// EndpointOpts contains options for finding an endpoint for an Openstack Client.
+type EndpointOpts struct {
+	// Type is the service type for the client (e.g., "compute", "object-store").
+	// Type is a required field.
+	Type string
+	// Name is the service name for the client (e.g., "nova").
+	// Name is not a required field, but it is used if present. Services can have the
+	// same Type but different Name, which is one example of when both Type and Name are needed.
+	Name string
+	// Region is the region in which the service resides.
+	Region string
+	// URLType is they type of endpoint to be returned (e.g., "public", "private").
+	// URLType is not required, and defaults to "public".
+	URLType string
+}
+
+// NewClient returns a generic Openstack Client of type identity.Client. This is a helper function
+// to create a client for the various Openstack services.
+// Example (error checking omitted for brevity):
+//		ao, err := utils.AuthOptions()
+//		c, err := identity.NewClient(ao, identity.EndpointOpts{
+//			Type: "compute",
+//			Name: "nova",
+//		})
+//		serversClient := servers.NewClient(c.Endpoint, c.Authority, c.Options)
+func NewClient(ao identity.AuthOptions, eo EndpointOpts) (Client, error) {
+	client := Client{
+		Options: ao,
+	}
+
+	ar, err := identity.Authenticate(ao)
+	if err != nil {
+		return client, err
+	}
+
+	client.Authority = ar
+
+	sc, err := identity.GetServiceCatalog(ar)
+	if err != nil {
+		return client, err
+	}
+
+	ces, err := sc.CatalogEntries()
+	if err != nil {
+		return client, err
+	}
+
+	var eps []identity.Endpoint
+
+	if eo.Name != "" {
+		for _, ce := range ces {
+			if ce.Type == eo.Type && ce.Name == eo.Name {
+				eps = ce.Endpoints
+			}
+		}
+	} else {
+		for _, ce := range ces {
+			if ce.Type == eo.Type {
+				eps = ce.Endpoints
+			}
+		}
+	}
+
+	var rep string
+	for _, ep := range eps {
+		if ep.Region == eo.Region {
+			switch eo.URLType {
+			case "public":
+				rep = ep.PublicURL
+			case "private":
+				rep = ep.InternalURL
+			default:
+				rep = ep.PublicURL
+			}
+		}
+	}
+
+	if rep != "" {
+		client.Endpoint = rep
+	} else {
+		return client, fmt.Errorf("No endpoint for given service type (%s) name (%s) and region (%s)", eo.Type, eo.Name, eo.Region)
+	}
+
+	return client, nil
+}
