get snapshot
diff --git a/acceptance/openstack/blockstorage_test.go b/acceptance/openstack/blockstorage_test.go
index 0cd1d56..dab7266 100644
--- a/acceptance/openstack/blockstorage_test.go
+++ b/acceptance/openstack/blockstorage_test.go
@@ -3,7 +3,7 @@
 package openstack
 
 import (
-	"fmt"
+	//"fmt"
 	blockstorage "github.com/rackspace/gophercloud/openstack/blockstorage/v1"
 	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/snapshots"
 	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes"
@@ -129,6 +129,8 @@
 		return
 	}
 
+	var css snapshots.Snapshot
+
 	cv, err := volumes.Create(client, volumes.CreateOpts{
 		"size":         1,
 		"display_name": "test-volume",
@@ -138,12 +140,21 @@
 		return
 	}
 	defer func() {
-		err = volumes.Delete(client, volumes.DeleteOpts{
-			"id": cv.Id,
-		})
-		if err != nil {
-			t.Error(err)
-			return
+		for i := 0; i < 60; i++ {
+			gss, _ := snapshots.Get(client, snapshots.GetOpts{
+				"id": css.Id,
+			})
+			if gss.Status == "" {
+				err = volumes.Delete(client, volumes.DeleteOpts{
+					"id": cv.Id,
+				})
+				if err != nil {
+					t.Error(err)
+					return
+				}
+				break
+			}
+			time.Sleep(5000 * time.Millisecond)
 		}
 	}()
 
@@ -161,7 +172,6 @@
 		time.Sleep(2000 * time.Millisecond)
 	}
 
-	var css snapshots.Snapshot
 	css, err = snapshots.Create(client, snapshots.CreateOpts{
 		"volume_id":    cv.Id,
 		"display_name": "test-snapshot",
@@ -170,15 +180,26 @@
 		t.Error(err)
 		return
 	}
-	time.Sleep(20000 * time.Millisecond)
 	defer func() {
-		err = snapshots.Delete(client, snapshots.DeleteOpts{
-			"id": cv.Id,
-		})
-		if err != nil {
-			t.Error(err)
-			return
+		for i := 0; i < 60; i++ {
+			gss, err := snapshots.Get(client, snapshots.GetOpts{
+				"id": css.Id,
+			})
+			if err != nil {
+				t.Error(err)
+				return
+			}
+			if gss.Status == "available" {
+				err = snapshots.Delete(client, snapshots.DeleteOpts{
+					"id": css.Id,
+				})
+				if err != nil {
+					t.Error(err)
+					return
+				}
+				break
+			}
+			time.Sleep(2000 * time.Millisecond)
 		}
 	}()
-	fmt.Printf("%+v\n", css)
 }
diff --git a/openstack/blockstorage/v1/snapshots/requests.go b/openstack/blockstorage/v1/snapshots/requests.go
index 90c2ec3..1fc3e27 100644
--- a/openstack/blockstorage/v1/snapshots/requests.go
+++ b/openstack/blockstorage/v1/snapshots/requests.go
@@ -24,6 +24,22 @@
 	return ss, err
 }
 
+func Get(c *blockstorage.Client, opts GetOpts) (Snapshot, error) {
+	var ss Snapshot
+	h, err := c.GetHeaders()
+	if err != nil {
+		return ss, err
+	}
+	url := c.GetSnapshotURL(opts["id"])
+	_, err = perigee.Request("GET", url, perigee.Options{
+		Results: &struct {
+			Snapshot *Snapshot `json:"snapshot"`
+		}{&ss},
+		MoreHeaders: h,
+	})
+	return ss, err
+}
+
 func Delete(c *blockstorage.Client, opts DeleteOpts) error {
 	h, err := c.GetHeaders()
 	if err != nil {
diff --git a/openstack/blockstorage/v1/snapshots/snapshots.go b/openstack/blockstorage/v1/snapshots/snapshots.go
index 6a76f85..bd5510a 100644
--- a/openstack/blockstorage/v1/snapshots/snapshots.go
+++ b/openstack/blockstorage/v1/snapshots/snapshots.go
@@ -12,4 +12,5 @@
 }
 
 type CreateOpts map[string]interface{}
+type GetOpts map[string]string
 type DeleteOpts map[string]string