diff --git a/acceptance/openstack/blockStorage/v1/volumeTypes_test.go b/acceptance/openstack/blockStorage/v1/volumeTypes_test.go
index ad6526a..0317768 100644
--- a/acceptance/openstack/blockStorage/v1/volumeTypes_test.go
+++ b/acceptance/openstack/blockStorage/v1/volumeTypes_test.go
@@ -3,7 +3,6 @@
 package v1
 
 import (
-	"strconv"
 	"testing"
 	"time"
 
@@ -11,62 +10,49 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
-var numVolTypes = 1
-
 func TestVolumeTypes(t *testing.T) {
 	client, err := newClient()
 	if err != nil {
 		t.Fatalf("Failed to create Block Storage v1 client: %v", err)
 	}
 
-	var cvt *volumeTypes.VolumeType
-	for i := 0; i < numVolTypes; i++ {
-		cvt, err = volumeTypes.Create(client, volumeTypes.CreateOpts{
-			ExtraSpecs: map[string]interface{}{
-				"capabilities": "gpu",
-				"priority":     3,
-			},
-			Name: "gophercloud-test-volumeType-" + strconv.Itoa(i),
-		})
+	vt, err := volumeTypes.Create(client, volumeTypes.CreateOpts{
+		ExtraSpecs: map[string]interface{}{
+			"capabilities": "gpu",
+			"priority":     3,
+		},
+		Name: "gophercloud-test-volumeType",
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	defer func() {
+		time.Sleep(10000 * time.Millisecond)
+		err = volumeTypes.Delete(client, vt.ID)
 		if err != nil {
 			t.Error(err)
 			return
 		}
-		defer func() {
-			time.Sleep(10000 * time.Millisecond)
-			err = volumeTypes.Delete(client, cvt.ID)
-			if err != nil {
-				t.Error(err)
-				return
-			}
-		}()
-		t.Logf("Created volume type: %+v\n", cvt)
-	}
+	}()
+	t.Logf("Created volume type: %+v\n", vt)
 
-	gr, err := volumeTypes.Get(client, cvt.ID)
+	vt, err = volumeTypes.Get(client, vt.ID).ExtractVolumeType()
 	if err != nil {
 		t.Error(err)
 		return
 	}
-	v, err := volumeTypes.ExtractVolumeType(gr)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-	t.Logf("Got volume type: %+v\n", v)
+	t.Logf("Got volume type: %+v\n", vt)
 
-	pager := volumeTypes.List(client, volumeTypes.ListOpts{})
-	if err != nil {
-		t.Error(err)
-		return
-	}
-	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+	err = volumeTypes.List(client, volumeTypes.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) {
 		volTypes, err := volumeTypes.ExtractVolumeTypes(page)
-		if len(volTypes) != numVolTypes {
-			t.Errorf("Expected %d volume types, got %d", numVolTypes, len(volTypes))
+		if len(volTypes) != 1 {
+			t.Errorf("Expected 1 volume type, got %d", len(volTypes))
 		}
 		t.Logf("Listing volume types: %+v\n", volTypes)
 		return true, err
 	})
-
+	if err != nil {
+		t.Errorf("Error trying to list volume types: %v", err)
+	}
 }
diff --git a/openstack/blockStorage/v1/volumeTypes/requests.go b/openstack/blockStorage/v1/volumeTypes/requests.go
index 89ee2c5..3adcb2d 100644
--- a/openstack/blockStorage/v1/volumeTypes/requests.go
+++ b/openstack/blockStorage/v1/volumeTypes/requests.go
@@ -57,13 +57,13 @@
 	return err
 }
 
-func Get(client *gophercloud.ServiceClient, id string) (GetResult, error) {
+func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var gr GetResult
-	_, err := perigee.Request("GET", volumeTypeURL(client, id), perigee.Options{
-		Results:     &gr,
+	_, gr.Err = perigee.Request("GET", volumeTypeURL(client, id), perigee.Options{
+		Results:     &gr.Resp,
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
 	})
-	return gr, err
+	return gr
 }
 
 func List(client *gophercloud.ServiceClient, opts ListOpts) pagination.Pager {
diff --git a/openstack/blockStorage/v1/volumeTypes/results.go b/openstack/blockStorage/v1/volumeTypes/results.go
index 2207eec..1d97a49 100644
--- a/openstack/blockStorage/v1/volumeTypes/results.go
+++ b/openstack/blockStorage/v1/volumeTypes/results.go
@@ -3,9 +3,9 @@
 import (
 	"fmt"
 
-	"github.com/rackspace/gophercloud/pagination"
-
 	"github.com/mitchellh/mapstructure"
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/pagination"
 )
 
 type VolumeType struct {
@@ -42,9 +42,14 @@
 	return response.VolumeTypes, err
 }
 
-type GetResult map[string]interface{}
+type GetResult struct {
+	gophercloud.CommonResult
+}
 
-func ExtractVolumeType(gr GetResult) (*VolumeType, error) {
+func (gr GetResult) ExtractVolumeType() (*VolumeType, error) {
+	if gr.Err != nil {
+		return nil, gr.Err
+	}
 	var response struct {
 		VolumeType *VolumeType `mapstructure:"volume_type"`
 	}
