diff --git a/acceptance/openstack/compute/v2/servers_test.go b/acceptance/openstack/compute/v2/servers_test.go
index 6bdc9e9..ecadf5f 100644
--- a/acceptance/openstack/compute/v2/servers_test.go
+++ b/acceptance/openstack/compute/v2/servers_test.go
@@ -63,7 +63,7 @@
 }
 
 func createServer(t *testing.T, client *gophercloud.ServiceClient, choices *ComputeChoices) (*servers.Server, error) {
-	if testing.Short(){
+	if testing.Short() {
 		t.Skip("Skipping test that requires server creation in short mode.")
 	}
 
diff --git a/acceptance/rackspace/compute/v2/virtualinterfaces_test.go b/acceptance/rackspace/compute/v2/virtualinterfaces_test.go
index 446d3a3..da10d14 100644
--- a/acceptance/rackspace/compute/v2/virtualinterfaces_test.go
+++ b/acceptance/rackspace/compute/v2/virtualinterfaces_test.go
@@ -3,51 +3,51 @@
 package v2
 
 import (
-  "testing"
+	"testing"
 
-  "github.com/rackspace/gophercloud/pagination"
-  "github.com/rackspace/gophercloud/rackspace/compute/v2/networks"
-  "github.com/rackspace/gophercloud/rackspace/compute/v2/virtualinterfaces"
-  th "github.com/rackspace/gophercloud/testhelper"
+	"github.com/rackspace/gophercloud/pagination"
+	"github.com/rackspace/gophercloud/rackspace/compute/v2/networks"
+	"github.com/rackspace/gophercloud/rackspace/compute/v2/virtualinterfaces"
+	th "github.com/rackspace/gophercloud/testhelper"
 )
 
 func TestVirtualInterfaces(t *testing.T) {
-  client, err := newClient()
-  th.AssertNoErr(t, err)
+	client, err := newClient()
+	th.AssertNoErr(t, err)
 
-  // Create a server
-  server := createServer(t, client)
-  t.Logf("Created Server: %v\n", server)
-  defer deleteServer(t, client, server)
-  serverID := server.ID
+	// Create a server
+	server := createServer(t, client)
+	t.Logf("Created Server: %v\n", server)
+	defer deleteServer(t, client, server)
+	serverID := server.ID
 
-  // Create a network
-  n, err := networks.Create(client, networks.CreateOpts{Label: "sample_network", CIDR: "172.20.0.0/24"}).Extract()
-  th.AssertNoErr(t, err)
-  t.Logf("Created Network: %v\n", n)
-  defer networks.Delete(client, n.ID)
-  networkID := n.ID
+	// Create a network
+	n, err := networks.Create(client, networks.CreateOpts{Label: "sample_network", CIDR: "172.20.0.0/24"}).Extract()
+	th.AssertNoErr(t, err)
+	t.Logf("Created Network: %v\n", n)
+	defer networks.Delete(client, n.ID)
+	networkID := n.ID
 
-  // Create a virtual interface
-  vi, err := virtualinterfaces.Create(client, serverID, networkID).Extract()
-  th.AssertNoErr(t, err)
-  t.Logf("Created virtual interface: %+v\n", vi)
-  defer virtualinterfaces.Delete(client, serverID, vi.ID)
+	// Create a virtual interface
+	vi, err := virtualinterfaces.Create(client, serverID, networkID).Extract()
+	th.AssertNoErr(t, err)
+	t.Logf("Created virtual interface: %+v\n", vi)
+	defer virtualinterfaces.Delete(client, serverID, vi.ID)
 
-  // List virtual interfaces
-  pager := virtualinterfaces.List(client, serverID)
-  err = pager.EachPage(func(page pagination.Page) (bool, error) {
-    t.Logf("--- Page ---")
+	// List virtual interfaces
+	pager := virtualinterfaces.List(client, serverID)
+	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+		t.Logf("--- Page ---")
 
-    virtualinterfacesList, err := virtualinterfaces.ExtractVirtualInterfaces(page)
-    th.AssertNoErr(t, err)
+		virtualinterfacesList, err := virtualinterfaces.ExtractVirtualInterfaces(page)
+		th.AssertNoErr(t, err)
 
-    for _, vi := range virtualinterfacesList {
-      t.Logf("Virtual Interface: ID [%s] MAC Address [%s] IP Addresses [%v]",
-        vi.ID, vi.MACAddress, vi.IPAddresses)
-    }
+		for _, vi := range virtualinterfacesList {
+			t.Logf("Virtual Interface: ID [%s] MAC Address [%s] IP Addresses [%v]",
+				vi.ID, vi.MACAddress, vi.IPAddresses)
+		}
 
-    return true, nil
-  })
-  th.CheckNoErr(t, err)
+		return true, nil
+	})
+	th.CheckNoErr(t, err)
 }
