diff --git a/openstack/objectstorage/v1/accounts/accounts.go b/openstack/objectstorage/v1/accounts/accounts.go
deleted file mode 100644
index c460e45..0000000
--- a/openstack/objectstorage/v1/accounts/accounts.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package accounts
-
-import (
-	"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
-}
-
-// ExtractMetadata is a function that takes a GetResult (of type *http.Response)
-// and returns the custom metatdata associated with the account.
-func ExtractMetadata(gr GetResult) map[string]string {
-	metadata := make(map[string]string)
-	for k, v := range gr.Header {
-		if strings.HasPrefix(k, "X-Account-Meta-") {
-			key := strings.TrimPrefix(k, "X-Account-Meta-")
-			metadata[key] = v[0]
-		}
-	}
-	return metadata
-}
diff --git a/openstack/objectstorage/v1/accounts/accounts_test.go b/openstack/objectstorage/v1/accounts/accounts_test.go
deleted file mode 100644
index 2c2a84a..0000000
--- a/openstack/objectstorage/v1/accounts/accounts_test.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package accounts
-
-import (
-	"net/http"
-	"reflect"
-	"testing"
-)
-
-func TestExtractAccountMetadata(t *testing.T) {
-	getResult := &http.Response{}
-
-	expected := map[string]string{}
-
-	actual := ExtractMetadata(getResult)
-
-	if !reflect.DeepEqual(expected, actual) {
-		t.Errorf("Expected: %+v\nActual:%+v", expected, actual)
-	}
-}
diff --git a/openstack/objectstorage/v1/accounts/requests.go b/openstack/objectstorage/v1/accounts/requests.go
index c738573..5de09da 100644
--- a/openstack/objectstorage/v1/accounts/requests.go
+++ b/openstack/objectstorage/v1/accounts/requests.go
@@ -1,46 +1,67 @@
 package accounts
 
 import (
-	"net/http"
-
 	"github.com/racker/perigee"
 	"github.com/rackspace/gophercloud"
 )
 
-// GetResult is a *http.Response that is returned from a call to the Get function.
-type GetResult *http.Response
+// 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
+}
 
 // Update is a function that creates, updates, or deletes an account's metadata.
-func Update(c *gophercloud.ServiceClient, opts UpdateOpts) error {
-	h := c.Provider.AuthenticatedHeaders()
+func Update(c *gophercloud.ServiceClient, opts UpdateOpts) UpdateResult {
+	headers := c.Provider.AuthenticatedHeaders()
 
 	for k, v := range opts.Headers {
-		h[k] = v
+		headers[k] = v
 	}
 
 	for k, v := range opts.Metadata {
-		h["X-Account-Meta-"+k] = v
+		headers["X-Account-Meta-"+k] = v
 	}
 
-	_, err := perigee.Request("POST", accountURL(c), perigee.Options{
-		MoreHeaders: h,
+	var res UpdateResult
+
+	var resp *perigee.Response
+
+	resp, res.Err = perigee.Request("POST", accountURL(c), perigee.Options{
+		MoreHeaders: headers,
 		OkCodes:     []int{204},
 	})
-	return err
+
+	res.Resp = &resp.HttpResponse
+
+	return res
+}
+
+// GetOpts is a structure that contains parameters for getting an account's metadata.
+type GetOpts struct {
+	Headers map[string]string
 }
 
 // Get is a function that retrieves an account's metadata. To extract just the custom
 // metadata, pass the GetResult response to the ExtractMetadata function.
-func Get(c *gophercloud.ServiceClient, opts GetOpts) (GetResult, error) {
-	h := c.Provider.AuthenticatedHeaders()
+func Get(c *gophercloud.ServiceClient, opts GetOpts) GetResult {
+	headers := c.Provider.AuthenticatedHeaders()
 
 	for k, v := range opts.Headers {
-		h[k] = v
+		headers[k] = v
 	}
 
-	resp, err := perigee.Request("HEAD", accountURL(c), perigee.Options{
-		MoreHeaders: h,
+	var res GetResult
+	var resp *perigee.Response
+
+	resp, res.Err = perigee.Request("HEAD", accountURL(c), perigee.Options{
+		MoreHeaders: headers,
+		Results:     &res.Resp,
 		OkCodes:     []int{204},
 	})
-	return &resp.HttpResponse, err
+
+	res.Resp = &resp.HttpResponse
+
+	return res
 }
diff --git a/openstack/objectstorage/v1/accounts/requests_test.go b/openstack/objectstorage/v1/accounts/requests_test.go
index 348f93e..8cb2be8 100644
--- a/openstack/objectstorage/v1/accounts/requests_test.go
+++ b/openstack/objectstorage/v1/accounts/requests_test.go
@@ -18,13 +18,21 @@
 		testhelper.TestMethod(t, r, "POST")
 		testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
 		testhelper.TestHeader(t, r, "X-Account-Meta-Gophercloud-Test", "accounts")
+
+		w.Header().Set("X-Account-Container-Count", "2")
+		w.Header().Set("X-Account-Bytes-Used", "14")
+		w.Header().Set("X-Account-Meta-Subject", "books")
+
 		w.WriteHeader(http.StatusNoContent)
 	})
 
-	err := Update(fake.ServiceClient(), UpdateOpts{Metadata: metadata})
-	if err != nil {
-		t.Fatalf("Unable to update account: %v", err)
-	}
+	res := Update(fake.ServiceClient(), UpdateOpts{Metadata: metadata})
+
+	metadata := res.ExtractMetadata()
+	expected := map[string]string{"Subject": "books"}
+
+	testhelper.AssertDeepEquals(t, expected, metadata)
+	testhelper.AssertNoErr(t, res.Err)
 }
 
 func TestGetAccount(t *testing.T) {
@@ -34,11 +42,19 @@
 	testhelper.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
 		testhelper.TestMethod(t, r, "HEAD")
 		testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+
+		w.Header().Set("X-Account-Container-Count", "2")
+		w.Header().Set("X-Account-Bytes-Used", "14")
+		w.Header().Set("X-Account-Meta-Subject", "books")
+
 		w.WriteHeader(http.StatusNoContent)
 	})
 
-	_, err := Get(fake.ServiceClient(), GetOpts{})
-	if err != nil {
-		t.Fatalf("Unable to get account metadata: %v", err)
-	}
+	res := Get(fake.ServiceClient(), GetOpts{})
+
+	metadata := res.ExtractMetadata()
+	expected := map[string]string{"Subject": "books"}
+
+	testhelper.AssertDeepEquals(t, expected, metadata)
+	testhelper.AssertNoErr(t, res.Err)
 }
diff --git a/openstack/objectstorage/v1/accounts/results.go b/openstack/objectstorage/v1/accounts/results.go
new file mode 100644
index 0000000..8ec2eff
--- /dev/null
+++ b/openstack/objectstorage/v1/accounts/results.go
@@ -0,0 +1,38 @@
+package accounts
+
+import (
+	"net/http"
+	"strings"
+
+	"github.com/rackspace/gophercloud"
+)
+
+type commonResult struct {
+	gophercloud.CommonResult
+	Resp *http.Response
+}
+
+// GetResult represents the result of a create operation.
+type GetResult struct {
+	commonResult
+}
+
+// UpdateResult represents the result of an update operation.
+type UpdateResult struct {
+	commonResult
+}
+
+// ExtractMetadata is a function that takes a GetResult (of type *http.Response)
+// and returns the custom metatdata associated with the account.
+func (res commonResult) ExtractMetadata() map[string]string {
+	metadata := make(map[string]string)
+
+	for k, v := range res.Resp.Header {
+		if strings.HasPrefix(k, "X-Account-Meta-") {
+			key := strings.TrimPrefix(k, "X-Account-Meta-")
+			metadata[key] = v[0]
+		}
+	}
+
+	return metadata
+}
