diff --git a/extension/Classes/Core/Database/Database.php b/extension/Classes/Core/Database/Database.php
index 5fd40d6ad36e2f709b8a0422f2f44365c477f720..ba9fb7edc7392fac83015827f3e780c3be2c74a2 100644
--- a/extension/Classes/Core/Database/Database.php
+++ b/extension/Classes/Core/Database/Database.php
@@ -1027,14 +1027,6 @@ class Database {
 
     }
 
-    /**
-     * @return string
-     * @throws \UserFormException
-     */
-    public function getQfqLogFile() {
-        return Path::absoluteQfqLogFile();
-    }
-
     /**
      * Selects in table 'Split' all records with tableName='$tableName' and xId='$xId'. Deletes all referenced files and records.
      *
diff --git a/extension/Classes/Core/Database/DatabaseUpdate.php b/extension/Classes/Core/Database/DatabaseUpdate.php
index 0194bf2ced16532643f52b2e382aac208848821e..b62cc0d6bb9a6faef9c8a74dd5c1b6647bca194c 100644
--- a/extension/Classes/Core/Database/DatabaseUpdate.php
+++ b/extension/Classes/Core/Database/DatabaseUpdate.php
@@ -170,8 +170,7 @@ class DatabaseUpdate {
                 FormAsFIle::exportAllForms($this->db, true);
             }
 
-            $qfqLog = $this->db->getQfqLogFile();
-            Logger::logMessage(date('Y.m.d H:i:s ') . ": Updated from QFQ version '$old' to '$new'", $qfqLog);
+            Logger::logMessage(date('Y.m.d H:i:s ') . ": Updated from QFQ version '$old' to '$new'", Path::absoluteQfqLogFile());
 
             // Finally write the latest version number.
             $versionInfo[QFQ_VERSION_KEY] = $new;
diff --git a/extension/Classes/Core/Form/FormAsFile.php b/extension/Classes/Core/Form/FormAsFile.php
index 31a2f728edddf7d883ebbc218c447f5757db647c..9dbc8d66c04922be944fb1150b57ae97923f250f 100644
--- a/extension/Classes/Core/Form/FormAsFile.php
+++ b/extension/Classes/Core/Form/FormAsFile.php
@@ -6,6 +6,7 @@ namespace IMATHUZH\Qfq\Core\Form;
 use IMATHUZH\Qfq\Core\Database\Database;
 use IMATHUZH\Qfq\Core\Exception\Thrower;
 use IMATHUZH\Qfq\Core\Helper\HelperFile;
+use IMATHUZH\Qfq\Core\Helper\Logger;
 use IMATHUZH\Qfq\Core\Helper\OnArray;
 use IMATHUZH\Qfq\Core\Helper\OnString;
 use IMATHUZH\Qfq\Core\Helper\Path;
@@ -39,12 +40,12 @@ class FormAsFile
             ERROR_MESSAGE_TO_DEVELOPER => "Form definition file not found or no permission to read file: '$cwdToFormFile'"]),
             ERROR_FORM_NOT_FOUND);
         if(!file_exists($cwdToFormFile)) {
-            self::deleteFormDB($formName, $database);
+            self::deleteFormDB($formName, $database, "No corresponding form file found.");
             throw $fileReadException;
         }
         $fileStatsNew = self::formFileStatsJson($cwdToFormFile);
         if ($fileStatsNew === false) {
-            self::deleteFormDB($formName, $database);
+            self::deleteFormDB($formName, $database, "Failed to read form file stats.");
             throw $fileReadException;
         }
         list($sql, $parameterArray) = SqlQuery::selectFormByName($formName, [F_ID, F_FILE_STATS]);
@@ -57,7 +58,7 @@ class FormAsFile
         // Read form file
         $fileContents = file_get_contents($cwdToFormFile);
         if ($fileContents === false) {
-            self::deleteFormDB($formName, $database);
+            self::deleteFormDB($formName, $database, "Failed to read form file.");
             throw $fileReadException;
         }
         $formFromFile = json_decode($fileContents, true);
@@ -101,7 +102,7 @@ class FormAsFile
         $formIdNew = $database->sql($sqlFormInsert, ROW_REGULAR, $parameterArrayFormInsert);
 
         // Delete stale formElements with the new form id (these should not exist, but better make sure)
-        self::deleteFormElementsDBWithFormId($formIdNew, $database);
+        self::deleteFormElementsDBWithFormId($formIdNew, $database, "Inserted new form with id $formIdNew.");
 
         // Insert FormElements to DB and collect container ids
         $containerIds = []; // array(container_name => id)
@@ -129,7 +130,7 @@ class FormAsFile
 
         // Delete old form if everything went well
         if ($formIdOld !== null) {
-            self::deleteFormDBWithId($formIdOld, $database);
+            self::deleteFormDBWithId($formIdOld, $database, "New version of form $formName was imported successfully. New form id: $formIdNew");
         }
 
         // Replace temporary name of new form
@@ -166,6 +167,7 @@ class FormAsFile
         $pathFileName = self::formPathFileName($formName, $database);
         self::backupFormFile($pathFileName);
         HelperFile::file_put_contents($pathFileName, $formJson);
+        Logger::logMessage(date('Y.m.d H:i:s ') . ": Overwrote form file '$pathFileName'. Reason: Export new version of form from database.", Path::absoluteQfqLogFile());
 
         // some column names where adjusted => import form
         if ($adjustContainerName) {
@@ -236,11 +238,12 @@ class FormAsFile
      *
      * @param $formName
      * @param Database $database
+     * @param string $logMessageReason
      * @throws \CodeException
      * @throws \DbException
      * @throws \UserFormException
      */
-    public static function deleteFormFile($formName, Database $database) // : void
+    public static function deleteFormFile($formName, Database $database, string $logMessageReason = '') // : void
     {
         self::enforceFormFileWritable($formName, $database);
         $pathFileName = self::formPathFileName($formName, $database);
@@ -253,6 +256,7 @@ class FormAsFile
                     ERROR_MESSAGE_TO_DEVELOPER => "Can't delete form file '$pathFileName'"]),
                     ERROR_IO_WRITE_FILE);
             }
+            Logger::logMessage(date('Y.m.d H:i:s ') . ": Removed form file '$pathFileName'. Reason: $logMessageReason", Path::absoluteQfqLogFile());
         }
     }
 
@@ -378,7 +382,7 @@ class FormAsFile
             $formNamesDB = self::queryAllFormNames($database);
             $formsToDelete = array_diff($formNamesDB, $formFileNames);
             foreach ($formsToDelete as $formToDelete) {
-                self::deleteFormDB($formToDelete, $database);
+                self::deleteFormDB($formToDelete, $database, "No corresponding form file found.");
             }
         }
     }
@@ -403,7 +407,7 @@ class FormAsFile
            $formFileNames = self::formFileNames($database);
            $filesToDelete = array_diff($formFileNames, $formNamesDB);
            foreach ($filesToDelete as $fileToDelete) {
-               self::deleteFormFile($fileToDelete, $database);
+               self::deleteFormFile($fileToDelete, $database, "Export all forms from database. No form with name '$fileToDelete' in database.");
            }
         }
     }
@@ -442,37 +446,42 @@ class FormAsFile
      *
      * @param string $formName
      * @param Database $database
+     * @param string $logMessageReason
      * @return void
      * @throws \CodeException
      * @throws \DbException
      * @throws \UserFormException
      */
-    private static function deleteFormDB(string $formName, Database $database) // : void
+    private static function deleteFormDB(string $formName, Database $database, string $logMessageReason = '') // : void
     {
         list($sql, $parameterArray) = SqlQuery::selectFormByName($formName, [F_ID]);
         $formFromDb = $database->sql($sql, ROW_EXPECT_0_1,
             $parameterArray, "Multiple forms with the same name: '$formName'");
         if (array_key_exists(F_ID, $formFromDb)) {
-            self::deleteFormDBWithId($formFromDb[F_ID], $database);
+            self::deleteFormDBWithId($formFromDb[F_ID], $database, $logMessageReason . " Form name '$formName'.");
         }
     }
 
     /**
      * Delete form with given id and its form elements from DB
      *
-     * @param $formId
+     * @param int $formId
      * @param Database $database
+     * @param string $logMessageReason
      * @throws \CodeException
      * @throws \DbException
      * @throws \UserFormException
      */
-    private static function deleteFormDBWithId(int $formId, Database $database) // : void
+    private static function deleteFormDBWithId(int $formId, Database $database, string $logMessageReason = '') // : void
     {
         self::backupFormDb($formId, $database);
         $F_ID = F_ID; // can't use constants in strings directly
         $TABLE_NAME_FORM = TABLE_NAME_FORM; // can't use constants in strings directly
-        $database->sql("DELETE FROM `$TABLE_NAME_FORM` WHERE `$F_ID`=? LIMIT 1", ROW_REGULAR, [$formId]);
-        self::deleteFormElementsDBWithFormId($formId, $database);
+        $rowsAffected = $database->sql("DELETE FROM `$TABLE_NAME_FORM` WHERE `$F_ID`=? LIMIT 1", ROW_REGULAR, [$formId]);
+        if ($rowsAffected > 0) {
+            Logger::logMessage(date('Y.m.d H:i:s ') . ": Remove form with id $formId from database. Reason: $logMessageReason", Path::absoluteQfqLogFile());
+        }
+        self::deleteFormElementsDBWithFormId($formId, $database, 'Remove form. ' . $logMessageReason);
     }
 
     /**
@@ -493,21 +502,24 @@ class FormAsFile
     }
 
 
-
     /**
      * Delete form elements with given formId from DB
      *
-     * @param $formId
+     * @param int $formId
      * @param Database $database
+     * @param string $logMessageReason
      * @throws \CodeException
      * @throws \DbException
      * @throws \UserFormException
      */
-    private static function deleteFormElementsDBWithFormId(int $formId, Database $database) // : void
+    private static function deleteFormElementsDBWithFormId(int $formId, Database $database, string $logMessageReason = '') // : void
     {
         $TABLE_NAME_FORM_ELEMENT = TABLE_NAME_FORM_ELEMENT; // can't use constants in strings directly
         $FE_FORM_ID = FE_FORM_ID; // can't use constants in strings directly
-        $database->sql("DELETE FROM `$TABLE_NAME_FORM_ELEMENT` WHERE `$FE_FORM_ID`=?", ROW_REGULAR, [$formId]);
+        $affectedRows = $database->sql("DELETE FROM `$TABLE_NAME_FORM_ELEMENT` WHERE `$FE_FORM_ID`=?", ROW_REGULAR, [$formId]);
+        if ($affectedRows > 0) {
+            Logger::logMessage(date('Y.m.d H:i:s ') . ": Removed $affectedRows formElements with formId $formId from database. Reason: $logMessageReason", Path::absoluteQfqLogFile());
+        }
     }
 
     /**
diff --git a/extension/Classes/Core/QuickFormQuery.php b/extension/Classes/Core/QuickFormQuery.php
index 48174ef549da371a49d3762585ac480418bf4a9f..014606ad9c2db95ca71c6571d7b191f2e6affa61 100644
--- a/extension/Classes/Core/QuickFormQuery.php
+++ b/extension/Classes/Core/QuickFormQuery.php
@@ -686,7 +686,7 @@ class QuickFormQuery {
                     if (TABLE_NAME_FORM_ELEMENT === ($this->formSpec[F_TABLE_NAME] ?? '')) {
                         FormAsFile::exportForm($formFileName, $this->dbArray[$this->dbIndexQfq]);
                     } else {
-                        FormAsFile::deleteFormFile($formFileName, $this->dbArray[$this->dbIndexQfq]);
+                        FormAsFile::deleteFormFile($formFileName, $this->dbArray[$this->dbIndexQfq], 'Form was deleted using form-editor.');
                     }
                     break;
             }
@@ -694,7 +694,7 @@ class QuickFormQuery {
 
         // delete old form file if form name was changed
         if (isset($formFileNameDelete)) {
-            FormAsFile::deleteFormFile($formFileNameDelete, $this->dbArray[$this->dbIndexQfq]);
+            FormAsFile::deleteFormFile($formFileNameDelete, $this->dbArray[$this->dbIndexQfq], "Form was renamed to: '$formFileName'.");
         }
 
         return $data;