diff --git a/acceptance/openstack/compute_test.go b/acceptance/openstack/compute_test.go
index 3cccbc1..3781d38 100644
--- a/acceptance/openstack/compute_test.go
+++ b/acceptance/openstack/compute_test.go
@@ -1,12 +1,12 @@
 package openstack
 
 import (
-	"testing"
 	"fmt"
-	"github.com/rackspace/gophercloud/openstack/compute/servers"
-	"github.com/rackspace/gophercloud/openstack/compute/images"
 	"github.com/rackspace/gophercloud/openstack/compute/flavors"
+	"github.com/rackspace/gophercloud/openstack/compute/images"
+	"github.com/rackspace/gophercloud/openstack/compute/servers"
 	"os"
+	"testing"
 )
 
 func TestListServers(t *testing.T) {
@@ -182,4 +182,3 @@
 		return
 	}
 }
-
diff --git a/acceptance/openstack/identity_test.go b/acceptance/openstack/identity_test.go
index edb24ab..5bd9355 100644
--- a/acceptance/openstack/identity_test.go
+++ b/acceptance/openstack/identity_test.go
@@ -1,11 +1,11 @@
 package openstack
 
 import (
-	"testing"
 	"fmt"
-	"os"
 	"github.com/rackspace/gophercloud/openstack/identity"
 	"github.com/rackspace/gophercloud/openstack/utils"
+	"os"
+	"testing"
 	"text/tabwriter"
 )
 
@@ -106,4 +106,3 @@
 		fmt.Printf("  %s\n", alias)
 	}
 }
-
diff --git a/acceptance/openstack/tools_test.go b/acceptance/openstack/tools_test.go
index dc2cde8..9b4f1ae 100644
--- a/acceptance/openstack/tools_test.go
+++ b/acceptance/openstack/tools_test.go
@@ -1,6 +1,7 @@
 package openstack
 
 import (
+	"crypto/rand"
 	"fmt"
 	"github.com/rackspace/gophercloud/openstack/compute/servers"
 	"github.com/rackspace/gophercloud/openstack/identity"
@@ -8,26 +9,25 @@
 	"os"
 	"text/tabwriter"
 	"time"
-	"crypto/rand"
 )
 
 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
+	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
+	gottenServer  *servers.Server
 	updatedServer *servers.Server
-	serverName string
+	serverName    string
 	alternateName string
 }
 
@@ -143,8 +143,8 @@
 
 	cr, err := servers.Create(ts.client, map[string]interface{}{
 		"flavorRef": ts.flavorId,
-		"imageRef": ts.imageId,
-		"name": ts.serverName,
+		"imageRef":  ts.imageId,
+		"name":      ts.serverName,
 	})
 	if err != nil {
 		return err
@@ -157,11 +157,11 @@
 func waitForStatus(ts *testState, s string) error {
 	var (
 		inProgress bool
-		timeout int
-		err error
+		timeout    int
+		err        error
 	)
 
-	for inProgress, timeout, err = countDown(ts, 300) ; inProgress ; inProgress, timeout, err = countDown(ts, timeout) {
+	for inProgress, timeout, err = countDown(ts, 300); inProgress; inProgress, timeout, err = countDown(ts, timeout) {
 		if ts.gottenServer.Id != ts.createdServer.Id {
 			return fmt.Errorf("created server id (%s) != gotten server id (%s)", ts.createdServer.Id, ts.gottenServer.Id)
 		}
@@ -183,7 +183,7 @@
 func changeServerName(ts *testState) error {
 	var (
 		inProgress bool
-		timeout int
+		timeout    int
 	)
 
 	ts.alternateName = randomString("ACPTTEST", 16)
@@ -208,7 +208,7 @@
 		return fmt.Errorf("Expected updated and created server to share the same ID")
 	}
 
-	for inProgress, timeout, err = countDown(ts, 300) ; inProgress ; inProgress, timeout, err = countDown(ts, timeout) {
+	for inProgress, timeout, err = countDown(ts, 300); inProgress; inProgress, timeout, err = countDown(ts, timeout) {
 		if ts.gottenServer.Id != ts.updatedServer.Id {
 			return fmt.Errorf("Updated server ID (%s) != gotten server ID (%s)", ts.updatedServer.Id, ts.gottenServer.Id)
 		}
@@ -240,4 +240,3 @@
 	}
 	return prefix + string(bytes)
 }
-
