diff --git a/rackspace/blockstorage/v1/snapshots/results.go b/rackspace/blockstorage/v1/snapshots/results.go
index e7b0847..0fab282 100644
--- a/rackspace/blockstorage/v1/snapshots/results.go
+++ b/rackspace/blockstorage/v1/snapshots/results.go
@@ -1,9 +1,6 @@
 package snapshots
 
 import (
-	"fmt"
-	"time"
-
 	"github.com/racker/perigee"
 
 	"github.com/rackspace/gophercloud"
@@ -59,10 +56,6 @@
 	VolumeID string `mapstructure:"volume_id"`
 }
 
-type commonResult struct {
-	gophercloud.Result
-}
-
 // CreateResult represents the result of a create operation
 type CreateResult struct {
 	os.CreateResult
@@ -121,46 +114,36 @@
 // 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 {
+	return gophercloud.WaitFor(timeout, func() (bool, error) {
+		// Poll resource
 		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
+			return false, err
 		}
 
+		// Has it been built yet?
 		if current.Progress == "100%" {
-			break
+			return true, nil
 		}
-	}
 
-	return err
+		return false, nil
+	})
 }
 
+// WaitUntilDeleted will continually poll a snapshot until it has been
+// successfully deleted, i.e. returns a 404 status.
 func (snapshot Snapshot) WaitUntilDeleted(c *gophercloud.ServiceClient, timeout int) error {
-	start := time.Now().Second()
-	var err error
-	for {
+	return gophercloud.WaitFor(timeout, func() (bool, error) {
+		// Poll resource
 		_, err := Get(c, snapshot.ID).Extract()
 
-		// We actually want an error here
+		// Check for a 404
 		if casted, ok := err.(*perigee.UnexpectedResponseCodeError); ok && casted.Actual == 404 {
-			err = nil
-			break
+			return true, nil
 		} else if err != nil {
-			break
+			return false, err
 		}
 
-		if timeout > 0 && time.Now().Second()-start >= timeout {
-			err = fmt.Errorf("A timeout occurred")
-			break
-		}
-	}
-
-	return err
+		return false, nil
+	})
 }
diff --git a/rackspace/blockstorage/v1/volumes/results.go b/rackspace/blockstorage/v1/volumes/results.go
index cec41e0..c7c2cc4 100644
--- a/rackspace/blockstorage/v1/volumes/results.go
+++ b/rackspace/blockstorage/v1/volumes/results.go
@@ -1,19 +1,15 @@
 package volumes
 
 import (
-	"github.com/rackspace/gophercloud"
 	os "github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes"
 	"github.com/rackspace/gophercloud/pagination"
 
 	"github.com/mitchellh/mapstructure"
 )
 
+// Volume wraps an Openstack volume
 type Volume os.Volume
 
-type commonResult struct {
-	gophercloud.Result
-}
-
 // CreateResult represents the result of a create operation
 type CreateResult struct {
 	os.CreateResult
@@ -58,7 +54,7 @@
 	return commonExtract(r.Body, r.Err)
 }
 
-// ExtractSnapshots extracts and returns Volumes. It is used while iterating over a volumes.List call.
+// ExtractVolumes extracts and returns Volumes. It is used while iterating over a volumes.List call.
 func ExtractVolumes(page pagination.Page) ([]Volume, error) {
 	var response struct {
 		Volumes []Volume `json:"volumes"`
