diff --git a/packages/loot-core/src/server/budget/goaltemplates.ts b/packages/loot-core/src/server/budget/goaltemplates.ts
index eede6a8c0704bd30df44aef05d4aecac3f4de0e4..975bd2be6285cfc11b6e4a54cbab44ef959e9735 100644
--- a/packages/loot-core/src/server/budget/goaltemplates.ts
+++ b/packages/loot-core/src/server/budget/goaltemplates.ts
@@ -6,7 +6,7 @@ import * as db from '../db';
 import { getRuleForSchedule, getNextDate } from '../schedules/app';
 import { batchMessages } from '../sync';
 
-import { setBudget, setZero, getSheetValue, isReflectBudget } from './actions';
+import { setBudget, getSheetValue, isReflectBudget } from './actions';
 import { parse } from './goal-template.pegjs';
 
 export async function applyTemplate({ month }) {
@@ -66,6 +66,7 @@ async function processTemplate(month, force, category_templates) {
   let errors = [];
   let lowestPriority = 0;
   let originalCategoryBalance = [];
+  let setToZero = [];
 
   let categories = await db.all(
     'SELECT * FROM v_categories WHERE tombstone = 0',
@@ -78,13 +79,6 @@ async function processTemplate(month, force, category_templates) {
       monthUtils.sheetForMonth(month),
       `budget-${category.id}`,
     );
-    if (budgeted) {
-      originalCategoryBalance.push({
-        cat: category,
-        amount: budgeted,
-        isIncome: category.is_income,
-      });
-    }
     let template = category_templates[category.id];
     if (template) {
       for (let l = 0; l < template.length; l++) {
@@ -94,22 +88,27 @@ async function processTemplate(month, force, category_templates) {
             : lowestPriority;
       }
     }
-  }
-
-  await setZero({ month });
-
-  //setZero() sets budgeted Income to 0. Reset income categories before continuing.
-  if (isReflectBudget()) {
-    for (let l = 0; l < originalCategoryBalance.length; l++) {
-      if (originalCategoryBalance[l].isIncome) {
-        await setBudget({
-          category: originalCategoryBalance[l].cat.id,
-          month,
-          amount: originalCategoryBalance[l].amount,
-        });
-      }
+    if (budgeted) {
+      originalCategoryBalance.push({
+        category: category.id,
+        amount: budgeted,
+        isIncome: category.is_income,
+        isTemplate: template ? true : false,
+      });
+      setToZero.push({
+        category: category.id,
+        amount: 0,
+        isIncome: category.is_income,
+        isTemplate: template ? true : false,
+      });
     }
   }
+  await setGoalBudget({
+    month,
+    templateBudget: setToZero.filter(
+      f => f.isTemplate === true && f.isIncome === 0,
+    ),
+  });
 
   // find all remainder templates, place them after all other templates
   let remainder_found;
@@ -235,17 +234,26 @@ async function processTemplate(month, force, category_templates) {
   }
 
   if (!force) {
-    //if overwrite is not preferred, set cell to original value
+    //if overwrite is not preferred, set cell to original value;
+    originalCategoryBalance = originalCategoryBalance.filter(
+      c => c.isIncome === 0 && c.isTemplate,
+    );
     for (let l = 0; l < originalCategoryBalance.length; l++) {
       await setBudget({
-        category: originalCategoryBalance[l].cat.id,
+        category: originalCategoryBalance[l].category,
         month,
         amount: originalCategoryBalance[l].amount,
       });
       //if overwrite is not preferred, remove template errors for category
       let j = errors.length;
       for (let k = 0; k < j; k++) {
-        if (errors[k].includes(originalCategoryBalance[l].cat.name)) {
+        if (
+          errors[k].includes(
+            categories.filter(
+              c => c.id === originalCategoryBalance[l].category,
+            )[0].name,
+          )
+        ) {
           errors.splice(k, 1);
           j--;
         }
diff --git a/upcoming-release-notes/1464.md b/upcoming-release-notes/1464.md
new file mode 100644
index 0000000000000000000000000000000000000000..3e13592638e3bd708446c9ebf97581c5ac43656a
--- /dev/null
+++ b/upcoming-release-notes/1464.md
@@ -0,0 +1,6 @@
+---
+category: Bugfix
+authors: [shall0pass]
+---
+
+Goals: Applying templates would zero non-templated categories