diff --git a/src/manager.cpp b/src/manager.cpp
index 039a220babf7be7835735d053a3d0b7c8498f585..b4b0a676890effa8247db4641b9b0175026195ba 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -1687,6 +1687,8 @@ Manager::saveConfig(const std::shared_ptr<RingAccount>& account)
         YAML::Emitter accountOut;
         account->serialize(accountOut);
         auto accountConfig = account->getPath() + DIR_SEPARATOR_STR + "config.yml";
+
+        std::lock_guard<std::mutex> lock(fileutils::getFileLock(accountConfig));
         std::ofstream fout(accountConfig);
         fout << accountOut.c_str();
         RING_DBG("Exported Ring account to %s", accountConfig.c_str());
@@ -1716,7 +1718,10 @@ Manager::saveConfig()
 
         for (const auto& account : accountFactory.getAllAccounts()) {
             if (auto ringAccount = std::dynamic_pointer_cast<RingAccount>(account)) {
-                saveConfig(ringAccount);
+                auto accountConfig = ringAccount->getPath() + DIR_SEPARATOR_STR + "config.yml";
+                if (not fileutils::isFile(accountConfig)) {
+                    saveConfig(ringAccount);
+                }
             } else {
                 account->serialize(out);
             }
@@ -1734,6 +1739,7 @@ Manager::saveConfig()
 #endif
         shortcutPreferences.serialize(out);
 
+        std::lock_guard<std::mutex> lock(fileutils::getFileLock(pimpl_->path_));
         std::ofstream fout(pimpl_->path_);
         fout << out.c_str();
     } catch (const YAML::Exception &e) {