remove mapstructure from identity,networking,objectstorage,orchestration,pagination
diff --git a/openstack/orchestration/v1/stackevents/fixtures.go b/openstack/orchestration/v1/stackevents/fixtures.go
index b6ac274..48524e5 100644
--- a/openstack/orchestration/v1/stackevents/fixtures.go
+++ b/openstack/orchestration/v1/stackevents/fixtures.go
@@ -15,7 +15,7 @@
 var FindExpected = []Event{
 	Event{
 		ResourceName: "hello_world",
-		Time:         time.Date(2015, 2, 5, 21, 33, 11, 0, time.UTC),
+		Time:         gophercloud.JSONRFC3339NoZ(time.Date(2015, 2, 5, 21, 33, 11, 0, time.UTC)),
 		Links: []gophercloud.Link{
 			gophercloud.Link{
 				Href: "http://166.78.160.107:8004/v1/98606384f58d4ad0b3db7d0d779549ac/stacks/postman_stack/5f57cff9-93fc-424e-9f78-df0515e7f48b/resources/hello_world/events/06feb26f-9298-4a9b-8749-9d770e5d577a",
@@ -38,7 +38,7 @@
 	},
 	Event{
 		ResourceName: "hello_world",
-		Time:         time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC),
+		Time:         gophercloud.JSONRFC3339NoZ(time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC)),
 		Links: []gophercloud.Link{
 			gophercloud.Link{
 				Href: "http://166.78.160.107:8004/v1/98606384f58d4ad0b3db7d0d779549ac/stacks/postman_stack/5f57cff9-93fc-424e-9f78-df0515e7f48b/resources/hello_world/events/93940999-7d40-44ae-8de4-19624e7b8d18",
@@ -132,7 +132,7 @@
 var ListExpected = []Event{
 	Event{
 		ResourceName: "hello_world",
-		Time:         time.Date(2015, 2, 5, 21, 33, 11, 0, time.UTC),
+		Time:         gophercloud.JSONRFC3339NoZ(time.Date(2015, 2, 5, 21, 33, 11, 0, time.UTC)),
 		Links: []gophercloud.Link{
 			gophercloud.Link{
 				Href: "http://166.78.160.107:8004/v1/98606384f58d4ad0b3db7d0d779549ac/stacks/postman_stack/5f57cff9-93fc-424e-9f78-df0515e7f48b/resources/hello_world/events/06feb26f-9298-4a9b-8749-9d770e5d577a",
@@ -155,7 +155,7 @@
 	},
 	Event{
 		ResourceName: "hello_world",
-		Time:         time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC),
+		Time:         gophercloud.JSONRFC3339NoZ(time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC)),
 		Links: []gophercloud.Link{
 			gophercloud.Link{
 				Href: "http://166.78.160.107:8004/v1/98606384f58d4ad0b3db7d0d779549ac/stacks/postman_stack/5f57cff9-93fc-424e-9f78-df0515e7f48b/resources/hello_world/events/93940999-7d40-44ae-8de4-19624e7b8d18",
@@ -257,7 +257,7 @@
 var ListResourceEventsExpected = []Event{
 	Event{
 		ResourceName: "hello_world",
-		Time:         time.Date(2015, 2, 5, 21, 33, 11, 0, time.UTC),
+		Time:         gophercloud.JSONRFC3339NoZ(time.Date(2015, 2, 5, 21, 33, 11, 0, time.UTC)),
 		Links: []gophercloud.Link{
 			gophercloud.Link{
 				Href: "http://166.78.160.107:8004/v1/98606384f58d4ad0b3db7d0d779549ac/stacks/postman_stack/5f57cff9-93fc-424e-9f78-df0515e7f48b/resources/hello_world/events/06feb26f-9298-4a9b-8749-9d770e5d577a",
@@ -280,7 +280,7 @@
 	},
 	Event{
 		ResourceName: "hello_world",
-		Time:         time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC),
+		Time:         gophercloud.JSONRFC3339NoZ(time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC)),
 		Links: []gophercloud.Link{
 			gophercloud.Link{
 				Href: "http://166.78.160.107:8004/v1/98606384f58d4ad0b3db7d0d779549ac/stacks/postman_stack/5f57cff9-93fc-424e-9f78-df0515e7f48b/resources/hello_world/events/93940999-7d40-44ae-8de4-19624e7b8d18",
@@ -381,7 +381,7 @@
 // GetExpected represents the expected object from a Get request.
 var GetExpected = &Event{
 	ResourceName: "hello_world",
-	Time:         time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC),
+	Time:         gophercloud.JSONRFC3339NoZ(time.Date(2015, 2, 5, 21, 33, 27, 0, time.UTC)),
 	Links: []gophercloud.Link{
 		gophercloud.Link{
 			Href: "http://166.78.160.107:8004/v1/98606384f58d4ad0b3db7d0d779549ac/stacks/postman_stack/5f57cff9-93fc-424e-9f78-df0515e7f48b/resources/hello_world/events/93940999-7d40-44ae-8de4-19624e7b8d18",
diff --git a/openstack/orchestration/v1/stackevents/results.go b/openstack/orchestration/v1/stackevents/results.go
index ac94bb5..6c7f183 100644
--- a/openstack/orchestration/v1/stackevents/results.go
+++ b/openstack/orchestration/v1/stackevents/results.go
@@ -1,11 +1,6 @@
 package stackevents
 
 import (
-	"fmt"
-	"reflect"
-	"time"
-
-	"github.com/mitchellh/mapstructure"
 	"github.com/gophercloud/gophercloud"
 	"github.com/gophercloud/gophercloud/pagination"
 )
@@ -13,23 +8,23 @@
 // Event represents a stack event.
 type Event struct {
 	// The name of the resource for which the event occurred.
-	ResourceName string `mapstructure:"resource_name"`
+	ResourceName string `json:"resource_name"`
 	// The time the event occurred.
-	Time time.Time `mapstructure:"-"`
+	Time gophercloud.JSONRFC3339NoZ `json:"event_time"`
 	// The URLs to the event.
-	Links []gophercloud.Link `mapstructure:"links"`
+	Links []gophercloud.Link `json:"links"`
 	// The logical ID of the stack resource.
-	LogicalResourceID string `mapstructure:"logical_resource_id"`
+	LogicalResourceID string `json:"logical_resource_id"`
 	// The reason of the status of the event.
-	ResourceStatusReason string `mapstructure:"resource_status_reason"`
+	ResourceStatusReason string `json:"resource_status_reason"`
 	// The status of the event.
-	ResourceStatus string `mapstructure:"resource_status"`
+	ResourceStatus string `json:"resource_status"`
 	// The physical ID of the stack resource.
-	PhysicalResourceID string `mapstructure:"physical_resource_id"`
+	PhysicalResourceID string `json:"physical_resource_id"`
 	// The event ID.
-	ID string `mapstructure:"id"`
+	ID string `json:"id"`
 	// Properties of the stack resource.
-	ResourceProperties map[string]interface{} `mapstructure:"resource_properties"`
+	ResourceProperties map[string]interface{} `json:"resource_properties"`
 }
 
 // FindResult represents the result of a Find operation.
@@ -40,32 +35,11 @@
 // Extract returns a slice of Event objects and is called after a
 // Find operation.
 func (r FindResult) Extract() ([]Event, error) {
-	if r.Err != nil {
-		return nil, r.Err
+	var s struct {
+		Events []Event `json:"events"`
 	}
-
-	var res struct {
-		Res []Event `mapstructure:"events"`
-	}
-
-	if err := mapstructure.Decode(r.Body, &res); err != nil {
-		return nil, err
-	}
-
-	events := r.Body.(map[string]interface{})["events"].([]interface{})
-
-	for i, eventRaw := range events {
-		event := eventRaw.(map[string]interface{})
-		if date, ok := event["event_time"]; ok && date != nil {
-			t, err := time.Parse(gophercloud.StackFmtTime, date.(string))
-			if err != nil {
-				return nil, err
-			}
-			res.Res[i].Time = t
-		}
-	}
-
-	return res.Res, nil
+	err := r.ExtractInto(&s)
+	return s.Events, err
 }
 
 // EventPage abstracts the raw results of making a List() request against the API.
@@ -78,10 +52,7 @@
 // IsEmpty returns true if a page contains no Server results.
 func (r EventPage) IsEmpty() (bool, error) {
 	events, err := ExtractEvents(r)
-	if err != nil {
-		return true, err
-	}
-	return len(events) == 0, nil
+	return len(events) == 0, err
 }
 
 // LastMarker returns the last stack ID in a ListResult.
@@ -97,39 +68,12 @@
 }
 
 // ExtractEvents interprets the results of a single page from a List() call, producing a slice of Event entities.
-func ExtractEvents(page pagination.Page) ([]Event, error) {
-	casted := page.(EventPage).Body
-
-	var res struct {
-		Res []Event `mapstructure:"events"`
+func ExtractEvents(r pagination.Page) ([]Event, error) {
+	var s struct {
+		Events []Event `json:"events"`
 	}
-
-	if err := mapstructure.Decode(casted, &res); err != nil {
-		return nil, err
-	}
-
-	var events []interface{}
-	switch casted.(type) {
-	case map[string]interface{}:
-		events = casted.(map[string]interface{})["events"].([]interface{})
-	case map[string][]interface{}:
-		events = casted.(map[string][]interface{})["events"]
-	default:
-		return res.Res, fmt.Errorf("Unknown type: %v", reflect.TypeOf(casted))
-	}
-
-	for i, eventRaw := range events {
-		event := eventRaw.(map[string]interface{})
-		if date, ok := event["event_time"]; ok && date != nil {
-			t, err := time.Parse(gophercloud.StackFmtTime, date.(string))
-			if err != nil {
-				return nil, err
-			}
-			res.Res[i].Time = t
-		}
-	}
-
-	return res.Res, nil
+	err := (r.(EventPage)).ExtractInto(&s)
+	return s.Events, err
 }
 
 // ExtractResourceEvents interprets the results of a single page from a
@@ -146,27 +90,9 @@
 // Extract returns a pointer to an Event object and is called after a
 // Get operation.
 func (r GetResult) Extract() (*Event, error) {
-	if r.Err != nil {
-		return nil, r.Err
+	var s struct {
+		Event *Event `json:"event"`
 	}
-
-	var res struct {
-		Res *Event `mapstructure:"event"`
-	}
-
-	if err := mapstructure.Decode(r.Body, &res); err != nil {
-		return nil, err
-	}
-
-	event := r.Body.(map[string]interface{})["event"].(map[string]interface{})
-
-	if date, ok := event["event_time"]; ok && date != nil {
-		t, err := time.Parse(gophercloud.StackFmtTime, date.(string))
-		if err != nil {
-			return nil, err
-		}
-		res.Res.Time = t
-	}
-
-	return res.Res, nil
+	err := r.ExtractInto(&s)
+	return s.Event, err
 }