diff --git a/CMakeLists.txt b/CMakeLists.txt
index d9c5433..3b20f66 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,95 +1,95 @@
 # SPDX-FileCopyrightText: 2023 g10 code Gmbh
 # SPDX-Contributor: Carl Schwan <carl.schwan@gnupg.com>
 # SPDX-License-Identifier: BSD-2-Clause
 
 cmake_minimum_required(VERSION 3.20)
 
 set(VERSION "0.0.1")
 project(gpgoljs VERSION ${VERSION})
 
 set(KF_MIN_VERSION "6.0.0")
 set(QT_MIN_VERSION "6.6.0")
-set(MIMETREEPARSER_VERSION "6.0.0")
-set(LIBKLEO_VERSION "6.0.0")
-set(LIBKDEPIM_VERSION "6.0.0")
-set(PIMTEXTEDIT_VERSION "6.0.0")
+set(MIMETREEPARSER_VERSION "6.3.41")
+set(LIBKLEO_VERSION "6.2.0")
+set(LIBKDEPIM_VERSION "6.2.0")
+set(PIMTEXTEDIT_VERSION "6.2.0")
 set(GPG_ERROR_REQUIRED_VERSION "1.36")
 
 find_package(ECM ${KF_MIN_VERSION} CONFIG REQUIRED)
 set(CMAKE_MODULE_PATH
     ${CMAKE_MODULE_PATH}
     ${ECM_MODULE_PATH}
 )
 
 find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
 
 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
 
 include(FeatureSummary)
 
 include(KDEInstallDirs)
 include(KDECMakeSettings)
 include(KDECompilerSettings NO_POLICY_SCOPE)
 include(KDEGitCommitHooks)
 include(KDECMakeSettings)
 include(KDEClangFormat)
 
 include(ECMQtDeclareLoggingCategory)
 include(ECMAddTests)
 include(ECMSetupVersion)
 
 set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 ecm_setup_version(${VERSION} VARIABLE_PREFIX GPGOLJS VERSION_HEADER
                   "${CMAKE_CURRENT_BINARY_DIR}/client/gpgoljs_version.h")
 
 find_package(Qt6 ${QT_MIN_VERSION} NO_MODULE COMPONENTS Core HttpServer Widgets PrintSupport WebSockets)
 set_package_properties(Qt6 PROPERTIES
     TYPE REQUIRED
     PURPOSE "Basic application components"
 )
 
 find_package(KF6 ${KF_MIN_VERSION} COMPONENTS Contacts Completion CoreAddons WidgetsAddons Config ColorScheme Codecs XmlGui GuiAddons JobWidgets Sonnet CalendarCore Archive)
 set_package_properties(KF6 PROPERTIES
     TYPE REQUIRED
     PURPOSE "Basic application components"
 )
 
 find_package(KPim6Libkleo ${LIBKLEO_VERSION} CONFIG REQUIRED)
 find_package(KPim6Libkdepim ${LIBKDEPIM_LIB_VERSION} CONFIG REQUIRED)
 find_package(KPim6MimeTreeParserWidgets ${MIMETREEPARSER_VERSION} CONFIG REQUIRED)
 find_package(KPim6TextEdit ${PIMTEXTEDIT_VERSION} CONFIG REQUIRED)
 find_package(KF6TextAutoCorrectionCore CONFIG REQUIRED)
 
 find_package(LibGpgError ${GPG_ERROR_REQUIRED_VERSION} REQUIRED)
 
 # Optional packages
 if (WIN32)
   # Only a replacement available for Windows so this
   # is required on other platforms.
   find_package(KF6DBusAddons ${KF_MIN_VERSION} CONFIG)
   set_package_properties(KF6DBusAddons PROPERTIES DESCRIPTION "Support library to work with DBus"
                          PURPOSE "DBus session integration"
                          URL "https://inqlude.org/libraries/kdbusaddons.html"
                          TYPE OPTIONAL)
 else()
   find_package(KF6DBusAddons ${KF_MIN_VERSION} CONFIG REQUIRED)
   message("called")
   set(_gpgol_dbusaddons_libs KF6::DBusAddons)
 endif()
 
 if (BUILD_TESTING)
     find_package(Qt6 ${QT_MIN_VERSION} NO_MODULE COMPONENTS Test)
 endif()
 
 add_subdirectory(common)
 add_subdirectory(server)
 add_subdirectory(client)
 
 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES client/*.cpp client/*.h server/*.cpp server/*.h)
 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
 
 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
diff --git a/client/emailviewer.cpp b/client/emailviewer.cpp
index ebe3528..3068cad 100644
--- a/client/emailviewer.cpp
+++ b/client/emailviewer.cpp
@@ -1,61 +1,71 @@
 // SPDX-FileCopyrightText: 2024 g10 code GmbH
 // SPDX-Contributor: Carl Schwan <carl.schwan@gnupg.com>
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 #include "emailviewer.h"
 
 #include "editor/composerwindow.h"
 #include "editor/composerwindowfactory.h"
 
 #include <KLocalizedString>
 
+#include <QMenuBar>
 #include <QToolBar>
 #include <QToolButton>
 
 using namespace Qt::Literals::StringLiterals;
 
 static KMime::Message::Ptr toMessage(const QString &content)
 {
     KMime::Message::Ptr message(new KMime::Message());
     message->setContent(KMime::CRLFtoLF(content.toUtf8()));
     message->parse();
     return message;
 }
 
 EmailViewer::EmailViewer(const QString &content, const QString &accountEmail, const QString &displayName, const QString &bearerToken)
-    : MimeTreeParser::Widgets::MessageViewerDialog({toMessage(content)})
+    : MimeTreeParser::Widgets::MessageViewerWindow()
 {
+    setMessages({toMessage(content)});
+
     const auto message = messages().at(0);
     toolBar()->show();
 
     // spacer
     QWidget *spacer = new QWidget();
     spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     toolBar()->addWidget(spacer);
 
+    auto messageMenu = menuBar()->findChild<QMenu *>("messageMenu");
+    Q_ASSERT(messageMenu);
+
+    messageMenu->addSeparator();
+
     // reply
     auto replyAction = new QAction(QIcon::fromTheme(u"mail-reply-sender-symbolic"_s), i18nc("@action:button", "Reply"), toolBar());
     connect(replyAction, &QAction::triggered, this, [message, accountEmail, displayName, bearerToken](bool) {
         auto dialog = ComposerWindowFactory::self().create(accountEmail, displayName, bearerToken.toUtf8());
         dialog->reply(message);
         dialog->show();
         dialog->activateWindow();
         dialog->raise();
     });
     toolBar()->addAction(replyAction);
+    messageMenu->addAction(replyAction);
     auto widget = qobject_cast<QToolButton *>(toolBar()->widgetForAction(replyAction));
     widget->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
 
     // forward
     auto forwardAction = new QAction(QIcon::fromTheme(u"mail-forward-symbolic"_s), i18nc("@action:button", "Forward"), toolBar());
     connect(forwardAction, &QAction::triggered, this, [message, accountEmail, displayName, bearerToken](bool) {
         auto dialog = ComposerWindowFactory::self().create(accountEmail, displayName, bearerToken.toUtf8());
         dialog->reply(message);
         dialog->show();
         dialog->activateWindow();
         dialog->raise();
     });
     toolBar()->addAction(forwardAction);
+    messageMenu->addAction(forwardAction);
     widget = qobject_cast<QToolButton *>(toolBar()->widgetForAction(forwardAction));
     widget->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
 }
diff --git a/client/emailviewer.h b/client/emailviewer.h
index 9980831..b772050 100644
--- a/client/emailviewer.h
+++ b/client/emailviewer.h
@@ -1,13 +1,13 @@
 // SPDX-FileCopyrightText: 2024 g10 code GmbH
 // SPDX-Contributor: Carl Schwan <carl.schwan@gnupg.com>
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include <MimeTreeParserWidgets/MessageViewerDialog>
+#include <MimeTreeParserWidgets/MessageViewerWindow>
 
-class EmailViewer : public MimeTreeParser::Widgets::MessageViewerDialog
+class EmailViewer : public MimeTreeParser::Widgets::MessageViewerWindow
 {
     Q_OBJECT
 
 public:
     EmailViewer(const QString &content, const QString &accountEmail, const QString &displayName, const QString &bearerToken);
 };