diff --git a/frontend/src/metabase/query_builder/actions.js b/frontend/src/metabase/query_builder/actions.js
index 8dde488efc75adb69edd9c5193b55e8b573cb5e3..63bad7149cfb1331402276368ac196ab6c153ac4 100644
--- a/frontend/src/metabase/query_builder/actions.js
+++ b/frontend/src/metabase/query_builder/actions.js
@@ -633,9 +633,13 @@ export const updateQuestion = (newQuestion, { doNotClearNameAndId } = {}) => {
 export const API_CREATE_QUESTION = "metabase/qb/API_CREATE_QUESTION";
 export const apiCreateQuestion = (question) => {
     return async (dispatch, getState) => {
+        // Needed for persisting visualization columns for pulses/alerts, see #6749
+        const series = getTransformedSeries(getState())
+        const questionWithVizSettings = series ? getQuestionWithDefaultVisualizationSettings(question, series) : question
+
         let resultsMetadata = getResultsMetadata(getState())
         const createdQuestion = await (
-            question
+            questionWithVizSettings
                 .setQuery(question.query().clean())
                 .setResultsMetadata(resultsMetadata)
                 .apiCreate()
@@ -656,9 +660,15 @@ export const apiCreateQuestion = (question) => {
 export const API_UPDATE_QUESTION = "metabase/qb/API_UPDATE_QUESTION";
 export const apiUpdateQuestion = (question) => {
     return async (dispatch, getState) => {
+        question = question || getQuestion(getState())
+
+        // Needed for persisting visualization columns for pulses/alerts, see #6749
+        const series = getTransformedSeries(getState())
+        const questionWithVizSettings = series ? getQuestionWithDefaultVisualizationSettings(question, series) : question
+
         let resultsMetadata = getResultsMetadata(getState())
         const updatedQuestion = await (
-            question
+            questionWithVizSettings
                 .setQuery(question.query().clean())
                 .setResultsMetadata(resultsMetadata)
                 .apiUpdate()
@@ -1065,8 +1075,6 @@ export const queryCompleted = (card, queryResults) => {
             cardDisplay: getDisplayTypeForCard(card, queryResults),
             queryResults
         })
-
-        dispatch(persistDefaultVisualizationSettings())
     };
 };
 
@@ -1076,18 +1084,6 @@ export const queryCompleted = (card, queryResults) => {
  *
  * Needed for persisting visualization columns for pulses/alerts, see #6749.
  */
-export const PERSIST_DEFAULT_VIZ_SETTINGS = "metabase/qb/PERSIST_DEFAULT_VIZ_SETTINGS";
-export const persistDefaultVisualizationSettings = () => {
-    return (dispatch, getState) => {
-        const question = getQuestion(getState())
-        const series = getTransformedSeries(getState())
-
-        const updatedQuestion = getQuestionWithDefaultVisualizationSettings(question, series)
-        if (updatedQuestion !== question) dispatch(updateQuestion(updatedQuestion))
-            dispatch.action(PERSIST_DEFAULT_VIZ_SETTINGS)
-    }
-}
-
 const getQuestionWithDefaultVisualizationSettings = (question, series) => {
     const oldVizSettings = question.visualizationSettings()
     const newVizSettings = { ...getPersistableDefaultSettings(series), ...oldVizSettings }
diff --git a/frontend/src/metabase/query_builder/components/AlertModals.jsx b/frontend/src/metabase/query_builder/components/AlertModals.jsx
index 520193ae8f0d8a5b9ed97a2921df3f8f9594b214..84f7eb6efec3e0f148e99d3968844d2e58398d67 100644
--- a/frontend/src/metabase/query_builder/components/AlertModals.jsx
+++ b/frontend/src/metabase/query_builder/components/AlertModals.jsx
@@ -28,6 +28,7 @@ import MetabaseCookies from "metabase/lib/cookies";
 import cxs from 'cxs';
 import ChannelSetupModal from "metabase/components/ChannelSetupModal";
 import ButtonWithStatus from "metabase/components/ButtonWithStatus";
+import { apiUpdateQuestion } from "metabase/query_builder/actions";
 
 const getScheduleFromChannel = (channel) =>
     _.pick(channel, "schedule_day", "schedule_frame", "schedule_hour", "schedule_type")
@@ -43,7 +44,7 @@ const classes = cxs ({
     hasLoadedChannelInfo: hasLoadedChannelInfoSelector(state),
     hasConfiguredAnyChannel: hasConfiguredAnyChannelSelector(state),
     hasConfiguredEmailChannel: hasConfiguredEmailChannelSelector(state)
-}), { createAlert, fetchPulseFormInput })
+}), { createAlert, fetchPulseFormInput, apiUpdateQuestion })
 export class CreateAlertModalContent extends Component {
     props: {
         onCancel: () => void,
@@ -84,10 +85,14 @@ export class CreateAlertModalContent extends Component {
     onAlertChange = (alert) => this.setState({ alert })
 
     onCreateAlert = async () => {
-        const { createAlert, onAlertCreated } = this.props
+        const { createAlert, apiUpdateQuestion, onAlertCreated } = this.props
         const { alert } = this.state
 
+        // Resave the question here (for persisting the x/y axes; see #6749)
+        await apiUpdateQuestion()
+
         await createAlert(alert)
+
         // should close be triggered manually like this
         // but the creation notification would appear automatically ...?
         // OR should the modal visibility be part of QB redux state
@@ -498,7 +503,7 @@ export class AlertEditChannels extends Component {
 
 // TODO: Not sure how to translate text with formatting properly
 @connect((state) => ({ question: getQuestion(state), visualizationSettings: getVisualizationSettings(state) }))
-class RawDataAlertTip extends Component {
+export class RawDataAlertTip extends Component {
     render() {
         const display = this.props.question.display()
         const vizSettings = this.props.visualizationSettings
diff --git a/frontend/test/alert/alert.integ.spec.js b/frontend/test/alert/alert.integ.spec.js
index e80b44cd78886877db2bd0fda8c1d237a40ad417..6273763a75024769c1709883703bae6f12258455 100644
--- a/frontend/test/alert/alert.integ.spec.js
+++ b/frontend/test/alert/alert.integ.spec.js
@@ -24,7 +24,8 @@ import {
     AlertEducationalScreen,
     AlertSettingToggle,
     CreateAlertModalContent,
-    RawDataAlertTip, UpdateAlertModalContent
+    RawDataAlertTip,
+    UpdateAlertModalContent
 } from "metabase/query_builder/components/AlertModals";
 import Button from "metabase/components/Button";
 import {
diff --git a/frontend/test/parameters/parameters.integ.spec.js b/frontend/test/parameters/parameters.integ.spec.js
index 4295be3f65e0f86cc490c1c2c31a0dfcfe26fdab..0048da534b65a6d97d5b484ab4478ac376848127 100644
--- a/frontend/test/parameters/parameters.integ.spec.js
+++ b/frontend/test/parameters/parameters.integ.spec.js
@@ -137,6 +137,7 @@ describe("parameters", () => {
             expect(fieldFilterVarType.text()).toBe("Field Filter");
             click(fieldFilterVarType);
 
+            // there's an async error here for some reason
             await store.waitForActions([UPDATE_TEMPLATE_TAG]);
 
             await delay(500);
@@ -151,6 +152,7 @@ describe("parameters", () => {
             // close the template variable sidebar
             click(tagEditorSidebar.find(".Icon-close"));
 
+
             // test without the parameter
             click(app.find(RunButton));
             await store.waitForActions([RUN_QUERY, QUERY_COMPLETED])