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
