diff --git a/openstack/orchestration/v1/stacks/environment.go b/openstack/orchestration/v1/stacks/environment.go
index 378eeaf..1fc01e0 100644
--- a/openstack/orchestration/v1/stacks/environment.go
+++ b/openstack/orchestration/v1/stacks/environment.go
@@ -32,29 +32,41 @@
 	return nil
 }
 
-// Parse environment file to resolve the urls of the resources
+// Parse environment file to resolve the URL's of the resources. This is done by
+// reading from the `Resource Registry` section, which is why the function is
+// named GetRRFileContents.
 func GetRRFileContents(e *Environment, ignoreIf igFunc) error {
+	// initialize environment if empty
 	if e.Files == nil {
 		e.Files = make(map[string]string)
 	}
 	if e.fileMaps == nil {
 		e.fileMaps = make(map[string]string)
 	}
+
+	// get the resource registry
 	rr := e.Parsed["resource_registry"]
+
 	// search the resource registry for URLs
 	switch rr.(type) {
+	// process further only if the resource registry is a map
 	case map[string]interface{}, map[interface{}]interface{}:
 		rr_map, err := toStringKeys(rr)
 		if err != nil {
 			return err
 		}
+		// the resource registry might contain a base URL for the resource. If
+		// such a field is present, use it. Otherwise, use the default base URL.
 		var baseURL string
 		if val, ok := rr_map["base_url"]; ok {
 			baseURL = val.(string)
 		} else {
 			baseURL = e.baseURL
 		}
-		// use a fake template to fetch contents from URLs
+
+		// The contents of the resource may be located in a remote file, which
+		// will be a template. Instantiate a temporary template to manage the
+		// contents.
 		tempTemplate := new(Template)
 		tempTemplate.baseURL = baseURL
 		tempTemplate.client = e.client
@@ -65,6 +77,7 @@
 		// check the `resources` section (if it exists) for more URLs
 		if val, ok := rr_map["resources"]; ok {
 			switch val.(type) {
+			// process further only if the contents are a map
 			case map[string]interface{}, map[interface{}]interface{}:
 				resources_map, err := toStringKeys(val)
 				if err != nil {
@@ -89,11 +102,11 @@
 							return err
 						}
 					}
-
 				}
-
 			}
 		}
+		// if the resource registry contained any URL's, store them. This can
+		// then be passed as parameter to api calls to Heat api.
 		e.Files = tempTemplate.Files
 		return nil
 	default:
diff --git a/openstack/orchestration/v1/stacks/template.go b/openstack/orchestration/v1/stacks/template.go
index 500d46c..912546b 100644
--- a/openstack/orchestration/v1/stacks/template.go
+++ b/openstack/orchestration/v1/stacks/template.go
@@ -32,7 +32,14 @@
 	return errors.New(fmt.Sprintf("Template format version not found."))
 }
 
+// GetFileContents recursively parses a template to search for urls. These urls
+// are assumed to point to other templates (known in OpenStack Heat as child
+// templates). The contents of these urls are fetched and stored in the `Files`
+// parameter of the template structure. This is the only way that a user can
+// use child templates that are located in their filesystem; urls located on the
+// web (e.g. on github or swift) can be fetched directly by Heat engine.
 func GetFileContents(t *Template, te interface{}, ignoreIf igFunc, recurse bool) error {
+	// initialize template if empty
 	if t.Files == nil {
 		t.Files = make(map[string]string)
 	}
@@ -40,6 +47,7 @@
 		t.fileMaps = make(map[string]string)
 	}
 	switch te.(type) {
+	// if te is a map
 	case map[string]interface{}, map[interface{}]interface{}:
 		te_map, err := toStringKeys(te)
 		if err != nil {
@@ -48,36 +56,50 @@
 		for k, v := range te_map {
 			value, ok := v.(string)
 			if !ok {
+				// if the value is not a string, recursively parse that value
 				if err := GetFileContents(t, v, ignoreIf, recurse); err != nil {
 					return err
 				}
 			} else if !ignoreIf(k, value) {
 				// at this point, the k, v pair has a reference to an external template.
-				// The assumption of heatclient is that value v is a relative reference
+				// The assumption of heatclient is that value v is a reference
 				// to a file in the users environment
+
+				// create a new child template
 				childTemplate := new(Template)
+
+				// initialize child template
+
+				// get the base location of the child template
 				baseURL, err := gophercloud.NormalizePathURL(t.baseURL, value)
 				if err != nil {
 					return err
 				}
 				childTemplate.baseURL = baseURL
 				childTemplate.client = t.client
+
+				// fetch the contents of the child template
 				if err := childTemplate.Parse(); err != nil {
 					return err
 				}
-				// process child template recursively if required
+
+				// process child template recursively if required. This is
+				// required if the child template itself contains references to
+				// other templates
 				if recurse {
 					if err := GetFileContents(childTemplate, childTemplate.Parsed, ignoreIf, recurse); err != nil {
 						return err
 					}
 				}
-				// update parent template with current child templates' content
+				// update parent template with current child templates' content.
+				// At this point, the child template has been parsed recursively.
 				t.fileMaps[value] = childTemplate.URL
 				t.Files[childTemplate.URL] = string(childTemplate.Bin)
 
 			}
 		}
 		return nil
+	// if te is a slice, call the function on each element of the slice.
 	case []interface{}:
 		te_slice := te.([]interface{})
 		for i := range te_slice {
@@ -85,6 +107,7 @@
 				return err
 			}
 		}
+	// if te is anything else, return
 	case string, bool, float64, nil, int:
 		return nil
 	default:
diff --git a/openstack/orchestration/v1/stacks/utils.go b/openstack/orchestration/v1/stacks/utils.go
index 2b80c6a..299cbc0 100644
--- a/openstack/orchestration/v1/stacks/utils.go
+++ b/openstack/orchestration/v1/stacks/utils.go
@@ -14,10 +14,14 @@
 	"gopkg.in/yaml.v2"
 )
 
+// Client is an interface that expects a Get method similar to http.Get. This
+// is needed for unit testing, since we can mock an http client. Thus, the
+// client will usually be an http.Client EXCEPT in unit tests.
 type Client interface {
 	Get(string) (*http.Response, error)
 }
 
+// Base structure for both Template and Environment
 type TE struct {
 	// Bin stores the contents of the template or environment.
 	Bin []byte
@@ -38,8 +42,10 @@
 	client Client
 }
 
+// Fetch fetches the contents of a TE from its URL. Once a TE structure has a
+// URL, call the fetch method to fetch the contents.
 func (t *TE) Fetch() error {
-	// get baseURL if not already defined
+	// if the baseURL is not provided, use the current directors as the base URL
 	if t.baseURL == "" {
 		u, err := getBasePath()
 		if err != nil {
@@ -47,19 +53,26 @@
 		}
 		t.baseURL = u
 	}
+
+	// if the contents are already present, do nothing.
 	if t.Bin != nil {
-		// already have contents
 		return nil
 	}
+
+	// get a fqdn from the URL using the baseURL of the template. For local files,
+	// the URL's will have the `file` scheme.
 	u, err := gophercloud.NormalizePathURL(t.baseURL, t.URL)
 	if err != nil {
 		return err
 	}
 	t.URL = u
+
 	// get an HTTP client if none present
 	if t.client == nil {
 		t.client = getHTTPClient()
 	}
+
+	// use the client to fetch the contents of the template
 	resp, err := t.client.Get(t.URL)
 	if err != nil {
 		return err
@@ -73,7 +86,7 @@
 	return nil
 }
 
-// get the basepath of the template
+// get the basepath of the template.
 func getBasePath() (string, error) {
 	basePath, err := filepath.Abs(".")
 	if err != nil {
@@ -86,14 +99,15 @@
 	return u, nil
 }
 
-// get a an HTTP client to retrieve URLs
+// get a an HTTP client to retrieve URL's. This client allows the use of `file`
+// scheme since we may need to fetch templates from users filesystem
 func getHTTPClient() Client {
 	transport := &http.Transport{}
 	transport.RegisterProtocol("file", http.NewFileTransport(http.Dir("/")))
 	return &http.Client{Transport: transport}
 }
 
-// parse the contents and validate
+// Parse will parse the contents and then validate. The contents MUST be either JSON or YAML.
 func (t *TE) Parse() error {
 	if err := t.Fetch(); err != nil {
 		return err
@@ -106,11 +120,13 @@
 	return t.Validate()
 }
 
-// base Validate method, always returns true
+// base Validate method, always returns nil
 func (t *TE) Validate() error {
 	return nil
 }
 
+// igfunc is a parameter used by GetFileContents and GetRRFileContents to check
+// for valid template URL's.
 type igFunc func(string, interface{}) bool
 
 // convert map[interface{}]interface{} to map[string]interface{}
@@ -132,7 +148,8 @@
 	}
 }
 
-// fix the template reference to files
+// fix the template reference to files by replacing relative URL's by absolute
+// URL's
 func (t *TE) FixFileRefs() {
 	t_str := string(t.Bin)
 	if t.fileMaps == nil {
