diff --git a/amadeus/src/app.rs b/amadeus/src/app.rs
index 3cc2eceef3c1237a889238a15b274460212410cc..af869c13c7d22c42b3085b94f2c0778654f0a7f7 100644
--- a/amadeus/src/app.rs
+++ b/amadeus/src/app.rs
@@ -3,7 +3,7 @@
 use crate::{
     components::{
         self,
-        config::{AmadeusConfig, RemoteConfig},
+        config::AmadeusConfig,
         mainpanel::{history, playlists, queue, search},
         modal::*,
         *,
@@ -21,7 +21,7 @@ use iced::{
     Application, Command, Element, Event, Length, Renderer,
 };
 use iced_aw::{native::Split, split};
-use lektor_lib::{requests::*, ConnectConfigPtr};
+use lektor_lib::{requests::*, ConnectConfig, ConnectConfigPtr};
 use lektor_payloads::{Infos, KId, Kara, KaraFilter, PlayState, PlayStateWithCurrent, Priority};
 use lektor_utils::{config::UserConfig, either, log};
 use std::{future::Future, sync::Arc};
@@ -130,17 +130,11 @@ impl Amadeus {
         let cfg = self.connect_config.clone();
         let store = self.kara_store.clone();
         async move {
-            stream::iter(
-                get_history(cfg)
-                    .await
-                    .map_err(|err| log::error!("{err}"))
-                    .unwrap_or_default(),
-            )
-            .then(|id| KaraStore::into_get(store.clone(), id))
-            .try_collect()
-            .await
-            .map_err(|err| log::error!("{err}"))
-            .ok()
+            stream::iter(get_history(cfg).await.unwrap_or_default())
+                .then(|id| KaraStore::into_get(store.clone(), id))
+                .try_collect()
+                .await
+                .ok()
         }
     }
 
@@ -148,17 +142,11 @@ impl Amadeus {
         let cfg = self.connect_config.clone();
         let store = self.kara_store.clone();
         async move {
-            stream::iter(
-                get_playlist_content(cfg, plt)
-                    .await
-                    .map_err(|err| log::error!("{err}"))
-                    .unwrap_or_default(),
-            )
-            .then(|id| KaraStore::into_get(store.clone(), id))
-            .try_collect()
-            .await
-            .map_err(|err| log::error!("{err}"))
-            .ok()
+            stream::iter(get_playlist_content(cfg, plt).await.unwrap_or_default())
+                .then(|id| KaraStore::into_get(store.clone(), id))
+                .try_collect()
+                .await
+                .ok()
         }
     }
 
@@ -166,23 +154,23 @@ impl Amadeus {
         let cfg = self.connect_config.clone();
         let store = self.kara_store.clone();
         async move {
-            stream::iter(
-                get_queue(cfg)
-                    .await
-                    .map_err(|err| log::error!("{err}"))
-                    .unwrap_or_default(),
-            )
-            .then(move |(p, id)| {
-                let store = store.clone();
-                async move { store.get(id).await.map(|kara| (p, kara)) }
-            })
-            .try_collect()
-            .await
-            .map_err(|err| log::error!("{err}"))
-            .ok()
+            stream::iter(get_queue(cfg).await.unwrap_or_default())
+                .then(move |(p, id)| {
+                    let store = store.clone();
+                    async move { store.get(id).await.map(|kara| (p, kara)) }
+                })
+                .try_collect()
+                .await
+                .ok()
         }
     }
 
+    /// Get a mut reference to the config, clone the thingy if necessary, so other threads can
+    /// continue a bit with the old configuration.
+    fn config_mut(&mut self) -> &mut ConnectConfig {
+        Arc::make_mut(&mut self.connect_config)
+    }
+
     /// Handle a config message. This is ugly so we put it in another function.
     fn handle_config_message(&mut self, config: config::Message) -> Command<Message> {
         if let config::Message::TryConnect = config {
@@ -200,54 +188,35 @@ impl Amadeus {
                     ],
                 )
             });
-        }
-
-        let updated = {
-            let cfg = Arc::make_mut(&mut self.connect_config);
-            match &config {
-                config::Message::HostChanged(host) => match host.as_str().parse() {
-                    Ok(host) => {
-                        cfg.host = host;
-                        true
-                    }
-                    Err(err) => {
-                        log::error!("{err}");
-                        false
-                    }
-                },
-                config::Message::UserChanged(user) => {
-                    cfg.user = user.as_str().into();
-                    true
-                }
-                config::Message::TokenChanged(token) => {
-                    cfg.token = token.as_str().into();
-                    true
-                }
-                config::Message::SchemeChanged(scheme) => match scheme.parse() {
-                    Ok(scheme) => {
-                        cfg.scheme = scheme;
-                        true
-                    }
-                    Err(_) => false,
-                },
-                config::Message::LoadConfig(config) => {
-                    let RemoteConfig {
-                        host,
-                        scheme,
-                        user: UserConfig { user, token, .. },
-                    } = &config.connect;
-                    (cfg.host, cfg.scheme) = (*host, *scheme);
-                    (cfg.user, cfg.token) = (user.as_str().into(), token.as_str().into());
-                    true
-                }
-                _ => false,
+        } else if match &config {
+            config::Message::HostChanged(host) => host
+                .as_str()
+                .parse()
+                .map(|host| self.config_mut().host = host)
+                .is_ok(),
+            config::Message::UserChanged(user) => {
+                self.config_mut().user = user.as_str().into();
+                true
             }
-        };
-
-        if updated {
+            config::Message::TokenChanged(token) => {
+                self.config_mut().token = token.as_str().into();
+                true
+            }
+            config::Message::SchemeChanged(scheme) => scheme
+                .parse()
+                .map(|scheme| self.config_mut().scheme = scheme)
+                .is_ok(),
+            config::Message::LoadConfig(config) => {
+                let UserConfig { user, token, .. } = &config.connect.user;
+                let cfg = self.config_mut();
+                (cfg.host, cfg.scheme) = (config.connect.host, config.connect.scheme);
+                (cfg.user, cfg.token) = (user.as_str().into(), token.as_str().into());
+                true
+            }
+            _ => false,
+        } {
             self.kara_store.update(self.connect_config.clone())
         }
-
         self.config.update(config).map(Message::from)
     }
 
@@ -640,7 +609,7 @@ impl Application for Amadeus {
                 let flag = self.config.amadeus.open_config_if_init_ping_failed;
                 Command::batch([
                     flag.then(|| self.update(Message::MainPanelDisplay(MainPanelDisplay::Config)))
-                        .unwrap_or_else(|| Command::none()),
+                        .unwrap_or_else(Command::none),
                     Command::perform(async {}, |_| {
                         Message::from_iter([
                             Message::ConfigMessage(config::Message::Infos(None)),
diff --git a/amadeus/src/components/mainpanel/playlists.rs b/amadeus/src/components/mainpanel/playlists.rs
index 9f1d0549629b6c42b8730bcabc6452af511e62d2..9c02680ed643bc2264a6536968b1cee6b84c04e7 100644
--- a/amadeus/src/components/mainpanel/playlists.rs
+++ b/amadeus/src/components/mainpanel/playlists.rs
@@ -113,7 +113,7 @@ impl State {
                 match self.to_show {
                     Some(ref show) => (!self.contains(show))
                         .then(|| Command::perform(async {}, |_| Request::ChangeView))
-                        .unwrap_or_else(|| Command::none()),
+                        .unwrap_or_else(Command::none),
                     _ => Command::none(),
                 }
             }