diff --git a/openstack/blockstorage/v1/snapshots/requests.go b/openstack/blockstorage/v1/snapshots/requests.go
index 7dcbc46..0e4e8f8 100644
--- a/openstack/blockstorage/v1/snapshots/requests.go
+++ b/openstack/blockstorage/v1/snapshots/requests.go
@@ -8,14 +8,20 @@
 	"github.com/racker/perigee"
 )
 
+// CreateOpts contains options for creating a Snapshot. This object is passed to
+// the snapshots.Create function. For more information about these parameters,
+// see the Snapshot object.
 type CreateOpts struct {
-	Description string
-	Force       bool
-	Metadata    map[string]interface{}
-	Name        string
-	VolumeID    string
+	Description string                 // OPTIONAL
+	Force       bool                   // OPTIONAL
+	Metadata    map[string]interface{} // OPTIONAL
+	Name        string                 // OPTIONAL
+	VolumeID    string                 // REQUIRED
 }
 
+// Create will create a new Snapshot based on the values in CreateOpts. To extract
+// the Snapshot object from the response, call the Extract method on the
+// CreateResult.
 func Create(client *gophercloud.ServiceClient, opts *CreateOpts) CreateResult {
 	type snapshot struct {
 		Description *string                `json:"display_description,omitempty"`
@@ -49,6 +55,7 @@
 	return res
 }
 
+// Delete will delete the existing Snapshot with the provided ID.
 func Delete(client *gophercloud.ServiceClient, id string) error {
 	_, err := perigee.Request("DELETE", deleteURL(client, id), perigee.Options{
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
@@ -57,6 +64,8 @@
 	return err
 }
 
+// Get retrieves the Snapshot with the provided ID. To extract the Snapshot object
+// from the response, call the Extract method on the GetResult.
 func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var res GetResult
 	_, res.Err = perigee.Request("GET", getURL(client, id), perigee.Options{
@@ -67,12 +76,15 @@
 	return res
 }
 
+// ListOpts hold options for listing Snapshots. It is passed to the
+// snapshots.List function.
 type ListOpts struct {
 	Name     string `q:"display_name"`
 	Status   string `q:"status"`
 	VolumeID string `q:"volume_id"`
 }
 
+// List returns Snapshots optionally limited by the conditions provided in ListOpts.
 func List(client *gophercloud.ServiceClient, opts *ListOpts) pagination.Pager {
 	url := listURL(client)
 	if opts != nil {
@@ -89,11 +101,16 @@
 	return pagination.NewPager(client, url, createPage)
 }
 
+// UpdateOpts contain options for updating an existing Snapshot. This object is
+// passed to the snapshots.Update function. For more information about the
+// parameters, see the Snapshot object.
 type UpdateOpts struct {
 	Description string
 	Name        string
 }
 
+// Update will update the Snapshot with provided information. To extract the updated
+// Snapshot from the response, call the Extract method on the UpdateResult.
 func Update(client *gophercloud.ServiceClient, id string, opts *UpdateOpts) UpdateResult {
 	type update struct {
 		Description *string `json:"display_description,omitempty"`
diff --git a/openstack/blockstorage/v1/snapshots/results.go b/openstack/blockstorage/v1/snapshots/results.go
index 363d6e2..3a27592 100644
--- a/openstack/blockstorage/v1/snapshots/results.go
+++ b/openstack/blockstorage/v1/snapshots/results.go
@@ -9,28 +9,39 @@
 	"github.com/mitchellh/mapstructure"
 )
 
+// Snapshot contains all the information associated with an OpenStack Snapshot.
 type Snapshot struct {
-	Status           string            `mapstructure:"status"`
-	Name             string            `mapstructure:"display_name"`
-	Attachments      []string          `mapstructure:"attachments"`
-	AvailabilityZone string            `mapstructure:"availability_zone"`
-	Bootable         string            `mapstructure:"bootable"`
-	CreatedAt        string            `mapstructure:"created_at"`
-	Description      string            `mapstructure:"display_discription"`
-	VolumeType       string            `mapstructure:"volume_type"`
-	SnapshotID       string            `mapstructure:"snapshot_id"`
-	SourceVolID      string            `mapstructure:"source_volid"`
-	Metadata         map[string]string `mapstructure:"metadata"`
-	ID               string            `mapstructure:"id"`
-	Size             int               `mapstructure:"size"`
+	Status           string            `mapstructure:"status"`              // currect status of the Snapshot
+	Name             string            `mapstructure:"display_name"`        // display name
+	Attachments      []string          `mapstructure:"attachments"`         // instances onto which the Snapshot is attached
+	AvailabilityZone string            `mapstructure:"availability_zone"`   // logical group
+	Bootable         string            `mapstructure:"bootable"`            // is the Snapshot bootable
+	CreatedAt        string            `mapstructure:"created_at"`          // date created
+	Description      string            `mapstructure:"display_discription"` // display description
+	VolumeType       string            `mapstructure:"volume_type"`         // see VolumeType object for more information
+	SnapshotID       string            `mapstructure:"snapshot_id"`         // ID of the Snapshot from which this Snapshot was created
+	SourceVolID      string            `mapstructure:"source_volid"`        // ID of the Volume from which this Snapshot was created
+	Metadata         map[string]string `mapstructure:"metadata"`            // user-defined key-value pairs
+	ID               string            `mapstructure:"id"`                  // unique identifier
+	Size             int               `mapstructure:"size"`                // size of the Snapshot, in GB
 }
 
-// ListResult is a *http.Response that is returned from a call to the List function.
+// CreateResult contains the response body and error from a Create request.
+type CreateResult struct {
+	commonResult
+}
+
+// GetResult contains the response body and error from a Get request.
+type GetResult struct {
+	commonResult
+}
+
+// ListResult is a pagination.Pager 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.
+// IsEmpty returns true if a ListResult contains no Snapshots.
 func (r ListResult) IsEmpty() (bool, error) {
 	volumes, err := ExtractSnapshots(r)
 	if err != nil {
@@ -39,7 +50,7 @@
 	return len(volumes) == 0, nil
 }
 
-// ExtractSnapshots extracts and returns the Volumes from a 'List' request.
+// ExtractSnapshots extracts and returns Snapshots. It is used while iterating over a snapshots.List call.
 func ExtractSnapshots(page pagination.Page) ([]Snapshot, error) {
 	var response struct {
 		Snapshots []Snapshot `json:"snapshots"`
@@ -49,11 +60,16 @@
 	return response.Snapshots, err
 }
 
+// UpdateResult contains the response body and error from an Update request.
+type UpdateResult struct {
+	commonResult
+}
+
 type commonResult struct {
 	gophercloud.CommonResult
 }
 
-// Extract returns a pointer to the Snapshot from a commonResult.Resp.
+// Extract will get the Snapshot object out of the commonResult object.
 func (r commonResult) Extract() (*Snapshot, error) {
 	if r.Err != nil {
 		return nil, r.Err
@@ -69,14 +85,3 @@
 	}
 	return res.Snapshot, nil
 }
-
-type GetResult struct {
-	commonResult
-}
-
-type CreateResult struct {
-	commonResult
-}
-type UpdateResult struct {
-	commonResult
-}
diff --git a/openstack/blockstorage/v1/volumes/requests.go b/openstack/blockstorage/v1/volumes/requests.go
index 7704012..f635968 100644
--- a/openstack/blockstorage/v1/volumes/requests.go
+++ b/openstack/blockstorage/v1/volumes/requests.go
@@ -1,22 +1,28 @@
 package volumes
 
 import (
-	"github.com/racker/perigee"
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/openstack/utils"
 	"github.com/rackspace/gophercloud/pagination"
+
+	"github.com/racker/perigee"
 )
 
+// CreateOpts contains options for creating a Volume. This object is passed to
+// the volumes.Create function. For more information about these parameters,
+// see the Volume object.
 type CreateOpts struct {
-	Availability                     string
-	Description                      string
-	Metadata                         map[string]string
-	Name                             string
-	Size                             int
-	SnapshotID, SourceVolID, ImageID string
-	VolumeType                       string
+	Availability                     string            // OPTIONAL
+	Description                      string            // OPTIONAL
+	Metadata                         map[string]string // OPTIONAL
+	Name                             string            // OPTIONAL
+	Size                             int               // REQUIRED
+	SnapshotID, SourceVolID, ImageID string            // REQUIRED (one of them)
+	VolumeType                       string            // OPTIONAL
 }
 
+// Create will create a new Volume based on the values in CreateOpts. To extract
+// the Volume object from the response, call the Extract method on the CreateResult.
 func Create(client *gophercloud.ServiceClient, opts *CreateOpts) CreateResult {
 
 	type volume struct {
@@ -58,25 +64,17 @@
 	return res
 }
 
-// ListOpts holds options for listing volumes. It is passed to the volumes.List function.
-type ListOpts struct {
-	// AllTenants is an admin-only option. Set it to true to see all 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
+// Delete will delete the existing Volume with the provided ID.
+func Delete(client *gophercloud.ServiceClient, id string) error {
+	_, err := perigee.Request("DELETE", deleteURL(client, id), perigee.Options{
+		MoreHeaders: client.Provider.AuthenticatedHeaders(),
+		OkCodes:     []int{202, 204},
+	})
+	return err
 }
 
-func List(client *gophercloud.ServiceClient, opts *ListOpts) pagination.Pager {
-	createPage := func(r pagination.LastHTTPResponse) pagination.Page {
-		return ListResult{pagination.SinglePageBase(r)}
-	}
-	return pagination.NewPager(client, listURL(client), createPage)
-}
-
+// Get retrieves the Volume with the provided ID. To extract the Volume object from
+// the response, call the Extract method on the GetResult.
 func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var res GetResult
 	_, res.Err = perigee.Request("GET", getURL(client, id), perigee.Options{
@@ -87,12 +85,34 @@
 	return res
 }
 
-type UpdateOpts struct {
-	Name        string
-	Description string
-	Metadata    map[string]string
+// ListOpts holds options for listing Volumes. It is passed to the volumes.List
+// function.
+type ListOpts struct {
+	AllTenants bool              // admin-only option. Set it to true to see all tenant volumes.
+	Metadata   map[string]string // List only volumes that contain Metadata.
+	Name       string            // List only volumes that have Name as the display name.
+	Status     string            // List only volumes that have a status of Status.
 }
 
+// List returns Volumes optionally limited by the conditions provided in ListOpts.
+func List(client *gophercloud.ServiceClient, opts *ListOpts) pagination.Pager {
+	createPage := func(r pagination.LastHTTPResponse) pagination.Page {
+		return ListResult{pagination.SinglePageBase(r)}
+	}
+	return pagination.NewPager(client, listURL(client), createPage)
+}
+
+// UpdateOpts contain options for updating an existing Volume. This object is passed
+// to the volumes.Update function. For more information about the parameters, see
+// the Volume object.
+type UpdateOpts struct {
+	Name        string            // OPTIONAL
+	Description string            // OPTIONAL
+	Metadata    map[string]string // OPTIONAL
+}
+
+// Update will update the Volume with provided information. To extract the updated
+// Volume from the response, call the Extract method on the UpdateResult.
 func Update(client *gophercloud.ServiceClient, id string, opts *UpdateOpts) UpdateResult {
 	type update struct {
 		Description *string           `json:"display_description,omitempty"`
@@ -120,13 +140,4 @@
 		Results:     &res.Resp,
 	})
 	return res
-
-}
-
-func Delete(client *gophercloud.ServiceClient, id string) error {
-	_, err := perigee.Request("DELETE", deleteURL(client, id), perigee.Options{
-		MoreHeaders: client.Provider.AuthenticatedHeaders(),
-		OkCodes:     []int{202, 204},
-	})
-	return err
 }
diff --git a/openstack/blockstorage/v1/volumes/results.go b/openstack/blockstorage/v1/volumes/results.go
index 7bf83a5..78c863f 100644
--- a/openstack/blockstorage/v1/volumes/results.go
+++ b/openstack/blockstorage/v1/volumes/results.go
@@ -9,28 +9,39 @@
 	"github.com/mitchellh/mapstructure"
 )
 
+// Volume contains all the information associated with an OpenStack Volume.
 type Volume struct {
-	Status           string            `mapstructure:"status"`
-	Name             string            `mapstructure:"display_name"`
-	Attachments      []string          `mapstructure:"attachments"`
-	AvailabilityZone string            `mapstructure:"availability_zone"`
-	Bootable         string            `mapstructure:"bootable"`
-	CreatedAt        string            `mapstructure:"created_at"`
-	Description      string            `mapstructure:"display_discription"`
-	VolumeType       string            `mapstructure:"volume_type"`
-	SnapshotID       string            `mapstructure:"snapshot_id"`
-	SourceVolID      string            `mapstructure:"source_volid"`
-	Metadata         map[string]string `mapstructure:"metadata"`
-	ID               string            `mapstructure:"id"`
-	Size             int               `mapstructure:"size"`
+	Status           string            `mapstructure:"status"`              // current status of the Volume
+	Name             string            `mapstructure:"display_name"`        // display name
+	Attachments      []string          `mapstructure:"attachments"`         // instances onto which the Volume is attached
+	AvailabilityZone string            `mapstructure:"availability_zone"`   // logical group
+	Bootable         string            `mapstructure:"bootable"`            // is the volume bootable
+	CreatedAt        string            `mapstructure:"created_at"`          // date created
+	Description      string            `mapstructure:"display_discription"` // display description
+	VolumeType       string            `mapstructure:"volume_type"`         // see VolumeType object for more information
+	SnapshotID       string            `mapstructure:"snapshot_id"`         // ID of the Snapshot from which the Volume was created
+	SourceVolID      string            `mapstructure:"source_volid"`        // ID of the Volume from which the Volume was created
+	Metadata         map[string]string `mapstructure:"metadata"`            // user-defined key-value pairs
+	ID               string            `mapstructure:"id"`                  // unique identifier
+	Size             int               `mapstructure:"size"`                // size of the Volume, in GB
 }
 
-// ListResult is a *http.Response that is returned from a call to the List function.
+// CreateResult contains the response body and error from a Create request.
+type CreateResult struct {
+	commonResult
+}
+
+// GetResult contains the response body and error from a Get request.
+type GetResult struct {
+	commonResult
+}
+
+// ListResult is a pagination.pager 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.
+// IsEmpty returns true if a ListResult contains no Volumes.
 func (r ListResult) IsEmpty() (bool, error) {
 	volumes, err := ExtractVolumes(r)
 	if err != nil {
@@ -39,7 +50,7 @@
 	return len(volumes) == 0, nil
 }
 
-// ExtractVolumes extracts and returns the Volumes from a 'List' request.
+// ExtractVolumes extracts and returns Volumes. It is used while iterating over a volumes.List call.
 func ExtractVolumes(page pagination.Page) ([]Volume, error) {
 	var response struct {
 		Volumes []Volume `json:"volumes"`
@@ -49,11 +60,16 @@
 	return response.Volumes, err
 }
 
+// UpdateResult contains the response body and error from an Update request.
+type UpdateResult struct {
+	commonResult
+}
+
 type commonResult struct {
 	gophercloud.CommonResult
 }
 
-// ExtractVolume extracts and returns the Volume from a 'Get' request.
+// Extract will get the Volume object out of the commonResult object.
 func (r commonResult) Extract() (*Volume, error) {
 	if r.Err != nil {
 		return nil, r.Err
@@ -69,14 +85,3 @@
 	}
 	return res.Volume, nil
 }
-
-type GetResult struct {
-	commonResult
-}
-
-type CreateResult struct {
-	commonResult
-}
-type UpdateResult struct {
-	commonResult
-}
diff --git a/openstack/blockstorage/v1/volumetypes/requests.go b/openstack/blockstorage/v1/volumetypes/requests.go
index 466d043..ab7e790 100644
--- a/openstack/blockstorage/v1/volumetypes/requests.go
+++ b/openstack/blockstorage/v1/volumetypes/requests.go
@@ -7,11 +7,16 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
+// CreateOpts are options for creating a volume type.
 type CreateOpts struct {
+	// OPTIONAL. See VolumeType.
 	ExtraSpecs map[string]interface{}
-	Name       string
+	// OPTIONAL. See VolumeType.
+	Name string
 }
 
+// Create will create a new volume, optionally wih CreateOpts. To extract the
+// created volume type object, call the Extract method on the CreateResult.
 func Create(client *gophercloud.ServiceClient, opts *CreateOpts) CreateResult {
 	type volumeType struct {
 		ExtraSpecs map[string]interface{} `json:"extra_specs,omitempty"`
@@ -39,6 +44,7 @@
 	return res
 }
 
+// Delete will delete the volume type with the provided ID.
 func Delete(client *gophercloud.ServiceClient, id string) error {
 	_, err := perigee.Request("DELETE", deleteURL(client, id), perigee.Options{
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
@@ -47,6 +53,8 @@
 	return err
 }
 
+// Get will retrieve the volume type with the provided ID. To extract the volume
+// type from the result, call the Extract method on the GetResult.
 func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var res GetResult
 	_, err := perigee.Request("GET", getURL(client, id), perigee.Options{
@@ -58,6 +66,7 @@
 	return res
 }
 
+// List returns all volume types.
 func List(client *gophercloud.ServiceClient) pagination.Pager {
 	createPage := func(r pagination.LastHTTPResponse) pagination.Page {
 		return ListResult{pagination.SinglePageBase(r)}
diff --git a/openstack/blockstorage/v1/volumetypes/results.go b/openstack/blockstorage/v1/volumetypes/results.go
index fa10ae7..8e5932a 100644
--- a/openstack/blockstorage/v1/volumetypes/results.go
+++ b/openstack/blockstorage/v1/volumetypes/results.go
@@ -8,18 +8,29 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
+// VolumeType contains all information associated with an OpenStack Volume Type.
 type VolumeType struct {
-	ExtraSpecs map[string]interface{} `json:"extra_specs" mapstructure:"extra_specs"`
-	ID         string                 `json:"id" mapstructure:"id"`
-	Name       string                 `json:"name" mapstructure:"name"`
+	ExtraSpecs map[string]interface{} `json:"extra_specs" mapstructure:"extra_specs"` // user-defined metadata
+	ID         string                 `json:"id" mapstructure:"id"`                   // unique identifier
+	Name       string                 `json:"name" mapstructure:"name"`               // display name
 }
 
-// ListResult is a *http.Response that is returned from a call to the List function.
+// CreateResult contains the response body and error from a Create request.
+type CreateResult struct {
+	commonResult
+}
+
+// GetResult contains the response body and error from a Get request.
+type GetResult struct {
+	commonResult
+}
+
+// ListResult is a pagination.Pager 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.
+// IsEmpty returns true if a ListResult contains no Volume Types.
 func (r ListResult) IsEmpty() (bool, error) {
 	volumeTypes, err := ExtractVolumeTypes(r)
 	if err != nil {
@@ -28,7 +39,7 @@
 	return len(volumeTypes) == 0, nil
 }
 
-// ExtractVolumeTypes extracts and returns the Volumes from a 'List' request.
+// ExtractVolumeTypes extracts and returns Volume Types.
 func ExtractVolumeTypes(page pagination.Page) ([]VolumeType, error) {
 	var response struct {
 		VolumeTypes []VolumeType `mapstructure:"volume_types"`
@@ -42,6 +53,7 @@
 	gophercloud.CommonResult
 }
 
+// Extract will get the Volume Type object out of the commonResult object.
 func (r commonResult) Extract() (*VolumeType, error) {
 	if r.Err != nil {
 		return nil, r.Err
@@ -58,11 +70,3 @@
 
 	return res.VolumeType, nil
 }
-
-type GetResult struct {
-	commonResult
-}
-
-type CreateResult struct {
-	commonResult
-}
