Bug fixes
diff --git a/openstack/orchestration/v1/stacks/requests.go b/openstack/orchestration/v1/stacks/requests.go
index 8616644..1fc484d 100644
--- a/openstack/orchestration/v1/stacks/requests.go
+++ b/openstack/orchestration/v1/stacks/requests.go
@@ -237,13 +237,15 @@
 	}
 	s["stack_name"] = opts.Name
 	Files := make(map[string]string)
-	if opts.TemplateOpts == nil {
+	if opts.AdoptStackData != "" {
+		s["adopt_stack_data"] = opts.AdoptStackData
+	} else if opts.TemplateOpts == nil {
 		if opts.Template != "" {
 			s["template"] = opts.Template
 		} else if opts.TemplateURL != "" {
 			s["template_url"] = opts.TemplateURL
 		} else {
-			return s, errors.New("Either Template or TemplateURL must be provided.")
+			return s, errors.New("One of AdoptStackData, Template, TemplateURL or TemplateOpts must be provided.")
 		}
 	} else {
 		if err := opts.TemplateOpts.Parse(); err != nil {
@@ -260,10 +262,6 @@
 			Files[k] = v
 		}
 	}
-	if opts.AdoptStackData == "" {
-		return s, errors.New("Required field 'AdoptStackData' not provided.")
-	}
-	s["adopt_stack_data"] = opts.AdoptStackData
 
 	if opts.DisableRollback != nil {
 		s["disable_rollback"] = &opts.DisableRollback