Rework locations of extracted structs
diff --git a/rackspace/db/v1/instances/delegate.go b/rackspace/db/v1/instances/delegate.go
index 981e902..d2e3c25 100644
--- a/rackspace/db/v1/instances/delegate.go
+++ b/rackspace/db/v1/instances/delegate.go
@@ -2,7 +2,9 @@
 
 import (
 	"github.com/rackspace/gophercloud"
+	osDBs "github.com/rackspace/gophercloud/openstack/db/v1/databases"
 	os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
+	osUsers "github.com/rackspace/gophercloud/openstack/db/v1/users"
 	"github.com/rackspace/gophercloud/pagination"
 )
 
@@ -34,10 +36,10 @@
 	Name string
 
 	// A slice of database information options.
-	Databases os.DatabasesOpts
+	Databases osDBs.BatchCreateOpts
 
 	// A slice of user information options.
-	Users os.UsersOpts
+	Users osUsers.BatchCreateOpts
 
 	// ID of the configuration group to associate with the instance. Optional.
 	ConfigID string
diff --git a/rackspace/db/v1/instances/delegate_test.go b/rackspace/db/v1/instances/delegate_test.go
index cc72227..3ba7a5e 100644
--- a/rackspace/db/v1/instances/delegate_test.go
+++ b/rackspace/db/v1/instances/delegate_test.go
@@ -4,7 +4,9 @@
 	"testing"
 
 	"github.com/rackspace/gophercloud"
+	osDBs "github.com/rackspace/gophercloud/openstack/db/v1/databases"
 	os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
+	osUsers "github.com/rackspace/gophercloud/openstack/db/v1/users"
 	th "github.com/rackspace/gophercloud/testhelper"
 	fake "github.com/rackspace/gophercloud/testhelper/client"
 )
@@ -41,16 +43,16 @@
 	opts := CreateOpts{
 		Name:      "json_rack_instance",
 		FlavorRef: "1",
-		Databases: os.DatabasesOpts{
-			os.DatabaseOpts{CharSet: "utf8", Collate: "utf8_general_ci", Name: "sampledb"},
-			os.DatabaseOpts{Name: "nextround"},
+		Databases: osDBs.BatchCreateOpts{
+			osDBs.CreateOpts{CharSet: "utf8", Collate: "utf8_general_ci", Name: "sampledb"},
+			osDBs.CreateOpts{Name: "nextround"},
 		},
-		Users: os.UsersOpts{
-			os.UserOpts{
+		Users: osUsers.BatchCreateOpts{
+			osUsers.CreateOpts{
 				Name:     "demouser",
 				Password: "demopassword",
-				Databases: os.DatabasesOpts{
-					os.DatabaseOpts{Name: "sampledb"},
+				Databases: osDBs.BatchCreateOpts{
+					osDBs.CreateOpts{Name: "sampledb"},
 				},
 			},
 		},
@@ -92,7 +94,7 @@
 
 	os.HandleEnableRootUserSuccessfully(t, instanceID)
 
-	expected := &os.User{Name: "root", Password: "secretsecret"}
+	expected := &osUsers.User{Name: "root", Password: "secretsecret"}
 
 	user, err := EnableRootUser(fake.ServiceClient(), instanceID).Extract()
 	th.AssertNoErr(t, err)
diff --git a/rackspace/db/v1/instances/fixtures.go b/rackspace/db/v1/instances/fixtures.go
index ac5c960..55dc0a8 100644
--- a/rackspace/db/v1/instances/fixtures.go
+++ b/rackspace/db/v1/instances/fixtures.go
@@ -179,3 +179,36 @@
 		fmt.Fprintf(w, singleInstanceJson)
 	})
 }
+
+func HandleListBackupsSuccessfully(t *testing.T, id string) {
+	th.Mux.HandleFunc("/instances/"+id+"/backups", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "GET")
+		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+
+		w.Header().Add("Content-Type", "application/json")
+
+		fmt.Fprintf(w, `
+{
+  "backups": [
+    {
+      "status": "COMPLETED",
+      "updated": "2014-06-18T21:24:39",
+      "description": "Backup from Restored Instance",
+      "datastore": {
+        "version": "5.1",
+        "type": "MySQL",
+        "version_id": "20000000-0000-0000-0000-000000000002"
+      },
+      "id": "87972694-4be2-40f5-83f8-501656e0032a",
+      "size": 0.141026,
+      "name": "restored_backup",
+      "created": "2014-06-18T21:23:35",
+      "instance_id": "29af2cd9-0674-48ab-b87a-b160f00208e6",
+      "parent_id": null,
+      "locationRef": "http://localhost/path/to/backup"
+    }
+  ]
+}
+`)
+	})
+}
diff --git a/rackspace/db/v1/instances/requests.go b/rackspace/db/v1/instances/requests.go
index b4bade8..b311289 100644
--- a/rackspace/db/v1/instances/requests.go
+++ b/rackspace/db/v1/instances/requests.go
@@ -4,20 +4,18 @@
 	"github.com/racker/perigee"
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/pagination"
+	"github.com/rackspace/gophercloud/rackspace/db/v1/backups"
 )
 
 func GetDefaultConfig(client *gophercloud.ServiceClient, id string) ConfigResult {
 	var res ConfigResult
 
-	resp, err := perigee.Request("GET", configURL(client, id), perigee.Options{
+	_, res.Err = perigee.Request("GET", configURL(client, id), perigee.Options{
 		MoreHeaders: client.AuthenticatedHeaders(),
 		Results:     &res.Body,
 		OkCodes:     []int{200},
 	})
 
-	res.Header = resp.HttpResponse.Header
-	res.Err = err
-
 	return res
 }
 
@@ -28,18 +26,18 @@
 
 	var res UpdateResult
 
-	resp, err := perigee.Request("PUT", resourceURL(client, instanceID), perigee.Options{
+	_, res.Err = perigee.Request("PUT", resourceURL(client, instanceID), perigee.Options{
 		MoreHeaders: client.AuthenticatedHeaders(),
 		ReqBody:     map[string]map[string]string{"instance": reqBody},
 		OkCodes:     []int{202},
 	})
 
-	res.Header = resp.HttpResponse.Header
-	res.Err = err
-
 	return res
 }
 
 func ListBackups(client *gophercloud.ServiceClient, instanceID string) pagination.Pager {
-
+	pageFn := func(r pagination.PageResult) pagination.Page {
+		return backups.BackupPage{pagination.SinglePageBase(r)}
+	}
+	return pagination.NewPager(client, backupsURL(client, instanceID), pageFn)
 }
diff --git a/rackspace/db/v1/instances/requests_test.go b/rackspace/db/v1/instances/requests_test.go
index c746b6a..66d58fd 100644
--- a/rackspace/db/v1/instances/requests_test.go
+++ b/rackspace/db/v1/instances/requests_test.go
@@ -3,6 +3,8 @@
 import (
 	"testing"
 
+	"github.com/rackspace/gophercloud/pagination"
+	"github.com/rackspace/gophercloud/rackspace/db/v1/backups"
 	th "github.com/rackspace/gophercloud/testhelper"
 	fake "github.com/rackspace/gophercloud/testhelper/client"
 )
@@ -74,3 +76,41 @@
 	res := AssociateWithConfigGroup(fake.ServiceClient(), instanceID, configGroupID)
 	th.AssertNoErr(t, res.Err)
 }
+
+func TestListBackups(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+
+	HandleListBackupsSuccessfully(t, instanceID)
+	count := 0
+
+	ListBackups(fake.ServiceClient(), instanceID).EachPage(func(page pagination.Page) (bool, error) {
+		count++
+		actual, err := backups.ExtractBackups(page)
+		th.AssertNoErr(t, err)
+
+		expected := []backups.Backup{
+			backups.Backup{
+				Created:     "2014-06-18T21:23:35",
+				Description: "Backup from Restored Instance",
+				ID:          "87972694-4be2-40f5-83f8-501656e0032a",
+				InstanceID:  "29af2cd9-0674-48ab-b87a-b160f00208e6",
+				LocationRef: "http://localhost/path/to/backup",
+				Name:        "restored_backup",
+				ParentID:    "",
+				Size:        0.141026,
+				Status:      "COMPLETED",
+				Updated:     "2014-06-18T21:24:39",
+				Datastore:   backups.Datastore{Version: "5.1", Type: "MySQL", VersionID: "20000000-0000-0000-0000-000000000002"},
+			},
+		}
+
+		th.AssertDeepEquals(t, expected, actual)
+
+		return true, nil
+	})
+
+	if count != 1 {
+		t.Errorf("Expected 1 page, got %d", count)
+	}
+}
diff --git a/rackspace/db/v1/instances/urls.go b/rackspace/db/v1/instances/urls.go
index 12f8d83..5955f4c 100644
--- a/rackspace/db/v1/instances/urls.go
+++ b/rackspace/db/v1/instances/urls.go
@@ -17,3 +17,7 @@
 func configURL(c *gophercloud.ServiceClient, id string) string {
 	return c.ServiceURL("instances", id, "configuration")
 }
+
+func backupsURL(c *gophercloud.ServiceClient, id string) string {
+	return c.ServiceURL("instances", id, "backups")
+}