diff --git a/openstack/blockstorage/v1/volumes/requests.go b/openstack/blockstorage/v1/volumes/requests.go
index 18f8a41..b6f3edf 100644
--- a/openstack/blockstorage/v1/volumes/requests.go
+++ b/openstack/blockstorage/v1/volumes/requests.go
@@ -3,22 +3,21 @@
 import (
 	"github.com/racker/perigee"
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/utils"
 	"github.com/rackspace/gophercloud/pagination"
-	"github.com/rackspace/gophercloud/utils"
 )
 
 type VolumeOpts struct {
-	Availability string
-	Description  string
-	ImageID      string
-	Metadata     map[string]string
-	Name         string
-	Size         int
-	SnapshotID   string
-	Type         string
+	Availability                     string
+	Description                      string
+	Metadata                         map[string]string
+	Name                             string
+	Size                             int
+	SnapshotID, SourceVolID, ImageID string
+	VolumeType                       string
 }
 
-func Create(client *gophercloud.ServiceClient, opts VolumeOpts) (Volume, error) {
+func Create(client *gophercloud.ServiceClient, opts VolumeOpts) (*Volume, error) {
 
 	type volume struct {
 		Availability *string           `json:"availability_zone,omitempty"`
@@ -55,9 +54,9 @@
 
 	var respBody response
 
-	_, err = perigee.Request("POST", volumesURL(client), perigee.Options{
-		MoreHeaders: c.Provider.AuthenticatedHeaders(),
-		OkCodes:     []int{201},
+	_, err := perigee.Request("POST", volumesURL(client), perigee.Options{
+		MoreHeaders: client.Provider.AuthenticatedHeaders(),
+		OkCodes:     []int{200, 201},
 		ReqBody:     &reqBody,
 		Results:     &respBody,
 	})
@@ -69,30 +68,15 @@
 }
 
 func List(client *gophercloud.ServiceClient, opts ListOpts) pagination.Pager {
-	var url string
-
-	query := utils.BuildQuery(opts.Params)
-
-	if !opts.Full {
-		url = c.volumesURL()
-	} else {
-		url = c.volumeURL("detail")
-	}
 
 	createPage := func(r pagination.LastHTTPResponse) pagination.Page {
-		p := ListResult{
-			pagination.MarkerPageBase{
-				LastHTTPResponse: r,
-			},
-		}
-		p.MarkerPageBase.Owner = p
-		return p
+		return ListResult{pagination.SinglePageBase(r)}
 	}
 
-	pager := pagination.NewPager(client, url, createPage)
-	return pager
+	return pagination.NewPager(client, volumesURL(client), createPage)
 }
 
+/*
 func Get(c *blockstorage.Client, opts GetOpts) (Volume, error) {
 	var v Volume
 	h, err := c.GetHeaders()
@@ -120,3 +104,4 @@
 	})
 	return err
 }
+*/
diff --git a/openstack/blockstorage/v1/volumes/results.go b/openstack/blockstorage/v1/volumes/results.go
index 230543c..bceaedf 100644
--- a/openstack/blockstorage/v1/volumes/results.go
+++ b/openstack/blockstorage/v1/volumes/results.go
@@ -22,28 +22,36 @@
 	Size             int
 }
 
-type VolumePage struct {
-	pagination.LinkedPageBase
+type ListOpts struct {
+	// AllTenants is an admin-only option. Set it to true to see a tenant volumes.
+	AllTenants bool
+	// List only volumes that contain Metadata.
+	Metadata map[string]string
+	// List only volumes that have Name as the display name.
+	Name string
+	// List only volumes that have a status of Status.
+	Status string
 }
 
-func (p VolumPage) IsEmpty() (bool, error) {
-	volumes, err := ExtractVolumes(p)
+// ListResult is a *http.Response that is returned from a call to the List function.
+type ListResult struct {
+	pagination.SinglePageBase
+}
+
+// IsEmpty returns true if a ListResult contains no container names.
+func (r ListResult) IsEmpty() (bool, error) {
+	volumes, err := ExtractVolumes(r)
 	if err != nil {
 		return true, err
 	}
 	return len(volumes) == 0, nil
 }
 
-func ExtractVolumes(page pagination.page) ([]Volume, error) {
+func ExtractVolumes(page pagination.Page) ([]Volume, error) {
 	var response struct {
 		Volumes []Volume `json:"volumes"`
 	}
 
-	err := mapstructure.Decode(page.(VolumePage).Body, &response)
+	err := mapstructure.Decode(page.(ListResult).Body, &response)
 	return response.Volumes, err
 }
-
-type CreateOpts map[string]interface{}
-type ListOpts map[string]bool
-type GetOpts map[string]string
-type DeleteOpts map[string]string
diff --git a/openstack/utils/utils.go b/openstack/utils/utils.go
index 1d09d9e..c5d8767 100644
--- a/openstack/utils/utils.go
+++ b/openstack/utils/utils.go
@@ -71,3 +71,17 @@
 	query = query[:len(query)-1]
 	return query
 }
+
+func MaybeString(original string) *string {
+	if original != "" {
+		return &original
+	}
+	return nil
+}
+
+func MaybeInt(original int) *int {
+	if original != 0 {
+		return &original
+	}
+	return nil
+}
diff --git a/utils.go b/utils.go
deleted file mode 100644
index a7d6e66..0000000
--- a/utils.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package utils
-
-func MaybeString(original string) *string {
-	if original != "" {
-		return &original
-	}
-	return nil
-}
-
-func MaybeInt(original int) {
-	if original != 0 {
-		return &original
-	}
-	return nil
-}
