diff --git a/collections.go b/collections.go
index ba83965..1830ff0 100644
--- a/collections.go
+++ b/collections.go
@@ -41,7 +41,7 @@
 
 // EachPage iterates over each page returned by a Pager, yielding one at a time to a handler function.
 // Return "false" from the handler to prematurely stop iterating.
-func (p Pager) EachPage(handler func(Page) bool) error {
+func (p Pager) EachPage(handler func(Page) (bool, error)) error {
 	currentURL := p.initialURL
 	for {
 		currentPage, err := p.advance(currentURL)
@@ -49,7 +49,11 @@
 			return err
 		}
 
-		if !handler(currentPage) {
+		ok, err := handler(currentPage)
+		if err != nil {
+			return err
+		}
+		if !ok {
 			return nil
 		}
 
diff --git a/collections_test.go b/collections_test.go
index 665062b..b1fe6af 100644
--- a/collections_test.go
+++ b/collections_test.go
@@ -46,18 +46,18 @@
 
 func TestEnumerateSinglePaged(t *testing.T) {
 	callCount := 0
-	err := setupSinglePaged().EachPage(func(page Page) bool {
+	err := setupSinglePaged().EachPage(func(page Page) (bool, error) {
 		callCount++
 
 		expected := []int{1, 2, 3}
 		actual, err := ExtractSingleInts(page)
 		if err != nil {
-			t.Fatalf("Unexpected error extracting ints: %v", err)
+			return false, err
 		}
 		if !reflect.DeepEqual(expected, actual) {
 			t.Errorf("Expected %v, but was %v", expected, actual)
 		}
-		return true
+		return true, nil
 	})
 	if err != nil {
 		t.Fatalf("Unexpected error calling EachPage: %v", err)
@@ -103,11 +103,10 @@
 	pager := createLinked(t)
 
 	callCount := 0
-	err := pager.EachPage(func(page Page) bool {
+	err := pager.EachPage(func(page Page) (bool, error) {
 		actual, err := ExtractLinkedInts(page)
 		if err != nil {
-			t.Errorf("Unable to extract ints from page: %v", err)
-			return false
+			return false, err
 		}
 
 		t.Logf("Handler invoked with %v", actual)
@@ -122,7 +121,7 @@
 			expected = []int{7, 8, 9}
 		default:
 			t.Fatalf("Unexpected call count: %d", callCount)
-			return false
+			return false, nil
 		}
 
 		if !reflect.DeepEqual(expected, actual) {
@@ -130,7 +129,7 @@
 		}
 
 		callCount++
-		return true
+		return true, nil
 	})
 	if err != nil {
 		t.Errorf("Unexpected error for page iteration: %v", err)
diff --git a/openstack/client.go b/openstack/client.go
index 891726a..a5d0bc8 100644
--- a/openstack/client.go
+++ b/openstack/client.go
@@ -193,11 +193,11 @@
 func v3endpointLocator(v3Client *gophercloud.ServiceClient, opts gophercloud.EndpointOpts) (string, error) {
 	// Discover the service we're interested in.
 	var services = make([]services3.Service, 0, 1)
-	var err error
-	services3.List(v3Client, services3.ListOpts{ServiceType: opts.Type}).EachPage(func(page gophercloud.Page) bool {
+	servicePager := services3.List(v3Client, services3.ListOpts{ServiceType: opts.Type})
+	err := servicePager.EachPage(func(page gophercloud.Page) (bool, error) {
 		part, err := services3.ExtractServices(page)
 		if err != nil {
-			return false
+			return false, err
 		}
 
 		for _, service := range part {
@@ -206,7 +206,7 @@
 			}
 		}
 
-		return true
+		return true, nil
 	})
 	if err != nil {
 		return "", err
@@ -222,13 +222,14 @@
 
 	// Enumerate the endpoints available for this service.
 	var endpoints []endpoints3.Endpoint
-	endpoints3.List(v3Client, endpoints3.ListOpts{
+	endpointPager := endpoints3.List(v3Client, endpoints3.ListOpts{
 		Availability: opts.Availability,
 		ServiceID:    service.ID,
-	}).EachPage(func(page gophercloud.Page) bool {
+	})
+	err = endpointPager.EachPage(func(page gophercloud.Page) (bool, error) {
 		part, err := endpoints3.ExtractEndpoints(page)
 		if err != nil {
-			return false
+			return false, err
 		}
 
 		for _, endpoint := range part {
@@ -237,7 +238,7 @@
 			}
 		}
 
-		return true
+		return true, nil
 	})
 	if err != nil {
 		return "", err
diff --git a/openstack/identity/v3/endpoints/requests_test.go b/openstack/identity/v3/endpoints/requests_test.go
index 70dfd8e..f988770 100644
--- a/openstack/identity/v3/endpoints/requests_test.go
+++ b/openstack/identity/v3/endpoints/requests_test.go
@@ -128,12 +128,12 @@
 	client := serviceClient()
 
 	count := 0
-	List(client, ListOpts{}).EachPage(func(page gophercloud.Page) bool {
+	List(client, ListOpts{}).EachPage(func(page gophercloud.Page) (bool, error) {
 		count++
 		actual, err := ExtractEndpoints(page)
 		if err != nil {
 			t.Errorf("Failed to extract endpoints: %v", err)
-			return false
+			return false, err
 		}
 
 		expected := []Endpoint{
@@ -159,7 +159,7 @@
 			t.Errorf("Expected %#v, got %#v", expected, actual)
 		}
 
-		return true
+		return true, nil
 	})
 	if count != 1 {
 		t.Errorf("Expected 1 page, got %d", count)
diff --git a/openstack/identity/v3/services/requests_test.go b/openstack/identity/v3/services/requests_test.go
index 9fea519..59cefe3 100644
--- a/openstack/identity/v3/services/requests_test.go
+++ b/openstack/identity/v3/services/requests_test.go
@@ -99,12 +99,11 @@
 	client := serviceClient()
 
 	count := 0
-	List(client, ListOpts{}).EachPage(func(page gophercloud.Page) bool {
+	err := List(client, ListOpts{}).EachPage(func(page gophercloud.Page) (bool, error) {
 		count++
 		actual, err := ExtractServices(page)
 		if err != nil {
-			t.Errorf("Unexpected error extracting services: %v", err)
-			return false
+			return false, err
 		}
 
 		desc0 := "Service One"
@@ -128,8 +127,11 @@
 			t.Errorf("Expected %#v, got %#v", expected, actual)
 		}
 
-		return true
+		return true, nil
 	})
+	if err != nil {
+		t.Errorf("Unexpected error while paging: %v", err)
+	}
 	if count != 1 {
 		t.Errorf("Expected 1 page, got %d", count)
 	}
