diff --git a/acceptance/openstack/blockstorage_test.go b/acceptance/openstack/blockstorage_test.go
new file mode 100644
index 0000000..ad40590
--- /dev/null
+++ b/acceptance/openstack/blockstorage_test.go
@@ -0,0 +1,70 @@
+// +build acceptance
+
+package openstack
+
+import (
+	"fmt"
+	blockstorage "github.com/rackspace/gophercloud/openstack/blockstorage/v1"
+	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes"
+	"github.com/rackspace/gophercloud/openstack/identity"
+	"github.com/rackspace/gophercloud/openstack/utils"
+	"os"
+	"testing"
+)
+
+func getClient() (*blockstorage.Client, error) {
+	ao, err := utils.AuthOptions()
+	if err != nil {
+		return nil, err
+	}
+
+	r, err := identity.Authenticate(ao)
+	if err != nil {
+		return nil, err
+	}
+
+	sc, err := identity.GetServiceCatalog(r)
+	if err != nil {
+		return nil, err
+	}
+
+	ces, err := sc.CatalogEntries()
+	if err != nil {
+		return nil, err
+	}
+
+	var eps []identity.Endpoint
+	for _, ce := range ces {
+		if ce.Type == "volume" {
+			eps = ce.Endpoints
+		}
+	}
+
+	region := os.Getenv("OS_REGION_NAME")
+	rep := ""
+	for _, ep := range eps {
+		if ep.Region == region {
+			rep = ep.PublicURL
+		}
+	}
+
+	client := blockstorage.NewClient(rep, r, ao)
+
+	return client, nil
+
+}
+
+func TestVolumes(t *testing.T) {
+	client, err := getClient()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	v, err := volumes.Create(client, volumes.CreateOpts{
+		Size: 1,
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+}
diff --git a/openstack/blockstorage/v1/client.go b/openstack/blockstorage/v1/client.go
new file mode 100644
index 0000000..4547d0b
--- /dev/null
+++ b/openstack/blockstorage/v1/client.go
@@ -0,0 +1,51 @@
+package blockstorage
+
+import (
+	"fmt"
+	"github.com/rackspace/gophercloud/openstack/identity"
+)
+
+// Client abstracts the connection information needed to make API requests for OpenStack compute endpoints.
+type Client struct {
+	endpoint  string
+	authority identity.AuthResults
+	options   identity.AuthOptions
+	token     *identity.Token
+}
+
+// NewClient creates a new Client structure to use when issuing requests to the server.
+func NewClient(e string, a identity.AuthResults, o identity.AuthOptions) *Client {
+	return &Client{
+		endpoint:  e,
+		authority: a,
+		options:   o,
+	}
+}
+
+func (c *Client) GetVolumeURL() string {
+	return fmt.Sprintf("%s/volumes", c.endpoint)
+}
+
+func (c *Client) GetHeaders() (map[string]string, error) {
+	t, err := c.getAuthToken()
+	if err != nil {
+		return map[string]string{}, err
+	}
+
+	return map[string]string{
+		"X-Auth-Token": t,
+	}, nil
+}
+
+func (c *Client) getAuthToken() (string, error) {
+	var err error
+
+	if c.token == nil {
+		c.token, err = identity.GetToken(c.authority)
+		if err != nil {
+			return "", err
+		}
+	}
+
+	return c.token.Id, err
+}
diff --git a/openstack/blockstorage/v1/volumes/requests.go b/openstack/blockstorage/v1/volumes/requests.go
new file mode 100644
index 0000000..b1f45cd
--- /dev/null
+++ b/openstack/blockstorage/v1/volumes/requests.go
@@ -0,0 +1,23 @@
+package volumes
+
+import (
+	"github.com/racker/perigee"
+	blockstorage "github.com/rackspace/gophercloud/openstack/blockstorage/v1"
+)
+
+func Create(c *blockstorage.Client, opts CreateOpts) (Volume, error) {
+	var v Volume
+	h, err := c.GetHeaders()
+	if err != nil {
+		return v, err
+	}
+	url := c.GetVolumeURL()
+	_, err = perigee.Request("POST", url, perigee.Options{
+		Results: &v,
+		ReqBody: map[string]interface{}{
+			"volume": opts,
+		},
+		MoreHeaders: h,
+	})
+	return v, err
+}
diff --git a/openstack/blockstorage/v1/volumes/volumes.go b/openstack/blockstorage/v1/volumes/volumes.go
new file mode 100644
index 0000000..35c416b
--- /dev/null
+++ b/openstack/blockstorage/v1/volumes/volumes.go
@@ -0,0 +1,16 @@
+package volumes
+
+type Volume map[string]interface{}
+
+type CreateOpts struct {
+	Availability_zone   string            `json:"size"`
+	Source_volid        string            `json:"source_volid"`
+	Display_description string            `json:"display_description"`
+	Snapshot_id         string            `json:"snapshot_id"`
+	Size                int               `json:"size"`
+	Display_name        string            `json:"display_name"`
+	ImageRef            string            `json:"imageRef"`
+	Volume_type         string            `json:"volume_type"`
+	Bootable            bool              `json:"bootable"`
+	Metadata            map[string]string `json:"metadata"`
+}
