more consistent naming
diff --git a/openstack/compute/v2/extensions/defsecrules/results.go b/openstack/compute/v2/extensions/defsecrules/results.go
index 00d0bb5..61b918d 100644
--- a/openstack/compute/v2/extensions/defsecrules/results.go
+++ b/openstack/compute/v2/extensions/defsecrules/results.go
@@ -18,20 +18,16 @@
 // IsEmpty determines whether or not a page of default rules contains any results.
 func (page DefaultRulePage) IsEmpty() (bool, error) {
 	users, err := ExtractDefaultRules(page)
-	if err != nil {
-		return false, err
-	}
-	return len(users) == 0, nil
+	return len(users) == 0, err
 }
 
 // ExtractDefaultRules returns a slice of DefaultRules contained in a single
 // page of results.
-func ExtractDefaultRules(page pagination.Page) ([]DefaultRule, error) {
-	r := page.(DefaultRulePage)
+func ExtractDefaultRules(r pagination.Page) ([]DefaultRule, error) {
 	var s struct {
 		DefaultRules []DefaultRule `json:"security_group_default_rules"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(DefaultRulePage)).ExtractInto(&s)
 	return s.DefaultRules, err
 }
 
diff --git a/openstack/compute/v2/extensions/floatingips/results.go b/openstack/compute/v2/extensions/floatingips/results.go
index c77ed77..753f3af 100644
--- a/openstack/compute/v2/extensions/floatingips/results.go
+++ b/openstack/compute/v2/extensions/floatingips/results.go
@@ -37,12 +37,11 @@
 
 // ExtractFloatingIPs interprets a page of results as a slice of
 // FloatingIPs.
-func ExtractFloatingIPs(page pagination.Page) ([]FloatingIP, error) {
-	r := page.(FloatingIPPage)
+func ExtractFloatingIPs(r pagination.Page) ([]FloatingIP, error) {
 	var s struct {
 		FloatingIPs []FloatingIP `json:"floating_ips"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(FloatingIPPage)).ExtractInto(&s)
 	return s.FloatingIPs, err
 }
 
diff --git a/openstack/compute/v2/extensions/keypairs/results.go b/openstack/compute/v2/extensions/keypairs/results.go
index 2b40943..f4d8d35 100644
--- a/openstack/compute/v2/extensions/keypairs/results.go
+++ b/openstack/compute/v2/extensions/keypairs/results.go
@@ -39,15 +39,14 @@
 }
 
 // ExtractKeyPairs interprets a page of results as a slice of KeyPairs.
-func ExtractKeyPairs(page pagination.Page) ([]KeyPair, error) {
-	r := page.(KeyPairPage)
+func ExtractKeyPairs(r pagination.Page) ([]KeyPair, error) {
 	type pair struct {
 		KeyPair KeyPair `json:"keypair"`
 	}
 	var s struct {
 		KeyPairs []pair `json:"keypairs"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(KeyPairPage)).ExtractInto(&s)
 	results := make([]KeyPair, len(s.KeyPairs))
 	for i, pair := range s.KeyPairs {
 		results[i] = pair.KeyPair
diff --git a/openstack/compute/v2/extensions/networks/results.go b/openstack/compute/v2/extensions/networks/results.go
index d9b746e..cbcce31 100644
--- a/openstack/compute/v2/extensions/networks/results.go
+++ b/openstack/compute/v2/extensions/networks/results.go
@@ -105,12 +105,11 @@
 }
 
 // ExtractNetworks interprets a page of results as a slice of Networks
-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/compute/v2/extensions/secgroups/results.go b/openstack/compute/v2/extensions/secgroups/results.go
index 5e18c0b..764f580 100644
--- a/openstack/compute/v2/extensions/secgroups/results.go
+++ b/openstack/compute/v2/extensions/secgroups/results.go
@@ -76,12 +76,11 @@
 }
 
 // ExtractSecurityGroups returns a slice of SecurityGroups contained in a single page of results.
-func ExtractSecurityGroups(page pagination.Page) ([]SecurityGroup, error) {
-	r := page.(SecurityGroupPage)
+func ExtractSecurityGroups(r pagination.Page) ([]SecurityGroup, error) {
 	var s struct {
 		SecurityGroups []SecurityGroup `json:"security_groups"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(SecurityGroupPage)).ExtractInto(&s)
 	return s.SecurityGroups, err
 }
 
diff --git a/openstack/compute/v2/extensions/servergroups/results.go b/openstack/compute/v2/extensions/servergroups/results.go
index ff64a7e..ab49b35 100644
--- a/openstack/compute/v2/extensions/servergroups/results.go
+++ b/openstack/compute/v2/extensions/servergroups/results.go
@@ -37,12 +37,11 @@
 
 // ExtractServerGroups interprets a page of results as a slice of
 // ServerGroups.
-func ExtractServerGroups(page pagination.Page) ([]ServerGroup, error) {
-	r := page.(ServerGroupPage)
+func ExtractServerGroups(r pagination.Page) ([]ServerGroup, error) {
 	var s struct {
 		ServerGroups []ServerGroup `json:"server_groups"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(ServerGroupPage)).ExtractInto(&s)
 	return s.ServerGroups, err
 }
 
diff --git a/openstack/compute/v2/extensions/tenantnetworks/results.go b/openstack/compute/v2/extensions/tenantnetworks/results.go
index 5db5cbd..88cbc80 100644
--- a/openstack/compute/v2/extensions/tenantnetworks/results.go
+++ b/openstack/compute/v2/extensions/tenantnetworks/results.go
@@ -30,12 +30,11 @@
 }
 
 // ExtractNetworks interprets a page of results as a slice of Networks
-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/compute/v2/extensions/volumeattach/requests.go b/openstack/compute/v2/extensions/volumeattach/requests.go
index 7017da2..17cb72e 100644
--- a/openstack/compute/v2/extensions/volumeattach/requests.go
+++ b/openstack/compute/v2/extensions/volumeattach/requests.go
@@ -10,7 +10,7 @@
 // List returns a Pager that allows you to iterate over a collection of VolumeAttachments.
 func List(client *gophercloud.ServiceClient, serverId string) pagination.Pager {
 	return pagination.NewPager(client, listURL(client, serverId), func(r pagination.PageResult) pagination.Page {
-		return VolumeAttachmentsPage{pagination.SinglePageBase(r)}
+		return VolumeAttachmentPage{pagination.SinglePageBase(r)}
 	})
 }
 
diff --git a/openstack/compute/v2/extensions/volumeattach/results.go b/openstack/compute/v2/extensions/volumeattach/results.go
index 62e7398..2eef0cd 100644
--- a/openstack/compute/v2/extensions/volumeattach/results.go
+++ b/openstack/compute/v2/extensions/volumeattach/results.go
@@ -20,26 +20,25 @@
 	ServerID string `json:"serverId"`
 }
 
-// VolumeAttachmentsPage stores a single, only page of VolumeAttachments
+// VolumeAttachmentPage stores a single, only page of VolumeAttachments
 // results from a List call.
-type VolumeAttachmentsPage struct {
+type VolumeAttachmentPage struct {
 	pagination.SinglePageBase
 }
 
 // IsEmpty determines whether or not a VolumeAttachmentsPage is empty.
-func (page VolumeAttachmentsPage) IsEmpty() (bool, error) {
+func (page VolumeAttachmentPage) IsEmpty() (bool, error) {
 	va, err := ExtractVolumeAttachments(page)
 	return len(va) == 0, err
 }
 
 // ExtractVolumeAttachments interprets a page of results as a slice of
 // VolumeAttachments.
-func ExtractVolumeAttachments(page pagination.Page) ([]VolumeAttachment, error) {
-	r := page.(VolumeAttachmentsPage)
+func ExtractVolumeAttachments(r pagination.Page) ([]VolumeAttachment, error) {
 	var s struct {
 		VolumeAttachments []VolumeAttachment `json:"volumeAttachments"`
 	}
-	err := r.ExtractInto(&s)
+	err := (r.(VolumeAttachmentPage)).ExtractInto(&s)
 	return s.VolumeAttachments, err
 }