"os"
        "path/filepath"
        "regexp"
+       "sort"
        "strings"
 
        utils "github.com/onap/multicloud-k8s/src/k8splugin/internal"
 // TemplateClient implements the Template interface
 // It will also be used to maintain any localized state
 type TemplateClient struct {
-       whitespaceRegex *regexp.Regexp
-       kubeVersion     string
-       kubeNameSpace   string
-       releaseName     string
+       emptyRegex    *regexp.Regexp
+       kubeVersion   string
+       kubeNameSpace string
+       releaseName   string
 }
 
 // NewTemplateClient returns a new instance of TemplateClient
 func NewTemplateClient(k8sversion, namespace, releasename string) *TemplateClient {
        return &TemplateClient{
-               whitespaceRegex: regexp.MustCompile(`^\s*$`),
+               // emptyRegex defines template content that could be considered empty yaml-wise
+               emptyRegex: regexp.MustCompile(`(?m)\A(^(\s*#.*|\s*)$\n?)*\z`),
                // defaultKubeVersion is the default value of --kube-version flag
                kubeVersion:   k8sversion,
                kubeNameSpace: namespace,
                        continue
                }
                rmap := releaseutil.SplitManifests(v)
-               count := 0
-               for _, v1 := range rmap {
-                       key := fmt.Sprintf("%s-%d", k, count)
-                       newRenderedTemplates[key] = v1
-                       count = count + 1
+
+               // Iterating over map can yield different order at times
+               // so first we'll sort keys
+               sortedKeys := make([]string, len(rmap))
+               for k1, _ := range rmap {
+                       sortedKeys = append(sortedKeys, k1)
+               }
+               // This makes empty files have the lowest indices
+               sort.Strings(sortedKeys)
+
+               for k1, v1 := range sortedKeys {
+                       key := fmt.Sprintf("%s-%d", k, k1)
+                       newRenderedTemplates[key] = rmap[v1]
                }
        }
 
                }
 
                // blank template after execution
-               if h.whitespaceRegex.MatchString(data) {
+               if h.emptyRegex.MatchString(data) {
                        continue
                }
 
 func getGroupVersionKind(data string) (schema.GroupVersionKind, error) {
        out, err := k8syaml.ToJSON([]byte(data))
        if err != nil {
-               return schema.GroupVersionKind{}, pkgerrors.Wrap(err, "Converting yaml to json")
+               return schema.GroupVersionKind{}, pkgerrors.Wrap(err, "Converting yaml to json:\n"+data)
        }
 
        simpleMeta := json.SimpleMetaFactory{}
 
                        },
                        expectedError: "",
                },
+               {
+                       label:      "Generate artifacts from multi-template and empty files v1",
+                       chartPath:  "../../mock_files/mock_charts/testchart3",
+                       valueFiles: []string{},
+                       values: []string{
+                               "goingEmpty=false",
+                       },
+                       expectedHashMap: map[string]string{
+                               "testchart3/templates/multi.yaml-2": "e24cbbefac2c2f700880b8fd041838f2dd48bbc1e099e7c1d2485ae7feb3da0d",
+                               "testchart3/templates/multi.yaml-3": "592a8e5b2c35b8469aa45703a835bc00657bfe36b51eb08427a46e7d22fb1525",
+                       },
+                       expectedError: "",
+               },
+               {
+                       label:      "Generate artifacts from multi-template and empty files v2",
+                       chartPath:  "../../mock_files/mock_charts/testchart3",
+                       valueFiles: []string{},
+                       values: []string{
+                               "goingEmpty=true",
+                       },
+                       expectedHashMap: map[string]string{
+                               "testchart3/templates/multi.yaml-3": "e24cbbefac2c2f700880b8fd041838f2dd48bbc1e099e7c1d2485ae7feb3da0d",
+                               "testchart3/templates/multi.yaml-4": "0bea01e65148584609ede5000c024241ba1c35b440b32ec0a4f7013015715bfe",
+                               "testchart3/templates/multi.yaml-5": "6a5af22538c273b9d4a3156e3b6bb538c655041eae31e93db21a9e178f73ecf0",
+                       },
+                       expectedError: "",
+               },
        }
 
        h := sha256.New()
                                                }
                                        }
                                        if gotHash != expectedHash {
-                                               t.Fatalf("Got unexpected hash for %s", f)
+                                               t.Fatalf("Got unexpected hash for %s: '%s'; expected: '%s'", f, gotHash, expectedHash)
                                        }
                                }
                        }