diff --git a/acceptance/openstack/blockstorage/extensions/volumeactions_test.go b/acceptance/openstack/blockstorage/extensions/volumeactions_test.go
index 83d1571..a088dd6 100644
--- a/acceptance/openstack/blockstorage/extensions/volumeactions_test.go
+++ b/acceptance/openstack/blockstorage/extensions/volumeactions_test.go
@@ -23,12 +23,7 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	server, err := compute.CreateServer(t, computeClient, choices)
+	server, err := compute.CreateServer(t, computeClient)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
diff --git a/acceptance/openstack/blockstorage/v1/blockstorage.go b/acceptance/openstack/blockstorage/v1/blockstorage.go
index 3d4c9f1..41f24e1 100644
--- a/acceptance/openstack/blockstorage/v1/blockstorage.go
+++ b/acceptance/openstack/blockstorage/v1/blockstorage.go
@@ -140,44 +140,3 @@
 
 	t.Logf("Deleted volume type: %s", volumeType.ID)
 }
-
-// PrintVolume will print a volume and all of its attributes.
-func PrintVolume(t *testing.T, volume *volumes.Volume) {
-	t.Logf("ID: %s", volume.ID)
-	t.Logf("Status: %s", volume.Status)
-	t.Logf("Name: %s", volume.Name)
-	t.Logf("AvailabilityZone: %s", volume.AvailabilityZone)
-	t.Logf("Bootable: %s", volume.Bootable)
-	t.Logf("CreatedAt: %v", volume.CreatedAt)
-	t.Logf("Description: %s", volume.Description)
-	t.Logf("VolumeType: %s", volume.VolumeType)
-	t.Logf("SnapshotID: %s", volume.SnapshotID)
-	t.Logf("SourceVolID: %s", volume.SourceVolID)
-	t.Logf("Size: %d", volume.Size)
-	t.Logf("Metadata: %#v", volume.Metadata)
-	t.Logf("Attachments: %#v", volume.Attachments)
-}
-
-// PrintVolumeType will print a volume type and all of its attributes.
-func PrintVolumeType(t *testing.T, volumeType *volumetypes.VolumeType) {
-	t.Logf("ID: %s", volumeType.ID)
-	t.Logf("Name: %s", volumeType.Name)
-	t.Logf("ExtraSpecs: %#v", volumeType.ExtraSpecs)
-}
-
-// PrintSnapshot will print a snapshot and all of its attributes.
-func PrintSnapshot(t *testing.T, snapshot *snapshots.Snapshot) {
-	t.Logf("ID: %s", snapshot.ID)
-	t.Logf("Status: %s", snapshot.Status)
-	t.Logf("Name: %s", snapshot.Name)
-	t.Logf("AvailabilityZone: %s", snapshot.AvailabilityZone)
-	t.Logf("Bootable: %s", snapshot.Bootable)
-	t.Logf("CreatedAt: %v", snapshot.CreatedAt)
-	t.Logf("Description: %s", snapshot.Description)
-	t.Logf("VolumeType: %s", snapshot.VolumeType)
-	t.Logf("SnapshotID: %s", snapshot.SnapshotID)
-	t.Logf("VolumeID: %s", snapshot.VolumeID)
-	t.Logf("Size: %d", snapshot.Size)
-	t.Logf("Metadata: %#v", snapshot.Metadata)
-	t.Logf("Attachments: %#v", snapshot.Attachments)
-}
diff --git a/acceptance/openstack/blockstorage/v1/snapshots_test.go b/acceptance/openstack/blockstorage/v1/snapshots_test.go
index 2dc58db..3545371 100644
--- a/acceptance/openstack/blockstorage/v1/snapshots_test.go
+++ b/acceptance/openstack/blockstorage/v1/snapshots_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/blockstorage/v1/snapshots"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, snapshot := range allSnapshots {
-		PrintSnapshot(t, &snapshot)
+		tools.PrintResource(t, snapshot)
 	}
 }
 
@@ -53,5 +54,5 @@
 		t.Errorf("Unable to retrieve snapshot: %v", err)
 	}
 
-	PrintSnapshot(t, newSnapshot)
+	tools.PrintResource(t, newSnapshot)
 }
diff --git a/acceptance/openstack/blockstorage/v1/volumes_test.go b/acceptance/openstack/blockstorage/v1/volumes_test.go
index e375c59..9a55500 100644
--- a/acceptance/openstack/blockstorage/v1/volumes_test.go
+++ b/acceptance/openstack/blockstorage/v1/volumes_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, volume := range allVolumes {
-		PrintVolume(t, &volume)
+		tools.PrintResource(t, volume)
 	}
 }
 
@@ -47,5 +48,5 @@
 		t.Errorf("Unable to retrieve volume: %v", err)
 	}
 
-	PrintVolume(t, newVolume)
+	tools.PrintResource(t, newVolume)
 }
diff --git a/acceptance/openstack/blockstorage/v1/volumetypes_test.go b/acceptance/openstack/blockstorage/v1/volumetypes_test.go
index 843ea21..ace09bc 100644
--- a/acceptance/openstack/blockstorage/v1/volumetypes_test.go
+++ b/acceptance/openstack/blockstorage/v1/volumetypes_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumetypes"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, volumeType := range allVolumeTypes {
-		PrintVolumeType(t, &volumeType)
+		tools.PrintResource(t, volumeType)
 	}
 }
 
@@ -42,5 +43,5 @@
 	}
 	defer DeleteVolumeType(t, client, volumeType)
 
-	PrintVolumeType(t, volumeType)
+	tools.PrintResource(t, volumeType)
 }
diff --git a/acceptance/openstack/blockstorage/v2/blockstorage.go b/acceptance/openstack/blockstorage/v2/blockstorage.go
index 555bdcd..39fb7da 100644
--- a/acceptance/openstack/blockstorage/v2/blockstorage.go
+++ b/acceptance/openstack/blockstorage/v2/blockstorage.go
@@ -42,11 +42,16 @@
 
 // CreateVolumeFromImage will create a volume from with a random name and size of
 // 1GB. An error will be returned if the volume was unable to be created.
-func CreateVolumeFromImage(t *testing.T, client *gophercloud.ServiceClient, choices *clients.AcceptanceTestChoices) (*volumes.Volume, error) {
+func CreateVolumeFromImage(t *testing.T, client *gophercloud.ServiceClient) (*volumes.Volume, error) {
 	if testing.Short() {
 		t.Skip("Skipping test that requires volume creation in short mode.")
 	}
 
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	volumeName := tools.RandomString("ACPTTEST", 16)
 	t.Logf("Attempting to create volume: %s", volumeName)
 
@@ -79,26 +84,3 @@
 
 	t.Logf("Deleted volume: %s", volume.ID)
 }
-
-// PrintVolume will print a volume and all of its attributes.
-func PrintVolume(t *testing.T, volume *volumes.Volume) {
-	t.Logf("ID: %s", volume.ID)
-	t.Logf("Status: %s", volume.Status)
-	t.Logf("Size: %d", volume.Size)
-	t.Logf("AvailabilityZone: %s", volume.AvailabilityZone)
-	t.Logf("CreatedAt: %v", volume.CreatedAt)
-	t.Logf("UpdatedAt: %v", volume.CreatedAt)
-	t.Logf("Attachments: %#v", volume.Attachments)
-	t.Logf("Name: %s", volume.Name)
-	t.Logf("Description: %s", volume.Description)
-	t.Logf("VolumeType: %s", volume.VolumeType)
-	t.Logf("SnapshotID: %s", volume.SnapshotID)
-	t.Logf("SourceVolID: %s", volume.SourceVolID)
-	t.Logf("Metadata: %#v", volume.Metadata)
-	t.Logf("UserID: %s", volume.UserID)
-	t.Logf("Bootable: %s", volume.Bootable)
-	t.Logf("Encrypted: %s", volume.Encrypted)
-	t.Logf("ReplicationStatus: %s", volume.ReplicationStatus)
-	t.Logf("ConsistencyGroupID: %s", volume.ConsistencyGroupID)
-	t.Logf("Multiattach: %t", volume.Multiattach)
-}
diff --git a/acceptance/openstack/blockstorage/v2/volumes_test.go b/acceptance/openstack/blockstorage/v2/volumes_test.go
index 3508bc5..9003ca7 100644
--- a/acceptance/openstack/blockstorage/v2/volumes_test.go
+++ b/acceptance/openstack/blockstorage/v2/volumes_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, volume := range allVolumes {
-		PrintVolume(t, &volume)
+		tools.PrintResource(t, volume)
 	}
 }
 
@@ -47,5 +48,5 @@
 		t.Errorf("Unable to retrieve volume: %v", err)
 	}
 
-	PrintVolume(t, newVolume)
+	tools.PrintResource(t, newVolume)
 }
diff --git a/acceptance/openstack/compute/v2/bootfromvolume_test.go b/acceptance/openstack/compute/v2/bootfromvolume_test.go
index 54719d0..2ba8888 100644
--- a/acceptance/openstack/compute/v2/bootfromvolume_test.go
+++ b/acceptance/openstack/compute/v2/bootfromvolume_test.go
@@ -7,6 +7,7 @@
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
 	blockstorage "github.com/gophercloud/gophercloud/acceptance/openstack/blockstorage/v2"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume"
 )
 
@@ -35,13 +36,13 @@
 		},
 	}
 
-	server, err := CreateBootableVolumeServer(t, client, blockDevices, choices)
+	server, err := CreateBootableVolumeServer(t, client, blockDevices)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
 	defer DeleteServer(t, client, server)
 
-	PrintServer(t, server)
+	tools.PrintResource(t, server)
 }
 
 func TestBootFromNewVolume(t *testing.T) {
@@ -69,13 +70,13 @@
 		},
 	}
 
-	server, err := CreateBootableVolumeServer(t, client, blockDevices, choices)
+	server, err := CreateBootableVolumeServer(t, client, blockDevices)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
 	defer DeleteServer(t, client, server)
 
-	PrintServer(t, server)
+	tools.PrintResource(t, server)
 }
 
 func TestBootFromExistingVolume(t *testing.T) {
@@ -93,12 +94,7 @@
 		t.Fatalf("Unable to create a block storage client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	volume, err := blockstorage.CreateVolumeFromImage(t, blockStorageClient, choices)
+	volume, err := blockstorage.CreateVolumeFromImage(t, blockStorageClient)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -112,13 +108,13 @@
 		},
 	}
 
-	server, err := CreateBootableVolumeServer(t, computeClient, blockDevices, choices)
+	server, err := CreateBootableVolumeServer(t, computeClient, blockDevices)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
 	defer DeleteServer(t, computeClient, server)
 
-	PrintServer(t, server)
+	tools.PrintResource(t, server)
 }
 
 func TestBootFromMultiEphemeralServer(t *testing.T) {
@@ -163,13 +159,13 @@
 		},
 	}
 
-	server, err := CreateMultiEphemeralServer(t, client, blockDevices, choices)
+	server, err := CreateMultiEphemeralServer(t, client, blockDevices)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
 	defer DeleteServer(t, client, server)
 
-	PrintServer(t, server)
+	tools.PrintResource(t, server)
 }
 
 func TestAttachNewVolume(t *testing.T) {
@@ -204,13 +200,13 @@
 		},
 	}
 
-	server, err := CreateBootableVolumeServer(t, client, blockDevices, choices)
+	server, err := CreateBootableVolumeServer(t, client, blockDevices)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
 	defer DeleteServer(t, client, server)
 
-	PrintServer(t, server)
+	tools.PrintResource(t, server)
 }
 
 func TestAttachExistingVolume(t *testing.T) {
@@ -255,11 +251,11 @@
 		},
 	}
 
-	server, err := CreateBootableVolumeServer(t, computeClient, blockDevices, choices)
+	server, err := CreateBootableVolumeServer(t, computeClient, blockDevices)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
 	defer DeleteServer(t, computeClient, server)
 
-	PrintServer(t, server)
+	tools.PrintResource(t, server)
 }
diff --git a/acceptance/openstack/compute/v2/compute.go b/acceptance/openstack/compute/v2/compute.go
index 97d61f6..1f3dc16 100644
--- a/acceptance/openstack/compute/v2/compute.go
+++ b/acceptance/openstack/compute/v2/compute.go
@@ -23,8 +23,6 @@
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/tenantnetworks"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach"
-	"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
-	"github.com/gophercloud/gophercloud/openstack/compute/v2/images"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 
 	"golang.org/x/crypto/ssh"
@@ -67,13 +65,18 @@
 // CreateBootableVolumeServer works like CreateServer but is configured with
 // one or more block devices defined by passing in []bootfromvolume.BlockDevice.
 // An error will be returned if a server was unable to be created.
-func CreateBootableVolumeServer(t *testing.T, client *gophercloud.ServiceClient, blockDevices []bootfromvolume.BlockDevice, choices *clients.AcceptanceTestChoices) (*servers.Server, error) {
+func CreateBootableVolumeServer(t *testing.T, client *gophercloud.ServiceClient, blockDevices []bootfromvolume.BlockDevice) (*servers.Server, error) {
 	if testing.Short() {
 		t.Skip("Skipping test that requires server creation in short mode.")
 	}
 
 	var server *servers.Server
 
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	networkID, err := GetNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
 	if err != nil {
 		return server, err
@@ -135,7 +138,12 @@
 
 // CreateFloatingIP will allocate a floating IP.
 // An error will be returend if one was unable to be allocated.
-func CreateFloatingIP(t *testing.T, client *gophercloud.ServiceClient, choices *clients.AcceptanceTestChoices) (*floatingips.FloatingIP, error) {
+func CreateFloatingIP(t *testing.T, client *gophercloud.ServiceClient) (*floatingips.FloatingIP, error) {
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	createOpts := floatingips.CreateOpts{
 		Pool: choices.FloatingIPPoolName,
 	}
@@ -189,13 +197,18 @@
 // These block devices act like block devices when booting from a volume but
 // are actually local ephemeral disks.
 // An error will be returned if a server was unable to be created.
-func CreateMultiEphemeralServer(t *testing.T, client *gophercloud.ServiceClient, blockDevices []bootfromvolume.BlockDevice, choices *clients.AcceptanceTestChoices) (*servers.Server, error) {
+func CreateMultiEphemeralServer(t *testing.T, client *gophercloud.ServiceClient, blockDevices []bootfromvolume.BlockDevice) (*servers.Server, error) {
 	if testing.Short() {
 		t.Skip("Skipping test that requires server creation in short mode.")
 	}
 
 	var server *servers.Server
 
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	networkID, err := GetNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
 	if err != nil {
 		return server, err
@@ -274,13 +287,18 @@
 // The image will be the value of the OS_IMAGE_ID environment variable.
 // The instance will be launched on the network specified in OS_NETWORK_NAME.
 // An error will be returned if the instance was unable to be created.
-func CreateServer(t *testing.T, client *gophercloud.ServiceClient, choices *clients.AcceptanceTestChoices) (*servers.Server, error) {
+func CreateServer(t *testing.T, client *gophercloud.ServiceClient) (*servers.Server, error) {
 	if testing.Short() {
 		t.Skip("Skipping test that requires server creation in short mode.")
 	}
 
 	var server *servers.Server
 
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	networkID, err := GetNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
 	if err != nil {
 		return server, err
@@ -325,13 +343,18 @@
 // The image is intentionally missing to trigger an error.
 // The instance will be launched on the network specified in OS_NETWORK_NAME.
 // An error will be returned if the instance was unable to be created.
-func CreateServerWithoutImageRef(t *testing.T, client *gophercloud.ServiceClient, choices *clients.AcceptanceTestChoices) (*servers.Server, error) {
+func CreateServerWithoutImageRef(t *testing.T, client *gophercloud.ServiceClient) (*servers.Server, error) {
 	if testing.Short() {
 		t.Skip("Skipping test that requires server creation in short mode.")
 	}
 
 	var server *servers.Server
 
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	networkID, err := GetNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
 	if err != nil {
 		return server, err
@@ -384,13 +407,18 @@
 
 // CreateServerInServerGroup works like CreateServer but places the instance in
 // a specified Server Group.
-func CreateServerInServerGroup(t *testing.T, client *gophercloud.ServiceClient, choices *clients.AcceptanceTestChoices, serverGroup *servergroups.ServerGroup) (*servers.Server, error) {
+func CreateServerInServerGroup(t *testing.T, client *gophercloud.ServiceClient, serverGroup *servergroups.ServerGroup) (*servers.Server, error) {
 	if testing.Short() {
 		t.Skip("Skipping test that requires server creation in short mode.")
 	}
 
 	var server *servers.Server
 
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	networkID, err := GetNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
 	if err != nil {
 		return server, err
@@ -427,13 +455,18 @@
 
 // CreateServerWithPublicKey works the same as CreateServer, but additionally
 // configures the server with a specified Key Pair name.
-func CreateServerWithPublicKey(t *testing.T, client *gophercloud.ServiceClient, choices *clients.AcceptanceTestChoices, keyPairName string) (*servers.Server, error) {
+func CreateServerWithPublicKey(t *testing.T, client *gophercloud.ServiceClient, keyPairName string) (*servers.Server, error) {
 	if testing.Short() {
 		t.Skip("Skipping test that requires server creation in short mode.")
 	}
 
 	var server *servers.Server
 
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	networkID, err := GetNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
 	if err != nil {
 		return server, err
@@ -673,7 +706,12 @@
 // ResizeServer performs a resize action on an instance. An error will be
 // returned if the instance failed to resize.
 // The new flavor that the instance will be resized to is specified in OS_FLAVOR_ID_RESIZE.
-func ResizeServer(t *testing.T, client *gophercloud.ServiceClient, server *servers.Server, choices *clients.AcceptanceTestChoices) error {
+func ResizeServer(t *testing.T, client *gophercloud.ServiceClient, server *servers.Server) error {
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
+	if err != nil {
+		t.Fatal(err)
+	}
+
 	opts := &servers.ResizeOpts{
 		FlavorRef: choices.FlavorIDResize,
 	}
@@ -711,7 +749,7 @@
 }
 
 //Convenience method to fill an QuotaSet-UpdateOpts-struct from a QuotaSet-struct
-func  FillUpdateOptsFromQuotaSet(src quotasets.QuotaSet,dest *quotasets.UpdateOpts) {
+func FillUpdateOptsFromQuotaSet(src quotasets.QuotaSet, dest *quotasets.UpdateOpts) {
 	dest.FixedIps = &src.FixedIps
 	dest.FloatingIps = &src.FloatingIps
 	dest.InjectedFileContentBytes = &src.InjectedFileContentBytes
@@ -727,171 +765,3 @@
 	dest.ServerGroupMembers = &src.ServerGroupMembers
 	dest.MetadataItems = &src.MetadataItems
 }
-
-// PrintServer will print an instance and all of its attributes.
-func PrintServer(t *testing.T, server *servers.Server) {
-	t.Logf("ID: %s", server.ID)
-	t.Logf("TenantID: %s", server.TenantID)
-	t.Logf("UserID: %s", server.UserID)
-	t.Logf("Name: %s", server.Name)
-	t.Logf("Updated: %s", server.Updated)
-	t.Logf("Created: %s", server.Created)
-	t.Logf("HostID: %s", server.HostID)
-	t.Logf("Status: %s", server.Status)
-	t.Logf("Progress: %d", server.Progress)
-	t.Logf("AccessIPv4: %s", server.AccessIPv4)
-	t.Logf("AccessIPv6: %s", server.AccessIPv6)
-	t.Logf("Image: %s", server.Image)
-	t.Logf("Flavor: %s", server.Flavor)
-	t.Logf("Addresses: %#v", server.Addresses)
-	t.Logf("Metadata: %#v", server.Metadata)
-	t.Logf("Links: %#v", server.Links)
-	t.Logf("KeyName: %s", server.KeyName)
-	t.Logf("AdminPass: %s", server.AdminPass)
-	t.Logf("SecurityGroups: %#v", server.SecurityGroups)
-}
-
-// PrintDefaultRule will print a default security group rule and all of its attributes.
-func PrintDefaultRule(t *testing.T, defaultRule *dsr.DefaultRule) {
-	t.Logf("\tID: %s", defaultRule.ID)
-	t.Logf("\tFrom Port: %d", defaultRule.FromPort)
-	t.Logf("\tTo Port: %d", defaultRule.ToPort)
-	t.Logf("\tIP Protocol: %s", defaultRule.IPProtocol)
-	t.Logf("\tIP Range: %s", defaultRule.IPRange.CIDR)
-	t.Logf("\tParent Group ID: %s", defaultRule.ParentGroupID)
-	t.Logf("\tGroup Tenant ID: %s", defaultRule.Group.TenantID)
-	t.Logf("\tGroup Name: %s", defaultRule.Group.Name)
-}
-
-// PrintFlavor will print a flavor and all of its attributes.
-func PrintFlavor(t *testing.T, flavor *flavors.Flavor) {
-	t.Logf("ID: %s", flavor.ID)
-	t.Logf("Name: %s", flavor.Name)
-	t.Logf("RAM: %d", flavor.RAM)
-	t.Logf("Disk: %d", flavor.Disk)
-	t.Logf("Swap: %d", flavor.Swap)
-	t.Logf("RxTxFactor: %f", flavor.RxTxFactor)
-}
-
-// PrintFloatingIP will print a floating IP and all of its attributes.
-func PrintFloatingIP(t *testing.T, floatingIP *floatingips.FloatingIP) {
-	t.Logf("ID: %s", floatingIP.ID)
-	t.Logf("Fixed IP: %s", floatingIP.FixedIP)
-	t.Logf("Instance ID: %s", floatingIP.InstanceID)
-	t.Logf("IP: %s", floatingIP.IP)
-	t.Logf("Pool: %s", floatingIP.Pool)
-}
-
-// PrintImage will print an image and all of its attributes.
-func PrintImage(t *testing.T, image images.Image) {
-	t.Logf("ID: %s", image.ID)
-	t.Logf("Name: %s", image.Name)
-	t.Logf("MinDisk: %d", image.MinDisk)
-	t.Logf("MinRAM: %d", image.MinRAM)
-	t.Logf("Status: %s", image.Status)
-	t.Logf("Progress: %d", image.Progress)
-	t.Logf("Metadata: %#v", image.Metadata)
-	t.Logf("Created: %s", image.Created)
-	t.Logf("Updated: %s", image.Updated)
-}
-
-// PrintKeyPair will print keypair and all of its attributes.
-func PrintKeyPair(t *testing.T, keypair *keypairs.KeyPair) {
-	t.Logf("Name: %s", keypair.Name)
-	t.Logf("Fingerprint: %s", keypair.Fingerprint)
-	t.Logf("Public Key: %s", keypair.PublicKey)
-	t.Logf("Private Key: %s", keypair.PrivateKey)
-	t.Logf("UserID: %s", keypair.UserID)
-}
-
-//  PrintNetwork will print an os-networks based network and all of its attributes.
-func PrintNetwork(t *testing.T, network *networks.Network) {
-	t.Logf("Bridge: %s", network.Bridge)
-	t.Logf("BridgeInterface: %s", network.BridgeInterface)
-	t.Logf("Broadcast: %s", network.Broadcast)
-	t.Logf("CIDR: %s", network.CIDR)
-	t.Logf("CIDRv6: %s", network.CIDRv6)
-	t.Logf("CreatedAt: %v", network.CreatedAt)
-	t.Logf("Deleted: %t", network.Deleted)
-	t.Logf("DeletedAt: %v", network.DeletedAt)
-	t.Logf("DHCPStart: %s", network.DHCPStart)
-	t.Logf("DNS1: %s", network.DNS1)
-	t.Logf("DNS2: %s", network.DNS2)
-	t.Logf("Gateway: %s", network.Gateway)
-	t.Logf("Gatewayv6: %s", network.Gatewayv6)
-	t.Logf("Host: %s", network.Host)
-	t.Logf("ID: %s", network.ID)
-	t.Logf("Injected: %t", network.Injected)
-	t.Logf("Label: %s", network.Label)
-	t.Logf("MultiHost: %t", network.MultiHost)
-	t.Logf("Netmask: %s", network.Netmask)
-	t.Logf("Netmaskv6: %s", network.Netmaskv6)
-	t.Logf("Priority: %d", network.Priority)
-	t.Logf("ProjectID: %s", network.ProjectID)
-	t.Logf("RXTXBase: %d", network.RXTXBase)
-	t.Logf("UpdatedAt: %v", network.UpdatedAt)
-	t.Logf("VLAN: %d", network.VLAN)
-	t.Logf("VPNPrivateAddress: %s", network.VPNPrivateAddress)
-	t.Logf("VPNPublicAddress: %s", network.VPNPublicAddress)
-	t.Logf("VPNPublicPort: %d", network.VPNPublicPort)
-}
-
-//  PrintQuotaSet will print a quota set and all of its attributes.
-func PrintQuotaSet(t *testing.T, quotaSet *quotasets.QuotaSet) {
-	t.Logf("instances: %d\n", quotaSet.Instances)
-	t.Logf("cores: %d\n", quotaSet.Cores)
-	t.Logf("ram: %d\n", quotaSet.Ram)
-	t.Logf("key_pairs: %d\n", quotaSet.KeyPairs)
-	t.Logf("metadata_items: %d\n", quotaSet.MetadataItems)
-	t.Logf("security_groups: %d\n", quotaSet.SecurityGroups)
-	t.Logf("security_group_rules: %d\n", quotaSet.SecurityGroupRules)
-	t.Logf("fixed_ips: %d\n", quotaSet.FixedIps)
-	t.Logf("floating_ips: %d\n", quotaSet.FloatingIps)
-	t.Logf("injected_file_content_bytes: %d\n", quotaSet.InjectedFileContentBytes)
-	t.Logf("injected_file_path_bytes: %d\n", quotaSet.InjectedFilePathBytes)
-	t.Logf("injected_files: %d\n", quotaSet.InjectedFiles)
-}
-
-//  PrintSecurityGroup will print a security group and all of its attributes and rules.
-func PrintSecurityGroup(t *testing.T, securityGroup *secgroups.SecurityGroup) {
-	t.Logf("ID: %s", securityGroup.ID)
-	t.Logf("Name: %s", securityGroup.Name)
-	t.Logf("Description: %s", securityGroup.Description)
-	t.Logf("Tenant ID: %s", securityGroup.TenantID)
-	t.Logf("Rules:")
-
-	for _, rule := range securityGroup.Rules {
-		t.Logf("\tID: %s", rule.ID)
-		t.Logf("\tFrom Port: %d", rule.FromPort)
-		t.Logf("\tTo Port: %d", rule.ToPort)
-		t.Logf("\tIP Protocol: %s", rule.IPProtocol)
-		t.Logf("\tIP Range: %s", rule.IPRange.CIDR)
-		t.Logf("\tParent Group ID: %s", rule.ParentGroupID)
-		t.Logf("\tGroup Tenant ID: %s", rule.Group.TenantID)
-		t.Logf("\tGroup Name: %s", rule.Group.Name)
-	}
-}
-
-// PrintServerGroup will print a server group and all of its attributes.
-func PrintServerGroup(t *testing.T, serverGroup *servergroups.ServerGroup) {
-	t.Logf("ID: %s", serverGroup.ID)
-	t.Logf("Name: %s", serverGroup.Name)
-	t.Logf("Policies: %#v", serverGroup.Policies)
-	t.Logf("Members: %#v", serverGroup.Members)
-	t.Logf("Metadata: %#v", serverGroup.Metadata)
-}
-
-// PrintTenantNetwork will print an os-tenant-networks based network and all of its attributes.
-func PrintTenantNetwork(t *testing.T, network *tenantnetworks.Network) {
-	t.Logf("ID: %s", network.ID)
-	t.Logf("Name: %s", network.Name)
-	t.Logf("CIDR: %s", network.CIDR)
-}
-
-// PrintVolumeAttachment will print a volume attachment and all of its attributes.
-func PrintVolumeAttachment(t *testing.T, volumeAttachment *volumeattach.VolumeAttachment) {
-	t.Logf("ID: %s", volumeAttachment.ID)
-	t.Logf("Device: %s", volumeAttachment.Device)
-	t.Logf("VolumeID: %s", volumeAttachment.VolumeID)
-	t.Logf("ServerID: %s", volumeAttachment.ServerID)
-}
diff --git a/acceptance/openstack/compute/v2/defsecrules_test.go b/acceptance/openstack/compute/v2/defsecrules_test.go
index ca221be..16c43f4 100644
--- a/acceptance/openstack/compute/v2/defsecrules_test.go
+++ b/acceptance/openstack/compute/v2/defsecrules_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	dsr "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/defsecrules"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, defaultRule := range allDefaultRules {
-		PrintDefaultRule(t, &defaultRule)
+		tools.PrintResource(t, defaultRule)
 	}
 }
 
@@ -42,7 +43,7 @@
 	}
 	defer DeleteDefaultRule(t, client, defaultRule)
 
-	PrintDefaultRule(t, &defaultRule)
+	tools.PrintResource(t, defaultRule)
 }
 
 func TestDefSecRulesGet(t *testing.T) {
@@ -62,5 +63,5 @@
 		t.Fatalf("Unable to get default rule %s: %v", defaultRule.ID, err)
 	}
 
-	PrintDefaultRule(t, newDefaultRule)
+	tools.PrintResource(t, newDefaultRule)
 }
diff --git a/acceptance/openstack/compute/v2/extension_test.go b/acceptance/openstack/compute/v2/extension_test.go
index 5de715d..5b2cf4a 100644
--- a/acceptance/openstack/compute/v2/extension_test.go
+++ b/acceptance/openstack/compute/v2/extension_test.go
@@ -6,7 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
-	"github.com/gophercloud/gophercloud/acceptance/openstack"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/common/extensions"
 )
 
@@ -27,7 +27,7 @@
 	}
 
 	for _, extension := range allExtensions {
-		openstack.PrintExtension(t, &extension)
+		tools.PrintResource(t, extension)
 	}
 }
 
@@ -42,5 +42,5 @@
 		t.Fatalf("Unable to get extension os-admin-actions: %v", err)
 	}
 
-	openstack.PrintExtension(t, extension)
+	tools.PrintResource(t, extension)
 }
diff --git a/acceptance/openstack/compute/v2/flavors_test.go b/acceptance/openstack/compute/v2/flavors_test.go
index 6f6490e..ee698cc 100644
--- a/acceptance/openstack/compute/v2/flavors_test.go
+++ b/acceptance/openstack/compute/v2/flavors_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, flavor := range allFlavors {
-		PrintFlavor(t, &flavor)
+		tools.PrintResource(t, flavor)
 	}
 }
 
@@ -36,7 +37,7 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err :=clients.AcceptanceTestChoicesFromEnv()
+	choices, err := clients.AcceptanceTestChoicesFromEnv()
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -46,5 +47,5 @@
 		t.Fatalf("Unable to get flavor information: %v", err)
 	}
 
-	PrintFlavor(t, flavor)
+	tools.PrintResource(t, flavor)
 }
diff --git a/acceptance/openstack/compute/v2/floatingip_test.go b/acceptance/openstack/compute/v2/floatingip_test.go
index 001dc9f..26b7bfe 100644
--- a/acceptance/openstack/compute/v2/floatingip_test.go
+++ b/acceptance/openstack/compute/v2/floatingip_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 )
@@ -27,7 +28,7 @@
 	}
 
 	for _, floatingIP := range allFloatingIPs {
-		PrintFloatingIP(t, &floatingIP)
+		tools.PrintResource(t, floatingIP)
 	}
 }
 
@@ -37,18 +38,13 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	floatingIP, err := CreateFloatingIP(t, client, choices)
+	floatingIP, err := CreateFloatingIP(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create floating IP: %v", err)
 	}
 	defer DeleteFloatingIP(t, client, floatingIP)
 
-	PrintFloatingIP(t, floatingIP)
+	tools.PrintResource(t, floatingIP)
 }
 
 func TestFloatingIPsAssociate(t *testing.T) {
@@ -61,24 +57,19 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
 	defer DeleteServer(t, client, server)
 
-	floatingIP, err := CreateFloatingIP(t, client, choices)
+	floatingIP, err := CreateFloatingIP(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create floating IP: %v", err)
 	}
 	defer DeleteFloatingIP(t, client, floatingIP)
 
-	PrintFloatingIP(t, floatingIP)
+	tools.PrintResource(t, floatingIP)
 
 	err = AssociateFloatingIP(t, client, floatingIP, server)
 	if err != nil {
@@ -93,7 +84,7 @@
 
 	t.Logf("Floating IP %s is associated with Fixed IP %s", floatingIP.IP, newFloatingIP.FixedIP)
 
-	PrintFloatingIP(t, newFloatingIP)
+	tools.PrintResource(t, newFloatingIP)
 }
 
 func TestFloatingIPsFixedIPAssociate(t *testing.T) {
@@ -111,7 +102,7 @@
 		t.Fatal(err)
 	}
 
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
@@ -122,13 +113,13 @@
 		t.Fatalf("Unable to get server %s: %v", server.ID, err)
 	}
 
-	floatingIP, err := CreateFloatingIP(t, client, choices)
+	floatingIP, err := CreateFloatingIP(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create floating IP: %v", err)
 	}
 	defer DeleteFloatingIP(t, client, floatingIP)
 
-	PrintFloatingIP(t, floatingIP)
+	tools.PrintResource(t, floatingIP)
 
 	var fixedIP string
 	for _, networkAddresses := range newServer.Addresses[choices.NetworkName].([]interface{}) {
@@ -153,5 +144,5 @@
 
 	t.Logf("Floating IP %s is associated with Fixed IP %s", floatingIP.IP, newFloatingIP.FixedIP)
 
-	PrintFloatingIP(t, newFloatingIP)
+	tools.PrintResource(t, newFloatingIP)
 }
diff --git a/acceptance/openstack/compute/v2/images_test.go b/acceptance/openstack/compute/v2/images_test.go
index 53291dd..a34ce3e 100644
--- a/acceptance/openstack/compute/v2/images_test.go
+++ b/acceptance/openstack/compute/v2/images_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/images"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, image := range allImages {
-		PrintImage(t, image)
+		tools.PrintResource(t, image)
 	}
 }
 
@@ -46,5 +47,5 @@
 		t.Fatalf("Unable to get image information: %v", err)
 	}
 
-	PrintImage(t, *image)
+	tools.PrintResource(t, image)
 }
diff --git a/acceptance/openstack/compute/v2/keypairs_test.go b/acceptance/openstack/compute/v2/keypairs_test.go
index 3c6abb4..c4b91ec 100644
--- a/acceptance/openstack/compute/v2/keypairs_test.go
+++ b/acceptance/openstack/compute/v2/keypairs_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 )
@@ -29,7 +30,7 @@
 	}
 
 	for _, keypair := range allKeys {
-		PrintKeyPair(t, &keypair)
+		tools.PrintResource(t, keypair)
 	}
 }
 
@@ -45,7 +46,7 @@
 	}
 	defer DeleteKeyPair(t, client, keyPair)
 
-	PrintKeyPair(t, keyPair)
+	tools.PrintResource(t, keyPair)
 }
 
 func TestKeypairsImportPublicKey(t *testing.T) {
@@ -65,7 +66,7 @@
 	}
 	defer DeleteKeyPair(t, client, keyPair)
 
-	PrintKeyPair(t, keyPair)
+	tools.PrintResource(t, keyPair)
 }
 
 func TestKeypairsServerCreateWithKey(t *testing.T) {
@@ -78,11 +79,6 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
 	publicKey, err := createKey()
 	if err != nil {
 		t.Fatalf("Unable to create public key: %s", err)
@@ -94,7 +90,7 @@
 	}
 	defer DeleteKeyPair(t, client, keyPair)
 
-	server, err := CreateServerWithPublicKey(t, client, choices, keyPair.Name)
+	server, err := CreateServerWithPublicKey(t, client, keyPair.Name)
 	if err != nil {
 		t.Fatalf("Unable to create server: %s", err)
 	}
diff --git a/acceptance/openstack/compute/v2/network_test.go b/acceptance/openstack/compute/v2/network_test.go
index 38a6d54..7451518 100644
--- a/acceptance/openstack/compute/v2/network_test.go
+++ b/acceptance/openstack/compute/v2/network_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/networks"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, network := range allNetworks {
-		PrintNetwork(t, &network)
+		tools.PrintResource(t, network)
 	}
 }
 
@@ -51,5 +52,5 @@
 		t.Fatalf("Unable to get network %s: %v", networkID, err)
 	}
 
-	PrintNetwork(t, network)
+	tools.PrintResource(t, network)
 }
diff --git a/acceptance/openstack/compute/v2/quotaset_test.go b/acceptance/openstack/compute/v2/quotaset_test.go
index 2fb7c99..e0c4bae 100644
--- a/acceptance/openstack/compute/v2/quotaset_test.go
+++ b/acceptance/openstack/compute/v2/quotaset_test.go
@@ -8,6 +8,7 @@
 
 	"github.com/gophercloud/gophercloud"
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/quotasets"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/tenants"
 	th "github.com/gophercloud/gophercloud/testhelper"
@@ -35,7 +36,7 @@
 		t.Fatal(err)
 	}
 
-	PrintQuotaSet(t, quotaSet)
+	tools.PrintResource(t, quotaSet)
 }
 
 func getTenantID(t *testing.T, client *gophercloud.ServiceClient) (string, error) {
@@ -182,4 +183,4 @@
 	}`
 	FillUpdateOptsFromQuotaSet(UpdatedQuotas,op)
 	th.AssertJSONEquals(t,expected,op)
-}
\ No newline at end of file
+}
diff --git a/acceptance/openstack/compute/v2/secgroup_test.go b/acceptance/openstack/compute/v2/secgroup_test.go
index 9ec7ba4..c0d0230 100644
--- a/acceptance/openstack/compute/v2/secgroup_test.go
+++ b/acceptance/openstack/compute/v2/secgroup_test.go
@@ -27,7 +27,7 @@
 	}
 
 	for _, secgroup := range allSecGroups {
-		PrintSecurityGroup(t, &secgroup)
+		tools.PrintResource(t, secgroup)
 	}
 }
 
@@ -85,6 +85,14 @@
 		t.Fatalf("Unable to create rule: %v", err)
 	}
 	defer DeleteSecurityGroupRule(t, client, rule)
+
+	newSecurityGroup, err := secgroups.Get(client, securityGroup.ID).Extract()
+	if err != nil {
+		t.Fatalf("Unable to obtain security group: %v", err)
+	}
+
+	tools.PrintResource(t, newSecurityGroup)
+
 }
 
 func TestSecGroupsAddGroupToServer(t *testing.T) {
@@ -97,12 +105,7 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
diff --git a/acceptance/openstack/compute/v2/servergroup_test.go b/acceptance/openstack/compute/v2/servergroup_test.go
index 5921014..ac1915f 100644
--- a/acceptance/openstack/compute/v2/servergroup_test.go
+++ b/acceptance/openstack/compute/v2/servergroup_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 )
@@ -27,7 +28,7 @@
 	}
 
 	for _, serverGroup := range allServerGroups {
-		PrintServerGroup(t, &serverGroup)
+		tools.PrintResource(t, serverGroup)
 	}
 }
 
@@ -48,7 +49,7 @@
 		t.Fatalf("Unable to get server group: %v", err)
 	}
 
-	PrintServerGroup(t, serverGroup)
+	tools.PrintResource(t, serverGroup)
 }
 
 func TestServergroupsAffinityPolicy(t *testing.T) {
@@ -57,18 +58,13 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
 	serverGroup, err := CreateServerGroup(t, client, "affinity")
 	if err != nil {
 		t.Fatalf("Unable to create server group: %v", err)
 	}
 	defer DeleteServerGroup(t, client, serverGroup)
 
-	firstServer, err := CreateServerInServerGroup(t, client, choices, serverGroup)
+	firstServer, err := CreateServerInServerGroup(t, client, serverGroup)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
@@ -76,7 +72,7 @@
 
 	firstServer, err = servers.Get(client, firstServer.ID).Extract()
 
-	secondServer, err := CreateServerInServerGroup(t, client, choices, serverGroup)
+	secondServer, err := CreateServerInServerGroup(t, client, serverGroup)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
diff --git a/acceptance/openstack/compute/v2/servers_test.go b/acceptance/openstack/compute/v2/servers_test.go
index fa6603d..22b6580 100644
--- a/acceptance/openstack/compute/v2/servers_test.go
+++ b/acceptance/openstack/compute/v2/servers_test.go
@@ -30,7 +30,7 @@
 	}
 
 	for _, server := range allServers {
-		PrintServer(t, &server)
+		tools.PrintResource(t, server)
 	}
 }
 
@@ -45,7 +45,7 @@
 		t.Fatal(err)
 	}
 
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
@@ -56,7 +56,7 @@
 	if err != nil {
 		t.Errorf("Unable to retrieve server: %v", err)
 	}
-	PrintServer(t, newServer)
+	tools.PrintResource(t, newServer)
 
 	allAddressPages, err := servers.ListAddresses(client, server.ID).AllPages()
 	if err != nil {
@@ -94,12 +94,7 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	server, err := CreateServerWithoutImageRef(t, client, choices)
+	server, err := CreateServerWithoutImageRef(t, client)
 	if err != nil {
 		if err400, ok := err.(*gophercloud.ErrUnexpectedResponseCode); ok {
 			if !strings.Contains("Missing imageRef attribute", string(err400.Body)) {
@@ -115,12 +110,7 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -159,17 +149,12 @@
 func TestServersMetadata(t *testing.T) {
 	t.Parallel()
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
 	client, err := clients.NewComputeV2Client()
 	if err != nil {
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -226,12 +211,7 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -260,12 +240,7 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -303,7 +278,7 @@
 		t.Fatal(err)
 	}
 
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -338,24 +313,19 @@
 func TestServersActionResizeConfirm(t *testing.T) {
 	t.Parallel()
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
 	client, err := clients.NewComputeV2Client()
 	if err != nil {
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatal(err)
 	}
 	defer DeleteServer(t, client, server)
 
 	t.Logf("Attempting to resize server %s", server.ID)
-	ResizeServer(t, client, server, choices)
+	ResizeServer(t, client, server)
 
 	t.Logf("Attempting to confirm resize for server %s", server.ID)
 	if res := servers.ConfirmResize(client, server.ID); res.Err != nil {
@@ -370,24 +340,19 @@
 func TestServersActionResizeRevert(t *testing.T) {
 	t.Parallel()
 
-	choices, err := clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
 	client, err := clients.NewComputeV2Client()
 	if err != nil {
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatal(err)
 	}
 	defer DeleteServer(t, client, server)
 
 	t.Logf("Attempting to resize server %s", server.ID)
-	ResizeServer(t, client, server, choices)
+	ResizeServer(t, client, server)
 
 	t.Logf("Attempting to revert resize for server %s", server.ID)
 	if res := servers.RevertResize(client, server.ID); res.Err != nil {
diff --git a/acceptance/openstack/compute/v2/tenantnetworks_test.go b/acceptance/openstack/compute/v2/tenantnetworks_test.go
index 7d9c167..9b6b527 100644
--- a/acceptance/openstack/compute/v2/tenantnetworks_test.go
+++ b/acceptance/openstack/compute/v2/tenantnetworks_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/tenantnetworks"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, network := range allTenantNetworks {
-		PrintTenantNetwork(t, &network)
+		tools.PrintResource(t, network)
 	}
 }
 
@@ -51,5 +52,5 @@
 		t.Fatalf("Unable to get network %s: %v", networkID, err)
 	}
 
-	PrintTenantNetwork(t, network)
+	tools.PrintResource(t, network)
 }
diff --git a/acceptance/openstack/compute/v2/volumeattach_test.go b/acceptance/openstack/compute/v2/volumeattach_test.go
index d791992..78d85a9 100644
--- a/acceptance/openstack/compute/v2/volumeattach_test.go
+++ b/acceptance/openstack/compute/v2/volumeattach_test.go
@@ -21,17 +21,12 @@
 		t.Fatalf("Unable to create a compute client: %v", err)
 	}
 
-	choices, err :=clients.AcceptanceTestChoicesFromEnv()
-	if err != nil {
-		t.Fatal(err)
-	}
-
 	blockClient, err := clients.NewBlockStorageV1Client()
 	if err != nil {
 		t.Fatalf("Unable to create a blockstorage client: %v", err)
 	}
 
-	server, err := CreateServer(t, client, choices)
+	server, err := CreateServer(t, client)
 	if err != nil {
 		t.Fatalf("Unable to create server: %v", err)
 	}
@@ -53,7 +48,7 @@
 	}
 	defer DeleteVolumeAttachment(t, client, blockClient, server, volumeAttachment)
 
-	PrintVolumeAttachment(t, volumeAttachment)
+	tools.PrintResource(t, volumeAttachment)
 
 }
 
diff --git a/acceptance/openstack/identity/v2/extension_test.go b/acceptance/openstack/identity/v2/extension_test.go
index 3e526f1..c6a2bde 100644
--- a/acceptance/openstack/identity/v2/extension_test.go
+++ b/acceptance/openstack/identity/v2/extension_test.go
@@ -6,7 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
-	"github.com/gophercloud/gophercloud/acceptance/openstack"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/extensions"
 )
 
@@ -27,7 +27,7 @@
 	}
 
 	for _, extension := range allExtensions {
-		openstack.PrintExtension(t, &extension)
+		tools.PrintResource(t, extension)
 	}
 }
 
@@ -42,5 +42,5 @@
 		t.Fatalf("Unable to get extension OS-KSCRUD: %v", err)
 	}
 
-	openstack.PrintExtension(t, extension)
+	tools.PrintResource(t, extension)
 }
diff --git a/acceptance/openstack/identity/v2/identity.go b/acceptance/openstack/identity/v2/identity.go
index f1c6624..2d3bd09 100644
--- a/acceptance/openstack/identity/v2/identity.go
+++ b/acceptance/openstack/identity/v2/identity.go
@@ -9,7 +9,6 @@
 	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/extensions/admin/roles"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/tenants"
-	"github.com/gophercloud/gophercloud/openstack/identity/v2/tokens"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/users"
 )
 
@@ -145,72 +144,3 @@
 
 	return newUser, nil
 }
-
-// PrintCatalogEntry will print a catalog entry and all of its attributes.
-func PrintCatalogEntry(t *testing.T, catalogEntry *tokens.CatalogEntry) {
-	t.Logf("Name: %s", catalogEntry.Name)
-	t.Logf("Type: %s", catalogEntry.Type)
-
-	t.Log("Endpoints:")
-	for _, endpoint := range catalogEntry.Endpoints {
-		t.Logf("\tTenantID: %s", endpoint.TenantID)
-		t.Logf("\tPublicURL: %s", endpoint.PublicURL)
-		t.Logf("\tInternalURL: %s", endpoint.InternalURL)
-		t.Logf("\tAdminURL: %s", endpoint.AdminURL)
-		t.Logf("\tRegion: %s", endpoint.Region)
-		t.Logf("\tVersionID: %s", endpoint.VersionID)
-		t.Logf("\tVersionInfo: %s", endpoint.VersionInfo)
-		t.Logf("\tVersionList: %s", endpoint.VersionList)
-	}
-}
-
-// PrintRole will print a role and all of its attributes.
-func PrintRole(t *testing.T, role *roles.Role) {
-	t.Logf("ID: %s", role.ID)
-	t.Logf("Name: %v", role.Name)
-	t.Logf("Description: %s", role.Description)
-	t.Logf("ServiceID: %s", role.ServiceID)
-}
-
-// PrintTenant will print a tenant and all of its attributes.
-func PrintTenant(t *testing.T, tenant *tenants.Tenant) {
-	t.Logf("ID: %s", tenant.ID)
-	t.Logf("Name: %s", tenant.Name)
-	t.Logf("Description: %s", tenant.Description)
-	t.Logf("Enabled: %t", tenant.Enabled)
-}
-
-// PrintToken will print a token and all of its attributes.
-func PrintToken(t *testing.T, token *tokens.Token) {
-	t.Logf("ID: %s", token.ID)
-	t.Logf("ExpiresAt: %v", token.ExpiresAt)
-	t.Logf("TenantID: %s", token.Tenant.ID)
-}
-
-// PrintTokenUser will print the user information of a token and all attributes.
-func PrintTokenUser(t *testing.T, user *tokens.User) {
-	t.Logf("ID: %s", user.ID)
-	t.Logf("Name: %s", user.Name)
-	t.Logf("Username: %s", user.UserName)
-
-	t.Log("Roles")
-	for _, role := range user.Roles {
-		t.Logf("\t%s", role)
-	}
-}
-
-// PrintUser will print a user and all of its attributes.
-func PrintUser(t *testing.T, user *users.User) {
-	t.Logf("ID: %s", user.ID)
-	t.Logf("Name: %s", user.Name)
-	t.Logf("Username: %s", user.Username)
-	t.Logf("Enabled: %t", user.Enabled)
-	t.Logf("Email: %s", user.Email)
-	t.Logf("TenantID: %s", user.TenantID)
-}
-
-// PrintUserRole will print the roles that a user has been granted.
-func PrintUserRole(t *testing.T, role *users.Role) {
-	t.Logf("ID: %s", role.ID)
-	t.Logf("Name: %s", role.Name)
-}
diff --git a/acceptance/openstack/identity/v2/role_test.go b/acceptance/openstack/identity/v2/role_test.go
index 5589b1b..83fbd31 100644
--- a/acceptance/openstack/identity/v2/role_test.go
+++ b/acceptance/openstack/identity/v2/role_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/extensions/admin/roles"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/users"
 )
@@ -50,7 +51,7 @@
 
 	t.Logf("Roles of user %s:", user.Name)
 	for _, role := range allRoles {
-		PrintUserRole(t, &role)
+		tools.PrintResource(t, role)
 	}
 }
 
@@ -71,6 +72,6 @@
 	}
 
 	for _, r := range allRoles {
-		PrintRole(t, &r)
+		tools.PrintResource(t, r)
 	}
 }
diff --git a/acceptance/openstack/identity/v2/tenant_test.go b/acceptance/openstack/identity/v2/tenant_test.go
index ed457d4..2053614 100644
--- a/acceptance/openstack/identity/v2/tenant_test.go
+++ b/acceptance/openstack/identity/v2/tenant_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/tenants"
 )
 
@@ -26,6 +27,6 @@
 	}
 
 	for _, tenant := range allTenants {
-		PrintTenant(t, &tenant)
+		tools.PrintResource(t, tenant)
 	}
 }
diff --git a/acceptance/openstack/identity/v2/token_test.go b/acceptance/openstack/identity/v2/token_test.go
index 4cd8301..82a317a 100644
--- a/acceptance/openstack/identity/v2/token_test.go
+++ b/acceptance/openstack/identity/v2/token_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/tokens"
 )
@@ -27,7 +28,7 @@
 		t.Fatalf("Unable to extract token: %v", err)
 	}
 
-	PrintToken(t, token)
+	tools.PrintResource(t, token)
 
 	catalog, err := result.ExtractServiceCatalog()
 	if err != nil {
@@ -35,7 +36,7 @@
 	}
 
 	for _, entry := range catalog.Entries {
-		PrintCatalogEntry(t, &entry)
+		tools.PrintResource(t, entry)
 	}
 }
 
@@ -56,7 +57,7 @@
 		t.Fatalf("Unable to extract token: %v", err)
 	}
 
-	PrintToken(t, token)
+	tools.PrintResource(t, token)
 
 	getResult := tokens.Get(client, token.ID)
 	user, err := getResult.ExtractUser()
@@ -64,5 +65,5 @@
 		t.Fatalf("Unable to extract user: %v", err)
 	}
 
-	PrintTokenUser(t, user)
+	tools.PrintResource(t, user)
 }
diff --git a/acceptance/openstack/identity/v2/user_test.go b/acceptance/openstack/identity/v2/user_test.go
index 5c6bfd9..faa5bba 100644
--- a/acceptance/openstack/identity/v2/user_test.go
+++ b/acceptance/openstack/identity/v2/user_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v2/users"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, user := range allUsers {
-		PrintUser(t, &user)
+		tools.PrintResource(t, user)
 	}
 }
 
@@ -47,12 +48,12 @@
 	}
 	defer DeleteUser(t, client, user)
 
-	PrintUser(t, user)
+	tools.PrintResource(t, user)
 
 	newUser, err := UpdateUser(t, client, user)
 	if err != nil {
 		t.Fatalf("Unable to update user: %v", err)
 	}
 
-	PrintUser(t, newUser)
+	tools.PrintResource(t, newUser)
 }
diff --git a/acceptance/openstack/identity/v3/endpoint_test.go b/acceptance/openstack/identity/v3/endpoint_test.go
index 6a52f26..a589970 100644
--- a/acceptance/openstack/identity/v3/endpoint_test.go
+++ b/acceptance/openstack/identity/v3/endpoint_test.go
@@ -7,6 +7,7 @@
 
 	"github.com/gophercloud/gophercloud"
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v3/endpoints"
 	"github.com/gophercloud/gophercloud/openstack/identity/v3/services"
 )
@@ -28,7 +29,7 @@
 	}
 
 	for _, endpoint := range allEndpoints {
-		PrintEndpoint(t, &endpoint)
+		tools.PrintResource(t, endpoint)
 	}
 }
 
@@ -58,7 +59,7 @@
 	}
 
 	computeService := allServices[0]
-	PrintService(t, &computeService)
+	tools.PrintResource(t, computeService)
 
 	// Enumerate the endpoints available for this service.
 	endpointListOpts := endpoints.ListOpts{
@@ -80,6 +81,6 @@
 		t.Fatalf("Expected one endpoint, got %d", len(allEndpoints))
 	}
 
-	PrintEndpoint(t, &allEndpoints[0])
+	tools.PrintResource(t, allEndpoints[0])
 
 }
diff --git a/acceptance/openstack/identity/v3/identity.go b/acceptance/openstack/identity/v3/identity.go
index f7ea48f..3276efc 100644
--- a/acceptance/openstack/identity/v3/identity.go
+++ b/acceptance/openstack/identity/v3/identity.go
@@ -5,10 +5,7 @@
 
 	"github.com/gophercloud/gophercloud"
 	"github.com/gophercloud/gophercloud/acceptance/tools"
-	"github.com/gophercloud/gophercloud/openstack/identity/v3/endpoints"
 	"github.com/gophercloud/gophercloud/openstack/identity/v3/projects"
-	"github.com/gophercloud/gophercloud/openstack/identity/v3/services"
-	"github.com/gophercloud/gophercloud/openstack/identity/v3/tokens"
 )
 
 // CreateProject will create a project with a random name.
@@ -49,38 +46,3 @@
 
 	t.Logf("Deleted project: %s", projectID)
 }
-
-// PrintEndpoint will print an endpoint and all of its attributes.
-func PrintEndpoint(t *testing.T, endpoint *endpoints.Endpoint) {
-	t.Logf("ID: %s", endpoint.ID)
-	t.Logf("Availability: %s", endpoint.Availability)
-	t.Logf("Name: %s", endpoint.Name)
-	t.Logf("Region: %s", endpoint.Region)
-	t.Logf("ServiceID: %s", endpoint.ServiceID)
-	t.Logf("URL: %s", endpoint.URL)
-}
-
-// PrintProject will print a project and all of its attributes.
-func PrintProject(t *testing.T, project *projects.Project) {
-	t.Logf("ID: %s", project.ID)
-	t.Logf("IsDomain: %t", project.IsDomain)
-	t.Logf("Description: %s", project.Description)
-	t.Logf("DomainID: %s", project.DomainID)
-	t.Logf("Enabled: %t", project.Enabled)
-	t.Logf("Name: %s", project.Name)
-	t.Logf("ParentID: %s", project.ParentID)
-}
-
-// PrintService will print a service and all of its attributes.
-func PrintService(t *testing.T, service *services.Service) {
-	t.Logf("ID: %s", service.ID)
-	t.Logf("Description: %s", service.Description)
-	t.Logf("Name: %s", service.Name)
-	t.Logf("Type: %s", service.Type)
-}
-
-// PrintToken will print a token and all of its attributes.
-func PrintToken(t *testing.T, token *tokens.Token) {
-	t.Logf("ID: %s", token.ID)
-	t.Logf("ExpiresAt: %v", token.ExpiresAt)
-}
diff --git a/acceptance/openstack/identity/v3/projects_test.go b/acceptance/openstack/identity/v3/projects_test.go
index ebb5543..8325bee 100644
--- a/acceptance/openstack/identity/v3/projects_test.go
+++ b/acceptance/openstack/identity/v3/projects_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v3/projects"
 )
 
@@ -31,7 +32,7 @@
 	}
 
 	for _, project := range allProjects {
-		PrintProject(t, &project)
+		tools.PrintResource(t, project)
 	}
 }
 
@@ -57,7 +58,7 @@
 		t.Fatalf("Unable to get project: %v", err)
 	}
 
-	PrintProject(t, p)
+	tools.PrintResource(t, p)
 }
 
 func TestProjectsCRUD(t *testing.T) {
@@ -72,7 +73,7 @@
 	}
 	defer DeleteProject(t, client, project.ID)
 
-	PrintProject(t, project)
+	tools.PrintResource(t, project)
 
 	var iFalse bool = false
 	updateOpts := projects.UpdateOpts{
@@ -84,7 +85,7 @@
 		t.Fatalf("Unable to update project: %v", err)
 	}
 
-	PrintProject(t, updatedProject)
+	tools.PrintResource(t, updatedProject)
 }
 
 func TestProjectsDomain(t *testing.T) {
@@ -104,7 +105,7 @@
 	}
 	defer DeleteProject(t, client, projectDomain.ID)
 
-	PrintProject(t, projectDomain)
+	tools.PrintResource(t, projectDomain)
 
 	createOpts = projects.CreateOpts{
 		DomainID: projectDomain.ID,
@@ -116,7 +117,7 @@
 	}
 	defer DeleteProject(t, client, project.ID)
 
-	PrintProject(t, project)
+	tools.PrintResource(t, project)
 
 	var iFalse = false
 	updateOpts := projects.UpdateOpts{
@@ -141,7 +142,7 @@
 	}
 	defer DeleteProject(t, client, projectMain.ID)
 
-	PrintProject(t, projectMain)
+	tools.PrintResource(t, projectMain)
 
 	createOpts := projects.CreateOpts{
 		ParentID: projectMain.ID,
@@ -153,5 +154,5 @@
 	}
 	defer DeleteProject(t, client, project.ID)
 
-	PrintProject(t, project)
+	tools.PrintResource(t, project)
 }
diff --git a/acceptance/openstack/identity/v3/service_test.go b/acceptance/openstack/identity/v3/service_test.go
index 364f69b..7a0c71f 100644
--- a/acceptance/openstack/identity/v3/service_test.go
+++ b/acceptance/openstack/identity/v3/service_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/identity/v3/services"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, service := range allServices {
-		PrintService(t, &service)
+		tools.PrintResource(t, service)
 	}
 
 }
diff --git a/acceptance/openstack/identity/v3/token_test.go b/acceptance/openstack/identity/v3/token_test.go
index 13b38f8..e0f90d9 100644
--- a/acceptance/openstack/identity/v3/token_test.go
+++ b/acceptance/openstack/identity/v3/token_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack"
 	"github.com/gophercloud/gophercloud/openstack/identity/v3/tokens"
 )
@@ -32,5 +33,5 @@
 		t.Fatalf("Unable to get token: %v", err)
 	}
 
-	PrintToken(t, token)
+	tools.PrintResource(t, token)
 }
diff --git a/acceptance/openstack/networking/v2/apiversion_test.go b/acceptance/openstack/networking/v2/apiversion_test.go
index 409550c..c6f8f26 100644
--- a/acceptance/openstack/networking/v2/apiversion_test.go
+++ b/acceptance/openstack/networking/v2/apiversion_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/apiversions"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, apiVersion := range allAPIVersions {
-		PrintAPIVersion(t, &apiVersion)
+		tools.PrintResource(t, apiVersion)
 	}
 }
 
@@ -47,6 +48,6 @@
 	}
 
 	for _, versionResource := range allVersionResources {
-		PrintVersionResource(t, &versionResource)
+		tools.PrintResource(t, versionResource)
 	}
 }
diff --git a/acceptance/openstack/networking/v2/extension_test.go b/acceptance/openstack/networking/v2/extension_test.go
index baade1e..5609e85 100644
--- a/acceptance/openstack/networking/v2/extension_test.go
+++ b/acceptance/openstack/networking/v2/extension_test.go
@@ -6,7 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
-	"github.com/gophercloud/gophercloud/acceptance/openstack"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/common/extensions"
 )
 
@@ -27,7 +27,7 @@
 	}
 
 	for _, extension := range allExtensions {
-		openstack.PrintExtension(t, &extension)
+		tools.PrintResource(t, extension)
 	}
 }
 
@@ -42,5 +42,5 @@
 		t.Fatalf("Unable to get extension port-security: %v", err)
 	}
 
-	openstack.PrintExtension(t, extension)
+	tools.PrintResource(t, extension)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/extensions.go b/acceptance/openstack/networking/v2/extensions/extensions.go
index f18e430..154e34e 100644
--- a/acceptance/openstack/networking/v2/extensions/extensions.go
+++ b/acceptance/openstack/networking/v2/extensions/extensions.go
@@ -6,7 +6,6 @@
 	"github.com/gophercloud/gophercloud"
 	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external"
-	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/provider"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
@@ -137,44 +136,3 @@
 		t.Fatalf("Unable to delete security group rule: %v", err)
 	}
 }
-
-// PrintNetworkExtAttrs prints a network and all of its extra attributes.
-func PrintNetworkExtAttrs(t *testing.T, network *provider.NetworkExtAttrs) {
-	t.Logf("ID: %s", network.ID)
-	t.Logf("Name: %s", network.Name)
-	t.Logf("AdminStateUp: %t", network.AdminStateUp)
-	t.Logf("Status: %s", network.Status)
-	t.Logf("Subnets: %s", network.Subnets)
-	t.Logf("TenantID: %s", network.TenantID)
-	t.Logf("Shared: %t", network.Shared)
-	t.Logf("NetworkType: %s", network.NetworkType)
-	t.Logf("PhysicalNetwork: %s", network.PhysicalNetwork)
-	t.Logf("SegmentationID: %d", network.SegmentationID)
-}
-
-// PrintSecurityGroup will print a security group and all of its attributes.
-func PrintSecurityGroup(t *testing.T, secGroup *groups.SecGroup) {
-	t.Logf("ID: %s", secGroup.ID)
-	t.Logf("Name: %s", secGroup.Name)
-	t.Logf("Description: %s", secGroup.Description)
-	t.Logf("TenantID: %s", secGroup.TenantID)
-	t.Logf("Rules:")
-
-	for _, rule := range secGroup.Rules {
-		PrintSecurityGroupRule(t, &rule)
-	}
-}
-
-// PrintSecurityGroupRule will print a security group rule and all of its attributes.
-func PrintSecurityGroupRule(t *testing.T, rule *rules.SecGroupRule) {
-	t.Logf("ID: %s", rule.ID)
-	t.Logf("Direction: %s", rule.Direction)
-	t.Logf("EtherType: %s", rule.EtherType)
-	t.Logf("SecGroupID: %s", rule.SecGroupID)
-	t.Logf("PortRangeMin: %d", rule.PortRangeMin)
-	t.Logf("PortRangeMax: %d", rule.PortRangeMax)
-	t.Logf("Protocol: %s", rule.Protocol)
-	t.Logf("RemoteGroupID: %s", rule.RemoteGroupID)
-	t.Logf("RemoteIPPrefix: %s", rule.RemoteIPPrefix)
-	t.Logf("TenantID: %s", rule.TenantID)
-}
diff --git a/acceptance/openstack/networking/v2/extensions/fwaas/firewall_test.go b/acceptance/openstack/networking/v2/extensions/fwaas/firewall_test.go
index 0b021d3..473013b 100644
--- a/acceptance/openstack/networking/v2/extensions/fwaas/firewall_test.go
+++ b/acceptance/openstack/networking/v2/extensions/fwaas/firewall_test.go
@@ -7,6 +7,7 @@
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
 	layer3 "github.com/gophercloud/gophercloud/acceptance/openstack/networking/v2/extensions/layer3"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/firewalls"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/routerinsertion"
 )
@@ -28,7 +29,7 @@
 	}
 
 	for _, firewall := range allFirewalls {
-		PrintFirewall(t, &firewall)
+		tools.PrintResource(t, firewall)
 	}
 }
 
@@ -50,7 +51,7 @@
 	}
 	defer DeleteRule(t, client, rule.ID)
 
-	PrintRule(t, rule)
+	tools.PrintResource(t, rule)
 
 	policy, err := CreatePolicy(t, client, rule.ID)
 	if err != nil {
@@ -58,7 +59,7 @@
 	}
 	defer DeletePolicy(t, client, policy.ID)
 
-	PrintPolicy(t, policy)
+	tools.PrintResource(t, policy)
 
 	firewall, err := CreateFirewallOnRouter(t, client, policy.ID, router.ID)
 	if err != nil {
@@ -66,7 +67,7 @@
 	}
 	defer DeleteFirewall(t, client, firewall.ID)
 
-	PrintFirewall(t, firewall)
+	tools.PrintResource(t, firewall)
 
 	router2, err := layer3.CreateExternalRouter(t, client)
 	if err != nil {
@@ -94,5 +95,5 @@
 		t.Fatalf("Unable to get firewall: %v", err)
 	}
 
-	PrintFirewall(t, newFirewall)
+	tools.PrintResource(t, newFirewall)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/fwaas/fwaas.go b/acceptance/openstack/networking/v2/extensions/fwaas/fwaas.go
index dd361f9..204565b 100644
--- a/acceptance/openstack/networking/v2/extensions/fwaas/fwaas.go
+++ b/acceptance/openstack/networking/v2/extensions/fwaas/fwaas.go
@@ -20,9 +20,11 @@
 
 	t.Logf("Attempting to create firewall %s", firewallName)
 
+	iTrue := true
 	createOpts := firewalls.CreateOpts{
-		Name:     firewallName,
-		PolicyID: policyID,
+		Name:         firewallName,
+		PolicyID:     policyID,
+		AdminStateUp: &iTrue,
 	}
 
 	firewall, err := firewalls.Create(client, createOpts).Extract()
@@ -177,49 +179,6 @@
 	t.Logf("Deleted rule: %s", ruleID)
 }
 
-// PrintFirewall will print a firewall and all of its attributes.
-func PrintFirewall(t *testing.T, firewall *firewalls.Firewall) {
-	t.Logf("ID: %s", firewall.ID)
-	t.Logf("Name: %s", firewall.Name)
-	t.Logf("Description: %s", firewall.Description)
-	t.Logf("AdminStateUp: %t", firewall.AdminStateUp)
-	t.Logf("Status: %s", firewall.Status)
-	t.Logf("PolicyID: %s", firewall.PolicyID)
-	t.Logf("TenantID: %s", firewall.TenantID)
-}
-
-// PrintPolicy will print a policy and all of its attributes.
-func PrintPolicy(t *testing.T, policy *policies.Policy) {
-	t.Logf("ID: %s", policy.ID)
-	t.Logf("Name: %s", policy.Name)
-	t.Logf("Description: %s", policy.Description)
-	t.Logf("TenantID: %s", policy.TenantID)
-	t.Logf("Audited: %t", policy.Audited)
-	t.Logf("Shared: %t", policy.Shared)
-	t.Logf("Rules:")
-
-	for _, rule := range policy.Rules {
-		t.Logf("Rule ID: %s", rule)
-	}
-}
-
-// PrintRule will print a rule and all of its attributes.
-func PrintRule(t *testing.T, rule *rules.Rule) {
-	t.Logf("ID: %s", rule.ID)
-	t.Logf("Name: %s", rule.Name)
-	t.Logf("Description: %s", rule.Description)
-	t.Logf("Protocol: %s", rule.Protocol)
-	t.Logf("Action: %s", rule.Action)
-	t.Logf("IPVersion: %d", rule.IPVersion)
-	t.Logf("SourceIPAddress: %s", rule.SourceIPAddress)
-	t.Logf("DestinationIPAddress: %s", rule.DestinationIPAddress)
-	t.Logf("Shared: %t", rule.Shared)
-	t.Logf("Enabled: %t", rule.Enabled)
-	t.Logf("PolicyID: %s", rule.PolicyID)
-	t.Logf("Position: %d", rule.Position)
-	t.Logf("TenantID: %s", rule.TenantID)
-}
-
 // WaitForFirewallState will wait until a firewall reaches a given state.
 func WaitForFirewallState(client *gophercloud.ServiceClient, firewallID, status string, secs int) error {
 	return gophercloud.WaitFor(secs, func() (bool, error) {
diff --git a/acceptance/openstack/networking/v2/extensions/fwaas/policy_test.go b/acceptance/openstack/networking/v2/extensions/fwaas/policy_test.go
index 9003e54..3220d82 100644
--- a/acceptance/openstack/networking/v2/extensions/fwaas/policy_test.go
+++ b/acceptance/openstack/networking/v2/extensions/fwaas/policy_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/policies"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, policy := range allPolicies {
-		PrintPolicy(t, &policy)
+		tools.PrintResource(t, policy)
 	}
 }
 
@@ -42,7 +43,7 @@
 	}
 	defer DeleteRule(t, client, rule.ID)
 
-	PrintRule(t, rule)
+	tools.PrintResource(t, rule)
 
 	policy, err := CreatePolicy(t, client, rule.ID)
 	if err != nil {
@@ -50,7 +51,7 @@
 	}
 	defer DeletePolicy(t, client, policy.ID)
 
-	PrintPolicy(t, policy)
+	tools.PrintResource(t, policy)
 
 	updateOpts := policies.UpdateOpts{
 		Description: "Some policy description",
@@ -66,5 +67,5 @@
 		t.Fatalf("Unable to get policy: %v", err)
 	}
 
-	PrintPolicy(t, newPolicy)
+	tools.PrintResource(t, newPolicy)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/fwaas/rule_test.go b/acceptance/openstack/networking/v2/extensions/fwaas/rule_test.go
index c8e67dc..4521a60 100644
--- a/acceptance/openstack/networking/v2/extensions/fwaas/rule_test.go
+++ b/acceptance/openstack/networking/v2/extensions/fwaas/rule_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/rules"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, rule := range allRules {
-		PrintRule(t, &rule)
+		tools.PrintResource(t, rule)
 	}
 }
 
@@ -42,7 +43,7 @@
 	}
 	defer DeleteRule(t, client, rule.ID)
 
-	PrintRule(t, rule)
+	tools.PrintResource(t, rule)
 
 	ruleDescription := "Some rule description"
 	updateOpts := rules.UpdateOpts{
@@ -59,5 +60,5 @@
 		t.Fatalf("Unable to get rule: %v", err)
 	}
 
-	PrintRule(t, newRule)
+	tools.PrintResource(t, newRule)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/layer3/floatingips_test.go b/acceptance/openstack/networking/v2/extensions/layer3/floatingips_test.go
index c20b0d1..952213e 100644
--- a/acceptance/openstack/networking/v2/extensions/layer3/floatingips_test.go
+++ b/acceptance/openstack/networking/v2/extensions/layer3/floatingips_test.go
@@ -7,6 +7,7 @@
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
 	networking "github.com/gophercloud/gophercloud/acceptance/openstack/networking/v2"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips"
 )
 
@@ -28,7 +29,7 @@
 	}
 
 	for _, fip := range allFIPs {
-		PrintFloatingIP(t, &fip)
+		tools.PrintResource(t, fip)
 	}
 }
 
@@ -77,7 +78,7 @@
 		t.Fatalf("Unable to get floating ip: %v", err)
 	}
 
-	PrintFloatingIP(t, newFip)
+	tools.PrintResource(t, newFip)
 
 	// Disassociate the floating IP
 	updateOpts := floatingips.UpdateOpts{
diff --git a/acceptance/openstack/networking/v2/extensions/layer3/layer3.go b/acceptance/openstack/networking/v2/extensions/layer3/layer3.go
index 3d2d88f..7bc0676 100644
--- a/acceptance/openstack/networking/v2/extensions/layer3/layer3.go
+++ b/acceptance/openstack/networking/v2/extensions/layer3/layer3.go
@@ -177,42 +177,6 @@
 	t.Logf("Deleted floating IP: %s", floatingIPID)
 }
 
-// PrintFloatingIP prints a floating IP and all of its attributes.
-func PrintFloatingIP(t *testing.T, fip *floatingips.FloatingIP) {
-	t.Logf("ID: %s", fip.ID)
-	t.Logf("FloatingNetworkID: %s", fip.FloatingNetworkID)
-	t.Logf("FloatingIP: %s", fip.FloatingIP)
-	t.Logf("PortID: %s", fip.PortID)
-	t.Logf("FixedIP: %s", fip.FixedIP)
-	t.Logf("TenantID: %s", fip.TenantID)
-	t.Logf("Status: %s", fip.Status)
-}
-
-// PrintRouterInterface prints a router interface and all of its attributes.
-func PrintRouterInterface(t *testing.T, routerInterface *routers.InterfaceInfo) {
-	t.Logf("ID: %s", routerInterface.ID)
-	t.Logf("SubnetID: %s", routerInterface.SubnetID)
-	t.Logf("PortID: %s", routerInterface.PortID)
-	t.Logf("TenantID: %s", routerInterface.TenantID)
-}
-
-// PrintRouter prints a router and all of its attributes.
-func PrintRouter(t *testing.T, router *routers.Router) {
-	t.Logf("ID: %s", router.ID)
-	t.Logf("Status: %s", router.Status)
-	t.Logf("GatewayInfo: %s", router.GatewayInfo)
-	t.Logf("AdminStateUp: %t", router.AdminStateUp)
-	t.Logf("Distributed: %t", router.Distributed)
-	t.Logf("Name: %s", router.Name)
-	t.Logf("TenantID: %s", router.TenantID)
-	t.Logf("Routes:")
-
-	for _, route := range router.Routes {
-		t.Logf("\tNextHop: %s", route.NextHop)
-		t.Logf("\tDestinationCIDR: %s", route.DestinationCIDR)
-	}
-}
-
 func WaitForRouterToCreate(client *gophercloud.ServiceClient, routerID string, secs int) error {
 	return gophercloud.WaitFor(secs, func() (bool, error) {
 		r, err := routers.Get(client, routerID).Extract()
diff --git a/acceptance/openstack/networking/v2/extensions/layer3/routers_test.go b/acceptance/openstack/networking/v2/extensions/layer3/routers_test.go
index 67688ec..e0be169 100644
--- a/acceptance/openstack/networking/v2/extensions/layer3/routers_test.go
+++ b/acceptance/openstack/networking/v2/extensions/layer3/routers_test.go
@@ -29,7 +29,7 @@
 	}
 
 	for _, router := range allRouters {
-		PrintRouter(t, &router)
+		tools.PrintResource(t, router)
 	}
 }
 
@@ -45,7 +45,7 @@
 	}
 	defer DeleteRouter(t, client, router.ID)
 
-	PrintRouter(t, router)
+	tools.PrintResource(t, router)
 
 	newName := tools.RandomString("TESTACC-", 8)
 	updateOpts := routers.UpdateOpts{
@@ -62,7 +62,7 @@
 		t.Fatalf("Unable to get router: %v", err)
 	}
 
-	PrintRouter(t, newRouter)
+	tools.PrintResource(t, newRouter)
 }
 
 func TestLayer3RouterInterface(t *testing.T) {
@@ -82,7 +82,7 @@
 	}
 	defer networking.DeleteSubnet(t, client, subnet.ID)
 
-	networking.PrintSubnet(t, subnet)
+	tools.PrintResource(t, subnet)
 
 	router, err := CreateExternalRouter(t, client)
 	if err != nil {
@@ -99,8 +99,8 @@
 		t.Fatalf("Failed to add interface to router: %v", err)
 	}
 
-	PrintRouter(t, router)
-	PrintRouterInterface(t, iface)
+	tools.PrintResource(t, router)
+	tools.PrintResource(t, iface)
 
 	riOpts := routers.RemoveInterfaceOpts{
 		SubnetID: subnet.ID,
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas/lbaas.go b/acceptance/openstack/networking/v2/extensions/lbaas/lbaas.go
index 32bfcd4..1f7b2b0 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas/lbaas.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas/lbaas.go
@@ -158,63 +158,3 @@
 
 	t.Logf("Successfully deleted vip %s", vipID)
 }
-
-// PrintMember will print a member and all of its attributes.
-func PrintMember(t *testing.T, member *members.Member) {
-	t.Logf("ID: %s", member.ID)
-	t.Logf("TenantID: %s", member.TenantID)
-	t.Logf("Status: %s", member.Status)
-	t.Logf("Weight: %d", member.Weight)
-	t.Logf("AdminStateUp: %t", member.AdminStateUp)
-	t.Logf("PoolID: %s", member.PoolID)
-	t.Logf("Address: %s", member.Address)
-	t.Logf("ProtocolPort: %s", member.ProtocolPort)
-}
-
-// PrintMonitor will print a monitor and all of its attributes.
-func PrintMonitor(t *testing.T, monitor *monitors.Monitor) {
-	t.Logf("ID: %s", monitor.ID)
-	t.Logf("Name: %s", monitor.Name)
-	t.Logf("TenantID: %s", monitor.TenantID)
-	t.Logf("Status: %s", monitor.Status)
-	t.Logf("Type: %s", monitor.Type)
-	t.Logf("Delay: %d", monitor.Delay)
-	t.Logf("Timeout: %d", monitor.Timeout)
-	t.Logf("MaxRetries: %d", monitor.MaxRetries)
-	t.Logf("HTTPMethod: %s", monitor.HTTPMethod)
-	t.Logf("URLPath: %s", monitor.URLPath)
-	t.Logf("ExpectedCodes: %s", monitor.ExpectedCodes)
-	t.Logf("AdminStateUp: %t", monitor.AdminStateUp)
-}
-
-// PrintPool will print a pool and all of its attributes.
-func PrintPool(t *testing.T, pool *pools.Pool) {
-	t.Logf("ID: %s", pool.ID)
-	t.Logf("Name: %s", pool.Name)
-	t.Logf("TenantID: %s", pool.TenantID)
-	t.Logf("Status: %s", pool.Status)
-	t.Logf("LBMethod: %s", pool.LBMethod)
-	t.Logf("Description: %s", pool.Description)
-	t.Logf("SubnetID: %s", pool.SubnetID)
-	t.Logf("AdminStateUp: %t", pool.AdminStateUp)
-	t.Logf("MonitorIDs: %s", pool.MonitorIDs)
-	t.Logf("MemberIDs: %s", pool.MemberIDs)
-}
-
-// PrintVIP will print a vip and all of its attributes.
-func PrintVIP(t *testing.T, vip *vips.VirtualIP) {
-	t.Logf("ID: %s", vip.ID)
-	t.Logf("Name: %s", vip.Name)
-	t.Logf("TenantID: %s", vip.TenantID)
-	t.Logf("Status: %s", vip.Status)
-	t.Logf("Description: %s", vip.Description)
-	t.Logf("SubnetID: %s", vip.SubnetID)
-	t.Logf("Address: %s", vip.Address)
-	t.Logf("Protocol: %s", vip.Protocol)
-	t.Logf("ProtocolPort: %d", vip.ProtocolPort)
-	t.Logf("PoolID: %s", vip.PoolID)
-	t.Logf("PortID: %s", vip.PortID)
-	t.Logf("Persistence: %s", vip.Persistence)
-	t.Logf("ConnLimit: %d", vip.ConnLimit)
-	t.Logf("AdminStateUp: %t", vip.AdminStateUp)
-}
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas/members_test.go b/acceptance/openstack/networking/v2/extensions/lbaas/members_test.go
index 004036e..75dec83 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas/members_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas/members_test.go
@@ -8,6 +8,7 @@
 	"github.com/gophercloud/gophercloud"
 	"github.com/gophercloud/gophercloud/acceptance/clients"
 	networking "github.com/gophercloud/gophercloud/acceptance/openstack/networking/v2"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/members"
 )
 
@@ -28,7 +29,7 @@
 	}
 
 	for _, member := range allMembers {
-		PrintMember(t, &member)
+		tools.PrintResource(t, member)
 	}
 }
 
@@ -62,7 +63,7 @@
 	}
 	defer DeleteMember(t, client, member.ID)
 
-	PrintMember(t, member)
+	tools.PrintResource(t, member)
 
 	updateOpts := members.UpdateOpts{
 		AdminStateUp: gophercloud.Enabled,
@@ -78,5 +79,5 @@
 		t.Fatalf("Unable to get member: %v")
 	}
 
-	PrintMember(t, newMember)
+	tools.PrintResource(t, newMember)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas/monitors_test.go b/acceptance/openstack/networking/v2/extensions/lbaas/monitors_test.go
index e9a7dbb..56b413a 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas/monitors_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas/monitors_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/monitors"
 )
 
@@ -26,7 +27,7 @@
 	}
 
 	for _, monitor := range allMonitors {
-		PrintMonitor(t, &monitor)
+		tools.PrintResource(t, monitor)
 	}
 }
 
@@ -42,7 +43,7 @@
 	}
 	defer DeleteMonitor(t, client, monitor.ID)
 
-	PrintMonitor(t, monitor)
+	tools.PrintResource(t, monitor)
 
 	updateOpts := monitors.UpdateOpts{
 		Delay: 999,
@@ -58,5 +59,5 @@
 		t.Fatalf("Unable to get monitor: %v")
 	}
 
-	PrintMonitor(t, newMonitor)
+	tools.PrintResource(t, newMonitor)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas/pools_test.go b/acceptance/openstack/networking/v2/extensions/lbaas/pools_test.go
index 8af4d19..b53237c 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas/pools_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas/pools_test.go
@@ -7,6 +7,7 @@
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
 	networking "github.com/gophercloud/gophercloud/acceptance/openstack/networking/v2"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/pools"
 )
 
@@ -27,7 +28,7 @@
 	}
 
 	for _, pool := range allPools {
-		PrintPool(t, &pool)
+		tools.PrintResource(t, pool)
 	}
 }
 
@@ -55,7 +56,7 @@
 	}
 	defer DeletePool(t, client, pool.ID)
 
-	PrintPool(t, pool)
+	tools.PrintResource(t, pool)
 
 	updateOpts := pools.UpdateOpts{
 		LBMethod: pools.LBMethodLeastConnections,
@@ -71,7 +72,7 @@
 		t.Fatalf("Unable to get pool: %v")
 	}
 
-	PrintPool(t, newPool)
+	tools.PrintResource(t, newPool)
 }
 
 func TestPoolsMonitors(t *testing.T) {
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas/vips_test.go b/acceptance/openstack/networking/v2/extensions/lbaas/vips_test.go
index 1f61b36..ba3f9b4 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas/vips_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas/vips_test.go
@@ -27,7 +27,7 @@
 	}
 
 	for _, vip := range allVIPs {
-		PrintVIP(t, &vip)
+		tools.PrintResource(t, vip)
 	}
 }
 
@@ -61,7 +61,7 @@
 	}
 	defer DeleteVIP(t, client, vip.ID)
 
-	PrintVIP(t, vip)
+	tools.PrintResource(t, vip)
 
 	connLimit := 100
 	updateOpts := vips.UpdateOpts{
@@ -78,5 +78,5 @@
 		t.Fatalf("Unable to get vip: %v")
 	}
 
-	PrintVIP(t, newVIP)
+	tools.PrintResource(t, newVIP)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas_v2/lbaas_v2.go b/acceptance/openstack/networking/v2/extensions/lbaas_v2/lbaas_v2.go
index d2e7195..093f835 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas_v2/lbaas_v2.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas_v2/lbaas_v2.go
@@ -258,116 +258,6 @@
 	t.Logf("Successfully deleted pool %s", poolID)
 }
 
-// PrintListener will print a listener and all of its attributes.
-func PrintListener(t *testing.T, listener *listeners.Listener) {
-	t.Logf("ID: %s", listener.ID)
-	t.Logf("TenantID: %s", listener.TenantID)
-	t.Logf("Name: %s", listener.Name)
-	t.Logf("Description: %s", listener.Description)
-	t.Logf("Protocol: %s", listener.Protocol)
-	t.Logf("DefaultPoolID: %s", listener.DefaultPoolID)
-	t.Logf("ConnLimit: %d", listener.ConnLimit)
-	t.Logf("SniContainerRefs: %s", listener.SniContainerRefs)
-	t.Logf("DefaultTlsContainerRef: %s", listener.DefaultTlsContainerRef)
-	t.Logf("AdminStateUp: %t", listener.AdminStateUp)
-
-	t.Logf("Pools:")
-	for _, pool := range listener.Pools {
-		t.Logf("\t%#v", pool)
-	}
-
-	t.Logf("LoadBalancers")
-	for _, lb := range listener.Loadbalancers {
-		t.Logf("\t%#v", lb)
-	}
-}
-
-// PrintLoadBalancer will print a load balancer and all of its attributes.
-func PrintLoadBalancer(t *testing.T, lb *loadbalancers.LoadBalancer) {
-	t.Logf("ID: %s", lb.ID)
-	t.Logf("Name: %s", lb.Name)
-	t.Logf("TenantID: %s", lb.TenantID)
-	t.Logf("Description: %s", lb.Description)
-	t.Logf("ProvisioningStatus: %s", lb.ProvisioningStatus)
-	t.Logf("VipAddress: %s", lb.VipAddress)
-	t.Logf("VipPortID: %s", lb.VipPortID)
-	t.Logf("VipSubnetID: %s", lb.VipSubnetID)
-	t.Logf("OperatingStatus: %s", lb.OperatingStatus)
-	t.Logf("Flavor: %s", lb.Flavor)
-	t.Logf("Provider: %s", lb.Provider)
-	t.Logf("AdminStateUp: %t", lb.AdminStateUp)
-
-	t.Logf("Listeners")
-	for _, listener := range lb.Listeners {
-		t.Logf("\t%#v", listener)
-	}
-}
-
-// PrintMember will print a member and all of its attributes.
-func PrintMember(t *testing.T, member *pools.Member) {
-	t.Logf("ID: %s", member.ID)
-	t.Logf("Name: %s", member.Name)
-	t.Logf("TenantID: %s", member.TenantID)
-	t.Logf("Weight: %d", member.Weight)
-	t.Logf("SubnetID: %s", member.SubnetID)
-	t.Logf("PoolID: %s", member.PoolID)
-	t.Logf("Address: %s", member.Address)
-	t.Logf("ProtocolPort: %d", member.ProtocolPort)
-	t.Logf("AdminStateUp: %t", member.AdminStateUp)
-}
-
-// PrintMonitor will print a monitor and all of its attributes.
-func PrintMonitor(t *testing.T, monitor *monitors.Monitor) {
-	t.Logf("ID: %s", monitor.ID)
-	t.Logf("Name: %s", monitor.Name)
-	t.Logf("TenantID: %s", monitor.TenantID)
-	t.Logf("Type: %s", monitor.Type)
-	t.Logf("Delay: %d", monitor.Delay)
-	t.Logf("Timeout: %d", monitor.Timeout)
-	t.Logf("MaxRetries: %d", monitor.MaxRetries)
-	t.Logf("HTTPMethod: %s", monitor.HTTPMethod)
-	t.Logf("URLPath: %s", monitor.URLPath)
-	t.Logf("ExpectedCodes: %s", monitor.ExpectedCodes)
-	t.Logf("AdminStateUp: %t", monitor.AdminStateUp)
-	t.Logf("Status: %s", monitor.Status)
-
-	t.Logf("Pools")
-	for _, pool := range monitor.Pools {
-		t.Logf("\t%#v", pool)
-	}
-}
-
-// PrintPool will print a pool and all of its attributes.
-func PrintPool(t *testing.T, pool *pools.Pool) {
-	t.Logf("ID: %s", pool.ID)
-	t.Logf("Name: %s", pool.Name)
-	t.Logf("TenantID: %s", pool.TenantID)
-	t.Logf("Description: %s", pool.Description)
-	t.Logf("LBMethod: %s", pool.LBMethod)
-	t.Logf("Protocol: %s", pool.Protocol)
-	t.Logf("MonitorID: %s", pool.MonitorID)
-	t.Logf("SubnetID: %s", pool.SubnetID)
-	t.Logf("AdminStateUp: %t", pool.AdminStateUp)
-	t.Logf("Persistence: %s", pool.Persistence)
-	t.Logf("Provider: %s", pool.Provider)
-	t.Logf("Monitor: %#v", pool.Monitor)
-
-	t.Logf("Listeners")
-	for _, listener := range pool.Listeners {
-		t.Logf("\t%#v", listener)
-	}
-
-	t.Logf("Members")
-	for _, member := range pool.Members {
-		t.Logf("\t%#v", member)
-	}
-
-	t.Logf("Loadbalancers")
-	for _, lb := range pool.Loadbalancers {
-		t.Logf("\t%#v", lb)
-	}
-}
-
 // WaitForLoadBalancerState will wait until a loadbalancer reaches a given state.
 func WaitForLoadBalancerState(client *gophercloud.ServiceClient, lbID, status string, secs int) error {
 	return gophercloud.WaitFor(secs, func() (bool, error) {
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas_v2/listeners_test.go b/acceptance/openstack/networking/v2/extensions/lbaas_v2/listeners_test.go
index ac2681e..2d2dd03 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas_v2/listeners_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas_v2/listeners_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners"
 )
 
@@ -26,6 +27,6 @@
 	}
 
 	for _, listener := range allListeners {
-		PrintListener(t, &listener)
+		tools.PrintResource(t, listener)
 	}
 }
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas_v2/loadbalancers_test.go b/acceptance/openstack/networking/v2/extensions/lbaas_v2/loadbalancers_test.go
index 7cd49ed..650eb2c 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas_v2/loadbalancers_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas_v2/loadbalancers_test.go
@@ -31,7 +31,7 @@
 	}
 
 	for _, lb := range allLoadbalancers {
-		PrintLoadBalancer(t, &lb)
+		tools.PrintResource(t, lb)
 	}
 }
 
@@ -64,7 +64,7 @@
 		t.Fatalf("Unable to get loadbalancer: %v", err)
 	}
 
-	PrintLoadBalancer(t, newLB)
+	tools.PrintResource(t, newLB)
 
 	// Because of the time it takes to create a loadbalancer,
 	// this test will include some other resources.
@@ -93,7 +93,7 @@
 		t.Fatalf("Unable to get listener")
 	}
 
-	PrintListener(t, newListener)
+	tools.PrintResource(t, newListener)
 
 	// Pool
 	pool, err := CreatePool(t, client, lb)
@@ -119,7 +119,7 @@
 		t.Fatalf("Unable to get pool")
 	}
 
-	PrintPool(t, newPool)
+	tools.PrintResource(t, newPool)
 
 	// Member
 	member, err := CreateMember(t, client, lb, newPool, subnet.ID, subnet.CIDR)
@@ -146,7 +146,7 @@
 		t.Fatalf("Unable to get member")
 	}
 
-	PrintMember(t, newMember)
+	tools.PrintResource(t, newMember)
 
 	// Monitor
 	monitor, err := CreateMonitor(t, client, lb, newPool)
@@ -173,6 +173,6 @@
 		t.Fatalf("Unable to get monitor")
 	}
 
-	PrintMonitor(t, newMonitor)
+	tools.PrintResource(t, newMonitor)
 
 }
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas_v2/monitors_test.go b/acceptance/openstack/networking/v2/extensions/lbaas_v2/monitors_test.go
index 2e587d9..b312370 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas_v2/monitors_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas_v2/monitors_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors"
 )
 
@@ -26,6 +27,6 @@
 	}
 
 	for _, monitor := range allMonitors {
-		PrintMonitor(t, &monitor)
+		tools.PrintResource(t, monitor)
 	}
 }
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas_v2/pools_test.go b/acceptance/openstack/networking/v2/extensions/lbaas_v2/pools_test.go
index 42ba5a2..b4f55a0 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas_v2/pools_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas_v2/pools_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools"
 )
 
@@ -26,6 +27,6 @@
 	}
 
 	for _, pool := range allPools {
-		PrintPool(t, &pool)
+		tools.PrintResource(t, pool)
 	}
 }
diff --git a/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding.go b/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding.go
index b52cd80..a6d75f3 100644
--- a/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding.go
+++ b/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding.go
@@ -36,22 +36,3 @@
 
 	return port, nil
 }
-
-// PrintPortsbinging will print a port and all of its attributes.
-func PrintPortsbinding(t *testing.T, port *portsbinding.Port) {
-	t.Logf("ID: %s", port.ID)
-	t.Logf("NetworkID: %s", port.NetworkID)
-	t.Logf("Name: %s", port.Name)
-	t.Logf("AdminStateUp: %t", port.AdminStateUp)
-	t.Logf("Status: %s", port.Status)
-	t.Logf("MACAddress: %s", port.MACAddress)
-	t.Logf("FixedIPs: %s", port.FixedIPs)
-	t.Logf("TenantID: %s", port.TenantID)
-	t.Logf("DeviceOwner: %s", port.DeviceOwner)
-	t.Logf("SecurityGroups: %s", port.SecurityGroups)
-	t.Logf("DeviceID: %s", port.DeviceID)
-	t.Logf("DeviceOwner: %s", port.DeviceOwner)
-	t.Logf("AllowedAddressPairs: %s", port.AllowedAddressPairs)
-	t.Logf("HostID: %s", port.HostID)
-	t.Logf("VNICType: %s", port.VNICType)
-}
diff --git a/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding_test.go b/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding_test.go
index 2f2f618..803f62a 100644
--- a/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding_test.go
+++ b/acceptance/openstack/networking/v2/extensions/portsbinding/portsbinding_test.go
@@ -42,7 +42,7 @@
 	}
 	defer networking.DeletePort(t, client, port.ID)
 
-	PrintPortsbinding(t, port)
+	tools.PrintResource(t, port)
 
 	// Update port
 	newPortName := tools.RandomString("TESTACC-", 8)
@@ -54,5 +54,5 @@
 		t.Fatalf("Could not update port: %v", err)
 	}
 
-	PrintPortsbinding(t, newPort)
+	tools.PrintResource(t, newPort)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/provider_test.go b/acceptance/openstack/networking/v2/extensions/provider_test.go
index 8136581..b0d5846 100644
--- a/acceptance/openstack/networking/v2/extensions/provider_test.go
+++ b/acceptance/openstack/networking/v2/extensions/provider_test.go
@@ -7,6 +7,7 @@
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
 	networking "github.com/gophercloud/gophercloud/acceptance/openstack/networking/v2"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/provider"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
 )
@@ -30,5 +31,5 @@
 		t.Fatalf("Unable to extract network: %v", err)
 	}
 
-	PrintNetworkExtAttrs(t, newNetwork)
+	tools.PrintResource(t, newNetwork)
 }
diff --git a/acceptance/openstack/networking/v2/extensions/security_test.go b/acceptance/openstack/networking/v2/extensions/security_test.go
index 88003e7..c696377 100644
--- a/acceptance/openstack/networking/v2/extensions/security_test.go
+++ b/acceptance/openstack/networking/v2/extensions/security_test.go
@@ -7,6 +7,7 @@
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
 	networking "github.com/gophercloud/gophercloud/acceptance/openstack/networking/v2"
+	"github.com/gophercloud/gophercloud/acceptance/tools"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
 )
 
@@ -28,7 +29,7 @@
 	}
 
 	for _, group := range allGroups {
-		PrintSecurityGroup(t, &group)
+		tools.PrintResource(t, group)
 	}
 }
 
@@ -50,7 +51,7 @@
 	}
 	defer DeleteSecurityGroupRule(t, client, rule.ID)
 
-	PrintSecurityGroup(t, group)
+	tools.PrintResource(t, group)
 }
 
 func TestSecurityGroupsPort(t *testing.T) {
@@ -89,5 +90,5 @@
 	}
 	defer networking.DeletePort(t, client, port.ID)
 
-	networking.PrintPort(t, port)
+	tools.PrintResource(t, port)
 }
diff --git a/acceptance/openstack/networking/v2/networking.go b/acceptance/openstack/networking/v2/networking.go
index cc5befb..c5e7ca2 100644
--- a/acceptance/openstack/networking/v2/networking.go
+++ b/acceptance/openstack/networking/v2/networking.go
@@ -6,7 +6,6 @@
 
 	"github.com/gophercloud/gophercloud"
 	"github.com/gophercloud/gophercloud/acceptance/tools"
-	"github.com/gophercloud/gophercloud/openstack/networking/v2/apiversions"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/ports"
 	"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
@@ -196,61 +195,6 @@
 	t.Logf("Deleted subnet: %s", subnetID)
 }
 
-// PrintAPIVersion will print an API version and all of its attributes.
-func PrintAPIVersion(t *testing.T, apiVersion *apiversions.APIVersion) {
-	t.Logf("ID: %s", apiVersion.ID)
-	t.Logf("Status: %s", apiVersion.Status)
-}
-
-// PrintNetwork will print a network and all of its attributes.
-func PrintNetwork(t *testing.T, network *networks.Network) {
-	t.Logf("ID: %s", network.ID)
-	t.Logf("Name: %s", network.Name)
-	t.Logf("AdminStateUp: %t", network.AdminStateUp)
-	t.Logf("Status: %s", network.Status)
-	t.Logf("TenantID: %s", network.TenantID)
-	t.Logf("Shared: %t", network.Shared)
-	t.Logf("Subnets: %s", network.Subnets)
-}
-
-// PrintPort will print a port and all of its attributes.
-func PrintPort(t *testing.T, port *ports.Port) {
-	t.Logf("ID: %s", port.ID)
-	t.Logf("NetworkID: %s", port.NetworkID)
-	t.Logf("Name: %s", port.Name)
-	t.Logf("AdminStateUp: %t", port.AdminStateUp)
-	t.Logf("Status: %s", port.Status)
-	t.Logf("MACAddress: %s", port.MACAddress)
-	t.Logf("FixedIPs: %s", port.FixedIPs)
-	t.Logf("TenantID: %s", port.TenantID)
-	t.Logf("DeviceOwner: %s", port.DeviceOwner)
-	t.Logf("SecurityGroups: %s", port.SecurityGroups)
-	t.Logf("DeviceID: %s", port.DeviceID)
-	t.Logf("DeviceOwner: %s", port.DeviceOwner)
-	t.Logf("AllowedAddressPairs: %s", port.AllowedAddressPairs)
-}
-
-// PrintSubnet will print a subnet and all of its attributes.
-func PrintSubnet(t *testing.T, subnet *subnets.Subnet) {
-	t.Logf("ID: %s", subnet.ID)
-	t.Logf("NetworkID: %s", subnet.NetworkID)
-	t.Logf("Name: %s", subnet.Name)
-	t.Logf("IPVersion: %d", subnet.IPVersion)
-	t.Logf("CIDR: %s", subnet.CIDR)
-	t.Logf("GatewayIP: %s", subnet.GatewayIP)
-	t.Logf("DNSNameservers: %s", subnet.DNSNameservers)
-	t.Logf("AllocationPools: %s", subnet.AllocationPools)
-	t.Logf("HostRoutes: %s", subnet.HostRoutes)
-	t.Logf("EnableDHCP: %t", subnet.EnableDHCP)
-	t.Logf("TenantID: %s", subnet.TenantID)
-}
-
-// PrintVersionResource will print an API version resource and all of its attributes.
-func PrintVersionResource(t *testing.T, versionResource *apiversions.APIVersionResource) {
-	t.Logf("Name: %s", versionResource.Name)
-	t.Logf("Collection: %s", versionResource.Collection)
-}
-
 func WaitForPortToCreate(client *gophercloud.ServiceClient, portID string, secs int) error {
 	return gophercloud.WaitFor(secs, func() (bool, error) {
 		p, err := ports.Get(client, portID).Extract()
diff --git a/acceptance/openstack/networking/v2/networks_test.go b/acceptance/openstack/networking/v2/networks_test.go
index a095079..66f42f8 100644
--- a/acceptance/openstack/networking/v2/networks_test.go
+++ b/acceptance/openstack/networking/v2/networks_test.go
@@ -27,7 +27,7 @@
 	}
 
 	for _, network := range allNetworks {
-		PrintNetwork(t, &network)
+		tools.PrintResource(t, network)
 	}
 }
 
@@ -44,7 +44,7 @@
 	}
 	defer DeleteNetwork(t, client, network.ID)
 
-	PrintNetwork(t, network)
+	tools.PrintResource(t, network)
 
 	newName := tools.RandomString("TESTACC-", 8)
 	updateOpts := &networks.UpdateOpts{
@@ -61,5 +61,5 @@
 		t.Fatalf("Unable to retrieve network: %v", err)
 	}
 
-	PrintNetwork(t, newNetwork)
+	tools.PrintResource(t, newNetwork)
 }
diff --git a/acceptance/openstack/networking/v2/ports_test.go b/acceptance/openstack/networking/v2/ports_test.go
index b3b9ecb..fa1b4a4 100644
--- a/acceptance/openstack/networking/v2/ports_test.go
+++ b/acceptance/openstack/networking/v2/ports_test.go
@@ -27,7 +27,7 @@
 	}
 
 	for _, port := range allPorts {
-		PrintPort(t, &port)
+		tools.PrintResource(t, port)
 	}
 }
 
@@ -58,7 +58,7 @@
 	}
 	defer DeletePort(t, client, port.ID)
 
-	PrintPort(t, port)
+	tools.PrintResource(t, port)
 
 	// Update port
 	newPortName := tools.RandomString("TESTACC-", 8)
@@ -70,5 +70,5 @@
 		t.Fatalf("Could not update port: %v", err)
 	}
 
-	PrintPort(t, newPort)
+	tools.PrintResource(t, newPort)
 }
diff --git a/acceptance/openstack/networking/v2/subnets_test.go b/acceptance/openstack/networking/v2/subnets_test.go
index 1d7696c..fd50a1f 100644
--- a/acceptance/openstack/networking/v2/subnets_test.go
+++ b/acceptance/openstack/networking/v2/subnets_test.go
@@ -29,7 +29,7 @@
 	}
 
 	for _, subnet := range allSubnets {
-		PrintSubnet(t, &subnet)
+		tools.PrintResource(t, subnet)
 	}
 }
 
@@ -53,7 +53,7 @@
 	}
 	defer DeleteSubnet(t, client, subnet.ID)
 
-	PrintSubnet(t, subnet)
+	tools.PrintResource(t, subnet)
 
 	// Update Subnet
 	newSubnetName := tools.RandomString("TESTACC-", 8)
@@ -71,7 +71,7 @@
 		t.Fatalf("Unable to get subnet: %v", err)
 	}
 
-	PrintSubnet(t, newSubnet)
+	tools.PrintResource(t, newSubnet)
 }
 
 func TestSubnetsDefaultGateway(t *testing.T) {
@@ -94,7 +94,7 @@
 	}
 	defer DeleteSubnet(t, client, subnet.ID)
 
-	PrintSubnet(t, subnet)
+	tools.PrintResource(t, subnet)
 
 	if subnet.GatewayIP == "" {
 		t.Fatalf("A default gateway was not created.")
@@ -135,7 +135,7 @@
 	}
 	defer DeleteSubnet(t, client, subnet.ID)
 
-	PrintSubnet(t, subnet)
+	tools.PrintResource(t, subnet)
 
 	if subnet.GatewayIP != "" {
 		t.Fatalf("A gateway exists when it shouldn't.")
diff --git a/acceptance/tools/tools.go b/acceptance/tools/tools.go
index 7650fc1..d2fd298 100644
--- a/acceptance/tools/tools.go
+++ b/acceptance/tools/tools.go
@@ -2,8 +2,10 @@
 
 import (
 	"crypto/rand"
+	"encoding/json"
 	"errors"
 	mrand "math/rand"
+	"testing"
 	"time"
 )
 
@@ -63,3 +65,9 @@
 	}
 	return value
 }
+
+// PrintResource returns a resource as a readable structure
+func PrintResource(t *testing.T, resource interface{}) {
+	b, _ := json.MarshalIndent(resource, "", "  ")
+	t.Logf(string(b))
+}
