diff --git a/openstack/storage/v1/accounts/accounts.go b/openstack/storage/v1/accounts/accounts.go
index ae8ba19..c460e45 100644
--- a/openstack/storage/v1/accounts/accounts.go
+++ b/openstack/storage/v1/accounts/accounts.go
@@ -4,11 +4,14 @@
 	"strings"
 )
 
+// UpdateOpts is a structure that contains parameters for updating, creating, or deleting an
+// account's metadata.
 type UpdateOpts struct {
 	Metadata map[string]string
 	Headers  map[string]string
 }
 
+// GetOpts is a structure that contains parameters for getting an account's metadata.
 type GetOpts struct {
 	Headers map[string]string
 }
diff --git a/openstack/storage/v1/accounts/requests.go b/openstack/storage/v1/accounts/requests.go
index d5afbcd..7b84497 100644
--- a/openstack/storage/v1/accounts/requests.go
+++ b/openstack/storage/v1/accounts/requests.go
@@ -6,6 +6,7 @@
 	"net/http"
 )
 
+// GetResult is a *http.Response that is returned from a call to the Get function.
 type GetResult *http.Response
 
 // Update is a function that creates, updates, or deletes an account's metadata.
@@ -25,7 +26,6 @@
 	url := c.GetAccountURL()
 	_, err = perigee.Request("POST", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{204},
 	})
 	return err
 }
@@ -45,7 +45,6 @@
 	url := c.GetAccountURL()
 	resp, err := perigee.Request("HEAD", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{204},
 	})
 	return &resp.HttpResponse, err
 }
diff --git a/openstack/storage/v1/client.go b/openstack/storage/v1/client.go
index f19ba4e..f616038 100644
--- a/openstack/storage/v1/client.go
+++ b/openstack/storage/v1/client.go
@@ -13,6 +13,7 @@
 	token     *identity.Token
 }
 
+// NewClient creates and returns a *Client.
 func NewClient(e string, a identity.AuthResults, o identity.AuthOptions) *Client {
 	return &Client{
 		endpoint:  e,
@@ -21,19 +22,26 @@
 	}
 }
 
+// GetAccountURL returns the URI for making Account requests. This function is exported to allow
+// the 'Accounts' subpackage to use it. It is not meant for public consumption.
 func (c *Client) GetAccountURL() string {
 	return fmt.Sprintf("%s", c.endpoint)
 }
 
+// GetContainerURL returns the URI for making Container requests. This function is exported to allow
+// the 'Containers' subpackage to use it. It is not meant for public consumption.
 func (c *Client) GetContainerURL(container string) string {
 	return fmt.Sprintf("%s/%s", c.endpoint, container)
 }
 
+// GetObjectURL returns the URI for making Object requests. This function is exported to allow
+// the 'Objects' subpackage to use it. It is not meant for public consumption.
 func (c *Client) GetObjectURL(container, object string) string {
 	return fmt.Sprintf("%s/%s/%s", c.endpoint, container, object)
 }
 
-// GetHeaders is a function that sets the header for token authentication against a client's endpoint.
+// GetHeaders is a function that gets the header for token authentication against a client's endpoint.
+// This function is exported to allow the subpackages to use it. It is not meant for public consumption.
 func (c *Client) GetHeaders() (map[string]string, error) {
 	t, err := c.getAuthToken()
 	if err != nil {
diff --git a/openstack/storage/v1/containers/containers.go b/openstack/storage/v1/containers/containers.go
index 2a5efe1..3a00647 100644
--- a/openstack/storage/v1/containers/containers.go
+++ b/openstack/storage/v1/containers/containers.go
@@ -6,30 +6,37 @@
 	"strings"
 )
 
+// Container is a structure that holds information related to a storage container.
 type Container map[string]interface{}
 
+// ListOpts is a structure that holds parameters for listing containers.
 type ListOpts struct {
 	Full   bool
 	Params map[string]string
 }
 
+// CreateOpts is a structure that holds parameters for creating a container.
 type CreateOpts struct {
 	Name     string
 	Metadata map[string]string
 	Headers  map[string]string
 }
 
+// DeleteOpts is a structure that holds parameters for deleting a container.
 type DeleteOpts struct {
 	Name   string
 	Params map[string]string
 }
 
+// UpdateOpts is a structure that holds parameters for updating, creating, or deleting a
+// container's metadata.
 type UpdateOpts struct {
 	Name     string
 	Metadata map[string]string
 	Headers  map[string]string
 }
 
+// GetOpts is a structure that holds parameters for getting a container's metadata.
 type GetOpts struct {
 	Name     string
 	Metadata map[string]string
diff --git a/openstack/storage/v1/containers/requests.go b/openstack/storage/v1/containers/requests.go
index df7cc30..b6d3a89 100644
--- a/openstack/storage/v1/containers/requests.go
+++ b/openstack/storage/v1/containers/requests.go
@@ -7,7 +7,10 @@
 	"net/http"
 )
 
+// ListResult is a *http.Response that is returned from a call to the List function.
 type ListResult *http.Response
+
+// GetResult is a *http.Response that is returned from a call to the Get function.
 type GetResult *http.Response
 
 // List is a function that retrieves all objects in a container. It also returns the details
@@ -30,7 +33,6 @@
 	url := c.GetAccountURL() + query
 	resp, err := perigee.Request("GET", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{200, 204},
 		Accept:      contentType,
 	})
 	return &resp.HttpResponse, err
@@ -56,7 +58,6 @@
 	url := c.GetContainerURL(opts.Name)
 	_, err = perigee.Request("PUT", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{201, 204},
 	})
 	if err == nil {
 		ci = Container{
@@ -78,7 +79,6 @@
 	url := c.GetContainerURL(opts.Name) + query
 	_, err = perigee.Request("DELETE", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{204},
 	})
 	return err
 }
@@ -101,7 +101,6 @@
 	url := c.GetContainerURL(opts.Name)
 	_, err = perigee.Request("POST", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{204},
 	})
 	return err
 }
@@ -121,7 +120,6 @@
 	url := c.GetContainerURL(opts.Name)
 	resp, err := perigee.Request("HEAD", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{204},
 	})
 	return &resp.HttpResponse, err
 }
diff --git a/openstack/storage/v1/objects/objects.go b/openstack/storage/v1/objects/objects.go
index 9575e0f..ab390fa 100644
--- a/openstack/storage/v1/objects/objects.go
+++ b/openstack/storage/v1/objects/objects.go
@@ -7,14 +7,17 @@
 	"strings"
 )
 
+// Object is a structure that holds information related to a storage object.
 type Object map[string]interface{}
 
+// ListOpts is a structure that holds parameters for listing objects.
 type ListOpts struct {
 	Container string
 	Full      bool
 	Params    map[string]string
 }
 
+// DownloadOpts is a structure that holds parameters for downloading an object.
 type DownloadOpts struct {
 	Container string
 	Name      string
@@ -22,6 +25,7 @@
 	Params    map[string]string
 }
 
+// CreateOpts is a structure that holds parameters for creating an object.
 type CreateOpts struct {
 	Container string
 	Name      string
@@ -31,6 +35,7 @@
 	Params    map[string]string
 }
 
+// CopyOpts is a structure that holds parameters for copying one object to another.
 type CopyOpts struct {
 	Container    string
 	Name         string
@@ -40,12 +45,14 @@
 	Headers      map[string]string
 }
 
+// DeleteOpts is a structure that holds parameters for deleting an object.
 type DeleteOpts struct {
 	Container string
 	Name      string
 	Params    map[string]string
 }
 
+// GetOpts is a structure that holds parameters for getting an object's metadata.
 type GetOpts struct {
 	Container string
 	Name      string
@@ -53,6 +60,8 @@
 	Params    map[string]string
 }
 
+// UpdateOpts is a structure that holds parameters for updating, creating, or deleting an
+// object's metadata.
 type UpdateOpts struct {
 	Container string
 	Name      string
diff --git a/openstack/storage/v1/objects/requests.go b/openstack/storage/v1/objects/requests.go
index 615a59d..a7dff40 100644
--- a/openstack/storage/v1/objects/requests.go
+++ b/openstack/storage/v1/objects/requests.go
@@ -8,8 +8,13 @@
 	"net/http"
 )
 
+// ListResult is a *http.Response that is returned from a call to the List function.
 type ListResult *http.Response
+
+// DownloadResult is a *http.Response that is returned from a call to the Download function.
 type DownloadResult *http.Response
+
+// GetResult is a *http.Response that is returned from a call to the Get function.
 type GetResult *http.Response
 
 // List is a function that retrieves all objects in a container. It also returns the details
@@ -32,7 +37,6 @@
 	url := c.GetContainerURL(opts.Container) + query
 	resp, err := perigee.Request("GET", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{200, 204},
 		Accept:      contentType,
 	})
 	return &resp.HttpResponse, err
@@ -56,7 +60,6 @@
 	url := c.GetObjectURL(opts.Container, opts.Name) + query
 	resp, err := perigee.Request("GET", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{200},
 	})
 	return &resp.HttpResponse, err
 }
@@ -93,7 +96,6 @@
 	_, err = perigee.Request("PUT", url, perigee.Options{
 		ReqBody:     reqBody,
 		MoreHeaders: h,
-		OkCodes:     []int{201},
 	})
 	return err
 }
@@ -114,7 +116,6 @@
 	url := c.GetObjectURL(opts.Container, opts.Name)
 	_, err = perigee.Request("COPY", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{201},
 	})
 	return err
 }
@@ -131,7 +132,6 @@
 	url := c.GetObjectURL(opts.Container, opts.Name) + query
 	_, err = perigee.Request("DELETE", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{204},
 	})
 	return err
 }
@@ -151,7 +151,6 @@
 	url := c.GetObjectURL(opts.Container, opts.Name)
 	resp, err := perigee.Request("HEAD", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{204},
 	})
 	return &resp.HttpResponse, err
 }
@@ -174,7 +173,6 @@
 	url := c.GetObjectURL(opts.Container, opts.Name)
 	_, err = perigee.Request("POST", url, perigee.Options{
 		MoreHeaders: h,
-		OkCodes:     []int{202, 204},
 	})
 	return err
 }
