more consistent naming
diff --git a/openstack/networking/v2/extensions/external/results.go b/openstack/networking/v2/extensions/external/results.go
index 2c5173a..7e10c6d 100644
--- a/openstack/networking/v2/extensions/external/results.go
+++ b/openstack/networking/v2/extensions/external/results.go
@@ -67,11 +67,10 @@
 // ExtractList accepts a Page struct, specifically a NetworkPage struct, and
 // extracts the elements into a slice of NetworkExternal structs. In other
 // words, a generic collection is mapped into a relevant slice.
-func ExtractList(page pagination.Page) ([]NetworkExternal, error) {
-	r := page.(networks.NetworkPage)
+func ExtractList(r pagination.Page) ([]NetworkExternal, error) {
 	var s struct {
 		Networks []NetworkExternal `json:"networks" json:"networks"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(networks.NetworkPage)).ExtractInto(&s)
 	return s.Networks, err
 }
diff --git a/openstack/networking/v2/extensions/fwaas/firewalls/results.go b/openstack/networking/v2/extensions/fwaas/firewalls/results.go
index 2b4338c..ab6cf8e 100644
--- a/openstack/networking/v2/extensions/fwaas/firewalls/results.go
+++ b/openstack/networking/v2/extensions/fwaas/firewalls/results.go
@@ -38,11 +38,11 @@
 // NextPageURL is invoked when a paginated collection of firewalls has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page FirewallPage) NextPageURL() (string, error) {
+func (r FirewallPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"firewalls_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -50,19 +50,19 @@
 }
 
 // IsEmpty checks whether a FirewallPage struct is empty.
-func (page FirewallPage) IsEmpty() (bool, error) {
-	is, err := ExtractFirewalls(page)
+func (r FirewallPage) IsEmpty() (bool, error) {
+	is, err := ExtractFirewalls(r)
 	return len(is) == 0, err
 }
 
 // ExtractFirewalls accepts a Page struct, specifically a RouterPage struct,
 // and extracts the elements into a slice of Router structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractFirewalls(page pagination.Page) ([]Firewall, error) {
+func ExtractFirewalls(r pagination.Page) ([]Firewall, error) {
 	var s struct {
 		Firewalls []Firewall `json:"firewalls" json:"firewalls"`
 	}
-	err := (page.(FirewallPage)).ExtractInto(&s)
+	err := (r.(FirewallPage)).ExtractInto(&s)
 	return s.Firewalls, err
 }
 
diff --git a/openstack/networking/v2/extensions/fwaas/policies/results.go b/openstack/networking/v2/extensions/fwaas/policies/results.go
index d23c81d..7bdea5b 100644
--- a/openstack/networking/v2/extensions/fwaas/policies/results.go
+++ b/openstack/networking/v2/extensions/fwaas/policies/results.go
@@ -38,11 +38,11 @@
 // NextPageURL is invoked when a paginated collection of firewall policies has
 // reached the end of a page and the pager seeks to traverse over a new one.
 // In order to do this, it needs to construct the next page's URL.
-func (page PolicyPage) NextPageURL() (string, error) {
+func (r PolicyPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"firewall_policies_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -50,19 +50,19 @@
 }
 
 // IsEmpty checks whether a PolicyPage struct is empty.
-func (page PolicyPage) IsEmpty() (bool, error) {
-	is, err := ExtractPolicies(page)
+func (r PolicyPage) IsEmpty() (bool, error) {
+	is, err := ExtractPolicies(r)
 	return len(is) == 0, err
 }
 
 // ExtractPolicies accepts a Page struct, specifically a RouterPage struct,
 // and extracts the elements into a slice of Router structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractPolicies(page pagination.Page) ([]Policy, error) {
+func ExtractPolicies(r pagination.Page) ([]Policy, error) {
 	var s struct {
 		Policies []Policy `json:"firewall_policies"`
 	}
-	err := (page.(PolicyPage)).ExtractInto(&s)
+	err := (r.(PolicyPage)).ExtractInto(&s)
 	return s.Policies, err
 }
 
diff --git a/openstack/networking/v2/extensions/fwaas/rules/results.go b/openstack/networking/v2/extensions/fwaas/rules/results.go
index 4afdf22..c44e5a9 100644
--- a/openstack/networking/v2/extensions/fwaas/rules/results.go
+++ b/openstack/networking/v2/extensions/fwaas/rules/results.go
@@ -33,11 +33,11 @@
 // NextPageURL is invoked when a paginated collection of firewall rules has
 // reached the end of a page and the pager seeks to traverse over a new one.
 // In order to do this, it needs to construct the next page's URL.
-func (page RulePage) NextPageURL() (string, error) {
+func (r RulePage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"firewall_rules_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -45,20 +45,19 @@
 }
 
 // IsEmpty checks whether a RulePage struct is empty.
-func (p RulePage) IsEmpty() (bool, error) {
-	is, err := ExtractRules(p)
+func (r RulePage) IsEmpty() (bool, error) {
+	is, err := ExtractRules(r)
 	return len(is) == 0, err
 }
 
 // ExtractRules accepts a Page struct, specifically a RouterPage struct,
 // and extracts the elements into a slice of Router structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractRules(page pagination.Page) ([]Rule, error) {
-	r := page.(RulePage)
+func ExtractRules(r pagination.Page) ([]Rule, error) {
 	var s struct {
 		Rules []Rule `json:"firewall_rules"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(RulePage)).ExtractInto(&s)
 	return s.Rules, err
 }
 
diff --git a/openstack/networking/v2/extensions/layer3/floatingips/results.go b/openstack/networking/v2/extensions/layer3/floatingips/results.go
index c33b139..838ca2c 100644
--- a/openstack/networking/v2/extensions/layer3/floatingips/results.go
+++ b/openstack/networking/v2/extensions/layer3/floatingips/results.go
@@ -78,11 +78,11 @@
 // NextPageURL is invoked when a paginated collection of floating IPs has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page FloatingIPPage) NextPageURL() (string, error) {
+func (r FloatingIPPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"floatingips_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -90,19 +90,18 @@
 }
 
 // IsEmpty checks whether a NetworkPage struct is empty.
-func (page FloatingIPPage) IsEmpty() (bool, error) {
-	is, err := ExtractFloatingIPs(page)
+func (r FloatingIPPage) IsEmpty() (bool, error) {
+	is, err := ExtractFloatingIPs(r)
 	return len(is) == 0, err
 }
 
 // ExtractFloatingIPs accepts a Page struct, specifically a FloatingIPPage struct,
 // and extracts the elements into a slice of FloatingIP structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractFloatingIPs(page pagination.Page) ([]FloatingIP, error) {
-	r := page.(FloatingIPPage)
+func ExtractFloatingIPs(r pagination.Page) ([]FloatingIP, error) {
 	var s struct {
 		FloatingIPs []FloatingIP `json:"floatingips"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(FloatingIPPage)).ExtractInto(&s)
 	return s.FloatingIPs, err
 }
diff --git a/openstack/networking/v2/extensions/layer3/routers/results.go b/openstack/networking/v2/extensions/layer3/routers/results.go
index e26f243..d849d45 100644
--- a/openstack/networking/v2/extensions/layer3/routers/results.go
+++ b/openstack/networking/v2/extensions/layer3/routers/results.go
@@ -60,11 +60,11 @@
 // NextPageURL is invoked when a paginated collection of routers has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page RouterPage) NextPageURL() (string, error) {
+func (r RouterPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"routers_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -72,20 +72,19 @@
 }
 
 // IsEmpty checks whether a RouterPage struct is empty.
-func (page RouterPage) IsEmpty() (bool, error) {
-	is, err := ExtractRouters(page)
+func (r RouterPage) IsEmpty() (bool, error) {
+	is, err := ExtractRouters(r)
 	return len(is) == 0, err
 }
 
 // ExtractRouters accepts a Page struct, specifically a RouterPage struct,
 // and extracts the elements into a slice of Router structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractRouters(page pagination.Page) ([]Router, error) {
-	r := page.(RouterPage)
+func ExtractRouters(r pagination.Page) ([]Router, error) {
 	var s struct {
 		Routers []Router `json:"routers"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(RouterPage)).ExtractInto(&s)
 	return s.Routers, err
 }
 
diff --git a/openstack/networking/v2/extensions/lbaas/members/results.go b/openstack/networking/v2/extensions/lbaas/members/results.go
index ae9f341..933e1ae 100644
--- a/openstack/networking/v2/extensions/lbaas/members/results.go
+++ b/openstack/networking/v2/extensions/lbaas/members/results.go
@@ -42,11 +42,11 @@
 // NextPageURL is invoked when a paginated collection of members has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page MemberPage) NextPageURL() (string, error) {
+func (r MemberPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"members_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -54,20 +54,19 @@
 }
 
 // IsEmpty checks whether a MemberPage struct is empty.
-func (page MemberPage) IsEmpty() (bool, error) {
-	is, err := ExtractMembers(page)
+func (r MemberPage) IsEmpty() (bool, error) {
+	is, err := ExtractMembers(r)
 	return len(is) == 0, err
 }
 
 // ExtractMembers accepts a Page struct, specifically a MemberPage struct,
 // and extracts the elements into a slice of Member structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractMembers(page pagination.Page) ([]Member, error) {
-	r := page.(MemberPage)
+func ExtractMembers(r pagination.Page) ([]Member, error) {
 	var s struct {
 		Members []Member `json:"members"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(MemberPage)).ExtractInto(&s)
 	return s.Members, err
 }
 
diff --git a/openstack/networking/v2/extensions/lbaas/monitors/results.go b/openstack/networking/v2/extensions/lbaas/monitors/results.go
index 86c24bd..11ba7df 100644
--- a/openstack/networking/v2/extensions/lbaas/monitors/results.go
+++ b/openstack/networking/v2/extensions/lbaas/monitors/results.go
@@ -70,11 +70,11 @@
 // NextPageURL is invoked when a paginated collection of monitors has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page MonitorPage) NextPageURL() (string, error) {
+func (r MonitorPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"health_monitors_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -83,20 +83,19 @@
 }
 
 // IsEmpty checks whether a PoolPage struct is empty.
-func (page MonitorPage) IsEmpty() (bool, error) {
-	is, err := ExtractMonitors(page)
+func (r MonitorPage) IsEmpty() (bool, error) {
+	is, err := ExtractMonitors(r)
 	return len(is) == 0, err
 }
 
 // ExtractMonitors accepts a Page struct, specifically a MonitorPage struct,
 // and extracts the elements into a slice of Monitor structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractMonitors(page pagination.Page) ([]Monitor, error) {
-	r := page.(MonitorPage)
+func ExtractMonitors(r pagination.Page) ([]Monitor, error) {
 	var s struct {
 		Monitors []Monitor `json:"health_monitors"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(MonitorPage)).ExtractInto(&s)
 	return s.Monitors, err
 }
 
diff --git a/openstack/networking/v2/extensions/lbaas/pools/results.go b/openstack/networking/v2/extensions/lbaas/pools/results.go
index 135046a..2ca1963 100644
--- a/openstack/networking/v2/extensions/lbaas/pools/results.go
+++ b/openstack/networking/v2/extensions/lbaas/pools/results.go
@@ -64,11 +64,11 @@
 // NextPageURL is invoked when a paginated collection of pools has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page PoolPage) NextPageURL() (string, error) {
+func (r PoolPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"pools_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -76,20 +76,19 @@
 }
 
 // IsEmpty checks whether a PoolPage struct is empty.
-func (page PoolPage) IsEmpty() (bool, error) {
-	is, err := ExtractPools(page)
+func (r PoolPage) IsEmpty() (bool, error) {
+	is, err := ExtractPools(r)
 	return len(is) == 0, err
 }
 
 // ExtractPools accepts a Page struct, specifically a RouterPage struct,
 // and extracts the elements into a slice of Router structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractPools(page pagination.Page) ([]Pool, error) {
-	r := page.(PoolPage)
+func ExtractPools(r pagination.Page) ([]Pool, error) {
 	var s struct {
 		Pools []Pool `json:"pools"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(PoolPage)).ExtractInto(&s)
 	return s.Pools, err
 }
 
diff --git a/openstack/networking/v2/extensions/lbaas/vips/results.go b/openstack/networking/v2/extensions/lbaas/vips/results.go
index 398c981..7ac7e79 100644
--- a/openstack/networking/v2/extensions/lbaas/vips/results.go
+++ b/openstack/networking/v2/extensions/lbaas/vips/results.go
@@ -89,11 +89,11 @@
 // NextPageURL is invoked when a paginated collection of routers has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page VIPPage) NextPageURL() (string, error) {
+func (r VIPPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"vips_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -101,20 +101,19 @@
 }
 
 // IsEmpty checks whether a VIPPage struct is empty.
-func (page VIPPage) IsEmpty() (bool, error) {
-	is, err := ExtractVIPs(page)
+func (r VIPPage) IsEmpty() (bool, error) {
+	is, err := ExtractVIPs(r)
 	return len(is) == 0, err
 }
 
 // ExtractVIPs accepts a Page struct, specifically a VIPPage struct,
 // and extracts the elements into a slice of VirtualIP structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractVIPs(page pagination.Page) ([]VirtualIP, error) {
-	r := page.(VIPPage)
+func ExtractVIPs(r pagination.Page) ([]VirtualIP, error) {
 	var s struct {
 		VIPs []VirtualIP `json:"vips"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(VIPPage)).ExtractInto(&s)
 	return s.VIPs, err
 }
 
diff --git a/openstack/networking/v2/extensions/provider/results.go b/openstack/networking/v2/extensions/provider/results.go
index f437461..394045a 100755
--- a/openstack/networking/v2/extensions/provider/results.go
+++ b/openstack/networking/v2/extensions/provider/results.go
@@ -94,11 +94,10 @@
 // ExtractList accepts a Page struct, specifically a NetworkPage struct, and
 // extracts the elements into a slice of NetworkExtAttrs structs. In other
 // words, a generic collection is mapped into a relevant slice.
-func ExtractList(page pagination.Page) ([]NetworkExtAttrs, error) {
-	r := page.(networks.NetworkPage)
+func ExtractList(r pagination.Page) ([]NetworkExtAttrs, error) {
 	var s struct {
 		Networks []NetworkExtAttrs `json:"networks" json:"networks"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(networks.NetworkPage)).ExtractInto(&s)
 	return s.Networks, err
 }
diff --git a/openstack/networking/v2/extensions/security/groups/results.go b/openstack/networking/v2/extensions/security/groups/results.go
index 7479e19..ea3ad65 100644
--- a/openstack/networking/v2/extensions/security/groups/results.go
+++ b/openstack/networking/v2/extensions/security/groups/results.go
@@ -36,11 +36,11 @@
 // NextPageURL is invoked when a paginated collection of security groups has
 // reached the end of a page and the pager seeks to traverse over a new one. In
 // order to do this, it needs to construct the next page's URL.
-func (page SecGroupPage) NextPageURL() (string, error) {
+func (r SecGroupPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"security_groups_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -49,20 +49,19 @@
 }
 
 // IsEmpty checks whether a SecGroupPage struct is empty.
-func (page SecGroupPage) IsEmpty() (bool, error) {
-	is, err := ExtractGroups(page)
+func (r SecGroupPage) IsEmpty() (bool, error) {
+	is, err := ExtractGroups(r)
 	return len(is) == 0, err
 }
 
 // ExtractGroups accepts a Page struct, specifically a SecGroupPage struct,
 // and extracts the elements into a slice of SecGroup structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractGroups(page pagination.Page) ([]SecGroup, error) {
-	r := page.(SecGroupPage)
+func ExtractGroups(r pagination.Page) ([]SecGroup, error) {
 	var s struct {
 		SecGroups []SecGroup `json:"security_groups"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(SecGroupPage)).ExtractInto(&s)
 	return s.SecGroups, err
 }
 
diff --git a/openstack/networking/v2/extensions/security/rules/results.go b/openstack/networking/v2/extensions/security/rules/results.go
index a9d6f1b..18476a6 100644
--- a/openstack/networking/v2/extensions/security/rules/results.go
+++ b/openstack/networking/v2/extensions/security/rules/results.go
@@ -61,11 +61,11 @@
 // NextPageURL is invoked when a paginated collection of security group rules has
 // reached the end of a page and the pager seeks to traverse over a new one. In
 // order to do this, it needs to construct the next page's URL.
-func (page SecGroupRulePage) NextPageURL() (string, error) {
+func (r SecGroupRulePage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"security_group_rules_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -73,20 +73,19 @@
 }
 
 // IsEmpty checks whether a SecGroupRulePage struct is empty.
-func (page SecGroupRulePage) IsEmpty() (bool, error) {
-	is, err := ExtractRules(page)
+func (r SecGroupRulePage) IsEmpty() (bool, error) {
+	is, err := ExtractRules(r)
 	return len(is) == 0, err
 }
 
 // ExtractRules accepts a Page struct, specifically a SecGroupRulePage struct,
 // and extracts the elements into a slice of SecGroupRule structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractRules(page pagination.Page) ([]SecGroupRule, error) {
-	r := page.(SecGroupRulePage)
+func ExtractRules(r pagination.Page) ([]SecGroupRule, error) {
 	var s struct {
 		SecGroupRules []SecGroupRule `json:"security_group_rules"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(SecGroupRulePage)).ExtractInto(&s)
 	return s.SecGroupRules, err
 }
 
diff --git a/openstack/networking/v2/networks/results.go b/openstack/networking/v2/networks/results.go
index 7f64ddb..d928980 100644
--- a/openstack/networking/v2/networks/results.go
+++ b/openstack/networking/v2/networks/results.go
@@ -72,11 +72,11 @@
 // NextPageURL is invoked when a paginated collection of networks has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page NetworkPage) NextPageURL() (string, error) {
+func (r NetworkPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"networks_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -84,19 +84,18 @@
 }
 
 // IsEmpty checks whether a NetworkPage struct is empty.
-func (page NetworkPage) IsEmpty() (bool, error) {
-	is, err := ExtractNetworks(page)
+func (r NetworkPage) IsEmpty() (bool, error) {
+	is, err := ExtractNetworks(r)
 	return len(is) == 0, err
 }
 
 // ExtractNetworks accepts a Page struct, specifically a NetworkPage struct,
 // and extracts the elements into a slice of Network structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractNetworks(page pagination.Page) ([]Network, error) {
-	r := page.(NetworkPage)
+func ExtractNetworks(r pagination.Page) ([]Network, error) {
 	var s struct {
 		Networks []Network `json:"networks"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(NetworkPage)).ExtractInto(&s)
 	return s.Networks, err
 }
diff --git a/openstack/networking/v2/ports/results.go b/openstack/networking/v2/ports/results.go
index e757a54..57a1765 100644
--- a/openstack/networking/v2/ports/results.go
+++ b/openstack/networking/v2/ports/results.go
@@ -90,11 +90,11 @@
 // NextPageURL is invoked when a paginated collection of ports has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page PortPage) NextPageURL() (string, error) {
+func (r PortPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"ports_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -102,19 +102,18 @@
 }
 
 // IsEmpty checks whether a PortPage struct is empty.
-func (page PortPage) IsEmpty() (bool, error) {
-	is, err := ExtractPorts(page)
+func (r PortPage) IsEmpty() (bool, error) {
+	is, err := ExtractPorts(r)
 	return len(is) == 0, err
 }
 
 // ExtractPorts accepts a Page struct, specifically a PortPage struct,
 // and extracts the elements into a slice of Port structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractPorts(page pagination.Page) ([]Port, error) {
-	r := page.(PortPage)
+func ExtractPorts(r pagination.Page) ([]Port, error) {
 	var s struct {
 		Ports []Port `json:"ports"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(PortPage)).ExtractInto(&s)
 	return s.Ports, err
 }
diff --git a/openstack/networking/v2/subnets/results.go b/openstack/networking/v2/subnets/results.go
index 22cff1e..ab5cce1 100644
--- a/openstack/networking/v2/subnets/results.go
+++ b/openstack/networking/v2/subnets/results.go
@@ -88,11 +88,11 @@
 // NextPageURL is invoked when a paginated collection of subnets has reached
 // the end of a page and the pager seeks to traverse over a new one. In order
 // to do this, it needs to construct the next page's URL.
-func (page SubnetPage) NextPageURL() (string, error) {
+func (r SubnetPage) NextPageURL() (string, error) {
 	var s struct {
 		Links []gophercloud.Link `json:"subnets_links"`
 	}
-	err := page.ExtractInto(&s)
+	err := r.ExtractInto(&s)
 	if err != nil {
 		return "", err
 	}
@@ -100,18 +100,18 @@
 }
 
 // IsEmpty checks whether a SubnetPage struct is empty.
-func (page SubnetPage) IsEmpty() (bool, error) {
-	is, err := ExtractSubnets(page)
+func (r SubnetPage) IsEmpty() (bool, error) {
+	is, err := ExtractSubnets(r)
 	return len(is) == 0, err
 }
 
 // ExtractSubnets accepts a Page struct, specifically a SubnetPage struct,
 // and extracts the elements into a slice of Subnet structs. In other words,
 // a generic collection is mapped into a relevant slice.
-func ExtractSubnets(page pagination.Page) ([]Subnet, error) {
+func ExtractSubnets(r pagination.Page) ([]Subnet, error) {
 	var s struct {
 		Subnets []Subnet `json:"subnets"`
 	}
-	err := (page.(SubnetPage)).ExtractInto(&s)
+	err := (r.(SubnetPage)).ExtractInto(&s)
 	return s.Subnets, err
 }