diff --git a/csv_preprocess.py b/csv_preprocess.py
index fbe1c861266458fb575480fec335bbe135772c7e..55abd8737eb4b737abf92192dc6cdb9b5667929a 100644
--- a/csv_preprocess.py
+++ b/csv_preprocess.py
@@ -48,7 +48,11 @@ def trim_npArr(np_bi_arr):
             res.append(_trim_str(line))
         else:
             res.append([_trim_str(item) for item in line])
-    return np.array(res)
+    if len(res) == 0 or type(res[0]) != list:
+        return np.array([res])
+    else:
+        return np.array(res)
+
 
 import pandas
 
diff --git a/summerize-part-list/main.py b/summerize-part-list/main.py
index 66f03db7e0ea84dc8116a9444fe35c75b018e802..db40e65279166e52c4474346c722c07e1964c2e2 100755
--- a/summerize-part-list/main.py
+++ b/summerize-part-list/main.py
@@ -151,19 +151,22 @@ def add_product(serial, _id, name, quantity, must_have_xlsx=False, allow_recursi
         contMat = _new_contMat
         ############ dirty end
 
-        csv_preprocess.npmat2csv(contMat, csv_buf)
+        # moved down # csv_preprocess.npmat2csv(contMat, csv_buf)
 
-        # recursive part reference
-        if allow_recursive_part_ref:
-            for line in contMat:
-                line = line.tolist()[0]
-                part_name = line[config.part_name_col_index]
+        for line in contMat:
+            # recursive part reference
+            if allow_recursive_part_ref:
+                line_ar = line.tolist()[0]
+                part_name = line_ar[config.part_name_col_index]
                 part_id = get_id_prefix_from_string(part_name)
                 if part_id != '':
                     if part_id.startswith(_id):
                         log_warn('Self-reference detected on part {}. Skipping recursive walking.'.format(_id))
                     else:
-                        add_product(serial, part_id, part_name, stoi(quantity)*stoi(line[config.part_quantity_col_index]), allow_recursive_part_ref=config.allow_part_tree_reference)
+                        add_product(serial, part_id, part_name, stoi(quantity)*stoi(line_ar[config.part_quantity_col_index]), allow_recursive_part_ref=config.allow_part_tree_reference)
+                        continue # DO not put the parent material into csv_buf again!
+            # put line into csv_buf
+            csv_preprocess.npmat2csv(line, csv_buf)
     else:
         if must_have_xlsx:
             name_and_id = '{}({})'.format(name, _id)