diff --git a/acceptance/openstack/blockstorage/v1/volumeTypes_test.go b/acceptance/openstack/blockstorage/v1/volumeTypes_test.go
new file mode 100644
index 0000000..b4bff75
--- /dev/null
+++ b/acceptance/openstack/blockstorage/v1/volumeTypes_test.go
@@ -0,0 +1,43 @@
+// +build acceptance
+
+package v1
+
+import (
+	"strconv"
+	"testing"
+
+	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumeTypes"
+)
+
+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]string{
+				"capabilities": "gpu",
+			},
+			Name: "gophercloud-test-volumeType-200" + strconv.Itoa(i),
+		})
+		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)
+	}
+
+}
diff --git a/openstack/blockstorage/v1/volumeTypes/requests.go b/openstack/blockstorage/v1/volumeTypes/requests.go
new file mode 100644
index 0000000..694a44b
--- /dev/null
+++ b/openstack/blockstorage/v1/volumeTypes/requests.go
@@ -0,0 +1,53 @@
+package volumeTypes
+
+import (
+	"fmt"
+	"github.com/racker/perigee"
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/utils"
+)
+
+type CreateOpts struct {
+	ExtraSpecs map[string]string
+	Name       string
+}
+
+func Create(client *gophercloud.ServiceClient, opts CreateOpts) (*VolumeType, error) {
+	type volumeType struct {
+		ExtraSpecs map[string]string `json:"extra_specs,omitempty"`
+		Name       *string           `json:"name,omitempty"`
+	}
+
+	type request struct {
+		VolumeType volumeType `json:"volume_type"`
+	}
+
+	reqBody := request{
+		VolumeType: volumeType{},
+	}
+
+	reqBody.VolumeType.Name = utils.MaybeString(opts.Name)
+	reqBody.VolumeType.ExtraSpecs = opts.ExtraSpecs
+
+	type response struct {
+		VolumeType VolumeType `json:"volume_type"`
+	}
+
+	var respBody response
+
+	_, err := perigee.Request("POST", volumeTypesURL(client), perigee.Options{
+		MoreHeaders: client.Provider.AuthenticatedHeaders(),
+		OkCodes:     []int{200},
+		ReqBody:     &reqBody,
+		Results:     &respBody,
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	fmt.Printf("req: %+v\n", reqBody)
+	fmt.Printf("res: %+v\n", respBody)
+
+	return &respBody.VolumeType, nil
+
+}
diff --git a/openstack/blockstorage/v1/volumeTypes/results.go b/openstack/blockstorage/v1/volumeTypes/results.go
new file mode 100644
index 0000000..36de240
--- /dev/null
+++ b/openstack/blockstorage/v1/volumeTypes/results.go
@@ -0,0 +1,15 @@
+package volumeTypes
+
+import (
+//"fmt"
+
+//"github.com/rackspace/gophercloud/pagination"
+
+//"github.com/mitchellh/mapstructure"
+)
+
+type VolumeType struct {
+	ExtraSpecs map[string]interface{} `json:"extra_specs" mapstructure:"extra_specs"`
+	ID         string                 `json:"id" mapstructure:"id"`
+	Name       string                 `json:"name" mapstructure:"name"`
+}
diff --git a/openstack/blockstorage/v1/volumeTypes/urls.go b/openstack/blockstorage/v1/volumeTypes/urls.go
new file mode 100644
index 0000000..8df75cd
--- /dev/null
+++ b/openstack/blockstorage/v1/volumeTypes/urls.go
@@ -0,0 +1,11 @@
+package volumeTypes
+
+import "github.com/rackspace/gophercloud"
+
+func volumeTypesURL(c *gophercloud.ServiceClient) string {
+	return c.ServiceURL("types")
+}
+
+func volumeTypeURL(c *gophercloud.ServiceClient, id string) string {
+	return c.ServiceURL("types", id)
+}
