diff --git a/rackspace/db/v1/instances/delegate.go b/rackspace/db/v1/instances/delegate.go
index 3e5596f..c8551df 100644
--- a/rackspace/db/v1/instances/delegate.go
+++ b/rackspace/db/v1/instances/delegate.go
@@ -1,17 +1,10 @@
 package instances
 
 import (
-	"fmt"
-
-	"github.com/racker/perigee"
 	"github.com/rackspace/gophercloud"
+	os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
 )
 
-// CreateOptsBuilder is the top-level interface for create options.
-type CreateOptsBuilder interface {
-	ToInstanceCreateMap() (map[string]interface{}, error)
-}
-
 // DatastoreOpts represents the configuration for how an instance stores data.
 type DatastoreOpts struct {
 	Version string
@@ -25,105 +18,6 @@
 	}, nil
 }
 
-// DatabaseOpts is the struct responsible for configuring a database; often in
-// the context of an instance.
-type DatabaseOpts struct {
-	// Specifies the name of the database. Optional.
-	Name string
-
-	// Set of symbols and encodings. Optional; the default character set is utf8.
-	CharSet string
-
-	// Set of rules for comparing characters in a character set. Optional; the
-	// default value for collate is utf8_general_ci.
-	Collate string
-}
-
-func (opts DatabaseOpts) ToMap() (map[string]string, error) {
-	db := map[string]string{}
-	if opts.Name != "" {
-		db["name"] = opts.Name
-	}
-	if opts.CharSet != "" {
-		db["character_set"] = opts.CharSet
-	}
-	if opts.Collate != "" {
-		db["collate"] = opts.Collate
-	}
-	return db, nil
-}
-
-type DatabasesOpts []DatabaseOpts
-
-func (opts DatabasesOpts) ToMap() ([]map[string]string, error) {
-	var dbs []map[string]string
-	for _, db := range opts {
-		dbMap, err := db.ToMap()
-		if err != nil {
-			return dbs, err
-		}
-		dbs = append(dbs, dbMap)
-	}
-	return dbs, nil
-}
-
-// UserOpts is the struct responsible for configuring a user; often in the
-// context of an instance.
-type UserOpts struct {
-	// Specifies a name for the user.
-	Name string
-
-	// 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.
-	Databases []DatabaseOpts
-
-	// 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
-}
-
-func (opts UserOpts) ToMap() (map[string]interface{}, error) {
-	user := map[string]interface{}{}
-
-	if opts.Name != "" {
-		user["name"] = opts.Name
-	}
-	if opts.Password != "" {
-		user["password"] = opts.Password
-	}
-	if opts.Host != "" {
-		user["host"] = opts.Host
-	}
-
-	var dbs []map[string]string
-	for _, db := range opts.Databases {
-		dbs = append(dbs, map[string]string{"name": db.Name})
-	}
-	if len(dbs) > 0 {
-		user["databases"] = dbs
-	}
-
-	return user, nil
-}
-
-type UsersOpts []UserOpts
-
-func (opts UsersOpts) ToMap() ([]map[string]interface{}, error) {
-	var users []map[string]interface{}
-	for _, opt := range opts {
-		user, err := opt.ToMap()
-		if err != nil {
-			return users, err
-		}
-		users = append(users, user)
-	}
-	return users, nil
-}
-
 // CreateOpts is the struct responsible for configuring a new database instance.
 type CreateOpts struct {
 	// Either the integer UUID (in string form) of the flavor, or its URI
@@ -138,6 +32,12 @@
 	// 255 characters and any characters are permitted. Optional.
 	Name string
 
+	// A slice of database information options.
+	Databases os.DatabasesOpts
+
+	// A slice of user information options.
+	Users os.UsersOpts
+
 	// ID of the configuration group to associate with the instance. Optional.
 	ConfigID string
 
@@ -145,12 +45,6 @@
 	// optional, and if excluded will default to MySQL.
 	Datastore *DatastoreOpts
 
-	// A slice of database information options.
-	Databases DatabasesOpts
-
-	// A slice of user information options.
-	Users UsersOpts
-
 	// Specifies the backup ID from which to restore the database instance. There
 	// are some things to be aware of before using this field.  When you execute
 	// the Restore Backup operation, a new database instance is created to store
@@ -164,24 +58,24 @@
 }
 
 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")
-	}
-	if opts.FlavorRef == "" {
-		return nil, fmt.Errorf("FlavorRef is a required field")
+	instance, err := os.CreateOpts{
+		FlavorRef: opts.FlavorRef,
+		Size:      opts.Size,
+		Name:      opts.Name,
+		Databases: opts.Databases,
+		Users:     opts.Users,
+	}.ToInstanceCreateMap()
+
+	if err != nil {
+		return nil, err
 	}
 
-	instance := map[string]interface{}{
-		"volume":    map[string]int{"size": opts.Size},
-		"flavorRef": opts.FlavorRef,
-	}
+	instance = instance["instance"].(map[string]interface{})
 
-	if opts.Name != "" {
-		instance["name"] = opts.Name
-	}
 	if opts.ConfigID != "" {
 		instance["configuration"] = opts.ConfigID
 	}
+
 	if opts.Datastore != nil {
 		ds, err := opts.Datastore.ToMap()
 		if err != nil {
@@ -189,20 +83,7 @@
 		}
 		instance["datastore"] = ds
 	}
-	if len(opts.Databases) > 0 {
-		dbs, err := opts.Databases.ToMap()
-		if err != nil {
-			return nil, err
-		}
-		instance["databases"] = dbs
-	}
-	if len(opts.Users) > 0 {
-		users, err := opts.Users.ToMap()
-		if err != nil {
-			return nil, err
-		}
-		instance["users"] = users
-	}
+
 	if opts.RestorePoint != "" {
 		instance["restorePoint"] = opts.RestorePoint
 	}
@@ -211,24 +92,6 @@
 }
 
 // Create will provision a new Database instance.
-func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) CreateResult {
-	var res CreateResult
-
-	reqBody, err := opts.ToInstanceCreateMap()
-	if err != nil {
-		res.Err = err
-		return res
-	}
-
-	resp, err := perigee.Request("POST", createURL(client), perigee.Options{
-		MoreHeaders: client.AuthenticatedHeaders(),
-		ReqBody:     &reqBody,
-		Results:     &res.Body,
-		OkCodes:     []int{200},
-	})
-
-	res.Header = resp.HttpResponse.Header
-	res.Err = err
-
-	return res
+func Create(client *gophercloud.ServiceClient, opts os.CreateOptsBuilder) CreateResult {
+	return CreateResult{os.Create(client, opts)}
 }
diff --git a/rackspace/db/v1/instances/delegate_test.go b/rackspace/db/v1/instances/delegate_test.go
index d995365..03dd47a 100644
--- a/rackspace/db/v1/instances/delegate_test.go
+++ b/rackspace/db/v1/instances/delegate_test.go
@@ -4,6 +4,7 @@
 	"testing"
 
 	"github.com/rackspace/gophercloud"
+	os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
 	th "github.com/rackspace/gophercloud/testhelper"
 	fake "github.com/rackspace/gophercloud/testhelper/client"
 )
@@ -17,16 +18,16 @@
 	opts := CreateOpts{
 		Name:      "json_rack_instance",
 		FlavorRef: "1",
-		Databases: DatabasesOpts{
-			DatabaseOpts{CharSet: "utf8", Collate: "utf8_general_ci", Name: "sampledb"},
-			DatabaseOpts{Name: "nextround"},
+		Databases: os.DatabasesOpts{
+			os.DatabaseOpts{CharSet: "utf8", Collate: "utf8_general_ci", Name: "sampledb"},
+			os.DatabaseOpts{Name: "nextround"},
 		},
-		Users: UsersOpts{
-			UserOpts{
+		Users: os.UsersOpts{
+			os.UserOpts{
 				Name:     "demouser",
 				Password: "demopassword",
-				Databases: DatabasesOpts{
-					DatabaseOpts{Name: "sampledb"},
+				Databases: os.DatabasesOpts{
+					os.DatabaseOpts{Name: "sampledb"},
 				},
 			},
 		},
@@ -40,7 +41,7 @@
 		Created:   "2014-02-13T21:47:13",
 		Updated:   "2014-02-13T21:47:13",
 		Datastore: Datastore{Type: "mysql", Version: "5.6"},
-		Flavor: Flavor{
+		Flavor: os.Flavor{
 			ID: "1",
 			Links: []gophercloud.Link{
 				gophercloud.Link{Href: "https://ord.databases.api.rackspacecloud.com/v1.0/1234/flavors/1", Rel: "self"},
@@ -54,7 +55,7 @@
 		},
 		Name:   "json_rack_instance",
 		Status: "BUILD",
-		Volume: Volume{Size: 2},
+		Volume: os.Volume{Size: 2},
 	}
 
 	th.AssertNoErr(t, err)
diff --git a/rackspace/db/v1/instances/results.go b/rackspace/db/v1/instances/results.go
index 66b3ce1..df13aed 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"
+	os "github.com/rackspace/gophercloud/openstack/db/v1/instances"
 )
 
 type Datastore struct {
@@ -10,40 +11,24 @@
 	Version string
 }
 
-type Flavor struct {
-	ID    string
-	Links []gophercloud.Link
-}
-
-type Volume struct {
-	Size int
-}
-
 type Instance struct {
 	Created   string //time.Time
 	Updated   string //time.Time
 	Datastore Datastore
-	Flavor    Flavor
+	Flavor    os.Flavor
 	Hostname  string
 	ID        string
 	Links     []gophercloud.Link
 	Name      string
 	Status    string
-	Volume    Volume
+	Volume    os.Volume
 }
 
 // CreateResult represents the result of a Create operation.
 type CreateResult struct {
-	gophercloud.Result
+	os.CreateResult
 }
 
-// func handleInstanceConversion(from reflect.Kind, to reflect.Kind, data interface{}) (interface{}, error) {
-// 	if (from == reflect.String) && (to == reflect.Map) {
-// 		return map[string]interface{}{}, nil
-// 	}
-// 	return data, nil
-// }
-
 func (r CreateResult) Extract() (*Instance, error) {
 	if r.Err != nil {
 		return nil, r.Err
