add 'ExtractHeader' method to object storage return types
diff --git a/acceptance/openstack/objectstorage/v1/objects_test.go b/acceptance/openstack/objectstorage/v1/objects_test.go
index 987f733..a8de338 100644
--- a/acceptance/openstack/objectstorage/v1/objects_test.go
+++ b/acceptance/openstack/objectstorage/v1/objects_test.go
@@ -30,8 +30,9 @@
 
 	// Create a container to hold the test objects.
 	cName := tools.RandomString("test-container-", 8)
-	createres := containers.Create(client, cName, nil)
-	th.AssertNoErr(t, createres.Err)
+	header, err := containers.Create(client, cName, nil).ExtractHeader()
+	th.AssertNoErr(t, err)
+	t.Logf("Create object headers: %+v\n", header)
 
 	// Defer deletion of the container until after testing.
 	defer func() {
@@ -55,7 +56,7 @@
 	}()
 
 	ons := make([]string, 0, len(oNames))
-	err := objects.List(client, cName, &objects.ListOpts{Full: false, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) {
+	err = objects.List(client, cName, &objects.ListOpts{Full: false, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) {
 		names, err := objects.ExtractNames(page)
 		th.AssertNoErr(t, err)
 		ons = append(ons, names...)
diff --git a/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go b/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go
index dfc2dca..6e477ae 100644
--- a/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go
+++ b/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go
@@ -25,9 +25,9 @@
 		th.AssertNoErr(t, deleteResult.Err)
 	}()
 
-	createObjResult := raxObjects.Create(raxClient, "gophercloud-test", "test-object", bytes.NewBufferString("gophercloud cdn test"), nil)
-	th.AssertNoErr(t, createObjResult.Err)
-	t.Logf("Headers from Create Object request: %+v\n", createObjResult.Header)
+	header, err := raxObjects.Create(raxClient, "gophercloud-test", "test-object", bytes.NewBufferString("gophercloud cdn test"), nil).ExtractHeader()
+	th.AssertNoErr(t, err)
+	t.Logf("Headers from Create Object request: %+v\n", header)
 	defer func() {
 		deleteResult := raxObjects.Delete(raxClient, "gophercloud-test", "test-object", nil)
 		th.AssertNoErr(t, deleteResult.Err)
diff --git a/openstack/objectstorage/v1/accounts/results.go b/openstack/objectstorage/v1/accounts/results.go
index ba379eb..b254db9 100644
--- a/openstack/objectstorage/v1/accounts/results.go
+++ b/openstack/objectstorage/v1/accounts/results.go
@@ -1,14 +1,23 @@
 package accounts
 
 import (
+	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
 )
 
+type headerResult struct {
+	gophercloud.Result
+}
+
+func (hr headerResult) ExtractHeader() (http.Header, error) {
+	return hr.Header, hr.Err
+}
+
 // GetResult is returned from a call to the Get function.
 type GetResult struct {
-	gophercloud.Result
+	headerResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -30,5 +39,5 @@
 
 // UpdateResult is returned from a call to the Update function.
 type UpdateResult struct {
-	gophercloud.Result
+	headerResult
 }
diff --git a/openstack/objectstorage/v1/containers/results.go b/openstack/objectstorage/v1/containers/results.go
index f7f84c3..b0f2bd7 100644
--- a/openstack/objectstorage/v1/containers/results.go
+++ b/openstack/objectstorage/v1/containers/results.go
@@ -2,6 +2,7 @@
 
 import (
 	"fmt"
+	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
@@ -96,13 +97,17 @@
 	}
 }
 
-type commonResult struct {
+type headerResult struct {
 	gophercloud.Result
 }
 
+func (hr headerResult) ExtractHeader() (http.Header, error) {
+	return hr.Header, hr.Err
+}
+
 // GetResult represents the result of a get operation.
 type GetResult struct {
-	commonResult
+	headerResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -125,19 +130,19 @@
 // the headers from the HTTP response, you can invoke the 'ExtractHeaders'
 // method on the result struct.
 type CreateResult struct {
-	commonResult
+	headerResult
 }
 
 // UpdateResult represents the result of an update operation. To extract the
 // the headers from the HTTP response, you can invoke the 'ExtractHeaders'
 // method on the result struct.
 type UpdateResult struct {
-	commonResult
+	headerResult
 }
 
 // DeleteResult represents the result of a delete operation. To extract the
 // the headers from the HTTP response, you can invoke the 'ExtractHeaders'
 // method on the result struct.
 type DeleteResult struct {
-	gophercloud.ExtractErrResult
+	headerResult
 }
diff --git a/openstack/objectstorage/v1/objects/requests.go b/openstack/objectstorage/v1/objects/requests.go
index f5ca296..56004b2 100644
--- a/openstack/objectstorage/v1/objects/requests.go
+++ b/openstack/objectstorage/v1/objects/requests.go
@@ -303,11 +303,12 @@
 		url += query
 	}
 
-	_, res.Err = perigee.Request("DELETE", url, perigee.Options{
+	resp, err := perigee.Request("DELETE", url, perigee.Options{
 		MoreHeaders: c.AuthenticatedHeaders(),
 		OkCodes:     []int{204},
 	})
-
+	res.Header = resp.HttpResponse.Header
+	res.Err = err
 	return res
 }
 
diff --git a/openstack/objectstorage/v1/objects/results.go b/openstack/objectstorage/v1/objects/results.go
index 97a6f91..7524c43 100644
--- a/openstack/objectstorage/v1/objects/results.go
+++ b/openstack/objectstorage/v1/objects/results.go
@@ -4,6 +4,7 @@
 	"fmt"
 	"io"
 	"io/ioutil"
+	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
@@ -97,13 +98,17 @@
 	}
 }
 
-type commonResult struct {
+type headerResult struct {
 	gophercloud.Result
 }
 
+func (hr headerResult) ExtractHeader() (http.Header, error) {
+	return hr.Header, hr.Err
+}
+
 // DownloadResult is a *http.Response that is returned from a call to the Download function.
 type DownloadResult struct {
-	commonResult
+	headerResult
 	Body io.Reader
 }
 
@@ -125,7 +130,7 @@
 
 // GetResult is a *http.Response that is returned from a call to the Get function.
 type GetResult struct {
-	commonResult
+	headerResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -146,20 +151,20 @@
 
 // CreateResult represents the result of a create operation.
 type CreateResult struct {
-	commonResult
+	headerResult
 }
 
 // UpdateResult represents the result of an update operation.
 type UpdateResult struct {
-	commonResult
+	headerResult
 }
 
 // DeleteResult represents the result of a delete operation.
 type DeleteResult struct {
-	gophercloud.ExtractErrResult
+	headerResult
 }
 
 // CopyResult represents the result of a copy operation.
 type CopyResult struct {
-	commonResult
+	headerResult
 }
diff --git a/rackspace/objectstorage/v1/cdncontainers/results.go b/rackspace/objectstorage/v1/cdncontainers/results.go
index 374d884..05367e2 100644
--- a/rackspace/objectstorage/v1/cdncontainers/results.go
+++ b/rackspace/objectstorage/v1/cdncontainers/results.go
@@ -1,8 +1,20 @@
 package cdncontainers
 
-import "github.com/rackspace/gophercloud"
+import (
+	"net/http"
+
+	"github.com/rackspace/gophercloud"
+)
+
+type headerResult struct {
+	gophercloud.Result
+}
+
+func (hr headerResult) ExtractHeader() (http.Header, error) {
+	return hr.Header, hr.Err
+}
 
 // EnableResult represents the result of a get operation.
 type EnableResult struct {
-	gophercloud.Result
+	headerResult
 }