diff --git a/acceptance/openstack/blockstorage/v1/volumes_test.go b/acceptance/openstack/blockstorage/v1/volumes_test.go
index 145fde0..0d773db 100644
--- a/acceptance/openstack/blockstorage/v1/volumes_test.go
+++ b/acceptance/openstack/blockstorage/v1/volumes_test.go
@@ -42,7 +42,7 @@
 
 	var cv *volumes.Volume
 	for i := 0; i < numVols; i++ {
-		cv, err = volumes.Create(client, volumes.VolumeOpts{
+		cv, err = volumes.Create(client, volumes.CreateOpts{
 			Size: 1,
 			Name: "gophercloud-test-volume-" + strconv.Itoa(i),
 		})
@@ -61,6 +61,14 @@
 
 	}
 
+	_, err = volumes.Update(client, cv.ID, volumes.UpdateOpts{
+		Name: "gophercloud-updated-volume",
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
 	gr, err := volumes.Get(client, cv.ID)
 	if err != nil {
 		t.Error(err)
@@ -73,6 +81,10 @@
 	}
 	fmt.Printf("Got volume: %+v\n", v)
 
+	if v.Name != "gophercloud-updated-volume" {
+		t.Errorf("Unable to update volume: Expected name: gophercloud-updated-volume\nActual name: %s", v.Name)
+	}
+
 	pager := volumes.List(client, volumes.ListOpts{})
 	if err != nil {
 		t.Error(err)
diff --git a/openstack/blockstorage/v1/volumes/requests.go b/openstack/blockstorage/v1/volumes/requests.go
index 7de272f..74d4c6c 100644
--- a/openstack/blockstorage/v1/volumes/requests.go
+++ b/openstack/blockstorage/v1/volumes/requests.go
@@ -7,7 +7,7 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
-type VolumeOpts struct {
+type CreateOpts struct {
 	Availability                     string
 	Description                      string
 	Metadata                         map[string]string
@@ -17,7 +17,7 @@
 	VolumeType                       string
 }
 
-func Create(client *gophercloud.ServiceClient, opts VolumeOpts) (*Volume, error) {
+func Create(client *gophercloud.ServiceClient, opts CreateOpts) (*Volume, error) {
 
 	type volume struct {
 		Availability *string           `json:"availability_zone,omitempty"`
@@ -85,6 +85,50 @@
 	return gr, err
 }
 
+type UpdateOpts struct {
+	Name        string
+	Description string
+	Metadata    map[string]string
+}
+
+func Update(client *gophercloud.ServiceClient, id string, opts UpdateOpts) (*Volume, error) {
+	type update struct {
+		Description *string           `json:"display_description,omitempty"`
+		Metadata    map[string]string `json:"metadata,omitempty"`
+		Name        *string           `json:"display_name,omitempty"`
+	}
+
+	type request struct {
+		Volume update `json:"volume"`
+	}
+
+	reqBody := request{
+		Volume: update{},
+	}
+
+	reqBody.Volume.Description = utils.MaybeString(opts.Description)
+	reqBody.Volume.Name = utils.MaybeString(opts.Name)
+
+	type response struct {
+		Volume Volume `json:"volume"`
+	}
+
+	var respBody response
+
+	_, err := perigee.Request("PUT", volumeURL(client, id), perigee.Options{
+		MoreHeaders: client.Provider.AuthenticatedHeaders(),
+		OkCodes:     []int{200},
+		ReqBody:     &reqBody,
+		Results:     &respBody,
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	return &respBody.Volume, nil
+
+}
+
 func Delete(client *gophercloud.ServiceClient, id string) error {
 	_, err := perigee.Request("DELETE", volumeURL(client, id), perigee.Options{
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
