diff --git a/CHANGES-3.2 b/CHANGES-3.2
index 68a73f80a9325aa752d6af63c6ddb4b7e04891c3..b9ef260f620637d055de1642d29ff2358382629a 100644
--- a/CHANGES-3.2
+++ b/CHANGES-3.2
@@ -7,6 +7,40 @@ contributors are listed. Note that Calamares does not have a historical
 changelog -- this log starts with version 3.2.0. The release notes on the
 website will have to do for older versions.
 
+# 3.2.54 (unreleased) #
+
+This release contains contributions from (alphabetically by first name):
+ - Nobody yet
+
+## Core ##
+ - Nothing yet
+
+## Modules ##
+ - Nothing yet
+
+
+# 3.2.53 (2022-03-04) #
+
+This release contains contributions from (alphabetically by first name):
+ - Huang Jia Wen (new contributor! Welcome!)
+
+## Core ##
+ - Automount-manipulation (to switch off KDE Plasma automounting new devices)
+   now logs slightly more as it works. Defaults have changed in KDE Plasma
+   5.24 and it turns out the automount-manipulation does not work well.
+   Distro's are encouraged to turn off automount in the live ISO (see #1885).
+
+## Modules ##
+ - *bootloader* now knows about loongarch64 and can install suitable EFI
+   files for this CPU type. (Thanks Huang Jia Wen)
+ - Progress reporting for `pacman` from the *packages* module has been switched
+   off. The progress reporting works under low load, but there are many reports
+   of it crashing (from XeroLinux and from Evan James, who has been debugging
+   the issue) during a regular installation with thousands of updates. This
+   will be revisited in the next release.
+ - The *umount* module was buggy and did not actually unmount anything.
+
+
 # 3.2.52 (2022-02-25) #
 
 This release contains contributions from (alphabetically by first name):
@@ -24,6 +58,7 @@ This release contains contributions from (alphabetically by first name):
  - *users* has a new key *sudoersConfigureWithGroup* to allow for
    different styles of sudo configuration. #1887
 
+
 # 3.2.51 (2022-02-01) #
 
 This release contains contributions from (alphabetically by first name):
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2e18e3e2ead7ec62d5803d12480cba213552ce0d..29f3df083b17708e96c7024bb4104e78863eacda 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,7 +41,7 @@
 # TODO:3.3: Require CMake 3.12
 cmake_minimum_required( VERSION 3.3 FATAL_ERROR )
 project( CALAMARES
-    VERSION 3.2.52
+    VERSION 3.2.53
     LANGUAGES C CXX
 )
 
diff --git a/ci/umount.sh b/ci/umount.sh
new file mode 100755
index 0000000000000000000000000000000000000000..400b0e1159d72814b945d631bca0ebd5784bac0f
--- /dev/null
+++ b/ci/umount.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+#
+# This is an "unmount" script that tries to unmount whatever
+# filesystems Calamares might have left mounted (e.g. because of
+# a crash, or ^C'ing the installer, or ..).
+#
+
+# Swap may have become enabled on the disks just used; assume
+# we're in a live session where we don't want any.
+sudo swapoff -a
+# In Arch-based systems, there may be a gpg-agent started by
+# pacman during installation, which lives in the chroot. Kill
+# them all; again assume we're in a live session where it doesn't matter.
+sudo pkill gpg-agent
+# Unmount the filesystems in *reverse* order, since we need to ditch
+# e.g. /run/udev before /run before the root filesystem.
+sudo umount $( LC_ALL=C mount | awk '/calamares-root/{print $3}' | LC_ALL=C sort -r )
diff --git a/lang/calamares_fi_FI.ts b/lang/calamares_fi_FI.ts
index 49f8498f2ca5b392f9fc4ad98ae667edcc300deb..263444789d2e379078cad7de405de0ebe7bc35ab 100644
--- a/lang/calamares_fi_FI.ts
+++ b/lang/calamares_fi_FI.ts
@@ -370,7 +370,7 @@ Linkki kopioitu leikepöydälle</translation>
     <message>
       <location filename="../src/libcalamaresui/ViewManager.cpp" line="315"/>
       <source>The %1 installer is about to make changes to your disk in order to install %2.&lt;br/&gt;&lt;strong&gt;You will not be able to undo these changes.&lt;/strong&gt;</source>
-      <translation>Asennus ohjelman %1 on tehtävä muutoksia levylle, jotta %2 voidaan asentaa.&lt;br/&gt;&lt;strong&gt;Et voi kumota näitä muutoksia.&lt;/strong&gt;</translation>
+      <translation>Asennusohjelman %1 on tehtävä muutoksia asemalle, jotta %2 voidaan asentaa.&lt;br/&gt;&lt;strong&gt;Et voi kumota näitä muutoksia.&lt;/strong&gt;</translation>
     </message>
     <message>
       <location filename="../src/libcalamaresui/ViewManager.cpp" line="318"/>
@@ -597,7 +597,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1385"/>
       <source>This storage device does not seem to have an operating system on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
-      <translation>Tällä kiintolevyllä ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi ennen kuin kiintolevylle tehdään muutoksia.</translation>
+      <translation>Tällä massamuistilla ei näytä olevan käyttöjärjestelmää. Mitä haluat tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistille tehdään muutoksia.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1390"/>
@@ -605,7 +605,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1449"/>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1474"/>
       <source>&lt;strong&gt;Erase disk&lt;/strong&gt;&lt;br/&gt;This will &lt;font color="red"&gt;delete&lt;/font&gt; all data currently present on the selected storage device.</source>
-      <translation>&lt;strong&gt;Tyhjennä levy&lt;/strong&gt;&lt;br/&gt;Tämä &lt;font color="red"&gt;poistaa&lt;/font&gt; kaikki tiedot valitussa kiintolevyssä.</translation>
+      <translation>&lt;strong&gt;Tyhjennä asema&lt;/strong&gt;&lt;br/&gt;Tämä &lt;font color="red"&gt;poistaa&lt;/font&gt; kaikki tiedot valitusta massamuistista.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1394"/>
@@ -626,32 +626,32 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1417"/>
       <source>This storage device has %1 on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
-      <translation>Tässä kiintolevyssä on %1 dataa. Mitä haluat tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi ennen kuin kiintolevyyn tehdään muutoksia.</translation>
+      <translation>Tässä massamuistissa on %1 dataa. Mitä haluat tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi ennen kuin massamuistiin tehdään muutoksia.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1440"/>
       <source>This storage device already has an operating system on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
-      <translation>Tämä kiintolevy sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi, ennen kuin kiintolevyyn tehdään muutoksia.</translation>
+      <translation>Tämä massamuisti sisältää jo käyttöjärjestelmän. Mitä haluaisit tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1465"/>
       <source>This storage device has multiple operating systems on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
-      <translation>Tämä kiintolevy sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi, ennen kuin kiintolevyyn tehdään muutoksia.</translation>
+      <translation>Tämä massamuisti sisältää jo useita käyttöjärjestelmiä. Mitä haluaisit tehdä?&lt;br/&gt;Voit tarkistaa ja vahvistaa valintasi, ennen kuin massamuistiin tehdään muutoksia.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1537"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation>Tällä kiintolevyllä on jo käyttöjärjestelmä, mutta osiotaulukko &lt;strong&gt;%1&lt;/strong&gt; on erilainen kuin tarvittava &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
+      <translation>Tällä massamuistilla on jo käyttöjärjestelmä, mutta osiotaulukko &lt;strong&gt;%1&lt;/strong&gt; on erilainen kuin tarvittava &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1560"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation>Tähän kiintolevyyn on &lt;strong&gt;kiinnitetty&lt;/strong&gt; yksi osioista.</translation>
+      <translation>Tähän massamuistiin on &lt;strong&gt;liitetty&lt;/strong&gt; yksi osioista.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1565"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation>Tämä kiintolevy on osa &lt;strong&gt;passiivista RAID&lt;/strong&gt; kokoonpanoa.</translation>
+      <translation>Tämä massamuisti on osa &lt;strong&gt;passiivista RAID&lt;/strong&gt; kokoonpanoa.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1692"/>
@@ -1130,7 +1130,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</tra
     <message>
       <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="280"/>
       <source>The installer failed to create partition on disk '%1'.</source>
-      <translation>Asennusohjelma epäonnistui osion luonnissa levylle '%1'.</translation>
+      <translation>Asennusohjelma epäonnistui osion luonnissa asemalle '%1'.</translation>
     </message>
   </context>
   <context>
@@ -1143,7 +1143,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</tra
     <message>
       <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="43"/>
       <source>Creating a new partition table will delete all existing data on the disk.</source>
-      <translation>Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot levyltä.</translation>
+      <translation>Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot asemalta.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="69"/>
@@ -1306,7 +1306,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</tra
     <message>
       <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="108"/>
       <source>This installer &lt;strong&gt;cannot detect a partition table&lt;/strong&gt; on the selected storage device.&lt;br&gt;&lt;br&gt;The device either has no partition table, or the partition table is corrupted or of an unknown type.&lt;br&gt;This installer can create a new partition table for you, either automatically, or through the manual partitioning page.</source>
-      <translation>Asennusohjelma &lt;strong&gt;ei tunnista osiotaulukkoa&lt;/strong&gt; valitussa kiintolevyssä.&lt;br&gt;&lt;br&gt;Levyssä ei ole osiotaulukkoa, taulukko on vioittunut tai tuntematon.&lt;br&gt;Asennusohjelma voi tehdä uuden osiotaulukon, joko automaattisesti tai manuaalisesti.</translation>
+      <translation>Asennusohjelma &lt;strong&gt;ei tunnista osiotaulukkoa&lt;/strong&gt; valitussa massamuistissa.&lt;br&gt;&lt;br&gt;Laitteessa ei ole osiotaulukkoa, taulukko on vioittunut tai tuntematon.&lt;br&gt;Asennusohjelma voi tehdä uuden osiotaulukon, joko automaattisesti tai manuaalisesti.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="91"/>
@@ -1321,7 +1321,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</tra
     <message>
       <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="151"/>
       <source>The type of &lt;strong&gt;partition table&lt;/strong&gt; on the selected storage device.&lt;br&gt;&lt;br&gt;The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.&lt;br&gt;This installer will keep the current partition table unless you explicitly choose otherwise.&lt;br&gt;If unsure, on modern systems GPT is preferred.</source>
-      <translation>Valitun kiintolevyn &lt;strong&gt;osiotaulukon&lt;/strong&gt; tyyppi.&lt;br&gt;&lt;br&gt;Ainoa tapa muuttaa osiotaulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki kiintolevyn sisältämät tiedot. &lt;br&gt;Asennusohjelma säilyttää nykyisen osiotaulukon, ellet nimenomaisesti valitse muuta.&lt;br&gt;Jos olet epävarma niin nykyaikaisissa järjestelmissä GPT on suositus.</translation>
+      <translation>Valitun massamuistin &lt;strong&gt;osiotaulukon&lt;/strong&gt; tyyppi.&lt;br&gt;&lt;br&gt;Ainoa tapa muuttaa osiotaulukon tyyppiä on poistaa ja luoda uudelleen osiot tyhjästä, mikä tuhoaa kaikki massamuistin sisältämät tiedot. &lt;br&gt;Asennusohjelma säilyttää nykyisen osiotaulukon, ellet nimenomaisesti valitse muuta.&lt;br&gt;Jos olet epävarma niin nykyaikaisissa järjestelmissä GPT on suositus.</translation>
     </message>
   </context>
   <context>
@@ -1612,7 +1612,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</tra
     <message>
       <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="73"/>
       <source>The installer failed to format partition %1 on disk '%2'.</source>
-      <translation>Levyn '%2' osion %1 alustus epäonnistui.</translation>
+      <translation>Aseman '%2' osion %1 alustus epäonnistui.</translation>
     </message>
   </context>
   <context>
@@ -2917,7 +2917,7 @@ hiiren vieritystä skaalaamiseen.</translation>
     <message>
       <location filename="../src/modules/partition/PartitionViewStep.cpp" line="712"/>
       <source>has at least one disk device available.</source>
-      <translation>on vähintään yksi levy käytettävissä.</translation>
+      <translation>on vähintään yksi asema käytettävissä.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/PartitionViewStep.cpp" line="713"/>
@@ -3348,7 +3348,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
     <message>
       <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="77"/>
       <source>The installer failed to resize partition %1 on disk '%2'.</source>
-      <translation>Asennusohjelma epäonnistui osion %1 koon muuttamisessa levyllä '%2'.</translation>
+      <translation>Asennusohjelma epäonnistui osion %1 koon muuttamisessa asemalla '%2'.</translation>
     </message>
   </context>
   <context>
@@ -3396,7 +3396,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
     <message>
       <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="68"/>
       <source>Scanning storage devices...</source>
-      <translation>Etsitään kiintolevyjä...</translation>
+      <translation>Etsitään massamuisteja...</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="68"/>
diff --git a/lang/calamares_ko.ts b/lang/calamares_ko.ts
index 0b6ed9b1716af74506c222616c3d34b7e96ab6b6..34650f3410a6811615176358a727375e364fdae6 100644
--- a/lang/calamares_ko.ts
+++ b/lang/calamares_ko.ts
@@ -4080,7 +4080,7 @@ Output:
     <message>
       <location filename="../src/modules/zfs/ZfsJob.cpp" line="181"/>
       <source>No partitions are available for ZFS.</source>
-      <translation type="unfinished"/>
+      <translation>ZFS에 사용할 수 있는 파티션이 없습니다.</translation>
     </message>
     <message>
       <location filename="../src/modules/zfs/ZfsJob.cpp" line="192"/>
diff --git a/lang/python/ko/LC_MESSAGES/python.po b/lang/python/ko/LC_MESSAGES/python.po
index 36bfaab7d0207ea7819b4553cb90b421db1693db..47861567140ebae087607ddf8f78e1672870ec96 100644
--- a/lang/python/ko/LC_MESSAGES/python.po
+++ b/lang/python/ko/LC_MESSAGES/python.po
@@ -5,7 +5,7 @@
 # 
 # Translators:
 # Ji-Hyeon Gim <potatogim@potatogim.net>, 2018
-# Jung Hee Lee <daemul72@gmail.com>, 2022
+# Junghee Lee <daemul72@gmail.com>, 2022
 # 
 #, fuzzy
 msgid ""
@@ -14,7 +14,7 @@ msgstr ""
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-02-17 15:52+0100\n"
 "PO-Revision-Date: 2017-08-09 10:34+0000\n"
-"Last-Translator: Jung Hee Lee <daemul72@gmail.com>, 2022\n"
+"Last-Translator: Junghee Lee <daemul72@gmail.com>, 2022\n"
 "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff --git a/src/libcalamares/partition/AutoMount.cpp b/src/libcalamares/partition/AutoMount.cpp
index adc8448160b940fca82b18c48ecdfff0add5eb8e..3ac39b36a8b4bc9bf7303ba5384c3fffd569b2b4 100644
--- a/src/libcalamares/partition/AutoMount.cpp
+++ b/src/libcalamares/partition/AutoMount.cpp
@@ -21,9 +21,23 @@ namespace Partition
 
 struct AutoMountInfo
 {
+    bool hasSolid = false;
     bool wasSolidModuleAutoLoaded = false;
 };
 
+/** @section Solid
+ *
+ * KDE Solid automount management.
+ *
+ * Solid can be influenced through DBus calls to kded5. The following code
+ * handles Solid: if Solid exists (e.g. we're in a KDE Plasma desktop)
+ * then try to turn off automount that way.
+ */
+
+/** @brief Boilerplate for a call to kded5
+ *
+ * Returns a method-call message, ready for arguments and call().
+ */
 static inline QDBusMessage
 kdedCall( const QString& method )
 {
@@ -31,6 +45,31 @@ kdedCall( const QString& method )
         QStringLiteral( "org.kde.kded5" ), QStringLiteral( "/kded" ), QStringLiteral( "org.kde.kded5" ), method );
 }
 
+/** @brief Log a response from call()
+ *
+ * Logs without a function header so it is simple to use from an existing
+ * logging-block. Assumes @p r is a reply or an error message.
+ *
+ * @internal
+ */
+static void
+logDBusResponse( QDBusMessage&& r )
+{
+    if ( r.type() == QDBusMessage::ReplyMessage )
+    {
+        cDebug() << Logger::SubEntry << r.type() << "reply" << r.arguments();
+    }
+    else
+    {
+        cDebug() << Logger::SubEntry << r.type() << "error" << r.errorMessage();
+    }
+}
+
+/** @brief Enables (or disables) automount for Solid
+ *
+ * If @p enable is @c true, enables automount. Otherwise, disables it.
+ * This throws some DBbus messages on the wire and forgets about them.
+ */
 // This code comes, roughly, from the KCM for removable devices.
 static void
 enableSolidAutoMount( QDBusConnection& dbus, bool enable )
@@ -41,17 +80,24 @@ enableSolidAutoMount( QDBusConnection& dbus, bool enable )
     {
         auto msg = kdedCall( QStringLiteral( "setModuleAutoloading" ) );
         msg.setArguments( { moduleName, QVariant( enable ) } );
-        dbus.call( msg, QDBus::NoBlock );
+        logDBusResponse( dbus.call( msg, QDBus::Block ) );
     }
 
     // Stop module
     {
         auto msg = kdedCall( enable ? QStringLiteral( "loadModule" ) : QStringLiteral( "unloadModule" ) );
         msg.setArguments( { moduleName } );
-        dbus.call( msg, QDBus::NoBlock );
+        logDBusResponse( dbus.call( msg, QDBus::Block ) );
     }
 }
 
+/** @brief Check if Solid exists and has automount set
+ *
+ * Updates the @p info object with the discovered information.
+ * - if there is no Solid available on DBus, sets hasSolid to @c false
+ * - if there is Solid available on DBusm, sets *hasSolid* to @c true
+ *   and places the queried value of automounting in *wasSolidModuleAutoLoaded*.
+ */
 static void
 querySolidAutoMount( QDBusConnection& dbus, AutoMountInfo& info )
 {
@@ -73,26 +119,51 @@ querySolidAutoMount( QDBusConnection& dbus, AutoMountInfo& info )
                 result = v.toBool();
             }
         }
+        if ( !result.has_value() )
+        {
+            cDebug() << "No viable response from Solid" << r.path();
+        }
+    }
+    else
+    {
+        // It's an error message
+        cDebug() << "Solid not available:" << r.errorMessage();
     }
+    info.hasSolid = result.has_value();
     info.wasSolidModuleAutoLoaded = result.has_value() ? result.value() : false;
 }
 
 std::shared_ptr< AutoMountInfo >
 automountDisable( bool disable )
 {
-    auto u = std::make_shared< AutoMountInfo >();
+    auto info = std::make_shared< AutoMountInfo >();
     QDBusConnection dbus = QDBusConnection::sessionBus();
-    querySolidAutoMount( dbus, *u );
-    enableSolidAutoMount( dbus, !disable );
-    return u;
+
+    // KDE Plasma (Solid) handling
+    querySolidAutoMount( dbus, *info );
+    if ( info->hasSolid )
+    {
+        cDebug() << "Setting Solid automount to" << ( disable ? "disabled" : "enabled" );
+        enableSolidAutoMount( dbus, !disable );
+    }
+
+    // TODO: other environments
+    return info;
 }
 
 
 void
-automountRestore( const std::shared_ptr< AutoMountInfo >& t )
+automountRestore( const std::shared_ptr< AutoMountInfo >& info )
 {
     QDBusConnection dbus = QDBusConnection::sessionBus();
-    enableSolidAutoMount( dbus, t->wasSolidModuleAutoLoaded );
+
+    // KDE Plasma (Solid) handling
+    if ( info->hasSolid )
+    {
+        enableSolidAutoMount( dbus, info->wasSolidModuleAutoLoaded );
+    }
+
+    // TODO: other environments
 }
 
 }  // namespace Partition
diff --git a/src/libcalamares/partition/Mount.cpp b/src/libcalamares/partition/Mount.cpp
index 6bc3a7cd2ffb3c21fd6a8c2754f1083d37141252..c22ba942b5e00c48b902cd6bb091e7b40b44aa50 100644
--- a/src/libcalamares/partition/Mount.cpp
+++ b/src/libcalamares/partition/Mount.cpp
@@ -128,26 +128,32 @@ QList< MtabInfo >
 MtabInfo::fromMtabFilteredByPrefix( const QString& mountPrefix, const QString& mtabPath )
 {
     QFile f( mtabPath.isEmpty() ? "/etc/mtab" : mtabPath );
-    if ( !f.open( QIODevice::ReadOnly ) )
+    if ( !f.open( QIODevice::ReadOnly | QIODevice::Text ) )
     {
         return {};
     }
 
-    QTextStream in( &f );
     QList< MtabInfo > l;
-    while ( !f.atEnd() )
+    // After opening, atEnd() is already true (!?) so try reading at least once
+    do
     {
-        QStringList line = in.readLine().split( ' ', SplitSkipEmptyParts );
-        if ( line.length() == 3 && !line[ 0 ].startsWith( '#' ) )
+        QString line = f.readLine();
+        if ( line.isEmpty() || line.startsWith( '#' ) )
         {
-            // Lines have format: <device> <mountpoint> <options>, so check
+            continue;
+        }
+
+        QStringList parts = line.split( ' ', SplitSkipEmptyParts );
+        if ( parts.length() >= 3 && !parts[ 0 ].startsWith( '#' ) )
+        {
+            // Lines have format: <device> <mountpoint> <fstype> <options>..., so check
             // the mountpoint field. Everything starts with an empty string.
-            if ( line[ 1 ].startsWith( mountPrefix ) )
+            if ( parts[ 1 ].startsWith( mountPrefix ) )
             {
-                l.append( { line[ 0 ], line[ 1 ] } );
+                l.append( { parts[ 0 ], parts[ 1 ] } );
             }
         }
-    }
+    } while ( !f.atEnd() );
     return l;
 }
 
diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py
index c7bc741dea3f24fd0bb792adeecac7832d8cddd6..fb8e19ac2631f27ce0ccf19f4c9a6cbfe945480f 100644
--- a/src/modules/bootloader/main.py
+++ b/src/modules/bootloader/main.py
@@ -520,6 +520,8 @@ def get_grub_efi_parameters():
         return ("i386-efi", "grubia32.efi", "bootia32.efi")
     elif efi_bitness == "64" and cpu_type == "aarch64":
         return ("arm64-efi", "grubaa64.efi", "bootaa64.efi")
+    elif efi_bitness == "64" and cpu_type == "loongarch64":
+        return ("loongarch64-efi", "grubloongarch64.efi", "bootloongarch64.efi")
     elif efi_bitness == "64":
         # If it's not ARM, must by AMD64
         return ("x86_64-efi", "grubx64.efi", "bootx64.efi")
diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py
index 59777cedbc88dc0f2cf1bcfb7b68e21ce9a40c1f..e373a3443a8c834c4a318b122ab41cdb05a4e2a7 100644
--- a/src/modules/packages/main.py
+++ b/src/modules/packages/main.py
@@ -424,7 +424,7 @@ class PMPacman(PackageManager):
         while pacman_count <= self.pacman_num_retries:
             pacman_count += 1
             try:
-                if callback is True:
+                if False: # callback:
                     libcalamares.utils.target_env_process_output(command, self.line_cb)
                 else:
                     libcalamares.utils.target_env_process_output(command)
diff --git a/src/modules/partition/jobs/AutoMountManagementJob.cpp b/src/modules/partition/jobs/AutoMountManagementJob.cpp
index 29b19793302b0fe57dfb7918aa1a6b209c28cf1e..71d3f32ffa95f78ac87cfa58c5d5d4751ed48c64 100644
--- a/src/modules/partition/jobs/AutoMountManagementJob.cpp
+++ b/src/modules/partition/jobs/AutoMountManagementJob.cpp
@@ -25,17 +25,15 @@ AutoMountManagementJob::prettyName() const
 Calamares::JobResult
 AutoMountManagementJob::exec()
 {
-    cVerbose() << "this" << Logger::Pointer( this ) << "value" << Logger::Pointer( m_stored )
-               << ( m_stored        ? "restore"
-                        : m_disable ? "disable"
-                                    : "enable" );
     if ( m_stored )
     {
+        cDebug() << "Restore automount settings";
         CalamaresUtils::Partition::automountRestore( m_stored );
         m_stored.reset();
     }
     else
     {
+        cDebug() << "Set automount to" << ( m_disable ? "disable" : "enable" );
         m_stored = CalamaresUtils::Partition::automountDisable( m_disable );
     }
     return Calamares::JobResult::ok();
diff --git a/src/modules/umount/UmountJob.cpp b/src/modules/umount/UmountJob.cpp
index b9d92fa87c345b59db39c5efba57bbe6a7a380e3..99777d2d0f72880bd9e976e64afafe6c6b9ba1c7 100644
--- a/src/modules/umount/UmountJob.cpp
+++ b/src/modules/umount/UmountJob.cpp
@@ -62,11 +62,13 @@ unmountTargetMounts( const QString& rootMountPoint )
     auto targetMounts = MtabInfo::fromMtabFilteredByPrefix( targetMountPath );
     std::sort( targetMounts.begin(), targetMounts.end(), MtabInfo::mountPointOrder );
 
+    cDebug() << "Read" << targetMounts.count() << "entries from" << targetMountPath;
     for ( const auto& m : qAsConst( targetMounts ) )
     {
+        // Returns the program's exit code, so 0 is success and non-0
+        // (truthy) is a failure.
         if ( CalamaresUtils::Partition::unmount( m.mountPoint, { "-lv" } ) )
         {
-            // Returns the program's exit code, so 0 is success
             return Calamares::JobResult::error(
                 QCoreApplication::translate( UmountJob::staticMetaObject.className(),
                                              "Could not unmount target system." ),