diff --git a/openstack/compute/v2/servers/results.go b/openstack/compute/v2/servers/results.go
index 4237481..7659c75 100644
--- a/openstack/compute/v2/servers/results.go
+++ b/openstack/compute/v2/servers/results.go
@@ -3,6 +3,7 @@
 import (
 	"crypto/rsa"
 	"encoding/base64"
+	"encoding/json"
 	"fmt"
 	"net/url"
 	"path"
@@ -129,58 +130,68 @@
 type Server struct {
 	// ID uniquely identifies this server amongst all other servers, including those not accessible to the current tenant.
 	ID string `json:"id"`
-
 	// TenantID identifies the tenant owning this server resource.
 	TenantID string `json:"tenant_id"`
-
 	// UserID uniquely identifies the user account owning the tenant.
 	UserID string `json:"user_id"`
-
 	// Name contains the human-readable name for the server.
 	Name string `json:"name"`
-
 	// Updated and Created contain ISO-8601 timestamps of when the state of the server last changed, and when it was created.
 	Updated string
 	Created string
-
-	HostID string
-
+	HostID  string
 	// Status contains the current operational status of the server, such as IN_PROGRESS or ACTIVE.
 	Status string
-
 	// Progress ranges from 0..100.
 	// A request made against the server completes only once Progress reaches 100.
 	Progress int
-
 	// AccessIPv4 and AccessIPv6 contain the IP addresses of the server, suitable for remote access for administration.
 	AccessIPv4, AccessIPv6 string
-
 	// Image refers to a JSON object, which itself indicates the OS image used to deploy the server.
 	Image map[string]interface{}
-
 	// Flavor refers to a JSON object, which itself indicates the hardware configuration of the deployed server.
 	Flavor map[string]interface{}
-
 	// Addresses includes a list of all IP addresses assigned to the server, keyed by pool.
 	Addresses map[string]interface{}
-
 	// Metadata includes a list of all user-specified key-value pairs attached to the server.
 	Metadata map[string]interface{}
-
 	// Links includes HTTP references to the itself, useful for passing along to other APIs that might want a server reference.
 	Links []interface{}
-
 	// KeyName indicates which public key was injected into the server on launch.
 	KeyName string `json:"key_name"`
-
 	// AdminPass will generally be empty ("").  However, it will contain the administrative password chosen when provisioning a new server without a set AdminPass setting in the first place.
 	// Note that this is the ONLY time this field will be valid.
 	AdminPass string `json:"adminPass"`
-
 	// SecurityGroups includes the security groups that this instance has applied to it
 	SecurityGroups []map[string]interface{} `json:"security_groups"`
 }
 
+func (s *Server) UnmarshalJSON(b []byte) error {
+	type tmp Server
+	var server *struct {
+		tmp
+		Image interface{}
+	}
+	err := json.Unmarshal(b, &server)
+	if err != nil {
+		return err
+	}
+
+	*s = Server(server.tmp)
+
+	switch t := server.Image.(type) {
+	case map[string]interface{}:
+		s.Image = t
+	case string:
+		switch t {
+		case "":
+			s.Image = nil
+		}
+	}
+
+	return nil
+}
+
 // ServerPage abstracts the raw results of making a List() request against the API.
 // As OpenStack extensions may freely alter the response bodies of structures returned to the client, you may only safely access the
 // data provided through the ExtractServers call.
