Use result structs for server requests.
diff --git a/openstack/compute/v2/servers/requests.go b/openstack/compute/v2/servers/requests.go
index da93ff1..3b23be5 100644
--- a/openstack/compute/v2/servers/requests.go
+++ b/openstack/compute/v2/servers/requests.go
@@ -36,11 +36,6 @@
 	return servers[len(servers)-1].ID, nil
 }
 
-// ServerResult abstracts a single server description, as returned by the OpenStack provider.
-// As OpenStack extensions may freely alter the response bodies of the structures returned to the client,
-// you may only safely access the data provided through separate, type-safe accessors or methods.
-type ServerResult map[string]interface{}
-
 // List makes a request against the API to list servers accessible to you.
 func List(client *gophercloud.ServiceClient) pagination.Pager {
 	createPage := func(r pagination.LastHTTPResponse) pagination.Page {
@@ -53,17 +48,17 @@
 }
 
 // Create requests a server to be provisioned to the user in the current tenant.
-func Create(client *gophercloud.ServiceClient, opts map[string]interface{}) (ServerResult, error) {
-	var sr ServerResult
-	_, err := perigee.Request("POST", getListURL(client), perigee.Options{
-		Results: &sr,
+func Create(client *gophercloud.ServiceClient, opts map[string]interface{}) CreateResult {
+	var result CreateResult
+	_, result.Err = perigee.Request("POST", getListURL(client), perigee.Options{
+		Results: &result.Resp,
 		ReqBody: map[string]interface{}{
 			"server": opts,
 		},
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
 		OkCodes:     []int{202},
 	})
-	return sr, err
+	return result
 }
 
 // Delete requests that a server previously provisioned be removed from your account.
@@ -76,26 +71,26 @@
 }
 
 // Get requests details on a single server, by ID.
-func Get(client *gophercloud.ServiceClient, id string) (ServerResult, error) {
-	var sr ServerResult
-	_, err := perigee.Request("GET", getServerURL(client, id), perigee.Options{
-		Results:     &sr,
+func Get(client *gophercloud.ServiceClient, id string) GetResult {
+	var result GetResult
+	_, result.Err = perigee.Request("GET", getServerURL(client, id), perigee.Options{
+		Results:     &result.Resp,
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
 	})
-	return sr, err
+	return result
 }
 
 // Update requests that various attributes of the indicated server be changed.
-func Update(client *gophercloud.ServiceClient, id string, opts map[string]interface{}) (ServerResult, error) {
-	var sr ServerResult
-	_, err := perigee.Request("PUT", getServerURL(client, id), perigee.Options{
-		Results: &sr,
+func Update(client *gophercloud.ServiceClient, id string, opts map[string]interface{}) UpdateResult {
+	var result UpdateResult
+	_, result.Err = perigee.Request("PUT", getServerURL(client, id), perigee.Options{
+		Results: &result.Resp,
 		ReqBody: map[string]interface{}{
 			"server": opts,
 		},
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
 	})
-	return sr, err
+	return result
 }
 
 // ChangeAdminPassword alters the administrator or root password for a specified server.
@@ -194,39 +189,43 @@
 //
 // Rebuild returns a server result as though you had called GetDetail() on the server's ID.
 // The information, however, refers to the new server, not the old.
-func Rebuild(client *gophercloud.ServiceClient, id, name, password, imageRef string, additional map[string]interface{}) (ServerResult, error) {
-	var sr ServerResult
+func Rebuild(client *gophercloud.ServiceClient, id, name, password, imageRef string, additional map[string]interface{}) RebuildResult {
+	var result RebuildResult
 
 	if id == "" {
-		return sr, &ErrArgument{
+		result.Err = &ErrArgument{
 			Function: "Rebuild",
 			Argument: "id",
 			Value:    "",
 		}
+		return result
 	}
 
 	if name == "" {
-		return sr, &ErrArgument{
+		result.Err = &ErrArgument{
 			Function: "Rebuild",
 			Argument: "name",
 			Value:    "",
 		}
+		return result
 	}
 
 	if password == "" {
-		return sr, &ErrArgument{
+		result.Err = &ErrArgument{
 			Function: "Rebuild",
 			Argument: "password",
 			Value:    "",
 		}
+		return result
 	}
 
 	if imageRef == "" {
-		return sr, &ErrArgument{
+		result.Err = &ErrArgument{
 			Function: "Rebuild",
 			Argument: "imageRef",
 			Value:    "",
 		}
+		return result
 	}
 
 	if additional == nil {
@@ -237,17 +236,17 @@
 	additional["imageRef"] = imageRef
 	additional["adminPass"] = password
 
-	_, err := perigee.Request("POST", getActionURL(client, id), perigee.Options{
+	_, result.Err = perigee.Request("POST", getActionURL(client, id), perigee.Options{
 		ReqBody: struct {
 			R map[string]interface{} `json:"rebuild"`
 		}{
 			additional,
 		},
-		Results:     &sr,
+		Results:     &result.Resp,
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
 		OkCodes:     []int{202},
 	})
-	return sr, err
+	return result
 }
 
 // Resize instructs the provider to change the flavor of the server.