diff --git a/pagination/linked.go b/pagination/linked.go
index 3b26013..fc88a55 100644
--- a/pagination/linked.go
+++ b/pagination/linked.go
@@ -1,9 +1,6 @@
 package pagination
 
-import (
-	"github.com/mitchellh/mapstructure"
-	"github.com/rackspace/gophercloud"
-)
+import "github.com/mitchellh/mapstructure"
 
 // LinkedPageBase may be embedded to implement a page that provides navigational "Next" and "Previous" links within its result.
 type LinkedPageBase LastHTTPResponse
@@ -30,25 +27,3 @@
 
 	return *r.Links.Next, nil
 }
-
-// NewLinkedPager creates a Pager that uses a "links" element in the JSON response to locate the next page.
-func NewLinkedPager(client *gophercloud.ServiceClient, initialURL string, createPage func(resp LastHTTPResponse) Page) Pager {
-	fetchNextPage := func(url string) (Page, error) {
-		resp, err := Request(client, url)
-		if err != nil {
-			return nil, err
-		}
-
-		cp, err := RememberHTTPResponse(resp)
-		if err != nil {
-			return nil, err
-		}
-
-		return createPage(cp), nil
-	}
-
-	return Pager{
-		initialURL:    initialURL,
-		fetchNextPage: fetchNextPage,
-	}
-}
diff --git a/pagination/linked_test.go b/pagination/linked_test.go
index 6346126..2093755 100644
--- a/pagination/linked_test.go
+++ b/pagination/linked_test.go
@@ -61,7 +61,7 @@
 		return LinkedPageResult{LinkedPageBase(r)}
 	}
 
-	return NewLinkedPager(client, testhelper.Server.URL+"/page1", createPage)
+	return NewPager(client, testhelper.Server.URL+"/page1", createPage)
 }
 
 func TestEnumerateLinked(t *testing.T) {
diff --git a/pagination/marker.go b/pagination/marker.go
index 00ad88e..41b493a 100644
--- a/pagination/marker.go
+++ b/pagination/marker.go
@@ -1,7 +1,5 @@
 package pagination
 
-import "github.com/rackspace/gophercloud"
-
 // MarkerPage is a stricter Page interface that describes additional functionality required for use with NewMarkerPager.
 // For convenience, embed the MarkedPageBase struct.
 type MarkerPage interface {
@@ -34,27 +32,3 @@
 
 	return currentURL.String(), nil
 }
-
-// NewMarkerPager creates a Pager that iterates over successive pages by issuing requests with a "marker" parameter set to the
-// final element of the previous Page.
-func NewMarkerPager(client *gophercloud.ServiceClient, initialURL string, createPage func(resp LastHTTPResponse) MarkerPage) Pager {
-
-	fetchNextPage := func(currentURL string) (Page, error) {
-		resp, err := Request(client, currentURL)
-		if err != nil {
-			return nullPage{}, err
-		}
-
-		last, err := RememberHTTPResponse(resp)
-		if err != nil {
-			return nullPage{}, err
-		}
-
-		return createPage(last), nil
-	}
-
-	return Pager{
-		initialURL:    initialURL,
-		fetchNextPage: fetchNextPage,
-	}
-}
diff --git a/pagination/marker_test.go b/pagination/marker_test.go
index 742a1d1..e30264c 100644
--- a/pagination/marker_test.go
+++ b/pagination/marker_test.go
@@ -56,13 +56,13 @@
 
 	client := createClient()
 
-	createPage := func(r LastHTTPResponse) MarkerPage {
+	createPage := func(r LastHTTPResponse) Page {
 		p := MarkerPageResult{MarkerPageBase{LastHTTPResponse: r}}
 		p.MarkerPageBase.Owner = p
 		return p
 	}
 
-	return NewMarkerPager(client, testhelper.Server.URL+"/page", createPage)
+	return NewPager(client, testhelper.Server.URL+"/page", createPage)
 }
 
 func ExtractMarkerStrings(page Page) ([]string, error) {
diff --git a/pagination/pager.go b/pagination/pager.go
index c95d744..52ebb96 100644
--- a/pagination/pager.go
+++ b/pagination/pager.go
@@ -1,6 +1,10 @@
 package pagination
 
-import "errors"
+import (
+	"errors"
+
+	"github.com/rackspace/gophercloud"
+)
 
 var (
 	// ErrPageNotAvailable is returned from a Pager when a next or previous page is requested, but does not exist.
@@ -27,18 +31,35 @@
 type Pager struct {
 	initialURL string
 
-	fetchNextPage func(string) (Page, error)
+	client *gophercloud.ServiceClient
+
+	createPage func(r LastHTTPResponse) Page
 }
 
 // NewPager constructs a manually-configured pager.
 // Supply the URL for the first page, a function that requests a specific page given a URL, and a function that counts a page.
-func NewPager(initialURL string, fetchNextPage func(string) (Page, error)) Pager {
+func NewPager(client *gophercloud.ServiceClient, initialURL string, createPage func(r LastHTTPResponse) Page) Pager {
 	return Pager{
-		initialURL:    initialURL,
-		fetchNextPage: fetchNextPage,
+		initialURL: initialURL,
+		client:     client,
+		createPage: createPage,
 	}
 }
 
+func (p Pager) fetchNextPage(url string) (Page, error) {
+	resp, err := Request(p.client, url)
+	if err != nil {
+		return nil, err
+	}
+
+	remembered, err := RememberHTTPResponse(resp)
+	if err != nil {
+		return nil, err
+	}
+
+	return p.createPage(remembered), nil
+}
+
 // 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 {
diff --git a/pagination/single.go b/pagination/single.go
index 0b5ce09..a7f6fde 100644
--- a/pagination/single.go
+++ b/pagination/single.go
@@ -1,7 +1,5 @@
 package pagination
 
-import "github.com/rackspace/gophercloud"
-
 // SinglePageBase may be embedded in a Page that contains all of the results from an operation at once.
 type SinglePageBase LastHTTPResponse
 
@@ -9,30 +7,3 @@
 func (current SinglePageBase) NextPageURL() (string, error) {
 	return "", nil
 }
-
-// NewSinglePager constructs a Pager that "iterates" over a single Page.
-// Supply the URL to request and a function that creates a Page of the appropriate type.
-func NewSinglePager(client *gophercloud.ServiceClient, onlyURL string, createPage func(resp LastHTTPResponse) Page) Pager {
-	consumed := false
-	single := func(_ string) (Page, error) {
-		if !consumed {
-			consumed = true
-			resp, err := Request(client, onlyURL)
-			if err != nil {
-				return nullPage{}, err
-			}
-
-			cp, err := RememberHTTPResponse(resp)
-			if err != nil {
-				return nullPage{}, err
-			}
-			return createPage(cp), nil
-		}
-		return nullPage{}, ErrPageNotAvailable
-	}
-
-	return Pager{
-		initialURL:    "",
-		fetchNextPage: single,
-	}
-}
diff --git a/pagination/single_test.go b/pagination/single_test.go
index a470b6b..31003e5 100644
--- a/pagination/single_test.go
+++ b/pagination/single_test.go
@@ -49,7 +49,7 @@
 		return SinglePageResult{SinglePageBase(r)}
 	}
 
-	return NewSinglePager(client, testhelper.Server.URL+"/only", createPage)
+	return NewPager(client, testhelper.Server.URL+"/only", createPage)
 }
 
 func TestEnumerateSinglePaged(t *testing.T) {
