orchestration v1 error types
diff --git a/openstack/orchestration/v1/stacks/requests.go b/openstack/orchestration/v1/stacks/requests.go
index 2566bb2..650763c 100644
--- a/openstack/orchestration/v1/stacks/requests.go
+++ b/openstack/orchestration/v1/stacks/requests.go
@@ -1,7 +1,6 @@
 package stacks
 
 import (
-	"errors"
 	"strings"
 
 	"github.com/gophercloud/gophercloud"
@@ -83,7 +82,9 @@
 	s := make(map[string]interface{})
 
 	if opts.Name == "" {
-		return s, errors.New("Required field 'Name' not provided.")
+		err := gophercloud.ErrMissingInput{}
+		err.Argument = "stacks.CreateOpts.Name"
+		return nil, err
 	}
 	s["stack_name"] = opts.Name
 	Files := make(map[string]string)
@@ -93,7 +94,10 @@
 		} else if opts.TemplateURL != "" {
 			s["template_url"] = opts.TemplateURL
 		} else {
-			return s, errors.New("Either Template or TemplateURL must be provided.")
+			err := gophercloud.ErrMissingInput{}
+			err.Argument = "stacks.CreateOpts.Template/stacks.CreateOpts.TemplateURL"
+			err.Info = "Either Template or TemplateURL must be provided"
+			return nil, err
 		}
 	} else {
 		if err := opts.TemplateOpts.Parse(); err != nil {
@@ -233,7 +237,9 @@
 	s := make(map[string]interface{})
 
 	if opts.Name == "" {
-		return s, errors.New("Required field 'Name' not provided.")
+		err := gophercloud.ErrMissingInput{}
+		err.Argument = "stacks.AdoptOpts.Name"
+		return nil, err
 	}
 	s["stack_name"] = opts.Name
 	Files := make(map[string]string)
@@ -245,7 +251,10 @@
 		} else if opts.TemplateURL != "" {
 			s["template_url"] = opts.TemplateURL
 		} else {
-			return s, errors.New("One of AdoptStackData, Template, TemplateURL or TemplateOpts must be provided.")
+			err := gophercloud.ErrMissingInput{}
+			err.Argument = "stacks.AdoptOpts"
+			err.Info = "One of AdoptStackData, Template, TemplateURL or TemplateOpts must be provided"
+			return nil, err
 		}
 	} else {
 		if err := opts.TemplateOpts.Parse(); err != nil {
@@ -452,7 +461,10 @@
 		} else if opts.TemplateURL != "" {
 			s["template_url"] = opts.TemplateURL
 		} else {
-			return s, errors.New("Either Template or TemplateURL must be provided.")
+			err := gophercloud.ErrMissingInput{}
+			err.Argument = "stacks.UpdateOpts"
+			err.Info = "Either Template or TemplateURL must be provided"
+			return nil, err
 		}
 	} else {
 		if err := opts.TemplateOpts.Parse(); err != nil {
@@ -588,7 +600,9 @@
 	s := make(map[string]interface{})
 
 	if opts.Name == "" {
-		return s, errors.New("Required field 'Name' not provided.")
+		err := gophercloud.ErrMissingInput{}
+		err.Argument = "stacks.PreviewOpts.Name"
+		return nil, err
 	}
 	s["stack_name"] = opts.Name
 	Files := make(map[string]string)
@@ -598,7 +612,10 @@
 		} else if opts.TemplateURL != "" {
 			s["template_url"] = opts.TemplateURL
 		} else {
-			return s, errors.New("Either Template or TemplateURL must be provided.")
+			err := gophercloud.ErrMissingInput{}
+			err.Argument = "stacks.PreviewOpts"
+			err.Info = "Either Template or TemplateURL must be provided"
+			return nil, err
 		}
 	} else {
 		if err := opts.TemplateOpts.Parse(); err != nil {