diff --git a/src/generalsettingsview.cpp b/src/generalsettingsview.cpp
index 4fa2d9c4a18ebe407e6d522f7302beecadb87549..0503ce55141bb44822c5e6fb729f7c36ad2f78ac 100644
--- a/src/generalsettingsview.cpp
+++ b/src/generalsettingsview.cpp
@@ -85,6 +85,7 @@ G_DEFINE_TYPE_WITH_PRIVATE(GeneralSettingsView, general_settings_view, GTK_TYPE_
 
 enum {
     CLEAR_ALL_HISTORY,
+    UPDATE_DOWNLOAD_FOLDER,
     LAST_SIGNAL
 };
 
@@ -201,6 +202,8 @@ choose_downloads_directory(GeneralSettingsView *self)
 
     // set download folder
     change_prefered_directory(filename, self);
+
+    g_signal_emit(G_OBJECT(self), general_settings_view_signals[UPDATE_DOWNLOAD_FOLDER], 0, filename);
 }
 
 static void
@@ -340,6 +343,16 @@ general_settings_view_class_init(GeneralSettingsViewClass *klass)
         g_cclosure_marshal_VOID__VOID,
         G_TYPE_NONE, 0);
 
+    general_settings_view_signals[UPDATE_DOWNLOAD_FOLDER] = g_signal_new("update-download-folder",
+        G_TYPE_FROM_CLASS(klass),
+        (GSignalFlags) (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
+        0,
+        nullptr,
+        nullptr,
+        g_cclosure_marshal_VOID__BOOLEAN,
+        G_TYPE_NONE,
+        1, G_TYPE_STRING);
+
     /* Define class properties: e.g. pointer to main window, etc.*/
     object_class->set_property = general_settings_view_set_property;
     object_class->get_property = general_settings_view_get_property;
diff --git a/src/ringmainwindow.cpp b/src/ringmainwindow.cpp
index 16c582716c7d79492dc3621bb1055080022fe791..b3f142ff0bfa05da739e870b9cb0adc6fc0212dd 100644
--- a/src/ringmainwindow.cpp
+++ b/src/ringmainwindow.cpp
@@ -31,6 +31,7 @@
 #include <api/contactmodel.h>
 #include <api/conversation.h>
 #include <api/conversationmodel.h>
+#include <api/datatransfermodel.h>
 #include <api/lrc.h>
 #include <api/newaccountmodel.h>
 #include <api/newcallmodel.h>
@@ -108,6 +109,8 @@ struct RingMainWindowPrivate
     GSettings *settings;
 
     details::CppImpl* cpp; ///< Non-UI and C++ only code
+
+    gulong update_download_folder;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE(RingMainWindow, ring_main_window, GTK_TYPE_APPLICATION_WINDOW);
@@ -596,6 +599,27 @@ on_clear_all_history_clicked(RingMainWindow* self)
     priv->cpp->has_cleared_all_history = true;
 }
 
+static void
+update_data_transfer(lrc::api::DataTransferModel& model, GSettings* settings)
+{
+    char* download_directory_value;
+    auto* download_directory_variant = g_settings_get_value(settings, "download-folder");
+    g_variant_get(download_directory_variant, "&s", &download_directory_value);
+    std::string download_dir = download_directory_value;
+    if (!download_dir.empty() && download_dir.back() != '/')
+        download_dir += "/";
+    model.downloadDirectory = download_dir;
+}
+
+static void
+update_download_folder(RingMainWindow* self)
+{
+    auto* priv = RING_MAIN_WINDOW_GET_PRIVATE(RING_MAIN_WINDOW(self));
+    g_return_if_fail(priv);
+
+    update_data_transfer(priv->cpp->lrc_->getDataTransferModel(), priv->settings);
+}
+
 void
 CppImpl::init()
 {
@@ -649,6 +673,8 @@ CppImpl::init()
     gtk_window_set_default_size(GTK_WINDOW(self), width, height);
     g_signal_connect(self, "configure-event", G_CALLBACK(on_window_size_changed), nullptr);
 
+    update_data_transfer(lrc_->getDataTransferModel(), widgets->settings);
+
     /* search-entry-places-call setting */
     on_search_entry_places_call_changed(widgets->settings, "search-entry-places-call", self);
     g_signal_connect(widgets->settings, "changed::search-entry-places-call",
@@ -700,6 +726,12 @@ CppImpl::init()
                         MEDIA_SETTINGS_VIEW_NAME);
 
     widgets->general_settings_view = general_settings_view_new(GTK_WIDGET(self));
+    widgets->update_download_folder = g_signal_connect_swapped(
+        widgets->general_settings_view,
+        "update-download-folder",
+        G_CALLBACK(update_download_folder),
+        self
+    );
 
     gtk_stack_add_named(GTK_STACK(widgets->stack_main_view), widgets->general_settings_view,
                         GENERAL_SETTINGS_VIEW_NAME);
@@ -1500,6 +1532,11 @@ ring_main_window_dispose(GObject *object)
     priv->cpp = nullptr;
 
     G_OBJECT_CLASS(ring_main_window_parent_class)->dispose(object);
+
+    if (priv->general_settings_view) {
+        g_signal_handler_disconnect(priv->general_settings_view, priv->update_download_folder);
+        priv->update_download_folder = 0;
+    }
 }
 
 static void