change from 'Get' to 'Extract'; decrease dependence on perigee
diff --git a/openstack/storage/v1/objects/objects.go b/openstack/storage/v1/objects/objects.go
index 33bad29..9575e0f 100644
--- a/openstack/storage/v1/objects/objects.go
+++ b/openstack/storage/v1/objects/objects.go
@@ -3,6 +3,7 @@
 import (
 	"bytes"
 	"encoding/json"
+	"io/ioutil"
 	"strings"
 )
 
@@ -59,34 +60,48 @@
 	Headers   map[string]string
 }
 
-// GetInfo is a function that takes a ListResult (of type *perigee.Response)
+// ExtractInfo is a function that takes a ListResult (of type *http.Response)
 // and returns the objects' information.
-func GetInfo(lr ListResult) ([]Object, error) {
+func ExtractInfo(lr ListResult) ([]Object, error) {
 	var oi []Object
-	err := json.Unmarshal(lr.JsonResult, &oi)
+	defer lr.Body.Close()
+	body, err := ioutil.ReadAll(lr.Body)
+	if err != nil {
+		return oi, err
+	}
+	err = json.Unmarshal(body, &oi)
 	return oi, err
 }
 
-// GetNames is a function that takes a ListResult (of type *perigee.Response)
+// ExtractNames is a function that takes a ListResult (of type *http.Response)
 // and returns the objects' names.
-func GetNames(lr ListResult) []string {
-	jr := string(lr.JsonResult)
-	ons := strings.Split(jr, "\n")
+func ExtractNames(lr ListResult) ([]string, error) {
+	var ons []string
+	defer lr.Body.Close()
+	body, err := ioutil.ReadAll(lr.Body)
+	if err != nil {
+		return ons, err
+	}
+	jr := string(body)
+	ons = strings.Split(jr, "\n")
 	ons = ons[:len(ons)-1]
-	return ons
+	return ons, nil
 }
 
-// GetContent is a function that takes a DownloadResult (of type *perigee.Response)
+// ExtractContent is a function that takes a DownloadResult (of type *http.Response)
 // and returns the object's content.
-func GetContent(dr DownloadResult) []byte {
-	return dr.JsonResult
+func ExtractContent(dr DownloadResult) ([]byte, error) {
+	var body []byte
+	defer dr.Body.Close()
+	body, err := ioutil.ReadAll(dr.Body)
+	return body, err
 }
 
-// GetMetadata is a function that takes a GetResult (of type *perifee.Response)
+// ExtractMetadata is a function that takes a GetResult (of type *http.Response)
 // and returns the custom metadata associated with the object.
-func GetMetadata(gr GetResult) map[string]string {
+func ExtractMetadata(gr GetResult) map[string]string {
 	metadata := make(map[string]string)
-	for k, v := range gr.HttpResponse.Header {
+	for k, v := range gr.Header {
 		if strings.HasPrefix(k, "X-Object-Meta-") {
 			key := strings.TrimPrefix(k, "X-Object-Meta-")
 			metadata[key] = v[0]
diff --git a/openstack/storage/v1/objects/requests.go b/openstack/storage/v1/objects/requests.go
index fbcbe1f..615a59d 100644
--- a/openstack/storage/v1/objects/requests.go
+++ b/openstack/storage/v1/objects/requests.go
@@ -2,19 +2,19 @@
 
 import (
 	"fmt"
-
 	"github.com/racker/perigee"
 	storage "github.com/rackspace/gophercloud/openstack/storage/v1"
 	"github.com/rackspace/gophercloud/openstack/utils"
+	"net/http"
 )
 
-type ListResult *perigee.Response
-type DownloadResult *perigee.Response
-type GetResult *perigee.Response
+type ListResult *http.Response
+type DownloadResult *http.Response
+type GetResult *http.Response
 
 // List is a function that retrieves all objects in a container. It also returns the details
 // for the container. To extract only the object information or names, pass the ListResult
-// response to the GetInfo or GetNames function, respectively.
+// response to the ExtractInfo or ExtractNames function, respectively.
 func List(c *storage.Client, opts ListOpts) (ListResult, error) {
 	contentType := ""
 
@@ -31,16 +31,15 @@
 
 	url := c.GetContainerURL(opts.Container) + query
 	resp, err := perigee.Request("GET", url, perigee.Options{
-		Results:     true,
 		MoreHeaders: h,
 		OkCodes:     []int{200, 204},
 		Accept:      contentType,
 	})
-	return resp, err
+	return &resp.HttpResponse, err
 }
 
 // Download is a function that retrieves the content and metadata for an object.
-// To extract just the content, pass the DownloadResult response to the GetContent
+// To extract just the content, pass the DownloadResult response to the ExtractContent
 // function.
 func Download(c *storage.Client, opts DownloadOpts) (DownloadResult, error) {
 	h, err := c.GetHeaders()
@@ -56,11 +55,10 @@
 
 	url := c.GetObjectURL(opts.Container, opts.Name) + query
 	resp, err := perigee.Request("GET", url, perigee.Options{
-		Results:     true,
 		MoreHeaders: h,
 		OkCodes:     []int{200},
 	})
-	return resp, err
+	return &resp.HttpResponse, err
 }
 
 // Create is a function that creates a new object or replaces an existing object.
@@ -139,7 +137,7 @@
 }
 
 // Get is a function that retrieves the metadata of an object. To extract just the custom
-// metadata, pass the GetResult response to the GetMetadata function.
+// metadata, pass the GetResult response to the ExtractMetadata function.
 func Get(c *storage.Client, opts GetOpts) (GetResult, error) {
 	h, err := c.GetHeaders()
 	if err != nil {
@@ -155,7 +153,7 @@
 		MoreHeaders: h,
 		OkCodes:     []int{204},
 	})
-	return resp, err
+	return &resp.HttpResponse, err
 }
 
 // Update is a function that creates, updates, or deletes an object's metadata.