diff --git a/openstack/compute/v2/servers/requests.go b/openstack/compute/v2/servers/requests.go
index 18a2237..da0c737 100644
--- a/openstack/compute/v2/servers/requests.go
+++ b/openstack/compute/v2/servers/requests.go
@@ -2,6 +2,7 @@
 
 import (
 	"encoding/base64"
+	"encoding/json"
 	"errors"
 	"fmt"
 
@@ -97,32 +98,26 @@
 }
 
 // Personality is an array of files that are injected into the server at launch.
-type Personality []File
-
-// Marshal marshals the personality, marshalling each of the files.
-func (p Personality) Marshal() []map[string]string {
-	personality := make([]map[string]string, len(p))
-	for i, file := range p {
-		personality[i] = file.Marshal()
-	}
-
-	return personality
-}
+type Personality []*File
 
 // File is used within CreateOpts and RebuildOpts to inject a file into the server at launch.
 type File struct {
 	// Path of the file
-	Path string `json:"path"`
+	Path string
 	// Contents of the file. Maximum content size is 255 bytes.
-	Contents []byte `json:"contents"`
+	Contents []byte
 }
 
-// Marshal marshals the file, base64 encoding the contents.
-func (f File) Marshal() map[string]string {
-	return map[string]string{
-		"path":     f.Path,
-		"contents": base64.StdEncoding.EncodeToString(f.Contents),
+// MarshalJSON marshals the escaped file, base64 encoding the contents.
+func (f *File) MarshalJSON() ([]byte, error) {
+	file := struct {
+		Path     string `json:"path"`
+		Contents string `json:"contents"`
+	}{
+		Path:     f.Path,
+		Contents: base64.StdEncoding.EncodeToString(f.Contents),
 	}
+	return json.Marshal(file)
 }
 
 // CreateOpts specifies server creation parameters.
@@ -229,7 +224,7 @@
 	}
 
 	if len(opts.Personality) > 0 {
-		server["personality"] = opts.Personality.Marshal()
+		server["personality"] = opts.Personality
 	}
 
 	return map[string]interface{}{"server": server}, nil
@@ -460,7 +455,7 @@
 	}
 
 	if len(opts.Personality) > 0 {
-		server["personality"] = opts.Personality.Marshal()
+		server["personality"] = opts.Personality
 	}
 
 	return map[string]interface{}{"rebuild": server}, nil
diff --git a/openstack/compute/v2/servers/requests_test.go b/openstack/compute/v2/servers/requests_test.go
index 83fcdb0..d878bd0 100644
--- a/openstack/compute/v2/servers/requests_test.go
+++ b/openstack/compute/v2/servers/requests_test.go
@@ -2,6 +2,7 @@
 
 import (
 	"encoding/base64"
+	"encoding/json"
 	"net/http"
 	"testing"
 
@@ -328,17 +329,30 @@
 }
 
 func TestMarshalPersonality(t *testing.T) {
-	name := "test"
+	name := "/etc/test"
 	contents := []byte("asdfasdf")
 
 	personality := Personality{
-		File{
+		&File{
 			Path:     name,
 			Contents: contents,
 		},
 	}
 
-	actual := personality.Marshal()
+	data, err := json.Marshal(personality)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	var actual []map[string]string
+	err = json.Unmarshal(data, &actual)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if len(actual) != 1 {
+		t.Fatal("expected personality length 1")
+	}
 
 	if actual[0]["path"] != name {
 		t.Fatal("file path incorrect")
