diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
index dcfb30b56f..be7966a18a 100644
--- a/src/qemu/qemu_migration_params.c
+++ b/src/qemu/qemu_migration_params.c
@@ -1290,6 +1290,7 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
                          unsigned long apiFlags)
 {
     virErrorPtr err;
+    g_autoptr(virBitmap) clearCaps = NULL;
 
     virErrorPreserveLast(&err);
 
@@ -1299,13 +1300,16 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
     if (!virDomainObjIsActive(vm) || !origParams)
         goto cleanup;
 
-    /* Do not pass apiFlags to qemuMigrationParamsApply here to make sure all
-     * parameters and capabilities are reset. */
-    if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams, 0) < 0)
+    if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
         goto cleanup;
 
-    qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
-    /* We don't reset 'block-bitmap-mapping' as it can't be unset */
+    clearCaps = virBitmapNew(0);
+
+    if (qemuMigrationParamsApplyCaps(vm, clearCaps) == 0 &&
+        qemuMigrationParamsApplyValues(vm, origParams, false) == 0)
+        qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
+
+    qemuDomainObjExitMonitor(vm);
 
  cleanup:
     virErrorRestore(&err);