diff --git a/openstack/compute/v2/servers/requests.go b/openstack/compute/v2/servers/requests.go
index caeb946..aa8c1a8 100644
--- a/openstack/compute/v2/servers/requests.go
+++ b/openstack/compute/v2/servers/requests.go
@@ -4,7 +4,6 @@
 	"encoding/base64"
 	"errors"
 	"fmt"
-	"strings"
 
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/pagination"
@@ -702,23 +701,23 @@
 	return pagination.NewPager(client, listAddressesByNetworkURL(client, id, network), createPageFn)
 }
 
-type CreateServerImageOpts struct {
+type CreateImageOpts struct {
 	// Name [required] of the image/snapshot
 	Name string
 	// Metadata [optional] contains key-value pairs (up to 255 bytes each) to attach to the created image.
 	Metadata map[string]string
 }
 
-type CreateServerImageOptsBuilder interface {
-	ToCreateServerImageMap() (map[string]interface{}, error)
+type CreateImageOptsBuilder interface {
+	ToServerCreateImageMap() (map[string]interface{}, error)
 }
 
-// ToServerImageCreateMap formats an ServerImageCreateOpts structure into a request body.
-func (opts CreateServerImageOpts) ToCreateServerImageMap() (map[string]interface{}, error) {
+// ToServerCreateImageMap formats a CreateImageOpts structure into a request body.
+func (opts CreateImageOpts) ToServerCreateImageMap() (map[string]interface{}, error) {
 	var err error
 	img := make(map[string]interface{})
 	if opts.Name == "" {
-		err = fmt.Errorf("Cannot create a server image without a name")
+		return nil, fmt.Errorf("Cannot create a server image without a name")
 	}
 	img["name"] = opts.Name
 	if opts.Metadata != nil {
@@ -729,30 +728,10 @@
 	return createImage, err
 }
 
-// ExtractImageID gets the ID of the newly created server image from the header
-func (res CreateServerImageResult) ExtractImageID() (string, error) {
-	var err error
-	if res.Err != nil {
-		return "", res.Err
-	}
-	// Get the image id from the header
-	rawUrl := res.Header.Get("Location")
-	fmt.Println("RawUrl:", rawUrl)
-	if rawUrl != "" {
-		split := strings.Split(rawUrl, "/")
-		if len(split) > 0 {
-			id := split[len(split)-1]
-			return id, nil
-		}
-	}
-	err = fmt.Errorf("Failed to parse the ID of newly created image")
-	return "", err
-}
-
-// CreateServerImage makes a request against the nova API to schedule an image to be created of the server
-func CreateServerImage(client *gophercloud.ServiceClient, serverId string, opts CreateServerImageOptsBuilder) CreateServerImageResult {
-	var res CreateServerImageResult
-	reqBody, err := opts.ToCreateServerImageMap()
+// 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 {
+	var res CreateImageResult
+	reqBody, err := opts.ToServerCreateImageMap()
 	if err != nil {
 		res.Err = err
 		return res
@@ -761,8 +740,6 @@
 		OkCodes: []int{202},
 	})
 	res.Err = err
-	if err == nil {
-		res.Header = response.Header
-	}
+	res.Header = response.Header
 	return res	
 }
diff --git a/openstack/compute/v2/servers/requests_test.go b/openstack/compute/v2/servers/requests_test.go
index 466bbf7..1f39fe1 100644
--- a/openstack/compute/v2/servers/requests_test.go
+++ b/openstack/compute/v2/servers/requests_test.go
@@ -331,7 +331,6 @@
 	defer th.TeardownHTTP()
 	HandleCreateServerImageSuccessfully(t)
 
-	_, err := CreateServerImage(client.ServiceClient(), "serverimage", CreateServerImageOpts{Name: "test"}).ExtractImageID()
+	_, err := CreateImage(client.ServiceClient(), "serverimage", CreateImageOpts{Name: "test"}).ExtractImageID()
 	th.AssertNoErr(t, err)
-	
 }
diff --git a/openstack/compute/v2/servers/results.go b/openstack/compute/v2/servers/results.go
index 26e099a..f278709 100644
--- a/openstack/compute/v2/servers/results.go
+++ b/openstack/compute/v2/servers/results.go
@@ -2,6 +2,9 @@
 
 import (
 	"reflect"
+	"fmt"
+	"path"
+	"net/url"
 
 	"github.com/mitchellh/mapstructure"
 	"github.com/rackspace/gophercloud"
@@ -74,11 +77,28 @@
 	ActionResult
 }
 
-// RescueResult represents the result of a server rescue operation
-type CreateServerImageResult struct {
+// CreateImageResult represents the result of an image creation operation
+type CreateImageResult struct {
 	gophercloud.Result
 }
 
+// ExtractImageID gets the ID of the newly created server image from the header
+func (res CreateImageResult) ExtractImageID() (string, error) {
+	if res.Err != nil {
+		return "", res.Err
+	}
+	// Get the image id from the header
+	u, err := url.ParseRequestURI(res.Header.Get("Location"))
+	if err != nil {
+		return "", fmt.Errorf("Failed to parse the image id: %s", err.Error())
+	}
+	imageId := path.Base(u.Path)
+	if imageId == "." || imageId == "/" {
+		return "", fmt.Errorf("Failed to parse the ID of newly created image: %s", u)
+	}
+	return imageId, nil
+}
+
 // Extract interprets any RescueResult as an AdminPass, if possible.
 func (r RescueResult) Extract() (string, error) {
 	if r.Err != nil {
