diff --git a/openstack/db/v1/databases/doc.go b/openstack/db/v1/databases/doc.go
index 18cbec7..15275fe 100644
--- a/openstack/db/v1/databases/doc.go
+++ b/openstack/db/v1/databases/doc.go
@@ -1 +1,6 @@
+// Package flavors provides information and interaction with the database API
+// resource in the OpenStack Database service.
+//
+// A database, when referred to here, refers to the database engine running on
+// an instance.
 package databases
diff --git a/openstack/db/v1/databases/requests.go b/openstack/db/v1/databases/requests.go
index 4d10878..812b193 100644
--- a/openstack/db/v1/databases/requests.go
+++ b/openstack/db/v1/databases/requests.go
@@ -7,6 +7,7 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
+// CreateOptsBuilder builds create options
 type CreateOptsBuilder interface {
 	ToDBCreateMap() (map[string]interface{}, error)
 }
@@ -14,17 +15,28 @@
 // DatabaseOpts is the struct responsible for configuring a database; often in
 // the context of an instance.
 type CreateOpts struct {
-	// Specifies the name of the database. Optional.
+	// [REQUIRED] Specifies the name of the database. Valid names can be composed
+	// of the following characters: letters (either case); numbers; these
+	// characters '@', '?', '#', ' ' but NEVER beginning a name string; '_' is
+	// permitted anywhere. Prohibited characters that are forbidden include:
+	// single quotes, double quotes, back quotes, semicolons, commas, backslashes,
+	// and forward slashes.
 	Name string
 
-	// Set of symbols and encodings. Optional; the default character set is utf8.
+	// [OPTIONAL] Set of symbols and encodings. The default character set is
+	// "utf8". See http://dev.mysql.com/doc/refman/5.1/en/charset-mysql.html for
+	// supported character sets.
 	CharSet string
 
-	// Set of rules for comparing characters in a character set. Optional; the
-	// default value for collate is utf8_general_ci.
+	// [OPTIONAL] Set of rules for comparing characters in a character set. The
+	// default value for collate is "utf8_general_ci". See
+	// http://dev.mysql.com/doc/refman/5.1/en/charset-mysql.html for supported
+	// collations.
 	Collate string
 }
 
+// ToMap is a helper function to convert individual DB create opt structures
+// into sub-maps.
 func (opts CreateOpts) ToMap() (map[string]string, error) {
 	if opts.Name == "" {
 		return nil, fmt.Errorf("Name is a required field")
@@ -44,8 +56,10 @@
 	return db, nil
 }
 
+// BatchCreateOpts allows for multiple databases to created and modified.
 type BatchCreateOpts []CreateOpts
 
+// ToDBCreateMap renders a JSON map for creating DBs.
 func (opts BatchCreateOpts) ToDBCreateMap() (map[string]interface{}, error) {
 	var dbs []map[string]string
 	for _, db := range opts {
@@ -58,6 +72,8 @@
 	return map[string]interface{}{"databases": dbs}, nil
 }
 
+// Create will create a new database within the specified instance. If the
+// specified instance does not exist, a 404 error will be returned.
 func Create(client *gophercloud.ServiceClient, instanceID string, opts CreateOptsBuilder) CreateResult {
 	var res CreateResult
 
@@ -76,6 +92,9 @@
 	return res
 }
 
+// List will list all of the databases for a specified instance. Note: this
+// operation will only return user-defined databases; it will exclude system
+// databases like "mysql", "information_schema", "lost+found" etc.
 func List(client *gophercloud.ServiceClient, instanceID string) pagination.Pager {
 	createPageFn := func(r pagination.PageResult) pagination.Page {
 		return DBPage{pagination.LinkedPageBase{PageResult: r}}
@@ -84,6 +103,8 @@
 	return pagination.NewPager(client, baseURL(client, instanceID), createPageFn)
 }
 
+// Delete will permanently delete the database within a specified instance.
+// All contained data inside the database will also be permanently deleted.
 func Delete(client *gophercloud.ServiceClient, instanceID, dbName string) DeleteResult {
 	var res DeleteResult
 
diff --git a/openstack/db/v1/databases/results.go b/openstack/db/v1/databases/results.go
index 85e3363..7c967f5 100644
--- a/openstack/db/v1/databases/results.go
+++ b/openstack/db/v1/databases/results.go
@@ -6,8 +6,9 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
+// Database represents a Database API resource.
 type Database struct {
-	// Specifies the name of the MySQL DB.
+	// Specifies the name of the MySQL database.
 	Name string
 
 	// Set of symbols and encodings. The default character set is utf8.
@@ -18,10 +19,16 @@
 	Collate string
 }
 
+// CreateResult represents the result of a Create operation.
 type CreateResult struct {
 	gophercloud.Result
 }
 
+// DeleteResult represents the result of a Delete operation.
+type DeleteResult struct {
+	gophercloud.ErrResult
+}
+
 // DBPage represents a single page of a paginated DB collection.
 type DBPage struct {
 	pagination.LinkedPageBase
@@ -63,7 +70,3 @@
 	err := mapstructure.Decode(casted, &response)
 	return response.Databases, err
 }
-
-type DeleteResult struct {
-	gophercloud.ErrResult
-}
diff --git a/openstack/db/v1/flavors/doc.go b/openstack/db/v1/flavors/doc.go
index 5822e1b..4d281d5 100644
--- a/openstack/db/v1/flavors/doc.go
+++ b/openstack/db/v1/flavors/doc.go
@@ -1,7 +1,7 @@
 // Package flavors provides information and interaction with the flavor API
-// resource in the OpenStack Compute service.
+// resource in the OpenStack Database service.
 //
-// A flavor is an available hardware configuration for a server. Each flavor
-// has a unique combination of disk space, memory capacity and priority for CPU
-// time.
+// A flavor is an available hardware configuration for a database instance.
+// Each flavor has a unique combination of disk space, memory capacity and
+// priority for CPU time.
 package flavors
diff --git a/openstack/db/v1/flavors/fixtures.go b/openstack/db/v1/flavors/fixtures.go
index f0016bc..c7102e7 100644
--- a/openstack/db/v1/flavors/fixtures.go
+++ b/openstack/db/v1/flavors/fixtures.go
@@ -26,7 +26,7 @@
 `
 
 var (
-	flavorID = "{flavorID}"
+	flavorID = 1
 	_baseURL = "/flavors"
 	resURL   = "/flavors/" + flavorID
 )
diff --git a/openstack/db/v1/flavors/requests.go b/openstack/db/v1/flavors/requests.go
index b67a07b..beeeddc 100644
--- a/openstack/db/v1/flavors/requests.go
+++ b/openstack/db/v1/flavors/requests.go
@@ -5,6 +5,9 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
+// List will list all available hardware flavors that an instance can use. The
+// operation is identical to the one supported by the Nova API, but without the
+// "disk" property.
 func List(client *gophercloud.ServiceClient) pagination.Pager {
 	createPage := func(r pagination.PageResult) pagination.Page {
 		return FlavorPage{pagination.LinkedPageBase{PageResult: r}}
@@ -13,7 +16,8 @@
 	return pagination.NewPager(client, listURL(client), createPage)
 }
 
-func Get(client *gophercloud.ServiceClient, id string) GetResult {
+// Get will retrieve information for a specified hardware flavor.
+func Get(client *gophercloud.ServiceClient, id int) GetResult {
 	var gr GetResult
 
 	_, gr.Err = client.Request("GET", getURL(client, id), gophercloud.RequestOpts{
diff --git a/openstack/db/v1/flavors/results.go b/openstack/db/v1/flavors/results.go
index 5aac5ce..d3f507e 100644
--- a/openstack/db/v1/flavors/results.go
+++ b/openstack/db/v1/flavors/results.go
@@ -1,16 +1,11 @@
 package flavors
 
 import (
-	"errors"
-
 	"github.com/mitchellh/mapstructure"
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/pagination"
 )
 
-// ErrCannotInterpret is returned by an Extract call if the response body doesn't have the expected structure.
-var ErrCannotInterpet = errors.New("Unable to interpret a response body.")
-
 // GetResult temporarily holds the response from a Get call.
 type GetResult struct {
 	gophercloud.Result
@@ -32,15 +27,16 @@
 
 // Flavor records represent (virtual) hardware configurations for server resources in a region.
 type Flavor struct {
-	// The Id field contains the flavor's unique identifier.
-	// For example, this identifier will be useful when specifying which hardware configuration to use for a new server instance.
+	// The flavor's unique identifier.
 	ID int `mapstructure:"id"`
 
+	// The RAM capacity for the flavor.
 	RAM int `mapstructure:"ram"`
 
 	// The Name field provides a human-readable moniker for the flavor.
 	Name string `mapstructure:"name"`
 
+	// Links to access the flavor.
 	Links []gophercloud.Link
 }
 
diff --git a/openstack/db/v1/instances/doc.go b/openstack/db/v1/instances/doc.go
index 98a1bb3..dc5c90f 100644
--- a/openstack/db/v1/instances/doc.go
+++ b/openstack/db/v1/instances/doc.go
@@ -1 +1,7 @@
+// Package instances provides information and interaction with the instance API
+// resource in the OpenStack Database service.
+//
+// A database instance is an isolated database environment with compute and
+// storage resources in a single tenant environment on a shared physical host
+// machine.
 package instances
diff --git a/openstack/db/v1/instances/requests.go b/openstack/db/v1/instances/requests.go
index fc971fd..d87fdec 100644
--- a/openstack/db/v1/instances/requests.go
+++ b/openstack/db/v1/instances/requests.go
@@ -35,6 +35,7 @@
 	Users users.BatchCreateOpts
 }
 
+// ToInstanceCreateMap will render a JSON map.
 func (opts CreateOpts) ToInstanceCreateMap() (map[string]interface{}, error) {
 	if opts.Size > 300 || opts.Size < 1 {
 		return nil, fmt.Errorf("Size (GB) must be between 1-300")
diff --git a/openstack/db/v1/instances/results.go b/openstack/db/v1/instances/results.go
index ae3b9e0..f85db81 100644
--- a/openstack/db/v1/instances/results.go
+++ b/openstack/db/v1/instances/results.go
@@ -3,19 +3,11 @@
 import (
 	"github.com/mitchellh/mapstructure"
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/db/v1/flavors"
 	"github.com/rackspace/gophercloud/openstack/db/v1/users"
 	"github.com/rackspace/gophercloud/pagination"
 )
 
-// Flavor represents information about a hardware flavor for a database instance.
-type Flavor struct {
-	// The unique identifier for a flavor.
-	ID string
-
-	// Various links which allow a user to reference the flavor.
-	Links []gophercloud.Link
-}
-
 // Volume represents information about an attached volume for a database instance.
 type Volume struct {
 	// The size in GB of the volume
@@ -33,7 +25,7 @@
 	Updated string //time.Time
 
 	// Indicates the hardware flavor the instance uses.
-	Flavor 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/openstack/db/v1/users/doc.go b/openstack/db/v1/users/doc.go
index 82abcb9..cf07832 100644
--- a/openstack/db/v1/users/doc.go
+++ b/openstack/db/v1/users/doc.go
@@ -1 +1,3 @@
+// Package users provides information and interaction with the user API
+// resource in the OpenStack Database service.
 package users
diff --git a/openstack/db/v1/users/requests.go b/openstack/db/v1/users/requests.go
index e596739..e0616db 100644
--- a/openstack/db/v1/users/requests.go
+++ b/openstack/db/v1/users/requests.go
@@ -1,11 +1,14 @@
 package users
 
 import (
+	"errors"
+
 	"github.com/rackspace/gophercloud"
 	db "github.com/rackspace/gophercloud/openstack/db/v1/databases"
 	"github.com/rackspace/gophercloud/pagination"
 )
 
+// CreateOptsBuilder is the top-level interface for creating JSON maps.
 type CreateOptsBuilder interface {
 	ToUserCreateMap() (map[string]interface{}, error)
 }
@@ -13,31 +16,46 @@
 // CreateOpts is the struct responsible for configuring a new user; often in the
 // context of an instance.
 type CreateOpts struct {
-	// Specifies a name for the user.
+	// [REQUIRED] Specifies a name for the user. Valid names can be composed
+	// of the following characters: letters (either case); numbers; these
+	// characters '@', '?', '#', ' ' but NEVER beginning a name string; '_' is
+	// permitted anywhere. Prohibited characters that are forbidden include:
+	// single quotes, double quotes, back quotes, semicolons, commas, backslashes,
+	// and forward slashes. Spaces at the front or end of a user name are also
+	// not permitted.
 	Name string
 
-	// Specifies a password for the user.
+	// [REQUIRED] Specifies a password for the user.
 	Password string
 
-	// An array of databases that this user will connect to. The `name` field is
-	// the only requirement for each option.
+	// [OPTIONAL] An array of databases that this user will connect to. The
+	// "name" field is the only requirement for each option.
 	Databases db.BatchCreateOpts
 
-	// Specifies the host from which a user is allowed to connect to the database.
-	// Possible values are a string containing an IPv4 address or "%" to allow
-	// connecting from any host. Optional; the default is "%".
+	// [OPTIONAL] Specifies the host from which a user is allowed to connect to
+	// the database. Possible values are a string containing an IPv4 address or
+	// "%" to allow connecting from any host. Optional; the default is "%".
 	Host string
 }
 
+// ToMap is a convenience function for creating sub-maps for individual users.
 func (opts CreateOpts) ToMap() (map[string]interface{}, error) {
-	user := map[string]interface{}{}
 
-	if opts.Name != "" {
-		user["name"] = opts.Name
+	if opts.Name == "root" {
+		return nil, errors.New("root is a reserved user name and cannot be used")
 	}
-	if opts.Password != "" {
-		user["password"] = opts.Password
+	if opts.Name == "" {
+		return nil, errors.New("Name is a required field")
 	}
+	if opts.Password == "" {
+		return nil, errors.New("Password is a required field")
+	}
+
+	user := map[string]interface{}{
+		"name":     opts.Name,
+		"password": opts.Password,
+	}
+
 	if opts.Host != "" {
 		user["host"] = opts.Host
 	}
@@ -53,8 +71,10 @@
 	return user, nil
 }
 
+// BatchCreateOpts allows multiple users to be created at once.
 type BatchCreateOpts []CreateOpts
 
+// ToUserCreateMap will generate a JSON map.
 func (opts BatchCreateOpts) ToUserCreateMap() (map[string]interface{}, error) {
 	var users []map[string]interface{}
 	for _, opt := range opts {
@@ -67,6 +87,10 @@
 	return map[string]interface{}{"users": users}, nil
 }
 
+// Create asynchronously provisions a new user for the specified database
+// instance based on the configuration defined in CreateOpts. If databases are
+// assigned for a particular user, the user will be granted all privileges
+// for those specified databases. "root" is a reserved name and cannot be used.
 func Create(client *gophercloud.ServiceClient, instanceID string, opts CreateOptsBuilder) CreateResult {
 	var res CreateResult
 
@@ -84,6 +108,9 @@
 	return res
 }
 
+// List will list all the users associated with a specified database instance,
+// along with their associated databases. This operation will not return any
+// system users or administrators for a database.
 func List(client *gophercloud.ServiceClient, instanceID string) pagination.Pager {
 	createPageFn := func(r pagination.PageResult) pagination.Page {
 		return UserPage{pagination.LinkedPageBase{PageResult: r}}
@@ -92,6 +119,7 @@
 	return pagination.NewPager(client, baseURL(client, instanceID), createPageFn)
 }
 
+// Delete will permanently delete a user from a specified database instance.
 func Delete(client *gophercloud.ServiceClient, instanceID, userName string) DeleteResult {
 	var res DeleteResult
 
diff --git a/openstack/db/v1/users/results.go b/openstack/db/v1/users/results.go
index ce07e76..217ddd8 100644
--- a/openstack/db/v1/users/results.go
+++ b/openstack/db/v1/users/results.go
@@ -19,10 +19,16 @@
 	Databases []db.Database
 }
 
+// CreateResult represents the result of a create operation.
 type CreateResult struct {
 	gophercloud.ErrResult
 }
 
+// DeleteResult represents the result of a delete operation.
+type DeleteResult struct {
+	gophercloud.ErrResult
+}
+
 // UserPage represents a single page of a paginated user collection.
 type UserPage struct {
 	pagination.LinkedPageBase
@@ -65,7 +71,3 @@
 
 	return response.Users, err
 }
-
-type DeleteResult struct {
-	gophercloud.ErrResult
-}
