diff --git a/rackspace/blockstorage/v1/snapshots/results.go b/rackspace/blockstorage/v1/snapshots/results.go
index 8f4704c..e7b0847 100644
--- a/rackspace/blockstorage/v1/snapshots/results.go
+++ b/rackspace/blockstorage/v1/snapshots/results.go
@@ -1,6 +1,11 @@
 package snapshots
 
 import (
+	"fmt"
+	"time"
+
+	"github.com/racker/perigee"
+
 	"github.com/rackspace/gophercloud"
 	os "github.com/rackspace/gophercloud/openstack/blockstorage/v1/snapshots"
 	"github.com/rackspace/gophercloud/pagination"
@@ -111,3 +116,51 @@
 	err := mapstructure.Decode(page.(os.ListResult).Body, &response)
 	return response.Snapshots, err
 }
+
+// WaitUntilComplete will continually poll a snapshot until it successfully
+// transitions to a specified state. It will do this for at most the number of
+// seconds specified.
+func (snapshot Snapshot) WaitUntilComplete(c *gophercloud.ServiceClient, timeout int) error {
+	start := time.Now().Second()
+	var err error
+	for {
+		current, err := Get(c, snapshot.ID).Extract()
+
+		if err != nil {
+			break
+		}
+		if timeout > 0 && time.Now().Second()-start >= timeout {
+			err = fmt.Errorf("A timeout occurred")
+			break
+		}
+
+		if current.Progress == "100%" {
+			break
+		}
+	}
+
+	return err
+}
+
+func (snapshot Snapshot) WaitUntilDeleted(c *gophercloud.ServiceClient, timeout int) error {
+	start := time.Now().Second()
+	var err error
+	for {
+		_, err := Get(c, snapshot.ID).Extract()
+
+		// We actually want an error here
+		if casted, ok := err.(*perigee.UnexpectedResponseCodeError); ok && casted.Actual == 404 {
+			err = nil
+			break
+		} else if err != nil {
+			break
+		}
+
+		if timeout > 0 && time.Now().Second()-start >= timeout {
+			err = fmt.Errorf("A timeout occurred")
+			break
+		}
+	}
+
+	return err
+}
