diff --git a/acceptance/13-rebuild-server.go b/acceptance/13-rebuild-server.go
new file mode 100644
index 0000000..12aed26
--- /dev/null
+++ b/acceptance/13-rebuild-server.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"fmt"
+	"flag"
+	"github.com/rackspace/gophercloud"
+)
+
+var quiet = flag.Bool("quiet", false, "Quiet mode, for acceptance testing.  $? still indicates errors though.")
+
+func main() {
+	flag.Parse()
+	withIdentity(false, func(acc gophercloud.AccessProvider) {
+		withServerApi(acc, func(servers gophercloud.CloudServersProvider) {
+			log("Creating server")
+			id, err := createServer(servers, "", "", "", "")
+			if err != nil {
+				panic(err)
+			}
+			waitForServerState(servers, id, "ACTIVE")
+			defer servers.DeleteServerById(id)
+
+			log("Rebuilding server")
+			newDetails, err := servers.RebuildServer(id, gophercloud.NewServer{
+				Name: randomString("ACPTTEST", 32),
+				ImageRef: findAlternativeImage(),
+				FlavorRef: findAlternativeFlavor(),
+				AdminPass: randomString("", 16),
+			})
+			if err != nil {
+				panic(err)
+			}
+			waitForServerState(servers, newDetails.Id, "ACTIVE")
+
+			log("Done")
+		})
+	})
+}
+
+func log(s string) {
+	if !*quiet {
+		fmt.Println(s)
+	}
+}
diff --git a/acceptance/libargs.go b/acceptance/libargs.go
index 932e61e..5edb445 100644
--- a/acceptance/libargs.go
+++ b/acceptance/libargs.go
@@ -130,6 +130,12 @@
 	return "3"  // 1GB image, up from 512MB image
 }
 
+// findAlternativeImage locates an image to resize or rebuild a server with.  It is guaranteed to be
+// different than what aSuitableImage() returns.  If none could be found, this function will panic.
+func findAlternativeImage() string {
+	return "c6f9c411-e708-4952-91e5-62ded5ea4d3e"
+}
+
 // withIdentity authenticates the user against the provider's identity service, and provides an
 // accessor for additional services.
 func withIdentity(ar bool, f func(gophercloud.AccessProvider)) {
diff --git a/interfaces.go b/interfaces.go
index c8a6f96..626e531 100644
--- a/interfaces.go
+++ b/interfaces.go
@@ -117,6 +117,17 @@
 	// This function returns the new set of server details if successful.
 	UpdateServer(id string, newValues NewServerSettings) (*Server, error)
 
+	// RebuildServer reprovisions a server to the specifications given by the
+	// NewServer structure.  The following fields are guaranteed to be recognized:
+	//
+	//		Name (required)				AccessIPv4
+	//		imageRef (required)			AccessIPv6
+	//		AdminPass (required)		Metadata
+	//		Personality
+	//
+	// Other providers may reserve the right to act on additional fields.
+	RebuildServer(id string, ns NewServer) (*Server, error)
+
 	// Images
 
 	// ListImages yields the list of available operating system images.  This function
diff --git a/servers.go b/servers.go
index e127e05..85f49ff 100644
--- a/servers.go
+++ b/servers.go
@@ -267,6 +267,27 @@
 	return svr, err
 }
 
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) RebuildServer (id string, ns NewServer) (*Server, error) {
+	var s *Server
+
+	err := gsp.context.WithReauth(gsp.access, func() error {
+		ep := fmt.Sprintf("%s/servers/%s/action", gsp.endpoint, id)
+		return perigee.Post(ep, perigee.Options{
+			ReqBody: &struct {
+				Rebuild *NewServer `json:"rebuild"`
+			}{&ns},
+			Results: &struct{ Server **Server }{&s},
+			MoreHeaders: map[string]string{
+				"X-Auth-Token": gsp.access.AuthToken(),
+			},
+			OkCodes: []int{202},
+		})
+	})
+
+	return s, err
+}
+
 // RaxBandwidth provides measurement of server bandwidth consumed over a given audit interval.
 type RaxBandwidth struct {
 	AuditPeriodEnd    string `json:"audit_period_end"`
