diff --git a/acceptance/openstack/db/v1/common.go b/acceptance/openstack/db/v1/common.go
index 13d7628..2665ce4 100644
--- a/acceptance/openstack/db/v1/common.go
+++ b/acceptance/openstack/db/v1/common.go
@@ -8,6 +8,7 @@
 
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/openstack"
+	"github.com/rackspace/gophercloud/openstack/db/v1/instances"
 	th "github.com/rackspace/gophercloud/testhelper"
 )
 
@@ -31,6 +32,7 @@
 	client     *gophercloud.ServiceClient
 	instanceID string
 	DBIDs      []string
+	users      []string
 }
 
 func newContext(t *testing.T) context {
@@ -59,4 +61,6 @@
 		}
 		return false, nil
 	})
+
+	c.AssertNoErr(err)
 }
diff --git a/acceptance/openstack/db/v1/database_test.go b/acceptance/openstack/db/v1/database_test.go
index e2d41cf..cecd9c9 100644
--- a/acceptance/openstack/db/v1/database_test.go
+++ b/acceptance/openstack/db/v1/database_test.go
@@ -10,9 +10,9 @@
 
 func (c context) createDBs() {
 	dbs := []string{
-		tools.RandomString("db_"),
-		tools.RandomString("db_"),
-		tools.RandomString("db_"),
+		tools.RandomString("db_", 5),
+		tools.RandomString("db_", 5),
+		tools.RandomString("db_", 5),
 	}
 
 	opts := db.BatchCreateOpts{
@@ -21,7 +21,8 @@
 		db.CreateOpts{Name: dbs[2]},
 	}
 
-	res := db.Create(c.client, c.instanceID, opts)
+	err := db.Create(c.client, c.instanceID, opts).ExtractErr()
+	c.AssertNoErr(err)
 	c.Logf("Created three databases on instance %s: %s, %s, %s", c.instanceID, dbs[0], dbs[1], dbs[2])
 	c.DBIDs = dbs
 }
@@ -29,7 +30,7 @@
 func (c context) listDBs() {
 	c.Logf("Listing databases on instance %s", c.instanceID)
 
-	err := dbs.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
+	err := db.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
 		dbList, err := db.ExtractDBs(page)
 		c.AssertNoErr(err)
 
@@ -40,13 +41,13 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) deleteDBs() {
 	for _, id := range c.DBIDs {
 		err := db.Delete(c.client, c.instanceID, id).ExtractErr()
-		c.CheckNoErr(err)
-		t.Logf("Deleted DB %s", id)
+		c.AssertNoErr(err)
+		c.Logf("Deleted DB %s", id)
 	}
 }
diff --git a/acceptance/openstack/db/v1/flavor_test.go b/acceptance/openstack/db/v1/flavor_test.go
index 98fc41e..4d6568d 100644
--- a/acceptance/openstack/db/v1/flavor_test.go
+++ b/acceptance/openstack/db/v1/flavor_test.go
@@ -10,8 +10,8 @@
 func (c context) listFlavors() {
 	c.Logf("Listing flavors")
 
-	err := flavors.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
-		flavorList, err := db.ExtractFlavors(page)
+	err := flavors.List(c.client).EachPage(func(page pagination.Page) (bool, error) {
+		flavorList, err := flavors.ExtractFlavors(page)
 		c.AssertNoErr(err)
 
 		for _, f := range flavorList {
@@ -21,11 +21,11 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) getFlavor() {
-	flavor, err := flavors.Get(c.client, "1").Extract()
+	flavor, err := flavors.Get(c.client, 1).Extract()
 	c.Logf("Getting flavor %s", flavor.ID)
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
diff --git a/acceptance/openstack/db/v1/instance_test.go b/acceptance/openstack/db/v1/instance_test.go
index 24678cb..1961f1f 100644
--- a/acceptance/openstack/db/v1/instance_test.go
+++ b/acceptance/openstack/db/v1/instance_test.go
@@ -3,13 +3,16 @@
 package v1
 
 import (
+	"testing"
+
 	"github.com/rackspace/gophercloud/acceptance/tools"
 	"github.com/rackspace/gophercloud/openstack/db/v1/instances"
 	"github.com/rackspace/gophercloud/pagination"
+	rackspaceInst "github.com/rackspace/gophercloud/rackspace/db/v1/instances"
 	th "github.com/rackspace/gophercloud/testhelper"
 )
 
-func TestRunner(t *testingT) {
+func TestRunner(t *testing.T) {
 	c := newContext(t)
 
 	// FLAVOR tests
@@ -28,7 +31,7 @@
 	c.resizeVol()
 
 	// DATABASE tests
-	c.createDB()
+	c.createDBs()
 	c.listDBs()
 
 	// USER tests
@@ -38,21 +41,22 @@
 	// TEARDOWN
 	c.deleteUsers()
 	c.deleteDBs()
-	c.deleteInstance(id)
+	c.deleteInstance()
 }
 
 func (c context) createInstance() {
-	opts := instances.CreateOpts{
+	opts := rackspaceInst.CreateOpts{
 		FlavorRef: "1",
 		Size:      1,
 		Name:      tools.RandomString("gopher_db", 5),
+		Datastore: &rackspaceInst.DatastoreOpts{Version: "5.6", Type: "MySQL"},
 	}
 
 	instance, err := instances.Create(c.client, opts).Extract()
 	th.AssertNoErr(c.test, err)
 
-	c.Logf("Restarting %s. Waiting...", id)
-	c.WaitUntilActive(id)
+	c.Logf("Restarting %s. Waiting...", instance.ID)
+	c.WaitUntilActive(instance.ID)
 	c.Logf("Created DB %#v", instance)
 
 	c.instanceID = instance.ID
@@ -65,14 +69,14 @@
 		instanceList, err := instances.ExtractInstances(page)
 		c.AssertNoErr(err)
 
-		for _, n := range networkList {
-			c.Logf("Instance: %#v", instance)
+		for _, i := range instanceList {
+			c.Logf("Instance: %#v", i)
 		}
 
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) getInstance() {
@@ -88,7 +92,7 @@
 }
 
 func (c context) enableRootUser() {
-	err := instances.EnableRootUser(c.client, c.instanceID).ExtractErr()
+	_, err := instances.EnableRootUser(c.client, c.instanceID).Extract()
 	c.AssertNoErr(err)
 	c.Logf("Enabled root user on %s", c.instanceID)
 }
@@ -101,7 +105,7 @@
 
 func (c context) restartInstance() {
 	id := c.instanceID
-	err := instances.Restart(c.client, id).ExtractErr()
+	err := instances.RestartService(c.client, id).ExtractErr()
 	c.AssertNoErr(err)
 	c.Logf("Restarting %s. Waiting...", id)
 	c.WaitUntilActive(id)
@@ -110,7 +114,7 @@
 
 func (c context) resizeInstance() {
 	id := c.instanceID
-	err := instances.Resize(c.client, id, "2").ExtractErr()
+	err := instances.ResizeInstance(c.client, id, "2").ExtractErr()
 	c.AssertNoErr(err)
 	c.Logf("Resizing %s. Waiting...", id)
 	c.WaitUntilActive(id)
@@ -119,7 +123,7 @@
 
 func (c context) resizeVol() {
 	id := c.instanceID
-	err := instances.ResizeVol(c.client, id, 2).ExtractErr()
+	err := instances.ResizeVolume(c.client, id, 2).ExtractErr()
 	c.AssertNoErr(err)
 	c.Logf("Resizing volume of %s. Waiting...", id)
 	c.WaitUntilActive(id)
diff --git a/acceptance/openstack/db/v1/user_test.go b/acceptance/openstack/db/v1/user_test.go
index 9870419..b731469 100644
--- a/acceptance/openstack/db/v1/user_test.go
+++ b/acceptance/openstack/db/v1/user_test.go
@@ -11,34 +11,35 @@
 
 func (c context) createUsers() {
 	users := []string{
-		tools.RandomString("user_"),
-		tools.RandomString("user_"),
-		tools.RandomString("user_"),
+		tools.RandomString("user_", 5),
+		tools.RandomString("user_", 5),
+		tools.RandomString("user_", 5),
 	}
 
-	db1 := db.CreateOpt{Name: c.DBIDs[0]}
-	db2 := db.CreateOpt{Name: c.DBIDs[1]}
-	db3 := db.CreateOpt{Name: c.DBIDs[2]}
+	db1 := db.CreateOpts{Name: c.DBIDs[0]}
+	db2 := db.CreateOpts{Name: c.DBIDs[1]}
+	db3 := db.CreateOpts{Name: c.DBIDs[2]}
 
 	opts := u.BatchCreateOpts{
 		u.CreateOpts{
 			Name:      users[0],
-			Password:  tools.RandomString(),
-			databases: db.BatchCreateOpts{db1, db2, db3},
+			Password:  tools.RandomString("", 5),
+			Databases: db.BatchCreateOpts{db1, db2, db3},
 		},
 		u.CreateOpts{
 			Name:      users[1],
-			Password:  tools.RandomString(),
-			databases: db.BatchCreateOpts{db1, db2},
+			Password:  tools.RandomString("", 5),
+			Databases: db.BatchCreateOpts{db1, db2},
 		},
 		u.CreateOpts{
 			Name:      users[2],
-			Password:  tools.RandomString(),
-			databases: db.BatchCreateOpts{db3},
+			Password:  tools.RandomString("", 5),
+			Databases: db.BatchCreateOpts{db3},
 		},
 	}
 
 	err := u.Create(c.client, c.instanceID, opts).ExtractErr()
+	c.AssertNoErr(err)
 	c.Logf("Created three users on instance %s: %s, %s, %s", c.instanceID, users[0], users[1], users[2])
 	c.users = users
 }
@@ -46,7 +47,7 @@
 func (c context) listUsers() {
 	c.Logf("Listing databases on instance %s", c.instanceID)
 
-	err := dbs.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
+	err := db.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
 		dbList, err := db.ExtractDBs(page)
 		c.AssertNoErr(err)
 
@@ -57,13 +58,13 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) deleteUsers() {
 	for _, id := range c.DBIDs {
 		err := db.Delete(c.client, c.instanceID, id).ExtractErr()
-		c.CheckNoErr(err)
-		t.Logf("Deleted DB %s", id)
+		c.AssertNoErr(err)
+		c.Logf("Deleted DB %s", id)
 	}
 }
diff --git a/acceptance/rackspace/db/v1/backup_test.go b/acceptance/rackspace/db/v1/backup_test.go
index 677b3b3..7c50e19 100644
--- a/acceptance/rackspace/db/v1/backup_test.go
+++ b/acceptance/rackspace/db/v1/backup_test.go
@@ -2,18 +2,24 @@
 
 package v1
 
-import "github.com/rackspace/gophercloud/pagination"
+import (
+	"github.com/rackspace/gophercloud/acceptance/tools"
+	"github.com/rackspace/gophercloud/pagination"
+
+	"github.com/rackspace/gophercloud/rackspace/db/v1/backups"
+	"github.com/rackspace/gophercloud/rackspace/db/v1/instances"
+)
 
 func (c context) createBackup() {
 	opts := backups.CreateOpts{
-		Name:       tools.PrefixString("backup_", 5),
+		Name:       tools.RandomString("backup_", 5),
 		InstanceID: c.instanceID,
 	}
 
-	backup, err := backups.Create(c.client, opts)
+	backup, err := backups.Create(c.client, opts).Extract()
 
 	c.Logf("Created backup %#v", backup)
-	c.AssertNoErr(t, err)
+	c.AssertNoErr(err)
 
 	c.backupID = backup.ID
 }
@@ -27,7 +33,7 @@
 func (c context) listAllBackups() {
 	c.Logf("Listing backups")
 
-	err := backups.List(c.client).EachPage(func(page pagination.Page) (bool, error) {
+	err := backups.List(c.client, nil).EachPage(func(page pagination.Page) (bool, error) {
 		backupList, err := backups.ExtractBackups(page)
 		c.AssertNoErr(err)
 
@@ -38,13 +44,13 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) listInstanceBackups() {
 	c.Logf("Listing backups for instance %s", c.instanceID)
 
-	err := instances.ListBackups(c.client).EachPage(func(page pagination.Page) (bool, error) {
+	err := instances.ListBackups(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
 		backupList, err := backups.ExtractBackups(page)
 		c.AssertNoErr(err)
 
@@ -55,7 +61,7 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) deleteBackup() {
diff --git a/acceptance/rackspace/db/v1/common.go b/acceptance/rackspace/db/v1/common.go
index 2fa977f..3d10904 100644
--- a/acceptance/rackspace/db/v1/common.go
+++ b/acceptance/rackspace/db/v1/common.go
@@ -9,6 +9,7 @@
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/openstack"
 	"github.com/rackspace/gophercloud/rackspace"
+	"github.com/rackspace/gophercloud/rackspace/db/v1/instances"
 	th "github.com/rackspace/gophercloud/testhelper"
 )
 
@@ -35,6 +36,7 @@
 	replicaID     string
 	backupID      string
 	configGroupID string
+	users         []string
 }
 
 func newContext(t *testing.T) context {
@@ -63,4 +65,5 @@
 		}
 		return false, nil
 	})
+	c.AssertNoErr(err)
 }
diff --git a/acceptance/rackspace/db/v1/config_group_test.go b/acceptance/rackspace/db/v1/config_group_test.go
index 3d269c4..fba46a9 100644
--- a/acceptance/rackspace/db/v1/config_group_test.go
+++ b/acceptance/rackspace/db/v1/config_group_test.go
@@ -3,20 +3,22 @@
 package v1
 
 import (
-	config "github.com/rackspace/gophercloud/openstack/db/v1/configurations"
+	"github.com/rackspace/gophercloud/acceptance/tools"
 	"github.com/rackspace/gophercloud/pagination"
+	config "github.com/rackspace/gophercloud/rackspace/db/v1/configurations"
+	"github.com/rackspace/gophercloud/rackspace/db/v1/instances"
 )
 
 func (c context) createConfigGrp() {
 	opts := config.CreateOpts{
-		Name: tools.PrefixString("config_", 5),
+		Name: tools.RandomString("config_", 5),
 		Values: map[string]interface{}{
 			"connect_timeout":  300,
 			"join_buffer_size": 900000,
 		},
 	}
 
-	cg, err := config.Create(c.client, opts)
+	cg, err := config.Create(c.client, opts).Extract()
 
 	c.AssertNoErr(err)
 	c.Logf("Created config group %#v", cg)
@@ -25,14 +27,14 @@
 }
 
 func (c context) getConfigGrp() {
-	cg, err := config.Get(c.client, c.configGroupID)
+	cg, err := config.Get(c.client, c.configGroupID).Extract()
 	c.Logf("Getting config group: %#v", cg)
 	c.AssertNoErr(err)
 }
 
 func (c context) updateConfigGrp() {
 	opts := config.UpdateOpts{
-		Name: tools.PrefixString("new_name_", 5),
+		Name: tools.RandomString("new_name_", 5),
 		Values: map[string]interface{}{
 			"connect_timeout": 250,
 		},
@@ -55,7 +57,7 @@
 }
 
 func (c context) associateInstanceWithConfigGrp() {
-	err := config.AssociateWithConfigGroup(c.client, c.instanceID, c.configGroupID).ExtractErr()
+	err := instances.AssociateWithConfigGroup(c.client, c.instanceID, c.configGroupID).ExtractErr()
 	c.Logf("Associated instance %s with config group %s", c.instanceID, c.configGroupID)
 	c.AssertNoErr(err)
 }
@@ -67,14 +69,14 @@
 		instanceList, err := instances.ExtractInstances(page)
 		c.AssertNoErr(err)
 
-		for _, n := range networkList {
+		for _, instance := range instanceList {
 			c.Logf("Instance: %#v", instance)
 		}
 
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) deleteConfigGrp() {
diff --git a/acceptance/rackspace/db/v1/database_test.go b/acceptance/rackspace/db/v1/database_test.go
index e2d41cf..faaa7ca 100644
--- a/acceptance/rackspace/db/v1/database_test.go
+++ b/acceptance/rackspace/db/v1/database_test.go
@@ -10,9 +10,9 @@
 
 func (c context) createDBs() {
 	dbs := []string{
-		tools.RandomString("db_"),
-		tools.RandomString("db_"),
-		tools.RandomString("db_"),
+		tools.RandomString("db_", 5),
+		tools.RandomString("db_", 5),
+		tools.RandomString("db_", 5),
 	}
 
 	opts := db.BatchCreateOpts{
@@ -21,15 +21,17 @@
 		db.CreateOpts{Name: dbs[2]},
 	}
 
-	res := db.Create(c.client, c.instanceID, opts)
+	err := db.Create(c.client, c.instanceID, opts).ExtractErr()
 	c.Logf("Created three databases on instance %s: %s, %s, %s", c.instanceID, dbs[0], dbs[1], dbs[2])
+	c.AssertNoErr(err)
+
 	c.DBIDs = dbs
 }
 
 func (c context) listDBs() {
 	c.Logf("Listing databases on instance %s", c.instanceID)
 
-	err := dbs.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
+	err := db.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
 		dbList, err := db.ExtractDBs(page)
 		c.AssertNoErr(err)
 
@@ -40,13 +42,13 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) deleteDBs() {
 	for _, id := range c.DBIDs {
 		err := db.Delete(c.client, c.instanceID, id).ExtractErr()
-		c.CheckNoErr(err)
-		t.Logf("Deleted DB %s", id)
+		c.AssertNoErr(err)
+		c.Logf("Deleted DB %s", id)
 	}
 }
diff --git a/acceptance/rackspace/db/v1/flavor_test.go b/acceptance/rackspace/db/v1/flavor_test.go
index e121f68..e5131c7 100644
--- a/acceptance/rackspace/db/v1/flavor_test.go
+++ b/acceptance/rackspace/db/v1/flavor_test.go
@@ -3,6 +3,7 @@
 package v1
 
 import (
+	os "github.com/rackspace/gophercloud/openstack/db/v1/flavors"
 	"github.com/rackspace/gophercloud/pagination"
 	"github.com/rackspace/gophercloud/rackspace/db/v1/flavors"
 )
@@ -10,8 +11,8 @@
 func (c context) listFlavors() {
 	c.Logf("Listing flavors")
 
-	err := flavors.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
-		flavorList, err := db.ExtractFlavors(page)
+	err := flavors.List(c.client).EachPage(func(page pagination.Page) (bool, error) {
+		flavorList, err := os.ExtractFlavors(page)
 		c.AssertNoErr(err)
 
 		for _, f := range flavorList {
@@ -21,11 +22,11 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) getFlavor() {
-	flavor, err := flavors.Get(c.client, "1").Extract()
+	flavor, err := flavors.Get(c.client, 1).Extract()
 	c.Logf("Getting flavor %s", flavor.ID)
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
diff --git a/acceptance/rackspace/db/v1/instance_test.go b/acceptance/rackspace/db/v1/instance_test.go
index eb745e2..4bc44ab 100644
--- a/acceptance/rackspace/db/v1/instance_test.go
+++ b/acceptance/rackspace/db/v1/instance_test.go
@@ -3,13 +3,15 @@
 package v1
 
 import (
+	"testing"
+
 	"github.com/rackspace/gophercloud/acceptance/tools"
 	"github.com/rackspace/gophercloud/pagination"
 	"github.com/rackspace/gophercloud/rackspace/db/v1/instances"
 	th "github.com/rackspace/gophercloud/testhelper"
 )
 
-func TestRunner(t *testingT) {
+func TestRunner(t *testing.T) {
 	c := newContext(t)
 
 	// FLAVOR tests
@@ -49,7 +51,7 @@
 	c.deleteConfigGrp()
 
 	// DATABASE tests
-	c.createDB()
+	c.createDBs()
 	c.listDBs()
 
 	// USER tests
@@ -65,7 +67,7 @@
 	// TEARDOWN
 	c.deleteUsers()
 	c.deleteDBs()
-	c.deleteInstance(id)
+	c.deleteInstance()
 }
 
 func (c context) createInstance() {
@@ -78,9 +80,9 @@
 	instance, err := instances.Create(c.client, opts).Extract()
 	th.AssertNoErr(c.test, err)
 
-	c.Logf("Restarting %s. Waiting...", id)
-	c.WaitUntilActive(id)
-	c.Logf("Created DB %#v", instance)
+	c.Logf("Restarting %s. Waiting...", instance.ID)
+	c.WaitUntilActive(instance.ID)
+	c.Logf("Created DB %#v", instance.ID)
 
 	c.instanceID = instance.ID
 }
@@ -92,14 +94,14 @@
 		instanceList, err := instances.ExtractInstances(page)
 		c.AssertNoErr(err)
 
-		for _, n := range networkList {
+		for _, instance := range instanceList {
 			c.Logf("Instance: %#v", instance)
 		}
 
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) getInstance() {
@@ -115,7 +117,7 @@
 }
 
 func (c context) enableRootUser() {
-	err := instances.EnableRootUser(c.client, c.instanceID).ExtractErr()
+	_, err := instances.EnableRootUser(c.client, c.instanceID).Extract()
 	c.AssertNoErr(err)
 	c.Logf("Enabled root user on %s", c.instanceID)
 }
@@ -128,7 +130,7 @@
 
 func (c context) restartInstance() {
 	id := c.instanceID
-	err := instances.Restart(c.client, id).ExtractErr()
+	err := instances.RestartService(c.client, id).ExtractErr()
 	c.AssertNoErr(err)
 	c.Logf("Restarting %s. Waiting...", id)
 	c.WaitUntilActive(id)
@@ -137,7 +139,7 @@
 
 func (c context) resizeInstance() {
 	id := c.instanceID
-	err := instances.Resize(c.client, id, "2").ExtractErr()
+	err := instances.ResizeInstance(c.client, id, "2").ExtractErr()
 	c.AssertNoErr(err)
 	c.Logf("Resizing %s. Waiting...", id)
 	c.WaitUntilActive(id)
@@ -146,7 +148,7 @@
 
 func (c context) resizeVol() {
 	id := c.instanceID
-	err := instances.ResizeVol(c.client, id, 2).ExtractErr()
+	err := instances.ResizeVolume(c.client, id, 2).ExtractErr()
 	c.AssertNoErr(err)
 	c.Logf("Resizing volume of %s. Waiting...", id)
 	c.WaitUntilActive(id)
diff --git a/acceptance/rackspace/db/v1/replica_test.go b/acceptance/rackspace/db/v1/replica_test.go
index 96eaf19..3da2881 100644
--- a/acceptance/rackspace/db/v1/replica_test.go
+++ b/acceptance/rackspace/db/v1/replica_test.go
@@ -9,8 +9,6 @@
 )
 
 func (c context) createReplica() {
-	repl, err := instances.Create(c.client, opts).Extract()
-
 	opts := instances.CreateOpts{
 		FlavorRef: "1",
 		Size:      1,
@@ -18,11 +16,11 @@
 		ReplicaOf: c.instanceID,
 	}
 
-	instance, err := instances.Create(c.client, opts).Extract()
+	repl, err := instances.Create(c.client, opts).Extract()
 	th.AssertNoErr(c.test, err)
 
 	c.Logf("Creating replica of %s. Waiting...", c.instanceID)
-	c.WaitUntilActive(id)
+	c.WaitUntilActive(repl.ID)
 	c.Logf("Created replica %#v", repl)
 
 	c.replicaID = repl.ID
@@ -31,4 +29,5 @@
 func (c context) detachReplica() {
 	err := instances.DetachReplica(c.client, c.replicaID).ExtractErr()
 	c.Logf("Detached replica %s", c.replicaID)
+	c.AssertNoErr(err)
 }
diff --git a/acceptance/rackspace/db/v1/user_test.go b/acceptance/rackspace/db/v1/user_test.go
index 9bf00dd..53cebc1 100644
--- a/acceptance/rackspace/db/v1/user_test.go
+++ b/acceptance/rackspace/db/v1/user_test.go
@@ -4,51 +4,51 @@
 
 import (
 	"github.com/rackspace/gophercloud/acceptance/tools"
-	"github.com/rackspace/gophercloud/openstack/identity/v2/users"
+	db "github.com/rackspace/gophercloud/openstack/db/v1/databases"
+	os "github.com/rackspace/gophercloud/openstack/db/v1/users"
 	"github.com/rackspace/gophercloud/pagination"
-	db "github.com/rackspace/gophercloud/rackspace/db/v1/databases"
-	u "github.com/rackspace/gophercloud/rackspace/db/v1/users"
+	"github.com/rackspace/gophercloud/rackspace/db/v1/users"
 )
 
 func (c context) createUsers() {
-	users := []string{
-		tools.RandomString("user_"),
-		tools.RandomString("user_"),
-		tools.RandomString("user_"),
+	c.users = []string{
+		tools.RandomString("user_", 5),
+		tools.RandomString("user_", 5),
+		tools.RandomString("user_", 5),
 	}
 
-	db1 := db.CreateOpt{Name: c.DBIDs[0]}
-	db2 := db.CreateOpt{Name: c.DBIDs[1]}
-	db3 := db.CreateOpt{Name: c.DBIDs[2]}
+	db1 := db.CreateOpts{Name: c.DBIDs[0]}
+	db2 := db.CreateOpts{Name: c.DBIDs[1]}
+	db3 := db.CreateOpts{Name: c.DBIDs[2]}
 
-	opts := u.BatchCreateOpts{
-		u.CreateOpts{
-			Name:      users[0],
-			Password:  tools.RandomString(),
-			databases: db.BatchCreateOpts{db1, db2, db3},
+	opts := os.BatchCreateOpts{
+		os.CreateOpts{
+			Name:      c.users[0],
+			Password:  tools.RandomString("db_", 5),
+			Databases: db.BatchCreateOpts{db1, db2, db3},
 		},
-		u.CreateOpts{
-			Name:      users[1],
-			Password:  tools.RandomString(),
-			databases: db.BatchCreateOpts{db1, db2},
+		os.CreateOpts{
+			Name:      c.users[1],
+			Password:  tools.RandomString("db_", 5),
+			Databases: db.BatchCreateOpts{db1, db2},
 		},
-		u.CreateOpts{
-			Name:      users[2],
-			Password:  tools.RandomString(),
-			databases: db.BatchCreateOpts{db3},
+		os.CreateOpts{
+			Name:      c.users[2],
+			Password:  tools.RandomString("db_", 5),
+			Databases: db.BatchCreateOpts{db3},
 		},
 	}
 
-	err := u.Create(c.client, c.instanceID, opts).ExtractErr()
-	c.Logf("Created three users on instance %s: %s, %s, %s", c.instanceID, users[0], users[1], users[2])
-	c.users = users
+	err := users.Create(c.client, c.instanceID, opts).ExtractErr()
+	c.Logf("Created three users on instance %s: %s, %s, %s", c.instanceID, c.users[0], c.users[1], c.users[2])
+	c.AssertNoErr(err)
 }
 
 func (c context) listUsers() {
 	c.Logf("Listing users on instance %s", c.instanceID)
 
-	err := users.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
-		uList, err := u.ExtractUsers(page)
+	err := os.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
+		uList, err := os.ExtractUsers(page)
 		c.AssertNoErr(err)
 
 		for _, u := range uList {
@@ -58,44 +58,44 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) deleteUsers() {
 	for _, id := range c.users {
-		err := u.Delete(c.client, c.instanceID, id).ExtractErr()
-		c.CheckNoErr(err)
-		t.Logf("Deleted user %s", id)
+		err := users.Delete(c.client, c.instanceID, id).ExtractErr()
+		c.AssertNoErr(err)
+		c.Logf("Deleted user %s", id)
 	}
 }
 
 func (c context) changeUserPwd() {
-	opts := u.BatchCreateOpts{}
+	opts := os.BatchCreateOpts{}
 
-	for _, id := range c.users[:1] {
-		opts = append(opts, u.CreateOpts{Password: tools.PrefixString("", 5)})
+	for _, name := range c.users[:1] {
+		opts = append(opts, os.CreateOpts{Name: name, Password: tools.RandomString("", 5)})
 	}
 
-	err := u.UpdatePassword(c.client, c.instanceID, opts).ExtractErr()
+	err := users.ChangePassword(c.client, c.instanceID, opts).ExtractErr()
 	c.Logf("Updated 2 users' passwords")
 	c.AssertNoErr(err)
 }
 
 func (c context) getUser() {
-	user, err := u.Get(c.client, c.instanceID, c.users[0]).Extract()
+	user, err := users.Get(c.client, c.instanceID, c.users[0]).Extract()
 	c.Logf("Getting user %s", user)
 	c.AssertNoErr(err)
 }
 
 func (c context) updateUser() {
-	opts := u.CreateOpts{Name: tools.PrefixString("new_name_", 5)}
-	user, err := u.Update(c.client, c.instanceID, c.users[0], opts).Extract()
-	c.Logf("Updated user %s", user)
+	opts := os.CreateOpts{Name: tools.RandomString("new_name_", 5)}
+	err := users.Update(c.client, c.instanceID, c.users[0], opts).ExtractErr()
+	c.Logf("Updated user %s", c.users[0])
 	c.AssertNoErr(err)
 }
 
 func (c context) listUserAccess() {
-	err := u.ListAccess(c.client, c.instanceId, c.users[0]).EachPage(func(page pagination.Page) (bool, error) {
+	err := users.ListAccess(c.client, c.instanceID, c.users[0]).EachPage(func(page pagination.Page) (bool, error) {
 		dbList, err := db.ExtractDBs(page)
 		c.AssertNoErr(err)
 
@@ -106,17 +106,19 @@
 		return true, nil
 	})
 
-	c.CheckNoErr(err)
+	c.AssertNoErr(err)
 }
 
 func (c context) grantUserAccess() {
-	userID, dbID := c.users[0], c.DBIDS[0]
-	err := u.GrantUserAccess(c.client, c.instanceID, userID, dbID)
-	c.Logf("Granted access for user %s to DB %s", userID, dbID)
+	opts := db.BatchCreateOpts{db.CreateOpts{Name: c.DBIDs[0]}}
+	err := users.GrantAccess(c.client, c.instanceID, c.users[0], opts).ExtractErr()
+	c.Logf("Granted access for user %s to DB %s", c.users[0], c.DBIDs[0])
+	c.AssertNoErr(err)
 }
 
 func (c context) revokeUserAccess() {
-	userID, dbID := c.users[0], c.DBIDS[0]
-	err := u.RevokeUserAccess(c.client, c.instanceID, userID, dbID)
-	c.Logf("Revoked access for user %s to DB %s", userID, dbID)
+	dbName, userName := c.DBIDs[0], c.users[0]
+	err := users.RevokeAccess(c.client, c.instanceID, userName, dbName).ExtractErr()
+	c.Logf("Revoked access for user %s to DB %s", userName, dbName)
+	c.AssertNoErr(err)
 }
diff --git a/openstack/db/v1/databases/results.go b/openstack/db/v1/databases/results.go
index 7c967f5..7d4b6ae 100644
--- a/openstack/db/v1/databases/results.go
+++ b/openstack/db/v1/databases/results.go
@@ -21,7 +21,7 @@
 
 // CreateResult represents the result of a Create operation.
 type CreateResult struct {
-	gophercloud.Result
+	gophercloud.ErrResult
 }
 
 // DeleteResult represents the result of a Delete operation.
diff --git a/openstack/db/v1/flavors/requests_test.go b/openstack/db/v1/flavors/requests_test.go
index 0afe9bb..88b5871 100644
--- a/openstack/db/v1/flavors/requests_test.go
+++ b/openstack/db/v1/flavors/requests_test.go
@@ -25,7 +25,7 @@
 
 		expected := []Flavor{
 			Flavor{
-				ID:   1,
+				ID:   "1",
 				Name: "m1.tiny",
 				RAM:  512,
 				Links: []gophercloud.Link{
@@ -34,7 +34,7 @@
 				},
 			},
 			Flavor{
-				ID:   2,
+				ID:   "2",
 				Name: "m1.small",
 				RAM:  1024,
 				Links: []gophercloud.Link{
@@ -43,7 +43,7 @@
 				},
 			},
 			Flavor{
-				ID:   3,
+				ID:   "3",
 				Name: "m1.medium",
 				RAM:  2048,
 				Links: []gophercloud.Link{
@@ -52,7 +52,7 @@
 				},
 			},
 			Flavor{
-				ID:   4,
+				ID:   "4",
 				Name: "m1.large",
 				RAM:  4096,
 				Links: []gophercloud.Link{
@@ -79,7 +79,7 @@
 	th.AssertNoErr(t, err)
 
 	expected := &Flavor{
-		ID:   1,
+		ID:   "1",
 		Name: "m1.tiny",
 		RAM:  512,
 		Links: []gophercloud.Link{
diff --git a/openstack/db/v1/flavors/results.go b/openstack/db/v1/flavors/results.go
index d3f507e..2089f67 100644
--- a/openstack/db/v1/flavors/results.go
+++ b/openstack/db/v1/flavors/results.go
@@ -28,7 +28,7 @@
 // Flavor records represent (virtual) hardware configurations for server resources in a region.
 type Flavor struct {
 	// The flavor's unique identifier.
-	ID int `mapstructure:"id"`
+	ID string `mapstructure:"id"`
 
 	// The RAM capacity for the flavor.
 	RAM int `mapstructure:"ram"`
diff --git a/openstack/db/v1/instances/fixtures.go b/openstack/db/v1/instances/fixtures.go
index 726501b..502d87f 100644
--- a/openstack/db/v1/instances/fixtures.go
+++ b/openstack/db/v1/instances/fixtures.go
@@ -105,7 +105,7 @@
 	Created: "2014-02-13T21:47:13",
 	Updated: "2014-02-13T21:47:13",
 	Flavor: flavors.Flavor{
-		ID: 1,
+		ID: "1",
 		Links: []gophercloud.Link{
 			gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/flavors/1", Rel: "self"},
 			gophercloud.Link{Href: "https://my-openstack.com/v1.0/1234/flavors/1", Rel: "bookmark"},
diff --git a/rackspace/db/v1/configurations/urls.go b/rackspace/db/v1/configurations/urls.go
index 4d4c244..abea961 100644
--- a/rackspace/db/v1/configurations/urls.go
+++ b/rackspace/db/v1/configurations/urls.go
@@ -15,11 +15,11 @@
 }
 
 func listDSParamsURL(c *gophercloud.ServiceClient, datastoreID, versionID string) string {
-	return c.ServiceURL("datastores", dsID, "versions", versionID, "parameters")
+	return c.ServiceURL("datastores", datastoreID, "versions", versionID, "parameters")
 }
 
 func getDSParamURL(c *gophercloud.ServiceClient, datastoreID, versionID, paramID string) string {
-	return c.ServiceURL("datastores", dsID, "versions", versionID, "parameters", paramID)
+	return c.ServiceURL("datastores", datastoreID, "versions", versionID, "parameters", paramID)
 }
 
 func listGlobalParamsURL(c *gophercloud.ServiceClient, versionID string) string {
diff --git a/rackspace/db/v1/databases/results.go b/rackspace/db/v1/databases/results.go
deleted file mode 100644
index 18cbec7..0000000
--- a/rackspace/db/v1/databases/results.go
+++ /dev/null
@@ -1 +0,0 @@
-package databases
diff --git a/rackspace/db/v1/flavors/delegate.go b/rackspace/db/v1/flavors/delegate.go
index 689b81e..fd2608d 100644
--- a/rackspace/db/v1/flavors/delegate.go
+++ b/rackspace/db/v1/flavors/delegate.go
@@ -12,6 +12,6 @@
 }
 
 // Get retrieves the details for a particular flavor.
-func Get(client *gophercloud.ServiceClient, flavorID string) os.GetResult {
+func Get(client *gophercloud.ServiceClient, flavorID int) os.GetResult {
 	return os.Get(client, flavorID)
 }
diff --git a/rackspace/db/v1/instances/fixtures.go b/rackspace/db/v1/instances/fixtures.go
index 92ad7ec..b59aeae 100644
--- a/rackspace/db/v1/instances/fixtures.go
+++ b/rackspace/db/v1/instances/fixtures.go
@@ -2,6 +2,7 @@
 
 import (
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/db/v1/flavors"
 	os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
 	"github.com/rackspace/gophercloud/rackspace/db/v1/datastores"
 )
@@ -301,7 +302,7 @@
 	Created:   "2014-10-14T18:42:15",
 	ID:        "8367c312-7c40-4a66-aab1-5767478914fc",
 	Volume:    os.Volume{Size: 1},
-	Flavor:    os.Flavor{ID: "9"},
+	Flavor:    flavors.Flavor{ID: "9"},
 	Datastore: datastores.DatastorePartial{Version: "5.6", Type: "mysql"},
 	ReplicaOf: &Instance{
 		ID: "6bdca2fc-418e-40bd-a595-62abda61862d",
diff --git a/rackspace/db/v1/instances/results.go b/rackspace/db/v1/instances/results.go
index 7a44f1b..a516cb4 100644
--- a/rackspace/db/v1/instances/results.go
+++ b/rackspace/db/v1/instances/results.go
@@ -3,6 +3,7 @@
 import (
 	"github.com/mitchellh/mapstructure"
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/db/v1/flavors"
 	os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
 	"github.com/rackspace/gophercloud/pagination"
 	"github.com/rackspace/gophercloud/rackspace/db/v1/datastores"
@@ -20,7 +21,7 @@
 	Datastore datastores.DatastorePartial
 
 	// Indicates the hardware flavor the instance uses.
-	Flavor os.Flavor
+	Flavor flavors.Flavor
 
 	// A DNS-resolvable hostname associated with the database instance (rather
 	// than an IPv4 address). Since the hostname always resolves to the correct
diff --git a/rackspace/db/v1/users/requests.go b/rackspace/db/v1/users/requests.go
index 7c30079..fd0b649 100644
--- a/rackspace/db/v1/users/requests.go
+++ b/rackspace/db/v1/users/requests.go
@@ -107,16 +107,9 @@
 
 /*
 RevokeAccess will revoke access for the specified user to one or more databases
-on a specified instance. For example, to remove a user's access to multiple
-databases:
+on a specified instance. For example:
 
-	opts := db.BatchCreateOpts{
-		db.CreateOpts{Name: "database_1"},
-		db.CreateOpts{Name: "database_3"},
-		db.CreateOpts{Name: "database_19"},
-	}
-
-	RevokeAccess(client, "instance_id", "user_name", opts)
+	RevokeAccess(client, "instance_id", "user_name", "db_name")
 */
 func RevokeAccess(client *gophercloud.ServiceClient, instanceID, userName, dbName string) RevokeAccessResult {
 	var res RevokeAccessResult
