initial migration from rackspace/gophercloud
diff --git a/openstack/compute/v2/servers/requests.go b/openstack/compute/v2/servers/requests.go
index 8e60daa..c938895 100644
--- a/openstack/compute/v2/servers/requests.go
+++ b/openstack/compute/v2/servers/requests.go
@@ -6,9 +6,9 @@
 	"errors"
 	"fmt"
 
+	"github.com/jrperritt/gophercloud/openstack/compute/v2/images"
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/openstack/compute/v2/flavors"
-	"github.com/rackspace/gophercloud/openstack/compute/v2/images"
 	"github.com/rackspace/gophercloud/pagination"
 )
 
@@ -130,7 +130,7 @@
 // CreateOpts specifies server creation parameters.
 type CreateOpts struct {
 	// Name [required] is the name to assign to the newly launched server.
-	Name string
+	Name string `b:"name,required"`
 
 	// ImageRef [optional; required if ImageName is not provided] is the ID or full
 	// URL to the image that contains the server's OS and initial state.
@@ -247,6 +247,30 @@
 		server["personality"] = opts.Personality
 	}
 
+	// If ImageRef isn't provided, use ImageName to ascertain the image ID.
+	if opts.ImageRef == "" {
+		if opts.ImageName == "" {
+			return nil, errors.New("One and only one of ImageRef and ImageName must be provided.")
+		}
+		imageID, err := images.IDFromName(client, opts.ImageName)
+		if err != nil {
+			return nil, err
+		}
+		server["imageRef"] = imageID
+	}
+
+	// If FlavorRef isn't provided, use FlavorName to ascertain the flavor ID.
+	if opts.FlavorRef == "" {
+		if opts.FlavorName == "" {
+			return nil, errors.New("One and only one of FlavorRef and FlavorName must be provided.")
+		}
+		flavorID, err := flavors.IDFromName(client, opts.FlavorName)
+		if err != nil {
+			return nil, err
+		}
+		server["flavorRef"] = flavorID
+	}
+
 	return map[string]interface{}{"server": server}, nil
 }
 
@@ -260,38 +284,6 @@
 		return res
 	}
 
-	// If ImageRef isn't provided, use ImageName to ascertain the image ID.
-	if reqBody["server"].(map[string]interface{})["imageRef"].(string) == "" {
-		imageName := reqBody["server"].(map[string]interface{})["imageName"].(string)
-		if imageName == "" {
-			res.Err = errors.New("One and only one of ImageRef and ImageName must be provided.")
-			return res
-		}
-		imageID, err := images.IDFromName(client, imageName)
-		if err != nil {
-			res.Err = err
-			return res
-		}
-		reqBody["server"].(map[string]interface{})["imageRef"] = imageID
-	}
-	delete(reqBody["server"].(map[string]interface{}), "imageName")
-
-	// If FlavorRef isn't provided, use FlavorName to ascertain the flavor ID.
-	if reqBody["server"].(map[string]interface{})["flavorRef"].(string) == "" {
-		flavorName := reqBody["server"].(map[string]interface{})["flavorName"].(string)
-		if flavorName == "" {
-			res.Err = errors.New("One and only one of FlavorRef and FlavorName must be provided.")
-			return res
-		}
-		flavorID, err := flavors.IDFromName(client, flavorName)
-		if err != nil {
-			res.Err = err
-			return res
-		}
-		reqBody["server"].(map[string]interface{})["flavorRef"] = flavorID
-	}
-	delete(reqBody["server"].(map[string]interface{}), "flavorName")
-
 	_, res.Err = client.Post(listURL(client), reqBody, &res.Body, nil)
 	return res
 }
@@ -814,14 +806,14 @@
 }
 
 // CreateImage makes a request against the nova API to schedule an image to be created of the server
-func CreateImage(client *gophercloud.ServiceClient, serverId string, opts CreateImageOptsBuilder) CreateImageResult {
+func CreateImage(client *gophercloud.ServiceClient, serverID string, opts CreateImageOptsBuilder) CreateImageResult {
 	var res CreateImageResult
 	reqBody, err := opts.ToServerCreateImageMap()
 	if err != nil {
 		res.Err = err
 		return res
 	}
-	response, err := client.Post(actionURL(client, serverId), reqBody, nil, &gophercloud.RequestOpts{
+	response, err := client.Post(actionURL(client, serverID), reqBody, nil, &gophercloud.RequestOpts{
 		OkCodes: []int{202},
 	})
 	res.Err = err