diff --git a/api-server/config-save.js b/api-server/config-save.js
index db27723..fc24f6f 100644
--- a/api-server/config-save.js
+++ b/api-server/config-save.js
@@ -1,13 +1,16 @@
 const MODULE_NAME = 'KOMODO-SDK.API-SERVER.CONFIG-SAVE';
 
 const fs = require('fs');
-const logger = require('tektrans-logger');
+const locks = require('locks');
 const moment = require('moment');
+const logger = require('tektrans-logger');
 const config = require('../config');
 const matrix = require('../matrix');
 
 if (!fs.existsSync('config-backup')) fs.mkdirSync('config-backup');
 
+const mutex = locks.createMutex();
+
 const backup = async (xid) => {
     try {
         const backupFilename = `config-backup/config_${moment().format('YYYYMMDD_HHmmss.SS')}.json`;
@@ -33,12 +36,18 @@ const backup = async (xid) => {
 };
 
 module.exports = async (xid) => {
-    try {
-        if (!matrix.config_is_dirty) {
-            logger.verbose(`${MODULE_NAME} 4B263CB4: No need to save because config is not dirty`, { xid });
-            return;
-        }
+    if (!matrix.config_is_dirty) {
+        logger.verbose(`${MODULE_NAME} 4B263CB4: No need to save because config is not dirty`, { xid });
+        return;
+    }
+
+    await new Promise((resolve) => {
+        mutex.lock(() => {
+            resolve();
+        });
+    });
 
+    try {
         const backupFilename = await backup(xid);
 
         await fs.promises.writeFile(
@@ -61,5 +70,7 @@ module.exports = async (xid) => {
         });
 
         throw newE;
+    } finally {
+        mutex.unlock();
     }
 };
diff --git a/package-lock.json b/package-lock.json
index 5acebd8..61ae6fb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,6 +18,7 @@
         "fs-copy-file": "^2.1.2",
         "json-query": "^2.2.2",
         "json-stringify-pretty-compact": "^3.0.0",
+        "locks": "^0.2.2",
         "lru-cache": "^4.1.1",
         "macaddress": "^0.2.9",
         "moment": "^2.24.0",
@@ -28,7 +29,6 @@
         "pkginfo": "^0.4.1",
         "redis": "^3.1.2",
         "request": "^2.88.2",
-        "sd-notify": "*",
         "sha1": "^1.1.1",
         "simple-git": "^1.80.1",
         "stack-trace": "0.0.10",
@@ -2266,6 +2266,11 @@
         "node": ">=4"
       }
     },
+    "node_modules/locks": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz",
+      "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0="
+    },
     "node_modules/lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -5457,6 +5462,11 @@
         "path-exists": "^3.0.0"
       }
     },
+    "locks": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/locks/-/locks-0.2.2.tgz",
+      "integrity": "sha1-JZkz0TJ8uvD9NmL4//3jaAnYTO0="
+    },
     "lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
diff --git a/package.json b/package.json
index 783d075..2bc0f9a 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
     "fs-copy-file": "^2.1.2",
     "json-query": "^2.2.2",
     "json-stringify-pretty-compact": "^3.0.0",
+    "locks": "^0.2.2",
     "lru-cache": "^4.1.1",
     "macaddress": "^0.2.9",
     "moment": "^2.24.0",