diff --git a/frontend/src/metabase/visualizations/lib/utils.js b/frontend/src/metabase/visualizations/lib/utils.js
index 371dd47a69c070143b150b9e5e771f1ece09e37e..537cb868f8f6f11d823d9d981c406d9f3ea88c54 100644
--- a/frontend/src/metabase/visualizations/lib/utils.js
+++ b/frontend/src/metabase/visualizations/lib/utils.js
@@ -234,6 +234,7 @@ export function getCardAfterVisualizationClick(nextCard, previousCard) {
         isMultiseriesQuestion
         ? previousCard.id
         : nextCard.id,
+      id: null,
     };
   } else {
     // Even though the card is currently clean, we might still apply dashboard parameters to it,
diff --git a/frontend/test/metabase/scenarios/question/saved.cy.spec.js b/frontend/test/metabase/scenarios/question/saved.cy.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e9bdccc8a21024f03c6b6dbfdc5d5f92451bc04
--- /dev/null
+++ b/frontend/test/metabase/scenarios/question/saved.cy.spec.js
@@ -0,0 +1,40 @@
+import {
+  restore,
+  signInAsNormalUser,
+  popover,
+  modal,
+} from "__support__/cypress";
+
+describe("scenarios > question > saved", () => {
+  before(restore);
+  beforeEach(signInAsNormalUser);
+
+  it("view and filter saved question", () => {
+    cy.visit("/question/1");
+    cy.findAllByText("Orders"); // question and table name appears
+
+    // filter to only orders with quantity=100
+    cy.findByText("Quantity").click();
+    popover().within(() => cy.findByText("Filter").click());
+    popover().within(() => {
+      cy.findByPlaceholderText("Search the list").type("100");
+      cy.findByText("Update filter").click();
+    });
+    cy.findByText("Quantity is equal to 100");
+    cy.findByText("Showing 2 rows"); // query updated
+
+    // check that save will give option to replace
+    cy.findByText("Save").click();
+    modal().within(() => {
+      cy.findByText('Replace original question, "Orders"');
+      cy.findByText("Save as new question");
+      cy.findByText("Cancel").click();
+    });
+
+    // click "Started from Orders" and check that the original question is restored
+    cy.findByText("Started from").within(() => cy.findByText("Orders").click());
+    cy.findByText("Showing first 2,000 rows"); // query updated
+    cy.findByText("Started from").should("not.exist");
+    cy.findByText("Quantity is equal to 100").should("not.exist");
+  });
+});