Consume the new pagination in openstack.Client.
diff --git a/openstack/client.go b/openstack/client.go
index 39d39a8..891726a 100644
--- a/openstack/client.go
+++ b/openstack/client.go
@@ -192,58 +192,55 @@
 
 func v3endpointLocator(v3Client *gophercloud.ServiceClient, opts gophercloud.EndpointOpts) (string, error) {
 	// Discover the service we're interested in.
-	serviceResults, err := services3.List(v3Client, services3.ListOpts{ServiceType: opts.Type})
-	if err != nil {
-		return "", err
-	}
+	var services = make([]services3.Service, 0, 1)
+	var err error
+	services3.List(v3Client, services3.ListOpts{ServiceType: opts.Type}).EachPage(func(page gophercloud.Page) bool {
+		part, err := services3.ExtractServices(page)
+		if err != nil {
+			return false
+		}
 
-	allServiceResults, err := gophercloud.AllPages(serviceResults)
-	if err != nil {
-		return "", err
-	}
-	allServices := services3.AsServices(allServiceResults)
-
-	if opts.Name != "" {
-		filtered := make([]services3.Service, 0, 1)
-		for _, service := range allServices {
+		for _, service := range part {
 			if service.Name == opts.Name {
-				filtered = append(filtered, service)
+				services = append(services, service)
 			}
 		}
-		allServices = filtered
-	}
 
-	if len(allServices) == 0 {
-		return "", gophercloud.ErrServiceNotFound
-	}
-	if len(allServices) > 1 {
-		return "", fmt.Errorf("Discovered %d matching services: %#v", len(allServices), allServices)
-	}
-
-	service := allServices[0]
-
-	// Enumerate the endpoints available for this service.
-	endpointResults, err := endpoints3.List(v3Client, endpoints3.ListOpts{
-		Availability: opts.Availability,
-		ServiceID:    service.ID,
+		return true
 	})
 	if err != nil {
 		return "", err
 	}
-	allEndpoints, err := gophercloud.AllPages(endpointResults)
-	if err != nil {
-		return "", err
-	}
-	endpoints := endpoints3.AsEndpoints(allEndpoints)
 
-	if opts.Name != "" {
-		filtered := make([]endpoints3.Endpoint, 0, 1)
-		for _, endpoint := range endpoints {
+	if len(services) == 0 {
+		return "", gophercloud.ErrServiceNotFound
+	}
+	if len(services) > 1 {
+		return "", fmt.Errorf("Discovered %d matching services: %#v", len(services), services)
+	}
+	service := services[0]
+
+	// Enumerate the endpoints available for this service.
+	var endpoints []endpoints3.Endpoint
+	endpoints3.List(v3Client, endpoints3.ListOpts{
+		Availability: opts.Availability,
+		ServiceID:    service.ID,
+	}).EachPage(func(page gophercloud.Page) bool {
+		part, err := endpoints3.ExtractEndpoints(page)
+		if err != nil {
+			return false
+		}
+
+		for _, endpoint := range part {
 			if opts.Region == "" || endpoint.Region == opts.Region {
-				filtered = append(filtered, endpoint)
+				endpoints = append(endpoints, endpoint)
 			}
 		}
-		endpoints = filtered
+
+		return true
+	})
+	if err != nil {
+		return "", err
 	}
 
 	if len(endpoints) == 0 {
@@ -252,7 +249,6 @@
 	if len(endpoints) > 1 {
 		return "", fmt.Errorf("Discovered %d matching endpoints: %#v", len(endpoints), endpoints)
 	}
-
 	endpoint := endpoints[0]
 
 	return normalizeURL(endpoint.URL), nil