Use a method to change the CreatePage function.
diff --git a/openstack/identity/v2/extensions/delegate.go b/openstack/identity/v2/extensions/delegate.go
index b3f921a..77bf7fb 100644
--- a/openstack/identity/v2/extensions/delegate.go
+++ b/openstack/identity/v2/extensions/delegate.go
@@ -79,11 +79,9 @@
 // List returns a Pager which allows you to iterate over the full collection of extensions.
 // It does not accept query parameters.
 func List(c *gophercloud.ServiceClient) pagination.Pager {
-	pager := common.List(c)
-	pager.CreatePage = func(r pagination.LastHTTPResponse) pagination.Page {
+	return common.List(c).WithPageCreator(func(r pagination.LastHTTPResponse) pagination.Page {
 		return ExtensionPage{
 			ExtensionPage: common.ExtensionPage{SinglePageBase: pagination.SinglePageBase(r)},
 		}
-	}
-	return pager
+	})
 }
diff --git a/pagination/pager.go b/pagination/pager.go
index 50ea055..75fe408 100644
--- a/pagination/pager.go
+++ b/pagination/pager.go
@@ -31,9 +31,9 @@
 type Pager struct {
 	client *gophercloud.ServiceClient
 
-	InitialURL string
+	initialURL string
 
-	CreatePage func(r LastHTTPResponse) Page
+	createPage func(r LastHTTPResponse) Page
 
 	Err error
 
@@ -46,8 +46,18 @@
 func NewPager(client *gophercloud.ServiceClient, initialURL string, createPage func(r LastHTTPResponse) Page) Pager {
 	return Pager{
 		client:     client,
-		InitialURL: initialURL,
-		CreatePage: createPage,
+		initialURL: initialURL,
+		createPage: createPage,
+	}
+}
+
+// WithPageCreator returns a new Pager that substitutes a different page creation function. This is
+// useful for overriding List functions in delegation.
+func (p Pager) WithPageCreator(createPage func(r LastHTTPResponse) Page) Pager {
+	return Pager{
+		client:     p.client,
+		initialURL: p.initialURL,
+		createPage: createPage,
 	}
 }
 
@@ -62,7 +72,7 @@
 		return nil, err
 	}
 
-	return p.CreatePage(remembered), nil
+	return p.createPage(remembered), nil
 }
 
 // EachPage iterates over each page returned by a Pager, yielding one at a time to a handler function.
@@ -71,7 +81,7 @@
 	if p.Err != nil {
 		return p.Err
 	}
-	currentURL := p.InitialURL
+	currentURL := p.initialURL
 	for {
 		currentPage, err := p.fetchNextPage(currentURL)
 		if err != nil {
diff --git a/rackspace/identity/v2/extensions/delegate.go b/rackspace/identity/v2/extensions/delegate.go
index ffbcf92..3500cfd 100644
--- a/rackspace/identity/v2/extensions/delegate.go
+++ b/rackspace/identity/v2/extensions/delegate.go
@@ -43,11 +43,9 @@
 // List returns a Pager which allows you to iterate over the full collection of extensions.
 // It does not accept query parameters.
 func List(c *gophercloud.ServiceClient) pagination.Pager {
-	pager := os.List(c)
-	pager.CreatePage = func(r pagination.LastHTTPResponse) pagination.Page {
+	return os.List(c).WithPageCreator(func(r pagination.LastHTTPResponse) pagination.Page {
 		return ExtensionPage{
 			ExtensionPage: common.ExtensionPage{SinglePageBase: pagination.SinglePageBase(r)},
 		}
-	}
-	return pager
+	})
 }