diff --git a/acceptance/openstack/blockstorage/v1/snapshots_test.go b/acceptance/openstack/blockstorage/v1/snapshots_test.go
index a792cf2..9d8f0d3 100644
--- a/acceptance/openstack/blockstorage/v1/snapshots_test.go
+++ b/acceptance/openstack/blockstorage/v1/snapshots_test.go
@@ -3,73 +3,65 @@
 package v1
 
 import (
-	"errors"
-	"strconv"
+	"fmt"
+	"os"
 	"testing"
 	"time"
 
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/snapshots"
-	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes"
 )
 
-func waitForVolume(client *gophercloud.ServiceClient, id string) error {
-	notReady := true
-	secondsSlept := 0
-	for notReady && secondsSlept < 20 {
-		gv, err := volumes.Get(client, id).ExtractVolume()
+func waitForSnapshot(client *gophercloud.ServiceClient, id string) error {
+	for secondsSlept := 0; secondsSlept < 240; secondsSlept++ {
+		fmt.Printf("Seconds slept waiting for snapshot: %d\n", secondsSlept)
+		gss, err := snapshots.Get(client, id).ExtractSnapshot()
 		if err != nil {
 			return err
 		}
-		if gv.Status == "available" {
+		if gss.Status == "available" {
 			return nil
 		}
+		if gss.Status == "error" {
+			return fmt.Errorf("Error waiting for snapshot to create. Snapshot status is 'error'.")
+		}
 		time.Sleep(1 * time.Second)
-		secondsSlept = secondsSlept + 1
 	}
-
-	return errors.New("Time out waiting for volume to become available")
+	gss, err := snapshots.Get(client, id).ExtractSnapshot()
+	if err != nil {
+		return err
+	}
+	return fmt.Errorf("Time out waiting for snapshot to become available: %+v", gss)
 }
 
-var numSnapshots = 1
-
 func TestSnapshots(t *testing.T) {
+
+	volumeID := os.Getenv("OS_VOLUME_ID")
+	if volumeID == "" {
+		t.Errorf("Expect OS_VOLUME_ID environment variable. Skipping create and delete snapshot functions.")
+		return
+	}
+
 	client, err := newClient()
 	if err != nil {
 		t.Fatalf("Failed to create Block Storage v1 client: %v", err)
 	}
 
-	cv, err := volumes.Create(client, volumes.CreateOpts{
-		Size: 1,
-		Name: "gophercloud-test-volume",
+	css, err := snapshots.Create(client, snapshots.CreateOpts{
+		Name:     "gophercloud-test-snapshot",
+		VolumeID: volumeID,
 	})
 	if err != nil {
-		t.Fatalf("Failed to create volume: %v", err)
+		t.Errorf("Failed to create snapshot: %v\n", err)
 	}
 
-	err = waitForVolume(client, cv.ID)
+	err = waitForSnapshot(client, css.ID)
 	if err != nil {
-		t.Fatal(err)
+		t.Errorf("Failed to create snapshot: %v\n", err)
 	}
-	defer func() {
-		err = volumes.Delete(client, cv.ID)
-		if err != nil {
-			t.Error(err)
-			return
-		}
-	}()
 
-	var sss []*snapshots.Snapshot
-	for i := 0; i < numSnapshots; i++ {
-		css, err := snapshots.Create(client, snapshots.CreateOpts{
-			Name:     "gophercloud-test-snapshot-" + strconv.Itoa(i),
-			VolumeID: cv.ID,
-		})
-		if err != nil {
-			t.Errorf("Failed to create snapshot: %v\n", err)
-		}
-		sss = append(sss, css)
-	}
-	t.Logf("Created snapshots: %+v\n", sss)
+	err = waitForSnapshot(client, css.ID)
+
+	t.Logf("Created snapshots: %+v\n", *css)
 
 }
diff --git a/openstack/blockstorage/v1/snapshots/requests.go b/openstack/blockstorage/v1/snapshots/requests.go
index cdf5d40..5e9256d 100644
--- a/openstack/blockstorage/v1/snapshots/requests.go
+++ b/openstack/blockstorage/v1/snapshots/requests.go
@@ -45,7 +45,7 @@
 
 	_, err := perigee.Request("POST", snapshotsURL(client), perigee.Options{
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
-		OkCodes:     []int{201},
+		OkCodes:     []int{200, 201},
 		ReqBody:     &reqBody,
 		Results:     &respBody,
 	})
@@ -56,6 +56,13 @@
 	return &respBody.Snapshot, nil
 }
 
+func Delete(client *gophercloud.ServiceClient, id string) error {
+	_, err := perigee.Request("Delete", snapshotURL(client, id), perigee.Options{
+		MoreHeaders: client.Provider.AuthenticatedHeaders(),
+	})
+	return err
+}
+
 func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var gr GetResult
 	_, err := perigee.Request("GET", snapshotURL(client, id), perigee.Options{
