diff --git a/openstack/blockstorage/v1/snapshots/requests.go b/openstack/blockstorage/v1/snapshots/requests.go
index 1bc0a14..7fac925 100644
--- a/openstack/blockstorage/v1/snapshots/requests.go
+++ b/openstack/blockstorage/v1/snapshots/requests.go
@@ -102,7 +102,7 @@
 // ListOptsBuilder allows extensions to add additional parameters to the List
 // request.
 type ListOptsBuilder interface {
-	ToSnapshotListString() (string, error)
+	ToSnapshotListQuery() (string, error)
 }
 
 // ListOpts hold options for listing Snapshots. It is passed to the
@@ -113,8 +113,8 @@
 	VolumeID string `q:"volume_id"`
 }
 
-// ToSnapshotListString formats a ListOpts into a query string.
-func (opts ListOpts) ToSnapshotListString() (string, error) {
+// ToSnapshotListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToSnapshotListQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -127,7 +127,7 @@
 func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url := listURL(client)
 	if opts != nil {
-		query, err := opts.ToSnapshotListString()
+		query, err := opts.ToSnapshotListQuery()
 		if err != nil {
 			return pagination.Pager{Err: err}
 		}
diff --git a/openstack/blockstorage/v1/volumes/requests.go b/openstack/blockstorage/v1/volumes/requests.go
index f46b2b6..042a33e 100644
--- a/openstack/blockstorage/v1/volumes/requests.go
+++ b/openstack/blockstorage/v1/volumes/requests.go
@@ -118,7 +118,7 @@
 // ListOptsBuilder allows extensions to add additional parameters to the List
 // request.
 type ListOptsBuilder interface {
-	ToVolumeListString() (string, error)
+	ToVolumeListQuery() (string, error)
 }
 
 // ListOpts holds options for listing Volumes. It is passed to the volumes.List
@@ -134,8 +134,8 @@
 	Status string `q:"status"`
 }
 
-// ToVolumeListString formats a ListOpts into a query string.
-func (opts ListOpts) ToVolumeListString() (string, error) {
+// ToVolumeListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToVolumeListQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -147,7 +147,7 @@
 func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url := listURL(client)
 	if opts != nil {
-		query, err := opts.ToVolumeListString()
+		query, err := opts.ToVolumeListQuery()
 		if err != nil {
 			return pagination.Pager{Err: err}
 		}
diff --git a/openstack/compute/v2/flavors/requests.go b/openstack/compute/v2/flavors/requests.go
index 469c69d..7af11fc 100644
--- a/openstack/compute/v2/flavors/requests.go
+++ b/openstack/compute/v2/flavors/requests.go
@@ -9,7 +9,7 @@
 // ListOptsBuilder allows extensions to add additional parameters to the
 // List request.
 type ListOptsBuilder interface {
-	ToFlavorListParams() (string, error)
+	ToFlavorListQuery() (string, error)
 }
 
 // ListOpts helps control the results returned by the List() function.
@@ -32,8 +32,8 @@
 	Limit int `q:"limit"`
 }
 
-// ToFlavorListParams formats a ListOpts into a query string.
-func (opts ListOpts) ToFlavorListParams() (string, error) {
+// ToFlavorListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToFlavorListQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -47,7 +47,7 @@
 func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url := listURL(client)
 	if opts != nil {
-		query, err := opts.ToFlavorListParams()
+		query, err := opts.ToFlavorListQuery()
 		if err != nil {
 			return pagination.Pager{Err: err}
 		}
diff --git a/openstack/compute/v2/images/requests.go b/openstack/compute/v2/images/requests.go
index d901f6e..603909c 100644
--- a/openstack/compute/v2/images/requests.go
+++ b/openstack/compute/v2/images/requests.go
@@ -10,7 +10,7 @@
 // ListOptsBuilder allows extensions to add additional parameters to the
 // List request.
 type ListOptsBuilder interface {
-	ToImageListParams() (string, error)
+	ToImageListQuery() (string, error)
 }
 
 // ListOpts contain options for limiting the number of Images returned from a call to ListDetail.
@@ -31,8 +31,8 @@
 	Type string `q:"type"`
 }
 
-// ToImageListParams formats a ListOpts into a query string.
-func (opts ListOpts) ToImageListParams() (string, error) {
+// ToImageListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToImageListQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -44,7 +44,7 @@
 func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url := listDetailURL(client)
 	if opts != nil {
-		query, err := opts.ToImageListParams()
+		query, err := opts.ToImageListQuery()
 		if err != nil {
 			return pagination.Pager{Err: err}
 		}
diff --git a/openstack/networking/v2/networks/requests.go b/openstack/networking/v2/networks/requests.go
index de34989..8cfe4e0 100644
--- a/openstack/networking/v2/networks/requests.go
+++ b/openstack/networking/v2/networks/requests.go
@@ -30,7 +30,7 @@
 // ListOptsBuilder allows extensions to add additional parameters to the
 // List request.
 type ListOptsBuilder interface {
-	ToNetworkListString() (string, error)
+	ToNetworkListQuery() (string, error)
 }
 
 // ListOpts allows the filtering and sorting of paginated collections through
@@ -51,8 +51,8 @@
 	SortDir      string `q:"sort_dir"`
 }
 
-// ToNetworkListString formats a ListOpts into a query string.
-func (opts ListOpts) ToNetworkListString() (string, error) {
+// ToNetworkListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToNetworkListQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -66,7 +66,7 @@
 func List(c *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url := listURL(c)
 	if opts != nil {
-		query, err := opts.ToNetworkListString()
+		query, err := opts.ToNetworkListQuery()
 		if err != nil {
 			return pagination.Pager{Err: err}
 		}
diff --git a/openstack/networking/v2/ports/requests.go b/openstack/networking/v2/ports/requests.go
index afa37f5..c846de9 100644
--- a/openstack/networking/v2/ports/requests.go
+++ b/openstack/networking/v2/ports/requests.go
@@ -23,7 +23,7 @@
 // ListOptsBuilder allows extensions to add additional parameters to the
 // List request.
 type ListOptsBuilder interface {
-	ToPortListString() (string, error)
+	ToPortListQuery() (string, error)
 }
 
 // ListOpts allows the filtering and sorting of paginated collections through
@@ -47,8 +47,8 @@
 	SortDir      string `q:"sort_dir"`
 }
 
-// ToPortListString formats a ListOpts into a query string.
-func (opts ListOpts) ToPortListString() (string, error) {
+// ToPortListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToPortListQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -66,7 +66,7 @@
 func List(c *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url := listURL(c)
 	if opts != nil {
-		query, err := opts.ToPortListString()
+		query, err := opts.ToPortListQuery()
 		if err != nil {
 			return pagination.Pager{Err: err}
 		}
diff --git a/openstack/networking/v2/subnets/requests.go b/openstack/networking/v2/subnets/requests.go
index e164583..8eed269 100644
--- a/openstack/networking/v2/subnets/requests.go
+++ b/openstack/networking/v2/subnets/requests.go
@@ -23,7 +23,7 @@
 // ListOptsBuilder allows extensions to add additional parameters to the
 // List request.
 type ListOptsBuilder interface {
-	ToSubnetListString() (string, error)
+	ToSubnetListQuery() (string, error)
 }
 
 // ListOpts allows the filtering and sorting of paginated collections through
@@ -46,8 +46,8 @@
 	SortDir    string `q:"sort_dir"`
 }
 
-// ToSubnetListString formats a ListOpts into a query string.
-func (opts ListOpts) ToSubnetListString() (string, error) {
+// ToSubnetListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToSubnetListQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -65,7 +65,7 @@
 func List(c *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
 	url := listURL(c)
 	if opts != nil {
-		query, err := opts.ToSubnetListString()
+		query, err := opts.ToSubnetListQuery()
 		if err != nil {
 			return pagination.Pager{Err: err}
 		}
diff --git a/openstack/objectstorage/v1/objects/requests.go b/openstack/objectstorage/v1/objects/requests.go
index f6e355d..3274e04 100644
--- a/openstack/objectstorage/v1/objects/requests.go
+++ b/openstack/objectstorage/v1/objects/requests.go
@@ -277,7 +277,7 @@
 // DeleteOptsBuilder allows extensions to add additional parameters to the
 // Delete request.
 type DeleteOptsBuilder interface {
-	ToObjectDeleteString() (string, error)
+	ToObjectDeleteQuery() (string, error)
 }
 
 // DeleteOpts is a structure that holds parameters for deleting an object.
@@ -285,8 +285,8 @@
 	MultipartManifest string `q:"multipart-manifest"`
 }
 
-// ToObjectDeleteString formats a DeleteOpts into a query string.
-func (opts DeleteOpts) ToObjectDeleteString() (string, error) {
+// ToObjectDeleteQuery formats a DeleteOpts into a query string.
+func (opts DeleteOpts) ToObjectDeleteQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -300,7 +300,7 @@
 	url := deleteURL(c, containerName, objectName)
 
 	if opts != nil {
-		query, err := opts.ToObjectDeleteString()
+		query, err := opts.ToObjectDeleteQuery()
 		if err != nil {
 			res.Err = err
 			return res
@@ -320,7 +320,7 @@
 // GetOptsBuilder allows extensions to add additional parameters to the
 // Get request.
 type GetOptsBuilder interface {
-	ToObjectGetString() (string, error)
+	ToObjectGetQuery() (string, error)
 }
 
 // GetOpts is a structure that holds parameters for getting an object's metadata.
@@ -329,8 +329,8 @@
 	Signature string `q:"signature"`
 }
 
-// ToObjectGetString formats a GetOpts into a query string.
-func (opts GetOpts) ToObjectGetString() (string, error) {
+// ToObjectGetQuery formats a GetOpts into a query string.
+func (opts GetOpts) ToObjectGetQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
 		return "", err
@@ -345,7 +345,7 @@
 	url := getURL(c, containerName, objectName)
 
 	if opts != nil {
-		query, err := opts.ToObjectGetString()
+		query, err := opts.ToObjectGetQuery()
 		if err != nil {
 			res.Err = err
 			return res
