diff --git a/acceptance/openstack/objectstorage/v1/containers_test.go b/acceptance/openstack/objectstorage/v1/containers_test.go
index 8f80522..4e361aa 100644
--- a/acceptance/openstack/objectstorage/v1/containers_test.go
+++ b/acceptance/openstack/objectstorage/v1/containers_test.go
@@ -46,12 +46,7 @@
 
 	// List the numContainer names that were just created. To just list those,
 	// the 'prefix' parameter is used.
-	pager := containers.List(client, containers.ListOpts{Full: true, Prefix: "gophercloud-test-container-"})
-	if pager.Err != nil {
-		t.Error(err)
-		return
-	}
-	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+	err = containers.List(client, containers.ListOpts{Full: true, Prefix: "gophercloud-test-container-"}).EachPage(func(page pagination.Page) (bool, error) {
 		containerList, err := containers.ExtractInfo(page)
 		if err != nil {
 			t.Error(err)
@@ -68,8 +63,7 @@
 	}
 
 	// List the info for the numContainer containers that were created.
-	pager = containers.List(client, containers.ListOpts{Full: false, Prefix: "gophercloud-test-container-"})
-	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+	err = containers.List(client, containers.ListOpts{Full: false, Prefix: "gophercloud-test-container-"}).EachPage(func(page pagination.Page) (bool, error) {
 		containerList, err := containers.ExtractNames(page)
 		if err != nil {
 			return false, err
diff --git a/acceptance/openstack/objectstorage/v1/objects_test.go b/acceptance/openstack/objectstorage/v1/objects_test.go
index 66cb8e7..b8dfa40 100644
--- a/acceptance/openstack/objectstorage/v1/objects_test.go
+++ b/acceptance/openstack/objectstorage/v1/objects_test.go
@@ -64,12 +64,8 @@
 		}
 	}()
 
-	pager := objects.List(client, cName, objects.ListOpts{Full: false, Prefix: "test-object-"})
-	if pager.Err != nil {
-		t.Fatalf("Pager error: %v", pager.Err)
-	}
 	ons := make([]string, 0, len(oNames))
-	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+	err = objects.List(client, cName, objects.ListOpts{Full: false, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) {
 		names, err := objects.ExtractNames(page)
 		if err != nil {
 			return false, err
@@ -87,12 +83,8 @@
 		return
 	}
 
-	pager = objects.List(client, cName, objects.ListOpts{Full: true, Prefix: "test-object-"})
-	if pager.Err != nil {
-		t.Fatalf("Pager error: %v", pager.Err)
-	}
 	ois := make([]objects.Object, 0, len(oNames))
-	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+	err = objects.List(client, cName, objects.ListOpts{Full: true, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) {
 		info, err := objects.ExtractInfo(page)
 		if err != nil {
 			return false, nil
diff --git a/pagination/pager.go b/pagination/pager.go
index cc1c048..22d6d84 100644
--- a/pagination/pager.go
+++ b/pagination/pager.go
@@ -68,6 +68,9 @@
 // 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)) error {
+	if p.Err != nil {
+		return p.Err
+	}
 	currentURL := p.initialURL
 	for {
 		currentPage, err := p.fetchNextPage(currentURL)
