diff --git a/openstack/compute/v2/flavors/requests.go b/openstack/compute/v2/flavors/requests.go
index c798f17..f34a9ea 100644
--- a/openstack/compute/v2/flavors/requests.go
+++ b/openstack/compute/v2/flavors/requests.go
@@ -32,9 +32,6 @@
 	return flavors[len(flavors)-1].ID, nil
 }
 
-// GetResults temporarily encodes the result of a Get operation.
-type GetResults map[string]interface{}
-
 // ListFilterOptions helps control the results returned by the List() function.
 // For example, a flavor with a minDisk field of 10 will not be returned if you specify MinDisk set to 20.
 // Typically, software will use the last ID of the previous call to List to set the Marker for the current call.
@@ -69,11 +66,11 @@
 
 // Get instructs OpenStack to provide details on a single flavor, identified by its ID.
 // Use ExtractFlavor to convert its result into a Flavor.
-func Get(client *gophercloud.ServiceClient, id string) (GetResults, error) {
-	var gr GetResults
-	err := perigee.Get(getFlavorURL(client, id), perigee.Options{
-		Results:     &gr,
+func Get(client *gophercloud.ServiceClient, id string) GetResult {
+	var gr GetResult
+	gr.Err = perigee.Get(getFlavorURL(client, id), perigee.Options{
+		Results:     &gr.Resp,
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
 	})
-	return gr, err
+	return gr
 }
diff --git a/openstack/compute/v2/flavors/requests_test.go b/openstack/compute/v2/flavors/requests_test.go
index 77d2496..a66b54c 100644
--- a/openstack/compute/v2/flavors/requests_test.go
+++ b/openstack/compute/v2/flavors/requests_test.go
@@ -118,14 +118,10 @@
 	})
 
 	client := serviceClient()
-	result, err := Get(client, "12345")
+	actual, err := Get(client, "12345").Extract()
 	if err != nil {
 		t.Fatalf("Unable to get flavor: %v", err)
 	}
-	actual, err := ExtractFlavor(result)
-	if err != nil {
-		t.Fatalf("Unable to extract flavor: %v", err)
-	}
 
 	expected := &Flavor{
 		ID:         "1",
diff --git a/openstack/compute/v2/flavors/flavors.go b/openstack/compute/v2/flavors/results.go
similarity index 81%
rename from openstack/compute/v2/flavors/flavors.go
rename to openstack/compute/v2/flavors/results.go
index 6809be4..dfe2146 100644
--- a/openstack/compute/v2/flavors/flavors.go
+++ b/openstack/compute/v2/flavors/results.go
@@ -5,12 +5,40 @@
 	"reflect"
 
 	"github.com/mitchellh/mapstructure"
+	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/pagination"
 )
 
 // ErrCannotInterpret is returned by an Extract call if the response body doesn't have the expected structure.
 var ErrCannotInterpet = errors.New("Unable to interpret a response body.")
 
+// GetResult temporarily holds the reponse from a Get call.
+type GetResult struct {
+	gophercloud.CommonResult
+}
+
+// Extract provides access to the individual Flavor returned by the Get function.
+func (gr GetResult) Extract() (*Flavor, error) {
+	if gr.Err != nil {
+		return nil, gr.Err
+	}
+
+	var result struct {
+		Flavor Flavor `mapstructure:"flavor"`
+	}
+
+	cfg := &mapstructure.DecoderConfig{
+		DecodeHook: defaulter,
+		Result:     &result,
+	}
+	decoder, err := mapstructure.NewDecoder(cfg)
+	if err != nil {
+		return nil, err
+	}
+	err = decoder.Decode(gr.Resp)
+	return &result.Flavor, err
+}
+
 // Flavor records represent (virtual) hardware configurations for server resources in a region.
 type Flavor struct {
 	// The Id field contains the flavor's unique identifier.
@@ -63,23 +91,3 @@
 
 	return container.Flavors, nil
 }
-
-// ExtractFlavor provides access to the individual flavor returned by the Get function.
-func ExtractFlavor(gr GetResults) (*Flavor, error) {
-	f, ok := gr["flavor"]
-	if !ok {
-		return nil, ErrCannotInterpet
-	}
-
-	flav := new(Flavor)
-	cfg := &mapstructure.DecoderConfig{
-		DecodeHook: defaulter,
-		Result:     flav,
-	}
-	decoder, err := mapstructure.NewDecoder(cfg)
-	if err != nil {
-		return flav, err
-	}
-	err = decoder.Decode(f)
-	return flav, err
-}
