diff --git a/acceptance/tools/tools.go b/acceptance/tools/tools.go
index ebb660a..5891c7f 100644
--- a/acceptance/tools/tools.go
+++ b/acceptance/tools/tools.go
@@ -6,7 +6,7 @@
 	"crypto/rand"
 	"fmt"
 	"github.com/rackspace/gophercloud/openstack/compute/servers"
-	"github.com/rackspace/gophercloud/openstack/identity"
+	identity "github.com/rackspace/gophercloud/openstack/identity/v2"
 	"github.com/rackspace/gophercloud/openstack/utils"
 	"os"
 	"text/tabwriter"
@@ -16,21 +16,21 @@
 var errTimeout = fmt.Errorf("Timeout.")
 
 type testState struct {
-	O             identity.AuthOptions
-	A             identity.AuthResults
-	SC            *identity.ServiceCatalog
-	EPs           []identity.Endpoint
-	W             *tabwriter.Writer
-	ImageId       string
-	FlavorId      string
-	Region        string
-	EP            string
-	Client        *servers.Client
-	CreatedServer *servers.Server
-	GottenServer  *servers.Server
-	UpdatedServer *servers.Server
-	ServerName    string
-	AlternateName string
+	O              identity.AuthOptions
+	A              identity.AuthResults
+	SC             *identity.ServiceCatalog
+	EPs            []identity.Endpoint
+	W              *tabwriter.Writer
+	ImageId        string
+	FlavorId       string
+	Region         string
+	EP             string
+	Client         *servers.Client
+	CreatedServer  *servers.Server
+	GottenServer   *servers.Server
+	UpdatedServer  *servers.Server
+	ServerName     string
+	AlternateName  string
 	FlavorIdResize string
 }
 
@@ -240,48 +240,48 @@
 }
 
 func MakeNewPassword(oldPass string) string {
-	fmt.Println("Current password: "+oldPass)
+	fmt.Println("Current password: " + oldPass)
 	randomPassword := RandomString("", 16)
 	for randomPassword == oldPass {
 		randomPassword = RandomString("", 16)
 	}
-	fmt.Println("    New password: "+randomPassword)
+	fmt.Println("    New password: " + randomPassword)
 	return randomPassword
 }
 
 func ChangeAdminPassword(ts *testState) error {
 	randomPassword := MakeNewPassword(ts.CreatedServer.AdminPass)
-	
+
 	err := servers.ChangeAdminPassword(ts.Client, ts.CreatedServer.Id, randomPassword)
 	if err != nil {
 		return err
 	}
-	
+
 	err = WaitForStatus(ts, "PASSWORD")
 	if err != nil {
 		return err
 	}
-	
+
 	return WaitForStatus(ts, "ACTIVE")
 }
 
 func RebootServer(ts *testState) error {
-	fmt.Println("Attempting reboot of server "+ts.CreatedServer.Id)
+	fmt.Println("Attempting reboot of server " + ts.CreatedServer.Id)
 	err := servers.Reboot(ts.Client, ts.CreatedServer.Id, servers.OSReboot)
 	if err != nil {
 		return err
 	}
-	
+
 	err = WaitForStatus(ts, "REBOOT")
 	if err != nil {
 		return err
 	}
-	
+
 	return WaitForStatus(ts, "ACTIVE")
 }
 
 func RebuildServer(ts *testState) error {
-	fmt.Println("Attempting to rebuild server "+ts.CreatedServer.Id)
+	fmt.Println("Attempting to rebuild server " + ts.CreatedServer.Id)
 
 	newPassword := MakeNewPassword(ts.CreatedServer.AdminPass)
 	newName := RandomString("ACPTTEST", 16)
@@ -289,7 +289,7 @@
 	if err != nil {
 		return err
 	}
-	
+
 	s, err := servers.GetServer(sr)
 	if err != nil {
 		return err
@@ -302,12 +302,12 @@
 	if err != nil {
 		return err
 	}
-	
+
 	return WaitForStatus(ts, "ACTIVE")
 }
 
 func ResizeServer(ts *testState) error {
-	fmt.Println("Attempting to resize server "+ts.CreatedServer.Id)
+	fmt.Println("Attempting to resize server " + ts.CreatedServer.Id)
 
 	err := servers.Resize(ts.Client, ts.CreatedServer.Id, ts.FlavorIdResize)
 	if err != nil {
@@ -323,19 +323,19 @@
 }
 
 func ConfirmResize(ts *testState) error {
-	fmt.Println("Attempting to confirm resize for server "+ts.CreatedServer.Id)
-	
+	fmt.Println("Attempting to confirm resize for server " + ts.CreatedServer.Id)
+
 	err := servers.ConfirmResize(ts.Client, ts.CreatedServer.Id)
 	if err != nil {
 		return err
 	}
-	
+
 	return WaitForStatus(ts, "ACTIVE")
 }
 
 func RevertResize(ts *testState) error {
-	fmt.Println("Attempting to revert resize for server "+ts.CreatedServer.Id)
-	
+	fmt.Println("Attempting to revert resize for server " + ts.CreatedServer.Id)
+
 	err := servers.RevertResize(ts.Client, ts.CreatedServer.Id)
 	if err != nil {
 		return err
