move unit tests into 'testing' directories
diff --git a/openstack/compute/v2/extensions/bootfromvolume/testing/doc.go b/openstack/compute/v2/extensions/bootfromvolume/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/bootfromvolume/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/bootfromvolume/requests_test.go b/openstack/compute/v2/extensions/bootfromvolume/testing/requests_test.go
similarity index 84%
rename from openstack/compute/v2/extensions/bootfromvolume/requests_test.go
rename to openstack/compute/v2/extensions/bootfromvolume/testing/requests_test.go
index d85070d..dca1105 100644
--- a/openstack/compute/v2/extensions/bootfromvolume/requests_test.go
+++ b/openstack/compute/v2/extensions/bootfromvolume/testing/requests_test.go
@@ -1,8 +1,9 @@
-package bootfromvolume
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 	th "github.com/gophercloud/gophercloud/testhelper"
 )
@@ -14,12 +15,12 @@
 		FlavorRef: "performance1-1",
 	}
 
-	ext := CreateOptsExt{
+	ext := bootfromvolume.CreateOptsExt{
 		CreateOptsBuilder: base,
-		BlockDevice: []BlockDevice{
-			BlockDevice{
+		BlockDevice: []bootfromvolume.BlockDevice{
+			{
 				UUID:                "123456",
-				SourceType:          Image,
+				SourceType:          bootfromvolume.Image,
 				DestinationType:     "volume",
 				VolumeSize:          10,
 				DeleteOnTermination: false,
@@ -58,30 +59,30 @@
 		FlavorRef: "performance1-1",
 	}
 
-	ext := CreateOptsExt{
+	ext := bootfromvolume.CreateOptsExt{
 		CreateOptsBuilder: base,
-		BlockDevice: []BlockDevice{
-			BlockDevice{
+		BlockDevice: []bootfromvolume.BlockDevice{
+			{
 				BootIndex:           0,
 				DeleteOnTermination: true,
 				DestinationType:     "local",
-				SourceType:          Image,
+				SourceType:          bootfromvolume.Image,
 				UUID:                "123456",
 			},
-			BlockDevice{
+			{
 				BootIndex:           -1,
 				DeleteOnTermination: true,
 				DestinationType:     "local",
 				GuestFormat:         "ext4",
-				SourceType:          Blank,
+				SourceType:          bootfromvolume.Blank,
 				VolumeSize:          1,
 			},
-			BlockDevice{
+			{
 				BootIndex:           -1,
 				DeleteOnTermination: true,
 				DestinationType:     "local",
 				GuestFormat:         "ext4",
-				SourceType:          Blank,
+				SourceType:          bootfromvolume.Blank,
 				VolumeSize:          1,
 			},
 		},
diff --git a/openstack/compute/v2/extensions/defsecrules/testing/doc.go b/openstack/compute/v2/extensions/defsecrules/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/defsecrules/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/defsecrules/fixtures.go b/openstack/compute/v2/extensions/defsecrules/testing/fixtures.go
similarity index 98%
rename from openstack/compute/v2/extensions/defsecrules/fixtures.go
rename to openstack/compute/v2/extensions/defsecrules/testing/fixtures.go
index 4fee896..e4a62d4 100644
--- a/openstack/compute/v2/extensions/defsecrules/fixtures.go
+++ b/openstack/compute/v2/extensions/defsecrules/testing/fixtures.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package defsecrules
+package testing
 
 import (
 	"fmt"
diff --git a/openstack/compute/v2/extensions/defsecrules/requests_test.go b/openstack/compute/v2/extensions/defsecrules/testing/requests_test.go
similarity index 71%
rename from openstack/compute/v2/extensions/defsecrules/requests_test.go
rename to openstack/compute/v2/extensions/defsecrules/testing/requests_test.go
index df568fe..1f2fb86 100644
--- a/openstack/compute/v2/extensions/defsecrules/requests_test.go
+++ b/openstack/compute/v2/extensions/defsecrules/testing/requests_test.go
@@ -1,8 +1,9 @@
-package defsecrules
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/defsecrules"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/secgroups"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
@@ -19,13 +20,13 @@
 
 	count := 0
 
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := defsecrules.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractDefaultRules(page)
+		actual, err := defsecrules.ExtractDefaultRules(page)
 		th.AssertNoErr(t, err)
 
-		expected := []DefaultRule{
-			DefaultRule{
+		expected := []defsecrules.DefaultRule{
+			{
 				FromPort:   80,
 				ID:         ruleID,
 				IPProtocol: "TCP",
@@ -49,17 +50,17 @@
 
 	mockCreateRuleResponse(t)
 
-	opts := CreateOpts{
+	opts := defsecrules.CreateOpts{
 		IPProtocol: "TCP",
 		FromPort:   80,
 		ToPort:     80,
 		CIDR:       "10.10.12.0/24",
 	}
 
-	group, err := Create(client.ServiceClient(), opts).Extract()
+	group, err := defsecrules.Create(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &DefaultRule{
+	expected := &defsecrules.DefaultRule{
 		ID:         ruleID,
 		FromPort:   80,
 		ToPort:     80,
@@ -75,17 +76,17 @@
 
 	mockCreateRuleResponseICMPZero(t)
 
-	opts := CreateOpts{
+	opts := defsecrules.CreateOpts{
 		IPProtocol: "ICMP",
 		FromPort:   0,
 		ToPort:     0,
 		CIDR:       "10.10.12.0/24",
 	}
 
-	group, err := Create(client.ServiceClient(), opts).Extract()
+	group, err := defsecrules.Create(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &DefaultRule{
+	expected := &defsecrules.DefaultRule{
 		ID:         ruleID,
 		FromPort:   0,
 		ToPort:     0,
@@ -101,10 +102,10 @@
 
 	mockGetRuleResponse(t, ruleID)
 
-	group, err := Get(client.ServiceClient(), ruleID).Extract()
+	group, err := defsecrules.Get(client.ServiceClient(), ruleID).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &DefaultRule{
+	expected := &defsecrules.DefaultRule{
 		ID:         ruleID,
 		FromPort:   80,
 		ToPort:     80,
@@ -121,6 +122,6 @@
 
 	mockDeleteRuleResponse(t, ruleID)
 
-	err := Delete(client.ServiceClient(), ruleID).ExtractErr()
+	err := defsecrules.Delete(client.ServiceClient(), ruleID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
diff --git a/openstack/compute/v2/extensions/delegate_test.go b/openstack/compute/v2/extensions/delegate_test.go
deleted file mode 100644
index 4c602ce..0000000
--- a/openstack/compute/v2/extensions/delegate_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package extensions
-
-import (
-	"fmt"
-	"net/http"
-	"testing"
-
-	common "github.com/gophercloud/gophercloud/openstack/common/extensions"
-	"github.com/gophercloud/gophercloud/pagination"
-	th "github.com/gophercloud/gophercloud/testhelper"
-	"github.com/gophercloud/gophercloud/testhelper/client"
-)
-
-func TestList(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-
-	th.Mux.HandleFunc("/extensions", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
-
-		w.Header().Add("Content-Type", "application/json")
-
-		fmt.Fprintf(w, `
-{
-		"extensions": [
-				{
-						"updated": "2013-01-20T00:00:00-00:00",
-						"name": "Neutron Service Type Management",
-						"links": [],
-						"namespace": "http://docs.openstack.org/ext/neutron/service-type/api/v1.0",
-						"alias": "service-type",
-						"description": "API for retrieving service providers for Neutron advanced services"
-				}
-		]
-}
-			`)
-	})
-
-	count := 0
-	List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
-		count++
-		actual, err := ExtractExtensions(page)
-		th.AssertNoErr(t, err)
-
-		expected := []common.Extension{
-			common.Extension{
-				Updated:     "2013-01-20T00:00:00-00:00",
-				Name:        "Neutron Service Type Management",
-				Links:       []interface{}{},
-				Namespace:   "http://docs.openstack.org/ext/neutron/service-type/api/v1.0",
-				Alias:       "service-type",
-				Description: "API for retrieving service providers for Neutron advanced services",
-			},
-		}
-		th.AssertDeepEquals(t, expected, actual)
-
-		return true, nil
-	})
-	th.CheckEquals(t, 1, count)
-}
-
-func TestGet(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-
-	th.Mux.HandleFunc("/extensions/agent", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
-
-		w.Header().Add("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
-
-		fmt.Fprintf(w, `
-{
-		"extension": {
-				"updated": "2013-02-03T10:00:00-00:00",
-				"name": "agent",
-				"links": [],
-				"namespace": "http://docs.openstack.org/ext/agent/api/v2.0",
-				"alias": "agent",
-				"description": "The agent management extension."
-		}
-}
-		`)
-	})
-
-	ext, err := Get(client.ServiceClient(), "agent").Extract()
-	th.AssertNoErr(t, err)
-
-	th.AssertEquals(t, ext.Updated, "2013-02-03T10:00:00-00:00")
-	th.AssertEquals(t, ext.Name, "agent")
-	th.AssertEquals(t, ext.Namespace, "http://docs.openstack.org/ext/agent/api/v2.0")
-	th.AssertEquals(t, ext.Alias, "agent")
-	th.AssertEquals(t, ext.Description, "The agent management extension.")
-}
diff --git a/openstack/compute/v2/extensions/diskconfig/testing/doc.go b/openstack/compute/v2/extensions/diskconfig/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/diskconfig/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/diskconfig/requests_test.go b/openstack/compute/v2/extensions/diskconfig/testing/requests_test.go
similarity index 81%
rename from openstack/compute/v2/extensions/diskconfig/requests_test.go
rename to openstack/compute/v2/extensions/diskconfig/testing/requests_test.go
index 2e3ae18..6ce560a 100644
--- a/openstack/compute/v2/extensions/diskconfig/requests_test.go
+++ b/openstack/compute/v2/extensions/diskconfig/testing/requests_test.go
@@ -1,8 +1,9 @@
-package diskconfig
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/diskconfig"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 	th "github.com/gophercloud/gophercloud/testhelper"
 )
@@ -14,9 +15,9 @@
 		FlavorRef: "performance1-1",
 	}
 
-	ext := CreateOptsExt{
+	ext := diskconfig.CreateOptsExt{
 		CreateOptsBuilder: base,
-		DiskConfig:        Manual,
+		DiskConfig:        diskconfig.Manual,
 	}
 
 	expected := `
@@ -41,9 +42,9 @@
 		ImageID:   "asdfasdfasdf",
 	}
 
-	ext := RebuildOptsExt{
+	ext := diskconfig.RebuildOptsExt{
 		RebuildOptsBuilder: base,
-		DiskConfig:         Auto,
+		DiskConfig:         diskconfig.Auto,
 	}
 
 	actual, err := ext.ToServerRebuildMap()
@@ -67,9 +68,9 @@
 		FlavorRef: "performance1-8",
 	}
 
-	ext := ResizeOptsExt{
+	ext := diskconfig.ResizeOptsExt{
 		ResizeOptsBuilder: base,
-		DiskConfig:        Auto,
+		DiskConfig:        diskconfig.Auto,
 	}
 
 	actual, err := ext.ToServerResizeMap()
diff --git a/openstack/compute/v2/extensions/floatingips/testing/doc.go b/openstack/compute/v2/extensions/floatingips/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/floatingips/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/floatingips/fixtures.go b/openstack/compute/v2/extensions/floatingips/testing/fixtures.go
similarity index 93%
rename from openstack/compute/v2/extensions/floatingips/fixtures.go
rename to openstack/compute/v2/extensions/floatingips/testing/fixtures.go
index b369ea2..e372606 100644
--- a/openstack/compute/v2/extensions/floatingips/fixtures.go
+++ b/openstack/compute/v2/extensions/floatingips/testing/fixtures.go
@@ -1,12 +1,11 @@
-// +build fixtures
-
-package floatingips
+package testing
 
 import (
 	"fmt"
 	"net/http"
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
@@ -60,14 +59,14 @@
 `
 
 // FirstFloatingIP is the first result in ListOutput.
-var FirstFloatingIP = FloatingIP{
+var FirstFloatingIP = floatingips.FloatingIP{
 	ID:   "1",
 	IP:   "10.10.10.1",
 	Pool: "nova",
 }
 
 // SecondFloatingIP is the first result in ListOutput.
-var SecondFloatingIP = FloatingIP{
+var SecondFloatingIP = floatingips.FloatingIP{
 	FixedIP:    "166.78.185.201",
 	ID:         "2",
 	InstanceID: "4d8c3732-a248-40ed-bebc-539a6ffd25c0",
@@ -77,10 +76,10 @@
 
 // ExpectedFloatingIPsSlice is the slice of results that should be parsed
 // from ListOutput, in the expected order.
-var ExpectedFloatingIPsSlice = []FloatingIP{FirstFloatingIP, SecondFloatingIP}
+var ExpectedFloatingIPsSlice = []floatingips.FloatingIP{FirstFloatingIP, SecondFloatingIP}
 
 // CreatedFloatingIP is the parsed result from CreateOutput.
-var CreatedFloatingIP = FloatingIP{
+var CreatedFloatingIP = floatingips.FloatingIP{
 	ID:   "1",
 	IP:   "10.10.10.1",
 	Pool: "nova",
diff --git a/openstack/compute/v2/extensions/floatingips/requests_test.go b/openstack/compute/v2/extensions/floatingips/testing/requests_test.go
similarity index 60%
rename from openstack/compute/v2/extensions/floatingips/requests_test.go
rename to openstack/compute/v2/extensions/floatingips/testing/requests_test.go
index f0e9560..e53da91 100644
--- a/openstack/compute/v2/extensions/floatingips/requests_test.go
+++ b/openstack/compute/v2/extensions/floatingips/testing/requests_test.go
@@ -1,8 +1,9 @@
-package floatingips
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -14,9 +15,9 @@
 	HandleListSuccessfully(t)
 
 	count := 0
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := floatingips.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractFloatingIPs(page)
+		actual, err := floatingips.ExtractFloatingIPs(page)
 		th.AssertNoErr(t, err)
 		th.CheckDeepEquals(t, ExpectedFloatingIPsSlice, actual)
 
@@ -31,7 +32,7 @@
 	defer th.TeardownHTTP()
 	HandleCreateSuccessfully(t)
 
-	actual, err := Create(client.ServiceClient(), CreateOpts{
+	actual, err := floatingips.Create(client.ServiceClient(), floatingips.CreateOpts{
 		Pool: "nova",
 	}).Extract()
 	th.AssertNoErr(t, err)
@@ -43,7 +44,7 @@
 	defer th.TeardownHTTP()
 	HandleGetSuccessfully(t)
 
-	actual, err := Get(client.ServiceClient(), "2").Extract()
+	actual, err := floatingips.Get(client.ServiceClient(), "2").Extract()
 	th.AssertNoErr(t, err)
 	th.CheckDeepEquals(t, &SecondFloatingIP, actual)
 }
@@ -53,7 +54,7 @@
 	defer th.TeardownHTTP()
 	HandleDeleteSuccessfully(t)
 
-	err := Delete(client.ServiceClient(), "1").ExtractErr()
+	err := floatingips.Delete(client.ServiceClient(), "1").ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -62,11 +63,11 @@
 	defer th.TeardownHTTP()
 	HandleAssociateSuccessfully(t)
 
-	associateOpts := AssociateOpts{
+	associateOpts := floatingips.AssociateOpts{
 		FloatingIP: "10.10.10.2",
 	}
 
-	err := AssociateInstance(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0", associateOpts).ExtractErr()
+	err := floatingips.AssociateInstance(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0", associateOpts).ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -75,12 +76,12 @@
 	defer th.TeardownHTTP()
 	HandleAssociateFixedSuccessfully(t)
 
-	associateOpts := AssociateOpts{
+	associateOpts := floatingips.AssociateOpts{
 		FloatingIP: "10.10.10.2",
 		FixedIP:    "166.78.185.201",
 	}
 
-	err := AssociateInstance(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0", associateOpts).ExtractErr()
+	err := floatingips.AssociateInstance(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0", associateOpts).ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -89,10 +90,10 @@
 	defer th.TeardownHTTP()
 	HandleDisassociateSuccessfully(t)
 
-	disassociateOpts := DisassociateOpts{
+	disassociateOpts := floatingips.DisassociateOpts{
 		FloatingIP: "10.10.10.2",
 	}
 
-	err := DisassociateInstance(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0", disassociateOpts).ExtractErr()
+	err := floatingips.DisassociateInstance(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0", disassociateOpts).ExtractErr()
 	th.AssertNoErr(t, err)
 }
diff --git a/openstack/compute/v2/extensions/keypairs/testing/doc.go b/openstack/compute/v2/extensions/keypairs/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/keypairs/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/keypairs/fixtures.go b/openstack/compute/v2/extensions/keypairs/testing/fixtures.go
similarity index 96%
rename from openstack/compute/v2/extensions/keypairs/fixtures.go
rename to openstack/compute/v2/extensions/keypairs/testing/fixtures.go
index 62c5db2..dc716d8 100644
--- a/openstack/compute/v2/extensions/keypairs/fixtures.go
+++ b/openstack/compute/v2/extensions/keypairs/testing/fixtures.go
@@ -1,12 +1,11 @@
-// +build fixtures
-
-package keypairs
+package testing
 
 import (
 	"fmt"
 	"net/http"
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
@@ -70,14 +69,14 @@
 `
 
 // FirstKeyPair is the first result in ListOutput.
-var FirstKeyPair = KeyPair{
+var FirstKeyPair = keypairs.KeyPair{
 	Name:        "firstkey",
 	Fingerprint: "15:b0:f8:b3:f9:48:63:71:cf:7b:5b:38:6d:44:2d:4a",
 	PublicKey:   "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC+Eo/RZRngaGTkFs7I62ZjsIlO79KklKbMXi8F+KITD4bVQHHn+kV+4gRgkgCRbdoDqoGfpaDFs877DYX9n4z6FrAIZ4PES8TNKhatifpn9NdQYWA+IkU8CuvlEKGuFpKRi/k7JLos/gHi2hy7QUwgtRvcefvD/vgQZOVw/mGR9Q== Generated by Nova\n",
 }
 
 // SecondKeyPair is the second result in ListOutput.
-var SecondKeyPair = KeyPair{
+var SecondKeyPair = keypairs.KeyPair{
 	Name:        "secondkey",
 	Fingerprint: "35:9d:d0:c3:4a:80:d3:d8:86:f1:ca:f7:df:c4:f9:d8",
 	PublicKey:   "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC9mC3WZN9UGLxgPBpP7H5jZMc6pKwOoSgre8yun6REFktn/Kz7DUt9jaR1UJyRzHxITfCfAIgSxPdGqB/oF1suMyWgu5i0625vavLB5z5kC8Hq3qZJ9zJO1poE1kyD+htiTtPWJ88e12xuH2XB/CZN9OpEiF98hAagiOE0EnOS5Q== Generated by Nova\n",
@@ -85,10 +84,10 @@
 
 // ExpectedKeyPairSlice is the slice of results that should be parsed from ListOutput, in the expected
 // order.
-var ExpectedKeyPairSlice = []KeyPair{FirstKeyPair, SecondKeyPair}
+var ExpectedKeyPairSlice = []keypairs.KeyPair{FirstKeyPair, SecondKeyPair}
 
 // CreatedKeyPair is the parsed result from CreatedOutput.
-var CreatedKeyPair = KeyPair{
+var CreatedKeyPair = keypairs.KeyPair{
 	Name:        "createdkey",
 	Fingerprint: "35:9d:d0:c3:4a:80:d3:d8:86:f1:ca:f7:df:c4:f9:d8",
 	PublicKey:   "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC9mC3WZN9UGLxgPBpP7H5jZMc6pKwOoSgre8yun6REFktn/Kz7DUt9jaR1UJyRzHxITfCfAIgSxPdGqB/oF1suMyWgu5i0625vavLB5z5kC8Hq3qZJ9zJO1poE1kyD+htiTtPWJ88e12xuH2XB/CZN9OpEiF98hAagiOE0EnOS5Q== Generated by Nova\n",
@@ -97,7 +96,7 @@
 }
 
 // ImportedKeyPair is the parsed result from ImportOutput.
-var ImportedKeyPair = KeyPair{
+var ImportedKeyPair = keypairs.KeyPair{
 	Name:        "importedkey",
 	Fingerprint: "1e:2c:9b:56:79:4b:45:77:f9:ca:7a:98:2c:b0:d5:3c",
 	PublicKey:   "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDx8nkQv/zgGgB4rMYmIf+6A4l6Rr+o/6lHBQdW5aYd44bd8JttDCE/F/pNRr0lRE+PiqSPO8nDPHw0010JeMH9gYgnnFlyY3/OcJ02RhIPyyxYpv9FhY+2YiUkpwFOcLImyrxEsYXpD/0d3ac30bNH6Sw9JD9UZHYcpSxsIbECHw== Generated by Nova",
diff --git a/openstack/compute/v2/extensions/keypairs/requests_test.go b/openstack/compute/v2/extensions/keypairs/testing/requests_test.go
similarity index 72%
rename from openstack/compute/v2/extensions/keypairs/requests_test.go
rename to openstack/compute/v2/extensions/keypairs/testing/requests_test.go
index 468e5ea..1e05e66 100644
--- a/openstack/compute/v2/extensions/keypairs/requests_test.go
+++ b/openstack/compute/v2/extensions/keypairs/testing/requests_test.go
@@ -1,8 +1,9 @@
-package keypairs
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -14,9 +15,9 @@
 	HandleListSuccessfully(t)
 
 	count := 0
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := keypairs.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractKeyPairs(page)
+		actual, err := keypairs.ExtractKeyPairs(page)
 		th.AssertNoErr(t, err)
 		th.CheckDeepEquals(t, ExpectedKeyPairSlice, actual)
 
@@ -31,7 +32,7 @@
 	defer th.TeardownHTTP()
 	HandleCreateSuccessfully(t)
 
-	actual, err := Create(client.ServiceClient(), CreateOpts{
+	actual, err := keypairs.Create(client.ServiceClient(), keypairs.CreateOpts{
 		Name: "createdkey",
 	}).Extract()
 	th.AssertNoErr(t, err)
@@ -43,7 +44,7 @@
 	defer th.TeardownHTTP()
 	HandleImportSuccessfully(t)
 
-	actual, err := Create(client.ServiceClient(), CreateOpts{
+	actual, err := keypairs.Create(client.ServiceClient(), keypairs.CreateOpts{
 		Name:      "importedkey",
 		PublicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDx8nkQv/zgGgB4rMYmIf+6A4l6Rr+o/6lHBQdW5aYd44bd8JttDCE/F/pNRr0lRE+PiqSPO8nDPHw0010JeMH9gYgnnFlyY3/OcJ02RhIPyyxYpv9FhY+2YiUkpwFOcLImyrxEsYXpD/0d3ac30bNH6Sw9JD9UZHYcpSxsIbECHw== Generated by Nova",
 	}).Extract()
@@ -56,7 +57,7 @@
 	defer th.TeardownHTTP()
 	HandleGetSuccessfully(t)
 
-	actual, err := Get(client.ServiceClient(), "firstkey").Extract()
+	actual, err := keypairs.Get(client.ServiceClient(), "firstkey").Extract()
 	th.AssertNoErr(t, err)
 	th.CheckDeepEquals(t, &FirstKeyPair, actual)
 }
@@ -66,6 +67,6 @@
 	defer th.TeardownHTTP()
 	HandleDeleteSuccessfully(t)
 
-	err := Delete(client.ServiceClient(), "deletedkey").ExtractErr()
+	err := keypairs.Delete(client.ServiceClient(), "deletedkey").ExtractErr()
 	th.AssertNoErr(t, err)
 }
diff --git a/openstack/compute/v2/extensions/networks/testing/doc.go b/openstack/compute/v2/extensions/networks/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/networks/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/networks/fixtures.go b/openstack/compute/v2/extensions/networks/testing/fixtures.go
similarity index 95%
rename from openstack/compute/v2/extensions/networks/fixtures.go
rename to openstack/compute/v2/extensions/networks/testing/fixtures.go
index ffa4282..e2fa49b 100644
--- a/openstack/compute/v2/extensions/networks/fixtures.go
+++ b/openstack/compute/v2/extensions/networks/testing/fixtures.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package networks
+package testing
 
 import (
 	"fmt"
@@ -9,6 +7,7 @@
 	"time"
 
 	"github.com/gophercloud/gophercloud"
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/networks"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
@@ -114,7 +113,7 @@
 
 // FirstNetwork is the first result in ListOutput.
 var nilTime time.Time
-var FirstNetwork = Network{
+var FirstNetwork = networks.Network{
 	Bridge:            "br100",
 	BridgeInterface:   "eth0",
 	Broadcast:         "10.0.0.7",
@@ -146,7 +145,7 @@
 }
 
 // SecondNetwork is the second result in ListOutput.
-var SecondNetwork = Network{
+var SecondNetwork = networks.Network{
 	Bridge:            "br101",
 	BridgeInterface:   "eth0",
 	Broadcast:         "10.0.0.15",
@@ -179,7 +178,7 @@
 
 // ExpectedNetworkSlice is the slice of results that should be parsed
 // from ListOutput, in the expected order.
-var ExpectedNetworkSlice = []Network{FirstNetwork, SecondNetwork}
+var ExpectedNetworkSlice = []networks.Network{FirstNetwork, SecondNetwork}
 
 // HandleListSuccessfully configures the test server to respond to a List request.
 func HandleListSuccessfully(t *testing.T) {
diff --git a/openstack/compute/v2/extensions/networks/requests_test.go b/openstack/compute/v2/extensions/networks/testing/requests_test.go
similarity index 64%
rename from openstack/compute/v2/extensions/networks/requests_test.go
rename to openstack/compute/v2/extensions/networks/testing/requests_test.go
index 3afc5d5..36b5463 100644
--- a/openstack/compute/v2/extensions/networks/requests_test.go
+++ b/openstack/compute/v2/extensions/networks/testing/requests_test.go
@@ -1,8 +1,9 @@
-package networks
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/networks"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -14,9 +15,9 @@
 	HandleListSuccessfully(t)
 
 	count := 0
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := networks.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractNetworks(page)
+		actual, err := networks.ExtractNetworks(page)
 		th.AssertNoErr(t, err)
 		th.CheckDeepEquals(t, ExpectedNetworkSlice, actual)
 
@@ -31,7 +32,7 @@
 	defer th.TeardownHTTP()
 	HandleGetSuccessfully(t)
 
-	actual, err := Get(client.ServiceClient(), "20c8acc0-f747-4d71-a389-46d078ebf000").Extract()
+	actual, err := networks.Get(client.ServiceClient(), "20c8acc0-f747-4d71-a389-46d078ebf000").Extract()
 	th.AssertNoErr(t, err)
 	th.CheckDeepEquals(t, &SecondNetwork, actual)
 }
diff --git a/openstack/compute/v2/extensions/quotasets/requests.go b/openstack/compute/v2/extensions/quotasets/requests.go
index 52f0839..76beb17 100644
--- a/openstack/compute/v2/extensions/quotasets/requests.go
+++ b/openstack/compute/v2/extensions/quotasets/requests.go
@@ -1,7 +1,7 @@
 package quotasets
 
 import (
-	"github.com/rackspace/gophercloud"
+	"github.com/gophercloud/gophercloud"
 )
 
 // Get returns public data about a previously created QuotaSet.
diff --git a/openstack/compute/v2/extensions/quotasets/requests_test.go b/openstack/compute/v2/extensions/quotasets/requests_test.go
deleted file mode 100644
index 5d766fa..0000000
--- a/openstack/compute/v2/extensions/quotasets/requests_test.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package quotasets
-
-import (
-	th "github.com/rackspace/gophercloud/testhelper"
-	"github.com/rackspace/gophercloud/testhelper/client"
-	"testing"
-)
-
-func TestGet(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-	HandleGetSuccessfully(t)
-	actual, err := Get(client.ServiceClient(), FirstTenantID).Extract()
-	th.AssertNoErr(t, err)
-	th.CheckDeepEquals(t, &FirstQuotaSet, actual)
-}
diff --git a/openstack/compute/v2/extensions/quotasets/results.go b/openstack/compute/v2/extensions/quotasets/results.go
index cbf4d6b..f6c4e5a 100644
--- a/openstack/compute/v2/extensions/quotasets/results.go
+++ b/openstack/compute/v2/extensions/quotasets/results.go
@@ -1,39 +1,38 @@
 package quotasets
 
 import (
-	"github.com/mitchellh/mapstructure"
-	"github.com/rackspace/gophercloud"
-	"github.com/rackspace/gophercloud/pagination"
+	"github.com/gophercloud/gophercloud"
+	"github.com/gophercloud/gophercloud/pagination"
 )
 
 // QuotaSet is a set of operational limits that allow for control of compute usage.
 type QuotaSet struct {
 	//ID is tenant associated with this quota_set
-	ID string `mapstructure:"id"`
+	ID string `json:"id"`
 	//FixedIps is number of fixed ips alloted this quota_set
-	FixedIps int `mapstructure:"fixed_ips"`
+	FixedIps int `json:"fixed_ips"`
 	// FloatingIps is number of floating ips alloted this quota_set
-	FloatingIps int `mapstructure:"floating_ips"`
+	FloatingIps int `json:"floating_ips"`
 	// InjectedFileContentBytes is content bytes allowed for each injected file
-	InjectedFileContentBytes int `mapstructure:"injected_file_content_bytes"`
+	InjectedFileContentBytes int `json:"injected_file_content_bytes"`
 	// InjectedFilePathBytes is allowed bytes for each injected file path
-	InjectedFilePathBytes int `mapstructure:"injected_file_path_bytes"`
+	InjectedFilePathBytes int `json:"injected_file_path_bytes"`
 	// InjectedFiles is injected files allowed for each project
-	InjectedFiles int `mapstructure:"injected_files"`
+	InjectedFiles int `json:"injected_files"`
 	// KeyPairs is number of ssh keypairs
-	KeyPairs int `mapstructure:"keypairs"`
+	KeyPairs int `json:"keypairs"`
 	// MetadataItems is number of metadata items allowed for each instance
-	MetadataItems int `mapstructure:"metadata_items"`
+	MetadataItems int `json:"metadata_items"`
 	// Ram is megabytes allowed for each instance
-	Ram int `mapstructure:"ram"`
+	Ram int `json:"ram"`
 	// SecurityGroupRules is rules allowed for each security group
-	SecurityGroupRules int `mapstructure:"security_group_rules"`
+	SecurityGroupRules int `json:"security_group_rules"`
 	// SecurityGroups security groups allowed for each project
-	SecurityGroups int `mapstructure:"security_groups"`
+	SecurityGroups int `json:"security_groups"`
 	// Cores is number of instance cores allowed for each project
-	Cores int `mapstructure:"cores"`
+	Cores int `json:"cores"`
 	// Instances is number of instances allowed for each project
-	Instances int `mapstructure:"instances"`
+	Instances int `json:"instances"`
 }
 
 // QuotaSetPage stores a single, only page of QuotaSet results from a List call.
@@ -48,17 +47,12 @@
 }
 
 // ExtractQuotaSets interprets a page of results as a slice of QuotaSets.
-func ExtractQuotaSets(page pagination.Page) ([]QuotaSet, error) {
-	var resp struct {
-		QuotaSets []QuotaSet `mapstructure:"quotas"`
+func ExtractQuotaSets(r pagination.Page) ([]QuotaSet, error) {
+	var s struct {
+		QuotaSets []QuotaSet `json:"quotas"`
 	}
-
-	err := mapstructure.Decode(page.(QuotaSetPage).Body, &resp)
-	results := make([]QuotaSet, len(resp.QuotaSets))
-	for i, q := range resp.QuotaSets {
-		results[i] = q
-	}
-	return results, err
+	err := (r.(QuotaSetPage)).ExtractInto(&s)
+	return s.QuotaSets, err
 }
 
 type quotaResult struct {
@@ -67,16 +61,11 @@
 
 // Extract is a method that attempts to interpret any QuotaSet resource response as a QuotaSet struct.
 func (r quotaResult) Extract() (*QuotaSet, error) {
-	if r.Err != nil {
-		return nil, r.Err
+	var s struct {
+		QuotaSet *QuotaSet `json:"quota_set"`
 	}
-
-	var res struct {
-		QuotaSet *QuotaSet `json:"quota_set" mapstructure:"quota_set"`
-	}
-
-	err := mapstructure.Decode(r.Body, &res)
-	return res.QuotaSet, err
+	err := r.ExtractInto(&s)
+	return s.QuotaSet, err
 }
 
 // GetResult is the response from a Get operation. Call its Extract method to interpret it
diff --git a/openstack/compute/v2/extensions/quotasets/testing/doc.go b/openstack/compute/v2/extensions/quotasets/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/quotasets/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/quotasets/fixtures.go b/openstack/compute/v2/extensions/quotasets/testing/fixtures.go
similarity index 84%
rename from openstack/compute/v2/extensions/quotasets/fixtures.go
rename to openstack/compute/v2/extensions/quotasets/testing/fixtures.go
index c1bb4ea..3fef872 100644
--- a/openstack/compute/v2/extensions/quotasets/fixtures.go
+++ b/openstack/compute/v2/extensions/quotasets/testing/fixtures.go
@@ -1,14 +1,13 @@
-// +build fixtures
-
-package quotasets
+package testing
 
 import (
 	"fmt"
 	"net/http"
 	"testing"
 
-	th "github.com/rackspace/gophercloud/testhelper"
-	"github.com/rackspace/gophercloud/testhelper/client"
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/quotasets"
+	th "github.com/gophercloud/gophercloud/testhelper"
+	"github.com/gophercloud/gophercloud/testhelper/client"
 )
 
 // GetOutput is a sample response to a Get call.
@@ -32,7 +31,7 @@
 const FirstTenantID = "555544443333222211110000ffffeeee"
 
 // FirstQuotaSet is the first result in ListOutput.
-var FirstQuotaSet = QuotaSet{
+var FirstQuotaSet = quotasets.QuotaSet{
 	FixedIps:                 0,
 	FloatingIps:              0,
 	InjectedFileContentBytes: 10240,
diff --git a/openstack/compute/v2/extensions/quotasets/testing/requests_test.go b/openstack/compute/v2/extensions/quotasets/testing/requests_test.go
new file mode 100644
index 0000000..8fc1fd4
--- /dev/null
+++ b/openstack/compute/v2/extensions/quotasets/testing/requests_test.go
@@ -0,0 +1,18 @@
+package testing
+
+import (
+	"testing"
+
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/quotasets"
+	th "github.com/gophercloud/gophercloud/testhelper"
+	"github.com/gophercloud/gophercloud/testhelper/client"
+)
+
+func TestGet(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+	HandleGetSuccessfully(t)
+	actual, err := quotasets.Get(client.ServiceClient(), FirstTenantID).Extract()
+	th.AssertNoErr(t, err)
+	th.CheckDeepEquals(t, &FirstQuotaSet, actual)
+}
diff --git a/openstack/compute/v2/extensions/quotasets/urls.go b/openstack/compute/v2/extensions/quotasets/urls.go
index c04d941..e910376 100644
--- a/openstack/compute/v2/extensions/quotasets/urls.go
+++ b/openstack/compute/v2/extensions/quotasets/urls.go
@@ -1,6 +1,6 @@
 package quotasets
 
-import "github.com/rackspace/gophercloud"
+import "github.com/gophercloud/gophercloud"
 
 const resourcePath = "os-quota-sets"
 
diff --git a/openstack/compute/v2/extensions/quotasets/urls_test.go b/openstack/compute/v2/extensions/quotasets/urls_test.go
deleted file mode 100644
index f19a6ad..0000000
--- a/openstack/compute/v2/extensions/quotasets/urls_test.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package quotasets
-
-import (
-	"testing"
-
-	th "github.com/rackspace/gophercloud/testhelper"
-	"github.com/rackspace/gophercloud/testhelper/client"
-)
-
-func TestGetURL(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-	c := client.ServiceClient()
-
-	th.CheckEquals(t, c.Endpoint+"os-quota-sets/wat", getURL(c, "wat"))
-}
diff --git a/openstack/compute/v2/extensions/schedulerhints/testing/doc.go b/openstack/compute/v2/extensions/schedulerhints/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/schedulerhints/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/schedulerhints/requests_test.go b/openstack/compute/v2/extensions/schedulerhints/testing/requests_test.go
similarity index 91%
rename from openstack/compute/v2/extensions/schedulerhints/requests_test.go
rename to openstack/compute/v2/extensions/schedulerhints/testing/requests_test.go
index 605b72b..cf21c4e 100644
--- a/openstack/compute/v2/extensions/schedulerhints/requests_test.go
+++ b/openstack/compute/v2/extensions/schedulerhints/testing/requests_test.go
@@ -1,8 +1,9 @@
-package schedulerhints
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/schedulerhints"
 	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 	th "github.com/gophercloud/gophercloud/testhelper"
 )
@@ -14,7 +15,7 @@
 		FlavorRef: "performance1-1",
 	}
 
-	schedulerHints := SchedulerHints{
+	schedulerHints := schedulerhints.SchedulerHints{
 		Group: "101aed42-22d9-4a3e-9ba1-21103b0d1aba",
 		DifferentHost: []string{
 			"a0cf03a5-d921-4877-bb5c-86d26cf818e1",
@@ -29,7 +30,7 @@
 		BuildNearHostIP: "192.168.1.1/24",
 	}
 
-	ext := CreateOptsExt{
+	ext := schedulerhints.CreateOptsExt{
 		CreateOptsBuilder: base,
 		SchedulerHints:    schedulerHints,
 	}
@@ -72,7 +73,7 @@
 		FlavorRef: "performance1-1",
 	}
 
-	schedulerHints := SchedulerHints{
+	schedulerHints := schedulerhints.SchedulerHints{
 		Group: "101aed42-22d9-4a3e-9ba1-21103b0d1aba",
 		DifferentHost: []string{
 			"a0cf03a5-d921-4877-bb5c-86d26cf818e1",
@@ -87,7 +88,7 @@
 		BuildNearHostIP: "192.168.1.1/24",
 	}
 
-	ext := CreateOptsExt{
+	ext := schedulerhints.CreateOptsExt{
 		CreateOptsBuilder: base,
 		SchedulerHints:    schedulerHints,
 	}
diff --git a/openstack/compute/v2/extensions/secgroups/testing/doc.go b/openstack/compute/v2/extensions/secgroups/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/secgroups/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/secgroups/fixtures.go b/openstack/compute/v2/extensions/secgroups/testing/fixtures.go
similarity index 99%
rename from openstack/compute/v2/extensions/secgroups/fixtures.go
rename to openstack/compute/v2/extensions/secgroups/testing/fixtures.go
index e4ca587..8a83ca8 100644
--- a/openstack/compute/v2/extensions/secgroups/fixtures.go
+++ b/openstack/compute/v2/extensions/secgroups/testing/fixtures.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package secgroups
+package testing
 
 import (
 	"fmt"
diff --git a/openstack/compute/v2/extensions/secgroups/requests_test.go b/openstack/compute/v2/extensions/secgroups/testing/requests_test.go
similarity index 65%
rename from openstack/compute/v2/extensions/secgroups/requests_test.go
rename to openstack/compute/v2/extensions/secgroups/testing/requests_test.go
index bdbedcd..b7ffa20 100644
--- a/openstack/compute/v2/extensions/secgroups/requests_test.go
+++ b/openstack/compute/v2/extensions/secgroups/testing/requests_test.go
@@ -1,8 +1,9 @@
-package secgroups
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/secgroups"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -22,20 +23,20 @@
 
 	count := 0
 
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := secgroups.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractSecurityGroups(page)
+		actual, err := secgroups.ExtractSecurityGroups(page)
 		if err != nil {
 			t.Errorf("Failed to extract users: %v", err)
 			return false, err
 		}
 
-		expected := []SecurityGroup{
-			SecurityGroup{
+		expected := []secgroups.SecurityGroup{
+			{
 				ID:          groupID,
 				Description: "default",
 				Name:        "default",
-				Rules:       []Rule{},
+				Rules:       []secgroups.Rule{},
 				TenantID:    "openstack",
 			},
 		}
@@ -57,20 +58,20 @@
 
 	count := 0
 
-	err := ListByServer(client.ServiceClient(), serverID).EachPage(func(page pagination.Page) (bool, error) {
+	err := secgroups.ListByServer(client.ServiceClient(), serverID).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractSecurityGroups(page)
+		actual, err := secgroups.ExtractSecurityGroups(page)
 		if err != nil {
 			t.Errorf("Failed to extract users: %v", err)
 			return false, err
 		}
 
-		expected := []SecurityGroup{
-			SecurityGroup{
+		expected := []secgroups.SecurityGroup{
+			{
 				ID:          groupID,
 				Description: "default",
 				Name:        "default",
-				Rules:       []Rule{},
+				Rules:       []secgroups.Rule{},
 				TenantID:    "openstack",
 			},
 		}
@@ -90,20 +91,20 @@
 
 	mockCreateGroupResponse(t)
 
-	opts := CreateOpts{
+	opts := secgroups.CreateOpts{
 		Name:        "test",
 		Description: "something",
 	}
 
-	group, err := Create(client.ServiceClient(), opts).Extract()
+	group, err := secgroups.Create(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{
+	expected := &secgroups.SecurityGroup{
 		ID:          groupID,
 		Name:        "test",
 		Description: "something",
 		TenantID:    "openstack",
-		Rules:       []Rule{},
+		Rules:       []secgroups.Rule{},
 	}
 	th.AssertDeepEquals(t, expected, group)
 }
@@ -114,20 +115,20 @@
 
 	mockUpdateGroupResponse(t, groupID)
 
-	opts := UpdateOpts{
+	opts := secgroups.UpdateOpts{
 		Name:        "new_name",
 		Description: "new_desc",
 	}
 
-	group, err := Update(client.ServiceClient(), groupID, opts).Extract()
+	group, err := secgroups.Update(client.ServiceClient(), groupID, opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{
+	expected := &secgroups.SecurityGroup{
 		ID:          groupID,
 		Name:        "new_name",
 		Description: "something",
 		TenantID:    "openstack",
-		Rules:       []Rule{},
+		Rules:       []secgroups.Rule{},
 	}
 	th.AssertDeepEquals(t, expected, group)
 }
@@ -138,21 +139,21 @@
 
 	mockGetGroupsResponse(t, groupID)
 
-	group, err := Get(client.ServiceClient(), groupID).Extract()
+	group, err := secgroups.Get(client.ServiceClient(), groupID).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{
+	expected := &secgroups.SecurityGroup{
 		ID:          groupID,
 		Description: "default",
 		Name:        "default",
 		TenantID:    "openstack",
-		Rules: []Rule{
-			Rule{
+		Rules: []secgroups.Rule{
+			{
 				FromPort:      80,
 				ToPort:        85,
 				IPProtocol:    "TCP",
-				IPRange:       IPRange{CIDR: "0.0.0.0"},
-				Group:         Group{TenantID: "openstack", Name: "default"},
+				IPRange:       secgroups.IPRange{CIDR: "0.0.0.0"},
+				Group:         secgroups.Group{TenantID: "openstack", Name: "default"},
 				ParentGroupID: groupID,
 				ID:            ruleID,
 			},
@@ -170,10 +171,10 @@
 
 	mockGetNumericIDGroupResponse(t, numericGroupID)
 
-	group, err := Get(client.ServiceClient(), "12345").Extract()
+	group, err := secgroups.Get(client.ServiceClient(), "12345").Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{ID: "12345"}
+	expected := &secgroups.SecurityGroup{ID: "12345"}
 	th.AssertDeepEquals(t, expected, group)
 }
 
@@ -183,7 +184,7 @@
 
 	mockDeleteGroupResponse(t, groupID)
 
-	err := Delete(client.ServiceClient(), groupID).ExtractErr()
+	err := secgroups.Delete(client.ServiceClient(), groupID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -193,7 +194,7 @@
 
 	mockAddRuleResponse(t)
 
-	opts := CreateRuleOpts{
+	opts := secgroups.CreateRuleOpts{
 		ParentGroupID: groupID,
 		FromPort:      22,
 		ToPort:        22,
@@ -201,16 +202,16 @@
 		CIDR:          "0.0.0.0/0",
 	}
 
-	rule, err := CreateRule(client.ServiceClient(), opts).Extract()
+	rule, err := secgroups.CreateRule(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &Rule{
+	expected := &secgroups.Rule{
 		FromPort:      22,
 		ToPort:        22,
-		Group:         Group{},
+		Group:         secgroups.Group{},
 		IPProtocol:    "TCP",
 		ParentGroupID: groupID,
-		IPRange:       IPRange{CIDR: "0.0.0.0/0"},
+		IPRange:       secgroups.IPRange{CIDR: "0.0.0.0/0"},
 		ID:            ruleID,
 	}
 
@@ -223,7 +224,7 @@
 
 	mockAddRuleResponseICMPZero(t)
 
-	opts := CreateRuleOpts{
+	opts := secgroups.CreateRuleOpts{
 		ParentGroupID: groupID,
 		FromPort:      0,
 		ToPort:        0,
@@ -231,16 +232,16 @@
 		CIDR:          "0.0.0.0/0",
 	}
 
-	rule, err := CreateRule(client.ServiceClient(), opts).Extract()
+	rule, err := secgroups.CreateRule(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &Rule{
+	expected := &secgroups.Rule{
 		FromPort:      0,
 		ToPort:        0,
-		Group:         Group{},
+		Group:         secgroups.Group{},
 		IPProtocol:    "ICMP",
 		ParentGroupID: groupID,
-		IPRange:       IPRange{CIDR: "0.0.0.0/0"},
+		IPRange:       secgroups.IPRange{CIDR: "0.0.0.0/0"},
 		ID:            ruleID,
 	}
 
@@ -253,7 +254,7 @@
 
 	mockDeleteRuleResponse(t, ruleID)
 
-	err := DeleteRule(client.ServiceClient(), ruleID).ExtractErr()
+	err := secgroups.DeleteRule(client.ServiceClient(), ruleID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -263,7 +264,7 @@
 
 	mockAddServerToGroupResponse(t, serverID)
 
-	err := AddServer(client.ServiceClient(), serverID, "test").ExtractErr()
+	err := secgroups.AddServer(client.ServiceClient(), serverID, "test").ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -273,6 +274,6 @@
 
 	mockRemoveServerFromGroupResponse(t, serverID)
 
-	err := RemoveServer(client.ServiceClient(), serverID, "test").ExtractErr()
+	err := secgroups.RemoveServer(client.ServiceClient(), serverID, "test").ExtractErr()
 	th.AssertNoErr(t, err)
 }
diff --git a/openstack/compute/v2/extensions/servergroups/testing/doc.go b/openstack/compute/v2/extensions/servergroups/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/servergroups/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/servergroups/fixtures.go b/openstack/compute/v2/extensions/servergroups/testing/fixtures.go
similarity index 91%
rename from openstack/compute/v2/extensions/servergroups/fixtures.go
rename to openstack/compute/v2/extensions/servergroups/testing/fixtures.go
index 003e9aa..b53757a 100644
--- a/openstack/compute/v2/extensions/servergroups/fixtures.go
+++ b/openstack/compute/v2/extensions/servergroups/testing/fixtures.go
@@ -1,12 +1,11 @@
-// +build fixtures
-
-package servergroups
+package testing
 
 import (
 	"fmt"
 	"net/http"
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
@@ -68,7 +67,7 @@
 `
 
 // FirstServerGroup is the first result in ListOutput.
-var FirstServerGroup = ServerGroup{
+var FirstServerGroup = servergroups.ServerGroup{
 	ID:   "616fb98f-46ca-475e-917e-2563e5a8cd19",
 	Name: "test",
 	Policies: []string{
@@ -79,7 +78,7 @@
 }
 
 // SecondServerGroup is the second result in ListOutput.
-var SecondServerGroup = ServerGroup{
+var SecondServerGroup = servergroups.ServerGroup{
 	ID:   "4d8c3732-a248-40ed-bebc-539a6ffd25c0",
 	Name: "test2",
 	Policies: []string{
@@ -91,10 +90,10 @@
 
 // ExpectedServerGroupSlice is the slice of results that should be parsed
 // from ListOutput, in the expected order.
-var ExpectedServerGroupSlice = []ServerGroup{FirstServerGroup, SecondServerGroup}
+var ExpectedServerGroupSlice = []servergroups.ServerGroup{FirstServerGroup, SecondServerGroup}
 
 // CreatedServerGroup is the parsed result from CreateOutput.
-var CreatedServerGroup = ServerGroup{
+var CreatedServerGroup = servergroups.ServerGroup{
 	ID:   "616fb98f-46ca-475e-917e-2563e5a8cd19",
 	Name: "test",
 	Policies: []string{
diff --git a/openstack/compute/v2/extensions/servergroups/requests_test.go b/openstack/compute/v2/extensions/servergroups/testing/requests_test.go
similarity index 64%
rename from openstack/compute/v2/extensions/servergroups/requests_test.go
rename to openstack/compute/v2/extensions/servergroups/testing/requests_test.go
index 458526a..d86fa56 100644
--- a/openstack/compute/v2/extensions/servergroups/requests_test.go
+++ b/openstack/compute/v2/extensions/servergroups/testing/requests_test.go
@@ -1,8 +1,9 @@
-package servergroups
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -14,9 +15,9 @@
 	HandleListSuccessfully(t)
 
 	count := 0
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := servergroups.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractServerGroups(page)
+		actual, err := servergroups.ExtractServerGroups(page)
 		th.AssertNoErr(t, err)
 		th.CheckDeepEquals(t, ExpectedServerGroupSlice, actual)
 
@@ -31,7 +32,7 @@
 	defer th.TeardownHTTP()
 	HandleCreateSuccessfully(t)
 
-	actual, err := Create(client.ServiceClient(), CreateOpts{
+	actual, err := servergroups.Create(client.ServiceClient(), servergroups.CreateOpts{
 		Name:     "test",
 		Policies: []string{"anti-affinity"},
 	}).Extract()
@@ -44,7 +45,7 @@
 	defer th.TeardownHTTP()
 	HandleGetSuccessfully(t)
 
-	actual, err := Get(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0").Extract()
+	actual, err := servergroups.Get(client.ServiceClient(), "4d8c3732-a248-40ed-bebc-539a6ffd25c0").Extract()
 	th.AssertNoErr(t, err)
 	th.CheckDeepEquals(t, &FirstServerGroup, actual)
 }
@@ -54,6 +55,6 @@
 	defer th.TeardownHTTP()
 	HandleDeleteSuccessfully(t)
 
-	err := Delete(client.ServiceClient(), "616fb98f-46ca-475e-917e-2563e5a8cd19").ExtractErr()
+	err := servergroups.Delete(client.ServiceClient(), "616fb98f-46ca-475e-917e-2563e5a8cd19").ExtractErr()
 	th.AssertNoErr(t, err)
 }
diff --git a/openstack/compute/v2/extensions/startstop/testing/doc.go b/openstack/compute/v2/extensions/startstop/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/startstop/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/startstop/fixtures.go b/openstack/compute/v2/extensions/startstop/testing/fixtures.go
similarity index 95%
rename from openstack/compute/v2/extensions/startstop/fixtures.go
rename to openstack/compute/v2/extensions/startstop/testing/fixtures.go
index c5b4290..1086b0e 100644
--- a/openstack/compute/v2/extensions/startstop/fixtures.go
+++ b/openstack/compute/v2/extensions/startstop/testing/fixtures.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package startstop
+package testing
 
 import (
 	"net/http"
diff --git a/openstack/compute/v2/extensions/startstop/requests_test.go b/openstack/compute/v2/extensions/startstop/testing/requests_test.go
similarity index 65%
rename from openstack/compute/v2/extensions/startstop/requests_test.go
rename to openstack/compute/v2/extensions/startstop/testing/requests_test.go
index c7e26ae..be45bf5 100644
--- a/openstack/compute/v2/extensions/startstop/requests_test.go
+++ b/openstack/compute/v2/extensions/startstop/testing/requests_test.go
@@ -1,8 +1,9 @@
-package startstop
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/startstop"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
@@ -15,7 +16,7 @@
 
 	mockStartServerResponse(t, serverID)
 
-	err := Start(client.ServiceClient(), serverID).ExtractErr()
+	err := startstop.Start(client.ServiceClient(), serverID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -25,6 +26,6 @@
 
 	mockStopServerResponse(t, serverID)
 
-	err := Stop(client.ServiceClient(), serverID).ExtractErr()
+	err := startstop.Stop(client.ServiceClient(), serverID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
diff --git a/openstack/compute/v2/extensions/tenantnetworks/requests_test.go b/openstack/compute/v2/extensions/tenantnetworks/requests_test.go
deleted file mode 100644
index e8726c4..0000000
--- a/openstack/compute/v2/extensions/tenantnetworks/requests_test.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package tenantnetworks
-
-import (
-	"testing"
-
-	"github.com/gophercloud/gophercloud/pagination"
-	th "github.com/gophercloud/gophercloud/testhelper"
-	"github.com/gophercloud/gophercloud/testhelper/client"
-)
-
-func TestList(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-	HandleListSuccessfully(t)
-
-	count := 0
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
-		count++
-		actual, err := ExtractNetworks(page)
-		th.AssertNoErr(t, err)
-		th.CheckDeepEquals(t, ExpectedNetworkSlice, actual)
-
-		return true, nil
-	})
-	th.AssertNoErr(t, err)
-	th.CheckEquals(t, 1, count)
-}
-
-func TestGet(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-	HandleGetSuccessfully(t)
-
-	actual, err := Get(client.ServiceClient(), "20c8acc0-f747-4d71-a389-46d078ebf000").Extract()
-	th.AssertNoErr(t, err)
-	th.CheckDeepEquals(t, &SecondNetwork, actual)
-}
diff --git a/openstack/compute/v2/extensions/tenantnetworks/testing/doc.go b/openstack/compute/v2/extensions/tenantnetworks/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/tenantnetworks/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/tenantnetworks/fixtures.go b/openstack/compute/v2/extensions/tenantnetworks/testing/fixtures.go
similarity index 87%
rename from openstack/compute/v2/extensions/tenantnetworks/fixtures.go
rename to openstack/compute/v2/extensions/tenantnetworks/testing/fixtures.go
index 52fa013..ae679b4 100644
--- a/openstack/compute/v2/extensions/tenantnetworks/fixtures.go
+++ b/openstack/compute/v2/extensions/tenantnetworks/testing/fixtures.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package tenantnetworks
+package testing
 
 import (
 	"fmt"
@@ -8,6 +6,7 @@
 	"testing"
 	"time"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/tenantnetworks"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
@@ -43,14 +42,14 @@
 
 // FirstNetwork is the first result in ListOutput.
 var nilTime time.Time
-var FirstNetwork = Network{
+var FirstNetwork = tenantnetworks.Network{
 	CIDR: "10.0.0.0/29",
 	ID:   "20c8acc0-f747-4d71-a389-46d078ebf047",
 	Name: "mynet_0",
 }
 
 // SecondNetwork is the second result in ListOutput.
-var SecondNetwork = Network{
+var SecondNetwork = tenantnetworks.Network{
 	CIDR: "10.0.0.10/29",
 	ID:   "20c8acc0-f747-4d71-a389-46d078ebf000",
 	Name: "mynet_1",
@@ -58,7 +57,7 @@
 
 // ExpectedNetworkSlice is the slice of results that should be parsed
 // from ListOutput, in the expected order.
-var ExpectedNetworkSlice = []Network{FirstNetwork, SecondNetwork}
+var ExpectedNetworkSlice = []tenantnetworks.Network{FirstNetwork, SecondNetwork}
 
 // HandleListSuccessfully configures the test server to respond to a List request.
 func HandleListSuccessfully(t *testing.T) {
diff --git a/openstack/compute/v2/extensions/networks/requests_test.go b/openstack/compute/v2/extensions/tenantnetworks/testing/requests_test.go
similarity index 63%
copy from openstack/compute/v2/extensions/networks/requests_test.go
copy to openstack/compute/v2/extensions/tenantnetworks/testing/requests_test.go
index 3afc5d5..703c846 100644
--- a/openstack/compute/v2/extensions/networks/requests_test.go
+++ b/openstack/compute/v2/extensions/tenantnetworks/testing/requests_test.go
@@ -1,8 +1,9 @@
-package networks
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/tenantnetworks"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -14,9 +15,9 @@
 	HandleListSuccessfully(t)
 
 	count := 0
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := tenantnetworks.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractNetworks(page)
+		actual, err := tenantnetworks.ExtractNetworks(page)
 		th.AssertNoErr(t, err)
 		th.CheckDeepEquals(t, ExpectedNetworkSlice, actual)
 
@@ -31,7 +32,7 @@
 	defer th.TeardownHTTP()
 	HandleGetSuccessfully(t)
 
-	actual, err := Get(client.ServiceClient(), "20c8acc0-f747-4d71-a389-46d078ebf000").Extract()
+	actual, err := tenantnetworks.Get(client.ServiceClient(), "20c8acc0-f747-4d71-a389-46d078ebf000").Extract()
 	th.AssertNoErr(t, err)
 	th.CheckDeepEquals(t, &SecondNetwork, actual)
 }
diff --git a/openstack/compute/v2/extensions/testing/delegate_test.go b/openstack/compute/v2/extensions/testing/delegate_test.go
new file mode 100644
index 0000000..822093f
--- /dev/null
+++ b/openstack/compute/v2/extensions/testing/delegate_test.go
@@ -0,0 +1,56 @@
+package testing
+
+import (
+	"testing"
+
+	common "github.com/gophercloud/gophercloud/openstack/common/extensions"
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions"
+	"github.com/gophercloud/gophercloud/pagination"
+	th "github.com/gophercloud/gophercloud/testhelper"
+	"github.com/gophercloud/gophercloud/testhelper/client"
+)
+
+func TestList(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+
+	HandleListExtensionsSuccessfully(t)
+
+	count := 0
+	extensions.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+		count++
+		actual, err := extensions.ExtractExtensions(page)
+		th.AssertNoErr(t, err)
+
+		expected := []common.Extension{
+			common.Extension{
+				Updated:     "2013-01-20T00:00:00-00:00",
+				Name:        "Neutron Service Type Management",
+				Links:       []interface{}{},
+				Namespace:   "http://docs.openstack.org/ext/neutron/service-type/api/v1.0",
+				Alias:       "service-type",
+				Description: "API for retrieving service providers for Neutron advanced services",
+			},
+		}
+		th.AssertDeepEquals(t, expected, actual)
+
+		return true, nil
+	})
+	th.CheckEquals(t, 1, count)
+}
+
+func TestGet(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+
+	HandleGetExtensionsSuccessfully(t)
+
+	ext, err := extensions.Get(client.ServiceClient(), "agent").Extract()
+	th.AssertNoErr(t, err)
+
+	th.AssertEquals(t, ext.Updated, "2013-02-03T10:00:00-00:00")
+	th.AssertEquals(t, ext.Name, "agent")
+	th.AssertEquals(t, ext.Namespace, "http://docs.openstack.org/ext/agent/api/v2.0")
+	th.AssertEquals(t, ext.Alias, "agent")
+	th.AssertEquals(t, ext.Description, "The agent management extension.")
+}
diff --git a/openstack/compute/v2/extensions/testing/doc.go b/openstack/compute/v2/extensions/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/testing/fixtures.go b/openstack/compute/v2/extensions/testing/fixtures.go
new file mode 100644
index 0000000..2a3fb69
--- /dev/null
+++ b/openstack/compute/v2/extensions/testing/fixtures.go
@@ -0,0 +1,57 @@
+package testing
+
+import (
+	"fmt"
+	"net/http"
+	"testing"
+
+	th "github.com/gophercloud/gophercloud/testhelper"
+	"github.com/gophercloud/gophercloud/testhelper/client"
+)
+
+func HandleListExtensionsSuccessfully(t *testing.T) {
+	th.Mux.HandleFunc("/extensions", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "GET")
+		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
+
+		w.Header().Add("Content-Type", "application/json")
+
+		fmt.Fprintf(w, `
+{
+		"extensions": [
+				{
+						"updated": "2013-01-20T00:00:00-00:00",
+						"name": "Neutron Service Type Management",
+						"links": [],
+						"namespace": "http://docs.openstack.org/ext/neutron/service-type/api/v1.0",
+						"alias": "service-type",
+						"description": "API for retrieving service providers for Neutron advanced services"
+				}
+		]
+}
+			`)
+	})
+}
+
+func HandleGetExtensionsSuccessfully(t *testing.T) {
+	th.Mux.HandleFunc("/extensions/agent", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "GET")
+		th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
+
+		w.Header().Add("Content-Type", "application/json")
+		w.WriteHeader(http.StatusOK)
+
+		fmt.Fprintf(w, `
+{
+		"extension": {
+				"updated": "2013-02-03T10:00:00-00:00",
+				"name": "agent",
+				"links": [],
+				"namespace": "http://docs.openstack.org/ext/agent/api/v2.0",
+				"alias": "agent",
+				"description": "The agent management extension."
+		}
+}
+		`)
+	})
+}
diff --git a/openstack/compute/v2/extensions/volumeattach/testing/fixtures.go b/openstack/compute/v2/extensions/volumeattach/testing/fixtures.go
index f662852..4f99610 100644
--- a/openstack/compute/v2/extensions/volumeattach/testing/fixtures.go
+++ b/openstack/compute/v2/extensions/volumeattach/testing/fixtures.go
@@ -1,5 +1,3 @@
-// +build fixtures
-
 package testing
 
 import (
diff --git a/openstack/compute/v2/extensions/volumeattach/requests_test.go b/openstack/compute/v2/extensions/volumeattach/testing/requests_test.go
similarity index 68%
rename from openstack/compute/v2/extensions/volumeattach/requests_test.go
rename to openstack/compute/v2/extensions/volumeattach/testing/requests_test.go
index 3257f39..9486f9b 100644
--- a/openstack/compute/v2/extensions/volumeattach/requests_test.go
+++ b/openstack/compute/v2/extensions/volumeattach/testing/requests_test.go
@@ -1,16 +1,16 @@
-package volumeattach
+package testing
 
 import (
 	"testing"
 
-	fixtures "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach/testing"
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
 
 // FirstVolumeAttachment is the first result in ListOutput.
-var FirstVolumeAttachment = VolumeAttachment{
+var FirstVolumeAttachment = volumeattach.VolumeAttachment{
 	Device:   "/dev/vdd",
 	ID:       "a26887c6-c47b-4654-abb5-dfadf7d3f803",
 	ServerID: "4d8c3732-a248-40ed-bebc-539a6ffd25c0",
@@ -18,7 +18,7 @@
 }
 
 // SecondVolumeAttachment is the first result in ListOutput.
-var SecondVolumeAttachment = VolumeAttachment{
+var SecondVolumeAttachment = volumeattach.VolumeAttachment{
 	Device:   "/dev/vdc",
 	ID:       "a26887c6-c47b-4654-abb5-dfadf7d3f804",
 	ServerID: "4d8c3732-a248-40ed-bebc-539a6ffd25c0",
@@ -27,10 +27,10 @@
 
 // ExpectedVolumeAttachmentSlide is the slice of results that should be parsed
 // from ListOutput, in the expected order.
-var ExpectedVolumeAttachmentSlice = []VolumeAttachment{FirstVolumeAttachment, SecondVolumeAttachment}
+var ExpectedVolumeAttachmentSlice = []volumeattach.VolumeAttachment{FirstVolumeAttachment, SecondVolumeAttachment}
 
 //CreatedVolumeAttachment is the parsed result from CreatedOutput.
-var CreatedVolumeAttachment = VolumeAttachment{
+var CreatedVolumeAttachment = volumeattach.VolumeAttachment{
 	Device:   "/dev/vdc",
 	ID:       "a26887c6-c47b-4654-abb5-dfadf7d3f804",
 	ServerID: "4d8c3732-a248-40ed-bebc-539a6ffd25c0",
@@ -40,13 +40,15 @@
 func TestList(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-	fixtures.HandleListSuccessfully(t)
+
+	HandleListSuccessfully(t)
+
 	serverID := "4d8c3732-a248-40ed-bebc-539a6ffd25c0"
 
 	count := 0
-	err := List(client.ServiceClient(), serverID).EachPage(func(page pagination.Page) (bool, error) {
+	err := volumeattach.List(client.ServiceClient(), serverID).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractVolumeAttachments(page)
+		actual, err := volumeattach.ExtractVolumeAttachments(page)
 		th.AssertNoErr(t, err)
 		th.CheckDeepEquals(t, ExpectedVolumeAttachmentSlice, actual)
 
@@ -59,10 +61,12 @@
 func TestCreate(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-	fixtures.HandleCreateSuccessfully(t)
+
+	HandleCreateSuccessfully(t)
+
 	serverID := "4d8c3732-a248-40ed-bebc-539a6ffd25c0"
 
-	actual, err := Create(client.ServiceClient(), serverID, CreateOpts{
+	actual, err := volumeattach.Create(client.ServiceClient(), serverID, volumeattach.CreateOpts{
 		Device:   "/dev/vdc",
 		VolumeID: "a26887c6-c47b-4654-abb5-dfadf7d3f804",
 	}).Extract()
@@ -73,11 +77,13 @@
 func TestGet(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-	fixtures.HandleGetSuccessfully(t)
+
+	HandleGetSuccessfully(t)
+
 	aID := "a26887c6-c47b-4654-abb5-dfadf7d3f804"
 	serverID := "4d8c3732-a248-40ed-bebc-539a6ffd25c0"
 
-	actual, err := Get(client.ServiceClient(), serverID, aID).Extract()
+	actual, err := volumeattach.Get(client.ServiceClient(), serverID, aID).Extract()
 	th.AssertNoErr(t, err)
 	th.CheckDeepEquals(t, &SecondVolumeAttachment, actual)
 }
@@ -85,10 +91,12 @@
 func TestDelete(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
-	fixtures.HandleDeleteSuccessfully(t)
+
+	HandleDeleteSuccessfully(t)
+
 	aID := "a26887c6-c47b-4654-abb5-dfadf7d3f804"
 	serverID := "4d8c3732-a248-40ed-bebc-539a6ffd25c0"
 
-	err := Delete(client.ServiceClient(), serverID, aID).ExtractErr()
+	err := volumeattach.Delete(client.ServiceClient(), serverID, aID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
diff --git a/openstack/compute/v2/flavors/testing/doc.go b/openstack/compute/v2/flavors/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/flavors/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/flavors/requests_test.go b/openstack/compute/v2/flavors/testing/requests_test.go
similarity index 82%
rename from openstack/compute/v2/flavors/requests_test.go
rename to openstack/compute/v2/flavors/testing/requests_test.go
index 311dbf0..e86512a 100644
--- a/openstack/compute/v2/flavors/requests_test.go
+++ b/openstack/compute/v2/flavors/testing/requests_test.go
@@ -1,4 +1,4 @@
-package flavors
+package testing
 
 import (
 	"fmt"
@@ -6,6 +6,7 @@
 	"reflect"
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	fake "github.com/gophercloud/gophercloud/testhelper/client"
@@ -60,17 +61,17 @@
 	})
 
 	pages := 0
-	err := ListDetail(fake.ServiceClient(), nil).EachPage(func(page pagination.Page) (bool, error) {
+	err := flavors.ListDetail(fake.ServiceClient(), nil).EachPage(func(page pagination.Page) (bool, error) {
 		pages++
 
-		actual, err := ExtractFlavors(page)
+		actual, err := flavors.ExtractFlavors(page)
 		if err != nil {
 			return false, err
 		}
 
-		expected := []Flavor{
-			Flavor{ID: "1", Name: "m1.tiny", Disk: 1, RAM: 512, VCPUs: 1},
-			Flavor{ID: "2", Name: "m2.small", Disk: 10, RAM: 1024, VCPUs: 2},
+		expected := []flavors.Flavor{
+			{ID: "1", Name: "m1.tiny", Disk: 1, RAM: 512, VCPUs: 1},
+			{ID: "2", Name: "m2.small", Disk: 10, RAM: 1024, VCPUs: 2},
 		}
 
 		if !reflect.DeepEqual(expected, actual) {
@@ -110,12 +111,12 @@
 		`)
 	})
 
-	actual, err := Get(fake.ServiceClient(), "12345").Extract()
+	actual, err := flavors.Get(fake.ServiceClient(), "12345").Extract()
 	if err != nil {
 		t.Fatalf("Unable to get flavor: %v", err)
 	}
 
-	expected := &Flavor{
+	expected := &flavors.Flavor{
 		ID:         "1",
 		Name:       "m1.tiny",
 		Disk:       1,
diff --git a/openstack/compute/v2/images/testing/doc.go b/openstack/compute/v2/images/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/images/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/images/requests_test.go b/openstack/compute/v2/images/testing/requests_test.go
similarity index 89%
rename from openstack/compute/v2/images/requests_test.go
rename to openstack/compute/v2/images/testing/requests_test.go
index 4b94ba1..a13b086 100644
--- a/openstack/compute/v2/images/requests_test.go
+++ b/openstack/compute/v2/images/testing/requests_test.go
@@ -1,4 +1,4 @@
-package images
+package testing
 
 import (
 	"encoding/json"
@@ -7,6 +7,7 @@
 	"reflect"
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/images"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	fake "github.com/gophercloud/gophercloud/testhelper/client"
@@ -63,17 +64,17 @@
 	})
 
 	pages := 0
-	options := &ListOpts{Limit: 2}
-	err := ListDetail(fake.ServiceClient(), options).EachPage(func(page pagination.Page) (bool, error) {
+	options := &images.ListOpts{Limit: 2}
+	err := images.ListDetail(fake.ServiceClient(), options).EachPage(func(page pagination.Page) (bool, error) {
 		pages++
 
-		actual, err := ExtractImages(page)
+		actual, err := images.ExtractImages(page)
 		if err != nil {
 			return false, err
 		}
 
-		expected := []Image{
-			Image{
+		expected := []images.Image{
+			{
 				ID:       "f3e4a95d-1f4f-4989-97ce-f3a1fb8c04d7",
 				Name:     "F17-x86_64-cfntools",
 				Created:  "2014-09-23T12:54:52Z",
@@ -83,7 +84,7 @@
 				Progress: 100,
 				Status:   "ACTIVE",
 			},
-			Image{
+			{
 				ID:       "f90f6034-2570-4974-8351-6b49732ef2eb",
 				Name:     "cirros-0.3.2-x86_64-disk",
 				Created:  "2014-09-23T12:51:42Z",
@@ -137,12 +138,12 @@
 		`)
 	})
 
-	actual, err := Get(fake.ServiceClient(), "12345678").Extract()
+	actual, err := images.Get(fake.ServiceClient(), "12345678").Extract()
 	if err != nil {
 		t.Fatalf("Unexpected error from Get: %v", err)
 	}
 
-	expected := &Image{
+	expected := &images.Image{
 		Status:   "ACTIVE",
 		Updated:  "2014-09-23T12:54:56Z",
 		ID:       "f3e4a95d-1f4f-4989-97ce-f3a1fb8c04d7",
@@ -159,7 +160,7 @@
 }
 
 func TestNextPageURL(t *testing.T) {
-	var page ImagePage
+	var page images.ImagePage
 	var body map[string]interface{}
 	bodyString := []byte(`{"images":{"links":[{"href":"http://192.154.23.87/12345/images/image3","rel":"bookmark"}]}, "images_links":[{"href":"http://192.154.23.87/12345/images/image4","rel":"next"}]}`)
 	err := json.Unmarshal(bodyString, &body)
@@ -186,6 +187,6 @@
 		w.WriteHeader(http.StatusNoContent)
 	})
 
-	res := Delete(fake.ServiceClient(), "12345678")
+	res := images.Delete(fake.ServiceClient(), "12345678")
 	th.AssertNoErr(t, res.Err)
 }
diff --git a/openstack/compute/v2/servers/testing/doc.go b/openstack/compute/v2/servers/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/servers/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/servers/fixtures.go b/openstack/compute/v2/servers/testing/fixtures.go
similarity index 98%
rename from openstack/compute/v2/servers/fixtures.go
rename to openstack/compute/v2/servers/testing/fixtures.go
index 8b2c94d..b4fb7ff 100644
--- a/openstack/compute/v2/servers/fixtures.go
+++ b/openstack/compute/v2/servers/testing/fixtures.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package servers
+package testing
 
 import (
 	"fmt"
@@ -8,6 +6,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud"
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
 )
@@ -244,7 +243,7 @@
 
 var (
 	// ServerHerp is a Server struct that should correspond to the first result in ServerListBody.
-	ServerHerp = Server{
+	ServerHerp = servers.Server{
 		Status:  "ACTIVE",
 		Updated: "2014-09-25T13:10:10Z",
 		HostID:  "29d3c8c896a45aa4c34e52247875d7fefc3d94bbcc9f622b5d204362",
@@ -300,7 +299,7 @@
 	}
 
 	// ServerDerp is a Server struct that should correspond to the second server in ServerListBody.
-	ServerDerp = Server{
+	ServerDerp = servers.Server{
 		Status:  "ACTIVE",
 		Updated: "2014-09-25T13:04:49Z",
 		HostID:  "29d3c8c896a45aa4c34e52247875d7fefc3d94bbcc9f622b5d204362",
@@ -357,7 +356,7 @@
 )
 
 type CreateOptsWithCustomField struct {
-	CreateOpts
+	servers.CreateOpts
 	Foo string `json:"foo,omitempty"`
 }
 
@@ -618,19 +617,19 @@
 }
 
 // ListAddressesExpected represents an expected repsonse from a ListAddresses request.
-var ListAddressesExpected = map[string][]Address{
-	"public": []Address{
-		Address{
+var ListAddressesExpected = map[string][]servers.Address{
+	"public": []servers.Address{
+		{
 			Version: 4,
 			Address: "80.56.136.39",
 		},
-		Address{
+		{
 			Version: 6,
 			Address: "2001:4800:790e:510:be76:4eff:fe04:82a8",
 		},
 	},
-	"private": []Address{
-		Address{
+	"private": []servers.Address{
+		{
 			Version: 4,
 			Address: "10.880.3.154",
 		},
@@ -668,12 +667,12 @@
 }
 
 // ListNetworkAddressesExpected represents an expected repsonse from a ListAddressesByNetwork request.
-var ListNetworkAddressesExpected = []Address{
-	Address{
+var ListNetworkAddressesExpected = []servers.Address{
+	{
 		Version: 4,
 		Address: "50.56.176.35",
 	},
-	Address{
+	{
 		Version: 6,
 		Address: "2001:4800:780e:510:be76:4eff:fe04:84a8",
 	},
diff --git a/openstack/compute/v2/servers/requests_test.go b/openstack/compute/v2/servers/testing/requests_test.go
similarity index 74%
rename from openstack/compute/v2/servers/requests_test.go
rename to openstack/compute/v2/servers/testing/requests_test.go
index 9a5d701..7db6b93 100644
--- a/openstack/compute/v2/servers/requests_test.go
+++ b/openstack/compute/v2/servers/testing/requests_test.go
@@ -1,4 +1,4 @@
-package servers
+package testing
 
 import (
 	"encoding/base64"
@@ -6,6 +6,7 @@
 	"net/http"
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -17,10 +18,10 @@
 	HandleServerListSuccessfully(t)
 
 	pages := 0
-	err := List(client.ServiceClient(), ListOpts{}).EachPage(func(page pagination.Page) (bool, error) {
+	err := servers.List(client.ServiceClient(), servers.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) {
 		pages++
 
-		actual, err := ExtractServers(page)
+		actual, err := servers.ExtractServers(page)
 		if err != nil {
 			return false, err
 		}
@@ -46,9 +47,9 @@
 	defer th.TeardownHTTP()
 	HandleServerListSuccessfully(t)
 
-	allPages, err := List(client.ServiceClient(), ListOpts{}).AllPages()
+	allPages, err := servers.List(client.ServiceClient(), servers.ListOpts{}).AllPages()
 	th.AssertNoErr(t, err)
-	actual, err := ExtractServers(allPages)
+	actual, err := servers.ExtractServers(allPages)
 	th.AssertNoErr(t, err)
 	th.CheckDeepEquals(t, ServerHerp, actual[0])
 	th.CheckDeepEquals(t, ServerDerp, actual[1])
@@ -59,7 +60,7 @@
 	defer th.TeardownHTTP()
 	HandleServerCreationSuccessfully(t, SingleServerBody)
 
-	actual, err := Create(client.ServiceClient(), CreateOpts{
+	actual, err := servers.Create(client.ServiceClient(), servers.CreateOpts{
 		Name:      "derp",
 		ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
 		FlavorRef: "1",
@@ -74,8 +75,8 @@
 	defer th.TeardownHTTP()
 	HandleServerCreationWithCustomFieldSuccessfully(t, SingleServerBody)
 
-	actual, err := Create(client.ServiceClient(), CreateOptsWithCustomField{
-		CreateOpts: CreateOpts{
+	actual, err := servers.Create(client.ServiceClient(), CreateOptsWithCustomField{
+		CreateOpts: servers.CreateOpts{
 			Name:      "derp",
 			ImageRef:  "f90f6034-2570-4974-8351-6b49732ef2eb",
 			FlavorRef: "1",
@@ -92,7 +93,7 @@
 	defer th.TeardownHTTP()
 	HandleServerDeletionSuccessfully(t)
 
-	res := Delete(client.ServiceClient(), "asdfasdfasdf")
+	res := servers.Delete(client.ServiceClient(), "asdfasdfasdf")
 	th.AssertNoErr(t, res.Err)
 }
 
@@ -101,7 +102,7 @@
 	defer th.TeardownHTTP()
 	HandleServerForceDeletionSuccessfully(t)
 
-	res := ForceDelete(client.ServiceClient(), "asdfasdfasdf")
+	res := servers.ForceDelete(client.ServiceClient(), "asdfasdfasdf")
 	th.AssertNoErr(t, res.Err)
 }
 
@@ -111,7 +112,7 @@
 	HandleServerGetSuccessfully(t)
 
 	client := client.ServiceClient()
-	actual, err := Get(client, "1234asdf").Extract()
+	actual, err := servers.Get(client, "1234asdf").Extract()
 	if err != nil {
 		t.Fatalf("Unexpected Get error: %v", err)
 	}
@@ -125,7 +126,7 @@
 	HandleServerUpdateSuccessfully(t)
 
 	client := client.ServiceClient()
-	actual, err := Update(client, "1234asdf", UpdateOpts{Name: "new-name"}).Extract()
+	actual, err := servers.Update(client, "1234asdf", servers.UpdateOpts{Name: "new-name"}).Extract()
 	if err != nil {
 		t.Fatalf("Unexpected Update error: %v", err)
 	}
@@ -138,7 +139,7 @@
 	defer th.TeardownHTTP()
 	HandleAdminPasswordChangeSuccessfully(t)
 
-	res := ChangeAdminPassword(client.ServiceClient(), "1234asdf", "new-password")
+	res := servers.ChangeAdminPassword(client.ServiceClient(), "1234asdf", "new-password")
 	th.AssertNoErr(t, res.Err)
 }
 
@@ -147,7 +148,7 @@
 	defer th.TeardownHTTP()
 	HandlePasswordGetSuccessfully(t)
 
-	res := GetPassword(client.ServiceClient(), "1234asdf")
+	res := servers.GetPassword(client.ServiceClient(), "1234asdf")
 	th.AssertNoErr(t, res.Err)
 }
 
@@ -156,8 +157,8 @@
 	defer th.TeardownHTTP()
 	HandleRebootSuccessfully(t)
 
-	res := Reboot(client.ServiceClient(), "1234asdf", &RebootOpts{
-		Type: SoftReboot,
+	res := servers.Reboot(client.ServiceClient(), "1234asdf", &servers.RebootOpts{
+		Type: servers.SoftReboot,
 	})
 	th.AssertNoErr(t, res.Err)
 }
@@ -167,14 +168,14 @@
 	defer th.TeardownHTTP()
 	HandleRebuildSuccessfully(t, SingleServerBody)
 
-	opts := RebuildOpts{
+	opts := servers.RebuildOpts{
 		Name:       "new-name",
 		AdminPass:  "swordfish",
 		ImageID:    "http://104.130.131.164:8774/fcad67a6189847c4aecfa3c81a05783b/images/f90f6034-2570-4974-8351-6b49732ef2eb",
 		AccessIPv4: "1.2.3.4",
 	}
 
-	actual, err := Rebuild(client.ServiceClient(), "1234asdf", opts).Extract()
+	actual, err := servers.Rebuild(client.ServiceClient(), "1234asdf", opts).Extract()
 	th.AssertNoErr(t, err)
 
 	th.CheckDeepEquals(t, ServerDerp, *actual)
@@ -192,7 +193,7 @@
 		w.WriteHeader(http.StatusAccepted)
 	})
 
-	res := Resize(client.ServiceClient(), "1234asdf", ResizeOpts{FlavorRef: "2"})
+	res := servers.Resize(client.ServiceClient(), "1234asdf", servers.ResizeOpts{FlavorRef: "2"})
 	th.AssertNoErr(t, res.Err)
 }
 
@@ -208,7 +209,7 @@
 		w.WriteHeader(http.StatusNoContent)
 	})
 
-	res := ConfirmResize(client.ServiceClient(), "1234asdf")
+	res := servers.ConfirmResize(client.ServiceClient(), "1234asdf")
 	th.AssertNoErr(t, res.Err)
 }
 
@@ -224,7 +225,7 @@
 		w.WriteHeader(http.StatusAccepted)
 	})
 
-	res := RevertResize(client.ServiceClient(), "1234asdf")
+	res := servers.RevertResize(client.ServiceClient(), "1234asdf")
 	th.AssertNoErr(t, res.Err)
 }
 
@@ -234,7 +235,7 @@
 
 	HandleServerRescueSuccessfully(t)
 
-	res := Rescue(client.ServiceClient(), "1234asdf", RescueOpts{
+	res := servers.Rescue(client.ServiceClient(), "1234asdf", servers.RescueOpts{
 		AdminPass: "1234567890",
 	})
 	th.AssertNoErr(t, res.Err)
@@ -249,7 +250,7 @@
 	HandleMetadatumGetSuccessfully(t)
 
 	expected := map[string]string{"foo": "bar"}
-	actual, err := Metadatum(client.ServiceClient(), "1234asdf", "foo").Extract()
+	actual, err := servers.Metadatum(client.ServiceClient(), "1234asdf", "foo").Extract()
 	th.AssertNoErr(t, err)
 	th.AssertDeepEquals(t, expected, actual)
 }
@@ -261,7 +262,7 @@
 	HandleMetadatumCreateSuccessfully(t)
 
 	expected := map[string]string{"foo": "bar"}
-	actual, err := CreateMetadatum(client.ServiceClient(), "1234asdf", MetadatumOpts{"foo": "bar"}).Extract()
+	actual, err := servers.CreateMetadatum(client.ServiceClient(), "1234asdf", servers.MetadatumOpts{"foo": "bar"}).Extract()
 	th.AssertNoErr(t, err)
 	th.AssertDeepEquals(t, expected, actual)
 }
@@ -272,7 +273,7 @@
 
 	HandleMetadatumDeleteSuccessfully(t)
 
-	err := DeleteMetadatum(client.ServiceClient(), "1234asdf", "foo").ExtractErr()
+	err := servers.DeleteMetadatum(client.ServiceClient(), "1234asdf", "foo").ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -283,7 +284,7 @@
 	HandleMetadataGetSuccessfully(t)
 
 	expected := map[string]string{"foo": "bar", "this": "that"}
-	actual, err := Metadata(client.ServiceClient(), "1234asdf").Extract()
+	actual, err := servers.Metadata(client.ServiceClient(), "1234asdf").Extract()
 	th.AssertNoErr(t, err)
 	th.AssertDeepEquals(t, expected, actual)
 }
@@ -295,7 +296,7 @@
 	HandleMetadataResetSuccessfully(t)
 
 	expected := map[string]string{"foo": "bar", "this": "that"}
-	actual, err := ResetMetadata(client.ServiceClient(), "1234asdf", MetadataOpts{
+	actual, err := servers.ResetMetadata(client.ServiceClient(), "1234asdf", servers.MetadataOpts{
 		"foo":  "bar",
 		"this": "that",
 	}).Extract()
@@ -310,7 +311,7 @@
 	HandleMetadataUpdateSuccessfully(t)
 
 	expected := map[string]string{"foo": "baz", "this": "those"}
-	actual, err := UpdateMetadata(client.ServiceClient(), "1234asdf", MetadataOpts{
+	actual, err := servers.UpdateMetadata(client.ServiceClient(), "1234asdf", servers.MetadataOpts{
 		"foo":  "baz",
 		"this": "those",
 	}).Extract()
@@ -325,10 +326,10 @@
 
 	expected := ListAddressesExpected
 	pages := 0
-	err := ListAddresses(client.ServiceClient(), "asdfasdfasdf").EachPage(func(page pagination.Page) (bool, error) {
+	err := servers.ListAddresses(client.ServiceClient(), "asdfasdfasdf").EachPage(func(page pagination.Page) (bool, error) {
 		pages++
 
-		actual, err := ExtractAddresses(page)
+		actual, err := servers.ExtractAddresses(page)
 		th.AssertNoErr(t, err)
 
 		if len(actual) != 2 {
@@ -349,10 +350,10 @@
 
 	expected := ListNetworkAddressesExpected
 	pages := 0
-	err := ListAddressesByNetwork(client.ServiceClient(), "asdfasdfasdf", "public").EachPage(func(page pagination.Page) (bool, error) {
+	err := servers.ListAddressesByNetwork(client.ServiceClient(), "asdfasdfasdf", "public").EachPage(func(page pagination.Page) (bool, error) {
 		pages++
 
-		actual, err := ExtractNetworkAddresses(page)
+		actual, err := servers.ExtractNetworkAddresses(page)
 		th.AssertNoErr(t, err)
 
 		if len(actual) != 2 {
@@ -371,7 +372,7 @@
 	defer th.TeardownHTTP()
 	HandleCreateServerImageSuccessfully(t)
 
-	_, err := CreateImage(client.ServiceClient(), "serverimage", CreateImageOpts{Name: "test"}).ExtractImageID()
+	_, err := servers.CreateImage(client.ServiceClient(), "serverimage", servers.CreateImageOpts{Name: "test"}).ExtractImageID()
 	th.AssertNoErr(t, err)
 }
 
@@ -379,8 +380,8 @@
 	name := "/etc/test"
 	contents := []byte("asdfasdf")
 
-	personality := Personality{
-		&File{
+	personality := servers.Personality{
+		&servers.File{
 			Path:     name,
 			Contents: contents,
 		},
diff --git a/openstack/compute/v2/servers/results_test.go b/openstack/compute/v2/servers/testing/results_test.go
similarity index 93%
rename from openstack/compute/v2/servers/results_test.go
rename to openstack/compute/v2/servers/testing/results_test.go
index 5b56055..e5334f0 100644
--- a/openstack/compute/v2/servers/results_test.go
+++ b/openstack/compute/v2/servers/testing/results_test.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package servers
+package testing
 
 import (
 	"crypto/rsa"
@@ -9,6 +7,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud"
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"golang.org/x/crypto/ssh"
 )
@@ -21,7 +20,7 @@
 	if err != nil {
 		t.Fatalf("%s", err)
 	}
-	resp := GetPasswordResult{gophercloud.Result{Body: dejson}}
+	resp := servers.GetPasswordResult{gophercloud.Result{Body: dejson}}
 
 	pwd, err := resp.ExtractPassword(nil)
 	th.AssertEquals(t, pwd, "")
@@ -38,7 +37,7 @@
 	if err != nil {
 		t.Fatalf("%s", err)
 	}
-	resp := GetPasswordResult{gophercloud.Result{Body: dejson}}
+	resp := servers.GetPasswordResult{gophercloud.Result{Body: dejson}}
 
 	pwd, err := resp.ExtractPassword(nil)
 	th.AssertNoErr(t, err)
@@ -91,7 +90,7 @@
 	if err != nil {
 		t.Fatalf("%s", err)
 	}
-	resp := GetPasswordResult{gophercloud.Result{Body: dejson}}
+	resp := servers.GetPasswordResult{gophercloud.Result{Body: dejson}}
 
 	pwd, err := resp.ExtractPassword(privateKey.(*rsa.PrivateKey))
 	th.AssertNoErr(t, err)