diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a3f661a10..a8c1b4f75 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,641 +1,639 @@
 # SPDX-FileCopyrightText: none
 # SPDX-License-Identifier: BSD-3-Clause
 add_subdirectory(icons)
 add_subdirectory(mimetypes)
 
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 
 if (NOT DISABLE_KWATCHGNUPG)
     add_subdirectory(kwatchgnupg)
 endif()
 add_subdirectory(libkleopatraclient)
 add_subdirectory(conf)
 
 if(WIN32)
   set(_kleopatra_extra_uiserver_SRCS uiserver/uiserver_win.cpp)
   set(_kleopatra_extra_SRCS
       selftest/registrycheck.cpp selftest/registrycheck.h
       utils/gnupg-registry.c
       utils/userinfo_win.cpp
       utils/winapi-helpers.cpp utils/winapi-helpers.h
       utils/windowsprocessdevice.cpp utils/windowsprocessdevice.h
       versioninfo.rc kleopatra.w32-manifest
   )
 else()
   set(_kleopatra_extra_uiserver_SRCS uiserver/uiserver_unix.cpp)
   set(_kleopatra_extra_SRCS)
 endif()
 
 set(_kleopatra_uiserver_SRCS
     ${_kleopatra_extra_uiserver_SRCS}
 
     selftest/uiservercheck.cpp selftest/uiservercheck.h
     uiserver/assuanserverconnection.cpp uiserver/assuanserverconnection.h
     uiserver/createchecksumscommand.cpp uiserver/createchecksumscommand.h
     uiserver/decryptverifycommandemailbase.cpp uiserver/decryptverifycommandemailbase.h
     uiserver/decryptverifycommandfilesbase.cpp uiserver/decryptverifycommandfilesbase.h
     uiserver/echocommand.cpp uiserver/echocommand.h
     uiserver/encryptcommand.cpp uiserver/encryptcommand.h
     uiserver/importfilescommand.cpp uiserver/importfilescommand.h
     uiserver/prepencryptcommand.cpp uiserver/prepencryptcommand.h
     uiserver/prepsigncommand.cpp uiserver/prepsigncommand.h
     uiserver/selectcertificatecommand.cpp
     uiserver/sessiondata.cpp uiserver/sessiondata.h
     uiserver/signcommand.cpp uiserver/signcommand.h
     uiserver/signencryptfilescommand.cpp
     uiserver/uiserver.cpp
     uiserver/verifychecksumscommand.cpp uiserver/verifychecksumscommand.h
   )
 
 set(_kleopatra_uiserver_extra_libs LibAssuan::LibAssuan LibGpgError::LibGpgError)
 
 if(HAVE_GPG_ERR_SOURCE_KLEO)
   add_definitions(-DGPG_ERR_SOURCE_DEFAULT=GPG_ERR_SOURCE_KLEO)
   add_definitions(-DGPGMEPP_ERR_SOURCE_DEFAULT=GPG_ERR_SOURCE_KLEO)
 else()
   add_definitions(-DGPG_ERR_SOURCE_DEFAULT=GPG_ERR_SOURCE_USER_1)
   add_definitions(-DGPGMEPP_ERR_SOURCE_DEFAULT=GPG_ERR_SOURCE_USER_1)
 endif()
 
 if(KPim6IdentityManagementCore_FOUND AND KPim6MailTransport_FOUND AND KPim6AkonadiMime_FOUND)
   set(_kleopatra_mail_libs
       KPim6::IdentityManagementCore # Export OpenPGP keys using WKS
       KPim6::MailTransport
       KPim6::AkonadiMime
   )
   add_definitions(-DMAILAKONADI_ENABLED)
 endif()
 
 ki18n_wrap_ui(_kleopatra_uiserver_SRCS crypto/gui/signingcertificateselectionwidget.ui)
 
 set(_kleopatra_SRCS
   ${_kleopatra_extra_SRCS}
 
   accessibility/accessiblelink.cpp
   accessibility/accessiblelink_p.h
   accessibility/accessiblerichtextlabel.cpp
   accessibility/accessiblerichtextlabel_p.h
   accessibility/accessiblevaluelabel.cpp
   accessibility/accessiblevaluelabel_p.h
   accessibility/accessiblewidgetfactory.cpp
   accessibility/accessiblewidgetfactory.h
   commands/addadskcommand.cpp
   commands/addadskcommand.h
   commands/addsubkeycommand.cpp
   commands/addsubkeycommand.h
   commands/adduseridcommand.cpp
   commands/adduseridcommand.h
   commands/authenticatepivcardapplicationcommand.cpp
   commands/authenticatepivcardapplicationcommand.h
   commands/cardcommand.cpp
   commands/cardcommand.h
   commands/certificatetocardcommand.cpp
   commands/certificatetocardcommand.h
   commands/certificatetopivcardcommand.cpp
   commands/certificatetopivcardcommand.h
   commands/certifycertificatecommand.cpp
   commands/certifycertificatecommand.h
   commands/certifygroupcommand.cpp
   commands/certifygroupcommand.h
   commands/changeexpirycommand.cpp
   commands/changeexpirycommand.h
   commands/changeownertrustcommand.cpp
   commands/changeownertrustcommand.h
   commands/changepassphrasecommand.cpp
   commands/changepassphrasecommand.h
   commands/changepincommand.cpp
   commands/changepincommand.h
   commands/changeroottrustcommand.cpp
   commands/changeroottrustcommand.h
   commands/checksumcreatefilescommand.cpp
   commands/checksumcreatefilescommand.h
   commands/checksumverifyfilescommand.cpp
   commands/checksumverifyfilescommand.h
   commands/clearcrlcachecommand.cpp
   commands/clearcrlcachecommand.h
   commands/command.cpp
   commands/command.h
   commands/createcsrforcardkeycommand.cpp
   commands/createcsrforcardkeycommand.h
   commands/creategroupcommand.cpp
   commands/creategroupcommand.h
   commands/createopenpgpkeyfromcardkeyscommand.cpp
   commands/createopenpgpkeyfromcardkeyscommand.h
   commands/decryptverifyclipboardcommand.cpp
   commands/decryptverifyclipboardcommand.h
   commands/decryptverifyfilescommand.cpp
   commands/decryptverifyfilescommand.h
   commands/deletecertificatescommand.cpp
   commands/deletecertificatescommand.h
   commands/detailscommand.cpp
   commands/detailscommand.h
   commands/dumpcertificatecommand.cpp
   commands/dumpcertificatecommand.h
   commands/dumpcrlcachecommand.cpp
   commands/dumpcrlcachecommand.h
   commands/encryptclipboardcommand.cpp
   commands/encryptclipboardcommand.h
   commands/exportcertificatecommand.cpp
   commands/exportcertificatecommand.h
   commands/exportgroupscommand.cpp
   commands/exportgroupscommand.h
   commands/exportopenpgpcertstoservercommand.cpp
   commands/exportopenpgpcertstoservercommand.h
   commands/exportopenpgpcerttoprovidercommand.cpp
   commands/exportopenpgpcerttoprovidercommand.h
   commands/exportpaperkeycommand.cpp
   commands/exportpaperkeycommand.h
   commands/exportsecretkeycommand.cpp
   commands/exportsecretkeycommand.h
   commands/exportsecretsubkeycommand.cpp
   commands/exportsecretsubkeycommand.h
   commands/genrevokecommand.cpp
   commands/genrevokecommand.h
   commands/gnupgprocesscommand.cpp
   commands/gnupgprocesscommand.h
   commands/importcertificatefromclipboardcommand.cpp
   commands/importcertificatefromclipboardcommand.h
   commands/importcertificatefromdatacommand.cpp
   commands/importcertificatefromdatacommand.h
   commands/importcertificatefromfilecommand.cpp
   commands/importcertificatefromfilecommand.h
   commands/importcertificatefromkeyservercommand.cpp
   commands/importcertificatefromkeyservercommand.h
   commands/importcertificatefrompivcardcommand.cpp
   commands/importcertificatefrompivcardcommand.h
   commands/importcertificatescommand.cpp
   commands/importcertificatescommand.h
   commands/importcrlcommand.cpp
   commands/importcrlcommand.h
   commands/importpaperkeycommand.cpp
   commands/importpaperkeycommand.h
   commands/keytocardcommand.cpp
   commands/keytocardcommand.h
   commands/lookupcertificatescommand.cpp
   commands/lookupcertificatescommand.h
   commands/newcertificatesigningrequestcommand.cpp
   commands/newcertificatesigningrequestcommand.h
   commands/newopenpgpcertificatecommand.cpp
   commands/newopenpgpcertificatecommand.h
   commands/openpgpgeneratecardkeycommand.cpp
   commands/openpgpgeneratecardkeycommand.h
   commands/pivgeneratecardkeycommand.cpp
   commands/pivgeneratecardkeycommand.h
   commands/refreshcertificatescommand.cpp
   commands/refreshcertificatescommand.h
   commands/refreshopenpgpcertscommand.cpp
   commands/refreshopenpgpcertscommand.h
   commands/refreshx509certscommand.cpp
   commands/refreshx509certscommand.h
   commands/reloadkeyscommand.cpp
   commands/reloadkeyscommand.h
   commands/revokecertificationcommand.cpp
   commands/revokecertificationcommand.h
   commands/revokekeycommand.cpp
   commands/revokekeycommand.h
   commands/revokeuseridcommand.cpp
   commands/revokeuseridcommand.h
   commands/selftestcommand.cpp
   commands/selftestcommand.h
   commands/setinitialpincommand.cpp
   commands/setinitialpincommand.h
   commands/setpivcardapplicationadministrationkeycommand.cpp
   commands/setpivcardapplicationadministrationkeycommand.h
   commands/setprimaryuseridcommand.cpp
   commands/setprimaryuseridcommand.h
   commands/signclipboardcommand.cpp
   commands/signclipboardcommand.h
   commands/signencryptfilescommand.cpp
   commands/signencryptfilescommand.h
   commands/signencryptfoldercommand.cpp
   commands/signencryptfoldercommand.h
   commands/viewemailfilescommand.cpp
   commands/viewemailfilescommand.h
   conf/configuredialog.cpp
   conf/configuredialog.h
   conf/groupsconfigdialog.cpp
   conf/groupsconfigdialog.h
   conf/groupsconfigwidget.cpp
   conf/groupsconfigwidget.h
   crypto/autodecryptverifyfilescontroller.cpp
   crypto/autodecryptverifyfilescontroller.h
   crypto/certificateresolver.cpp
   crypto/certificateresolver.h
   crypto/checksumsutils_p.cpp
   crypto/checksumsutils_p.h
   crypto/controller.cpp
   crypto/controller.h
   crypto/createchecksumscontroller.cpp
   crypto/createchecksumscontroller.h
   crypto/decryptverifyemailcontroller.cpp
   crypto/decryptverifyemailcontroller.h
   crypto/decryptverifyfilescontroller.cpp
   crypto/decryptverifyfilescontroller.h
   crypto/decryptverifytask.cpp
   crypto/decryptverifytask.h
   crypto/encryptemailcontroller.cpp
   crypto/encryptemailcontroller.h
   crypto/encryptemailtask.cpp
   crypto/encryptemailtask.h
   crypto/gui/certificatelineedit.cpp
   crypto/gui/certificatelineedit.h
   crypto/gui/certificateselectionline.cpp
   crypto/gui/certificateselectionline.h
   crypto/gui/decryptverifyfilesdialog.cpp
   crypto/gui/decryptverifyfilesdialog.h
   crypto/gui/decryptverifyfileswizard.cpp
   crypto/gui/decryptverifyfileswizard.h
   crypto/gui/decryptverifyoperationwidget.cpp
   crypto/gui/decryptverifyoperationwidget.h
   crypto/gui/encryptemailwizard.cpp
   crypto/gui/encryptemailwizard.h
   crypto/gui/newresultpage.cpp
   crypto/gui/newresultpage.h
   crypto/gui/objectspage.cpp
   crypto/gui/objectspage.h
   crypto/gui/resolverecipientspage.cpp
   crypto/gui/resolverecipientspage.h
   crypto/gui/resultitemwidget.cpp
   crypto/gui/resultitemwidget.h
   crypto/gui/resultlistwidget.cpp
   crypto/gui/resultlistwidget.h
   crypto/gui/resultpage.cpp
   crypto/gui/resultpage.h
   crypto/gui/signemailwizard.cpp
   crypto/gui/signemailwizard.h
   crypto/gui/signencryptemailconflictdialog.cpp
   crypto/gui/signencryptemailconflictdialog.h
   crypto/gui/signencryptfileswizard.cpp
   crypto/gui/signencryptfileswizard.h
   crypto/gui/signencryptwidget.cpp
   crypto/gui/signencryptwidget.h
   crypto/gui/signencryptwizard.cpp
   crypto/gui/signencryptwizard.h
   crypto/gui/signerresolvepage.cpp
   crypto/gui/signerresolvepage.h
   crypto/gui/signingcertificateselectiondialog.cpp
   crypto/gui/signingcertificateselectiondialog.h
   crypto/gui/signingcertificateselectionwidget.cpp
   crypto/gui/signingcertificateselectionwidget.h
   crypto/gui/unknownrecipientwidget.cpp
   crypto/gui/unknownrecipientwidget.h
   crypto/gui/verifychecksumsdialog.cpp
   crypto/gui/verifychecksumsdialog.h
   crypto/gui/wizard.cpp
   crypto/gui/wizard.h
   crypto/gui/wizardpage.cpp
   crypto/gui/wizardpage.h
   crypto/newsignencryptemailcontroller.cpp
   crypto/newsignencryptemailcontroller.h
   crypto/recipient.cpp
   crypto/recipient.h
   crypto/sender.cpp
   crypto/sender.h
   crypto/signemailcontroller.cpp
   crypto/signemailcontroller.h
   crypto/signemailtask.cpp
   crypto/signemailtask.h
   crypto/signencryptfilescontroller.cpp
   crypto/signencryptfilescontroller.h
   crypto/signencrypttask.cpp
   crypto/signencrypttask.h
   crypto/task.cpp
   crypto/task.h
   crypto/taskcollection.cpp
   crypto/taskcollection.h
   crypto/verifychecksumscontroller.cpp
   crypto/verifychecksumscontroller.h
   dialogs/addsubkeydialog.cpp
   dialogs/addsubkeydialog.h
   dialogs/adduseriddialog.cpp
   dialogs/adduseriddialog.h
   dialogs/animatedexpander.cpp
   dialogs/animatedexpander.h
   dialogs/cardinfotab.cpp
   dialogs/cardinfotab.h
   dialogs/certificatedetailsdialog.cpp
   dialogs/certificatedetailsdialog.h
   dialogs/certificatedetailsinputwidget.cpp
   dialogs/certificatedetailsinputwidget.h
   dialogs/certificatedetailswidget.cpp
   dialogs/certificatedetailswidget.h
   dialogs/certificatedumpwidget.cpp
   dialogs/certificatedumpwidget.h
   dialogs/certificateselectiondialog.cpp
   dialogs/certificateselectiondialog.h
   dialogs/certifycertificatedialog.cpp
   dialogs/certifycertificatedialog.h
   dialogs/certifywidget.cpp
   dialogs/certifywidget.h
   dialogs/createcsrforcardkeydialog.cpp
   dialogs/createcsrforcardkeydialog.h
   dialogs/copytosmartcarddialog.cpp
   dialogs/copytosmartcarddialog.h
   dialogs/debugdialog.cpp
   dialogs/debugdialog.h
   dialogs/deletecertificatesdialog.cpp
   dialogs/deletecertificatesdialog.h
   dialogs/editgroupdialog.cpp
   dialogs/editgroupdialog.h
   dialogs/expirydialog.cpp
   dialogs/expirydialog.h
   dialogs/exportdialog.cpp
   dialogs/exportdialog.h
   dialogs/gencardkeydialog.cpp
   dialogs/gencardkeydialog.h
   dialogs/groupdetailsdialog.cpp
   dialogs/groupdetailsdialog.h
   dialogs/lookupcertificatesdialog.cpp
   dialogs/lookupcertificatesdialog.h
   dialogs/pivcardapplicationadministrationkeyinputdialog.cpp
   dialogs/pivcardapplicationadministrationkeyinputdialog.h
   dialogs/revokekeydialog.cpp
   dialogs/revokekeydialog.h
   dialogs/revokerswidget.cpp
   dialogs/revokerswidget.h
   dialogs/selftestdialog.cpp
   dialogs/selftestdialog.h
   dialogs/setinitialpindialog.cpp
   dialogs/setinitialpindialog.h
   dialogs/smartcardwindow.cpp
   dialogs/smartcardwindow.h
   dialogs/subkeyswidget.cpp
   dialogs/subkeyswidget.h
   dialogs/trustchainwidget.cpp
   dialogs/trustchainwidget.h
   dialogs/updatenotification.cpp
   dialogs/updatenotification.h
   dialogs/useridswidget.cpp
   dialogs/useridswidget.h
   dialogs/weboftrustwidget.cpp
   dialogs/weboftrustwidget.h
   interfaces/anchorprovider.h
   interfaces/focusfirstchild.h
   newcertificatewizard/advancedsettingsdialog.cpp
   newcertificatewizard/advancedsettingsdialog_p.h
   newcertificatewizard/enterdetailspage.cpp
   newcertificatewizard/enterdetailspage_p.h
   newcertificatewizard/keycreationpage.cpp
   newcertificatewizard/keycreationpage_p.h
   newcertificatewizard/listwidget.cpp
   newcertificatewizard/listwidget.h
   newcertificatewizard/newcertificatewizard.cpp
   newcertificatewizard/newcertificatewizard.h
   newcertificatewizard/resultpage.cpp
   newcertificatewizard/resultpage_p.h
   newcertificatewizard/wizardpage.cpp
   newcertificatewizard/wizardpage_p.h
   selftest/compliancecheck.cpp
   selftest/compliancecheck.h
   selftest/enginecheck.cpp
   selftest/enginecheck.h
   selftest/gpgagentcheck.cpp
   selftest/gpgagentcheck.h
   selftest/gpgconfcheck.cpp
   selftest/gpgconfcheck.h
   selftest/libkleopatrarccheck.cpp
   selftest/libkleopatrarccheck.h
   selftest/selftest.cpp
   selftest/selftest.h
   smartcard/algorithminfo.h
   smartcard/card.cpp
   smartcard/card.h
   smartcard/deviceinfowatcher.cpp
   smartcard/deviceinfowatcher.h
   smartcard/keypairinfo.cpp
   smartcard/keypairinfo.h
   smartcard/netkeycard.cpp
   smartcard/netkeycard.h
   smartcard/openpgpcard.cpp
   smartcard/openpgpcard.h
   smartcard/p15card.cpp
   smartcard/p15card.h
   smartcard/pivcard.cpp
   smartcard/pivcard.h
   smartcard/readerstatus.cpp
   smartcard/readerstatus.h
   smartcard/utils.cpp
   smartcard/utils.h
   utils/accessibility.cpp
   utils/accessibility.h
   utils/action_data.cpp
   utils/action_data.h
   utils/applicationstate.cpp
   utils/applicationstate.h
   utils/archivedefinition.cpp
   utils/archivedefinition.h
   utils/certificatepair.h
   utils/clipboardmenu.cpp
   utils/clipboardmenu.h
   utils/debug-helpers.cpp
   utils/debug-helpers.h
   utils/dragqueen.cpp
   utils/dragqueen.h
   utils/email.cpp
   utils/email.h
   utils/emptypassphraseprovider.cpp
   utils/emptypassphraseprovider.h
   utils/filedialog.cpp
   utils/filedialog.h
   utils/gui-helper.cpp
   utils/gui-helper.h
   utils/headerview.cpp
   utils/headerview.h
   utils/input.cpp
   utils/input.h
   utils/iodevicelogger.cpp
   utils/iodevicelogger.h
   utils/kdpipeiodevice.cpp
   utils/kdpipeiodevice.h
   utils/keyexportdraghandler.cpp
   utils/keyexportdraghandler.h
   utils/kuniqueservice.cpp
   utils/kuniqueservice.h
   utils/log.cpp
   utils/log.h
   utils/memory-helpers.h
   utils/migration.cpp
   utils/migration.h
   utils/output.cpp
   utils/output.h
   utils/overwritedialog.cpp
   utils/overwritedialog.h
   utils/path-helper.cpp
   utils/path-helper.h
   utils/scrollarea.cpp
   utils/scrollarea.h
   utils/systemtrayicon.cpp
   utils/systemtrayicon.h
   utils/tags.cpp
   utils/tags.h
   utils/types.cpp
   utils/types.h
   utils/userinfo.cpp
   utils/userinfo.h
   utils/writecertassuantransaction.cpp
   utils/writecertassuantransaction.h
   utils/wsastarter.cpp
   utils/wsastarter.h
   view/anchorcache.cpp
   view/anchorcache_p.h
   view/cardkeysview.cpp
   view/cardkeysview.h
   view/htmllabel.cpp
   view/htmllabel.h
   view/infofield.cpp
   view/infofield.h
   view/keycacheoverlay.cpp
   view/keycacheoverlay.h
   view/keylistcontroller.cpp
   view/keylistcontroller.h
   view/keytreeview.cpp
   view/keytreeview.h
   view/netkeywidget.cpp
   view/netkeywidget.h
   view/nullpinwidget.cpp
   view/nullpinwidget.h
-  view/openpgpkeycardwidget.cpp
-  view/openpgpkeycardwidget.h
   view/overlaywidget.cpp
   view/overlaywidget.h
   view/p15cardwidget.cpp
   view/p15cardwidget.h
   view/padwidget.cpp
   view/padwidget.h
   view/pgpcardwidget.cpp
   view/pgpcardwidget.h
   view/pivcardwidget.cpp
   view/pivcardwidget.h
   view/progressoverlay.cpp
   view/progressoverlay.h
   view/searchbar.cpp
   view/searchbar.h
   view/smartcardactions.cpp
   view/smartcardactions.h
   view/smartcardswidget.cpp
   view/smartcardswidget.h
   view/smartcardwidget.cpp
   view/smartcardwidget.h
   view/tabwidget.cpp
   view/tabwidget.h
   view/textoverlay.cpp
   view/textoverlay.h
   view/urllabel.cpp
   view/urllabel.h
   view/waitwidget.cpp
   view/waitwidget.h
   view/welcomewidget.cpp
   view/welcomewidget.h
 
   aboutdata.cpp
   aboutdata.h
   kleopatra.qrc
   kleopatraapplication.cpp
   kleopatraapplication.h
   main.cpp
   mainwindow.cpp
   mainwindow.h
   systrayicon.cpp
   systrayicon.h
   kleopatra_options.h
 )
 
 if(WIN32)
   configure_file (versioninfo.rc.in versioninfo.rc)
   configure_file (kleopatra.w32-manifest.in kleopatra.w32-manifest)
   set(_kleopatra_SRCS
     ${CMAKE_CURRENT_BINARY_DIR}/kleopatra.w32-manifest
     ${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc
     conf/kmessageboxdontaskagainstorage.cpp
     conf/kmessageboxdontaskagainstorage.h
     ${_kleopatra_SRCS}
   )
 endif()
 
 set (_kleopatra_SRCS conf/kleopageconfigdialog.cpp conf/kleopageconfigdialog.h ${_kleopatra_SRCS})
 
 ecm_qt_declare_logging_category(_kleopatra_SRCS HEADER kleopatra_debug.h IDENTIFIER KLEOPATRA_LOG CATEGORY_NAME org.kde.pim.kleopatra
         DESCRIPTION "kleopatra (kleopatra)"
         OLD_CATEGORY_NAMES log_kleopatra
         EXPORT KLEOPATRA
     )
 
 
 if(KLEO_MODEL_TEST)
   add_definitions(-DKLEO_MODEL_TEST)
   set(_kleopatra_SRCS ${_kleopatra_SRCS} models/modeltest.cpp)
 endif()
 
 ki18n_wrap_ui(_kleopatra_SRCS
   dialogs/setinitialpindialog.ui
   newcertificatewizard/listwidget.ui
 )
 
 kconfig_add_kcfg_files(_kleopatra_SRCS
   kcfg/emailoperationspreferences.kcfgc
   kcfg/fileoperationspreferences.kcfgc
   kcfg/settings.kcfgc
   kcfg/smimevalidationpreferences.kcfgc
   kcfg/tooltippreferences.kcfgc
 )
 
 file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/icons/*-apps-kleopatra.png")
 ecm_add_app_icon(_kleopatra_SRCS ICONS ${ICONS_SRCS})
 
 add_executable(kleopatra_bin ${_kleopatra_SRCS} ${_kleopatra_uiserver_SRCS})
 
 # For the ConfigureDialog & KCMs
 target_link_libraries(kleopatra_bin kcm_kleopatra_static)
 
 #if (COMPILE_WITH_UNITY_CMAKE_SUPPORT)
 #    set_target_properties(kleopatra_bin PROPERTIES UNITY_BUILD ON)
 #endif()
 set_target_properties(kleopatra_bin PROPERTIES OUTPUT_NAME kleopatra)
 
 if (WIN32)
   set(_kleopatra_platform_libs "secur32")
 endif ()
 
 target_link_libraries(kleopatra_bin
   Gpgmepp
   KPim6::Libkleo
   KPim6::Mime
   KPim6::MimeTreeParserWidgets
   KF6::Codecs
   KF6::CoreAddons
   KF6::Crash
   KF6::I18n
   KF6::IconThemes
   KF6::ItemModels
   KF6::KIOCore
   KF6::KIOWidgets
   KF6::WindowSystem
   KF6::XmlGui
   Qt::Network
   Qt::PrintSupport # Printing secret keys
   kleopatraclientcore
   ${_kleopatra_extra_libs}
   ${_kleopatra_mail_libs}
   ${_kleopatra_uiserver_extra_libs}
   ${_kleopatra_dbusaddons_libs}
   ${_kleopatra_platform_libs}
 )
 
 target_link_libraries(kleopatra_bin QGpgmeQt6)
 
 install(TARGETS kleopatra_bin ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
 
 install(
   PROGRAMS data/org.kde.kleopatra.desktop data/kleopatra_import.desktop
   DESTINATION ${KDE_INSTALL_APPDIR}
 )
 install(FILES data/org.kde.kleopatra.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
 install(FILES data/kleopatra-mime.xml DESTINATION ${KDE_INSTALL_MIMEDIR})
 install(
   PROGRAMS data/kleopatra_signencryptfiles.desktop
         data/kleopatra_signencryptfolders.desktop
         data/kleopatra_decryptverifyfiles.desktop
         data/kleopatra_decryptverifyfolders.desktop
   DESTINATION ${KDE_INSTALL_DATADIR}/kio/servicemenus
 )
diff --git a/src/view/openpgpkeycardwidget.cpp b/src/view/openpgpkeycardwidget.cpp
deleted file mode 100644
index bcdaaa2c5..000000000
--- a/src/view/openpgpkeycardwidget.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/*  view/openpgpkeycardwidget.cpp
-
-    This file is part of Kleopatra, the KDE keymanager
-    SPDX-FileCopyrightText: 2021, 2022 g10 Code GmbH
-    SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "openpgpkeycardwidget.h"
-
-#include "commands/detailscommand.h"
-
-#include "smartcard/card.h"
-#include "smartcard/keypairinfo.h"
-#include "smartcard/openpgpcard.h"
-
-#include <Libkleo/Compliance>
-#include <Libkleo/Formatting>
-#include <Libkleo/KeyCache>
-
-#include <KLocalizedString>
-#include <KMessageBox>
-
-#include <QGridLayout>
-#include <QLabel>
-#include <QPushButton>
-
-#include <gpgme++/key.h>
-
-using namespace Kleo;
-using namespace SmartCard;
-
-namespace
-{
-struct KeyWidgets {
-    std::string cardKeyRef;
-    std::string keyFingerprint;
-    KeyPairInfo keyInfo;
-    QLabel *keyTitleLabel = nullptr;
-    QLabel *keyInfoLabel = nullptr;
-    QPushButton *showCertificateDetailsButton = nullptr;
-    QPushButton *generateButton = nullptr;
-    QPushButton *createCSRButton = nullptr;
-};
-
-KeyWidgets createKeyWidgets(const KeyPairInfo &keyInfo, QWidget *parent)
-{
-    KeyWidgets keyWidgets;
-    keyWidgets.keyTitleLabel = new QLabel{OpenPGPCard::keyDisplayName(keyInfo.keyRef), parent};
-    keyWidgets.keyInfoLabel = new QLabel{parent};
-    keyWidgets.keyInfoLabel->setTextInteractionFlags(Qt::TextBrowserInteraction | Qt::TextSelectableByKeyboard);
-    keyWidgets.showCertificateDetailsButton = new QPushButton{i18nc("@action:button", "Show Details"), parent};
-    keyWidgets.showCertificateDetailsButton->setToolTip(i18nc("@action:tooltip", "Show detailed information about this key"));
-    keyWidgets.showCertificateDetailsButton->setEnabled(false);
-    keyWidgets.generateButton = new QPushButton{i18nc("@action:button", "Generate Key"), parent};
-    keyWidgets.generateButton->setEnabled(false);
-    if (keyInfo.canCertify() || keyInfo.canSign() || keyInfo.canAuthenticate()) {
-        keyWidgets.createCSRButton = new QPushButton{i18nc("@action:button", "Create CSR"), parent};
-        keyWidgets.createCSRButton->setToolTip(i18nc("@info:tooltip", "Create a certificate signing request for this key"));
-        keyWidgets.createCSRButton->setEnabled(false);
-    }
-
-    return keyWidgets;
-}
-}
-
-class OpenPGPKeyCardWidget::Private
-{
-public:
-    explicit Private(OpenPGPKeyCardWidget *q);
-    ~Private() = default;
-
-    void setAllowedActions(Actions actions);
-    void update(const Card *card = nullptr);
-
-private:
-    void updateCachedValues(const std::string &openPGPKeyRef, const std::string &cardKeyRef, const Card *card);
-    void updateKeyWidgets(const std::string &openPGPKeyRef);
-
-    void showCertificateDetails(const std::string &openPGPKeyRef);
-
-private:
-    OpenPGPKeyCardWidget *const q;
-    Actions mAllowedActions = AllActions;
-    std::map<std::string, KeyWidgets> mKeyWidgets;
-};
-
-OpenPGPKeyCardWidget::Private::Private(OpenPGPKeyCardWidget *q)
-    : q{q}
-{
-    auto grid = new QGridLayout{q};
-    grid->setContentsMargins(0, 0, 0, 0);
-    for (const auto &keyInfo : OpenPGPCard::supportedKeys()) {
-        const KeyWidgets keyWidgets = createKeyWidgets(keyInfo, q);
-
-        const std::string keyRef = keyInfo.keyRef;
-        connect(keyWidgets.showCertificateDetailsButton, &QPushButton::clicked, q, [this, keyRef]() {
-            showCertificateDetails(keyRef);
-        });
-        connect(keyWidgets.generateButton, &QPushButton::clicked, q, [q, keyRef]() {
-            Q_EMIT q->generateKeyRequested(keyRef);
-        });
-        if (keyWidgets.createCSRButton) {
-            connect(keyWidgets.createCSRButton, &QPushButton::clicked, q, [q, keyRef]() {
-                Q_EMIT q->createCSRRequested(keyRef);
-            });
-        }
-
-        const int row = grid->rowCount();
-        grid->addWidget(keyWidgets.keyTitleLabel, row, 0, Qt::AlignTop);
-        grid->addWidget(keyWidgets.keyInfoLabel, row, 1, Qt::AlignTop);
-
-        auto buttons = new QHBoxLayout;
-        buttons->addWidget(keyWidgets.showCertificateDetailsButton);
-        buttons->addWidget(keyWidgets.generateButton);
-        if (keyWidgets.createCSRButton) {
-            buttons->addWidget(keyWidgets.createCSRButton);
-        }
-        buttons->addStretch(1);
-        grid->addLayout(buttons, row, 2, Qt::AlignTop);
-
-        mKeyWidgets.insert({keyInfo.keyRef, keyWidgets});
-    }
-    grid->setColumnStretch(grid->columnCount(), 1);
-}
-
-void OpenPGPKeyCardWidget::Private::setAllowedActions(Actions actions)
-{
-    mAllowedActions = actions;
-    update();
-}
-
-void OpenPGPKeyCardWidget::Private::update(const Card *card)
-{
-    if (card) {
-        updateCachedValues(OpenPGPCard::pgpSigKeyRef(), card->signingKeyRef(), card);
-        updateCachedValues(OpenPGPCard::pgpEncKeyRef(), card->encryptionKeyRef(), card);
-        updateCachedValues(OpenPGPCard::pgpAuthKeyRef(), card->authenticationKeyRef(), card);
-    }
-    updateKeyWidgets(OpenPGPCard::pgpSigKeyRef());
-    updateKeyWidgets(OpenPGPCard::pgpEncKeyRef());
-    updateKeyWidgets(OpenPGPCard::pgpAuthKeyRef());
-}
-
-void OpenPGPKeyCardWidget::Private::updateCachedValues(const std::string &openPGPKeyRef, const std::string &cardKeyRef, const Card *card)
-{
-    KeyWidgets &widgets = mKeyWidgets.at(openPGPKeyRef);
-    widgets.cardKeyRef = cardKeyRef;
-    widgets.keyFingerprint = card->keyFingerprint(openPGPKeyRef);
-    widgets.keyInfo = card->keyInfo(cardKeyRef);
-}
-
-void OpenPGPKeyCardWidget::Private::updateKeyWidgets(const std::string &openPGPKeyRef)
-{
-    const KeyWidgets &widgets = mKeyWidgets.at(openPGPKeyRef);
-
-    const auto cardSupportsKey = !widgets.cardKeyRef.empty();
-    widgets.keyTitleLabel->setVisible(cardSupportsKey);
-    widgets.keyInfoLabel->setVisible(cardSupportsKey);
-    widgets.showCertificateDetailsButton->setVisible(cardSupportsKey);
-    widgets.generateButton->setVisible(cardSupportsKey && (mAllowedActions & Action::GenerateKey) && !DeVSCompliance::isActive());
-    if (widgets.createCSRButton) {
-        widgets.createCSRButton->setVisible(cardSupportsKey && (mAllowedActions & Action::CreateCSR));
-    }
-    if (!cardSupportsKey) {
-        return;
-    }
-
-    widgets.showCertificateDetailsButton->setEnabled(false);
-
-    if (widgets.keyFingerprint.empty()) {
-        widgets.keyInfoLabel->setTextFormat(Qt::RichText);
-        widgets.keyInfoLabel->setText(i18nc("@info", "<em>No key</em>"));
-        widgets.generateButton->setText(i18nc("@action:button", "Generate Key"));
-        widgets.generateButton->setToolTip(i18nc("@info:tooltip", "Generate a key for this card slot"));
-        if (widgets.createCSRButton) {
-            widgets.createCSRButton->setEnabled(false);
-        }
-    } else {
-        QStringList lines;
-        if (widgets.keyFingerprint.size() >= 16) {
-            const std::string keyid = widgets.keyFingerprint.substr(widgets.keyFingerprint.size() - 16);
-            const auto subkeys = KeyCache::instance()->findSubkeysByKeyID({keyid});
-            if (subkeys.empty() || subkeys[0].isNull()) {
-                widgets.keyInfoLabel->setTextFormat(Qt::RichText);
-                lines.push_back(i18nc("@info", "<em>Public key not found locally</em>"));
-                widgets.keyInfoLabel->setToolTip({});
-            } else {
-                // force interpretation of text as plain text to avoid problems with HTML in user IDs
-                widgets.keyInfoLabel->setTextFormat(Qt::PlainText);
-                QStringList toolTips;
-                toolTips.reserve(subkeys.size());
-                for (const auto &sub : subkeys) {
-                    // Yep you can have one subkey associated with multiple primary keys.
-                    const GpgME::Key key = sub.parent();
-                    toolTips << Formatting::toolTip(key, Formatting::Validity | Formatting::ExpiryDates | Formatting::UserIDs | Formatting::Fingerprint);
-                    const auto uids = key.userIDs();
-                    for (const auto &uid : uids) {
-                        lines.push_back(Formatting::prettyUserID(uid));
-                    }
-                }
-                widgets.keyInfoLabel->setToolTip(toolTips.join(QLatin1StringView("<br/>")));
-                widgets.showCertificateDetailsButton->setEnabled(true);
-            }
-        } else {
-            widgets.keyInfoLabel->setTextFormat(Qt::RichText);
-            lines.push_back(i18nc("@info", "<em>Invalid fingerprint</em>"));
-        }
-
-        const QString fingerprint = widgets.keyInfoLabel->textFormat() == Qt::RichText
-            ? Formatting::prettyID(widgets.keyFingerprint.c_str()).replace(QLatin1Char(' '), QLatin1StringView("&nbsp;"))
-            : Formatting::prettyID(widgets.keyFingerprint.c_str());
-        lines.insert(0, fingerprint);
-        const auto lineSeparator = widgets.keyInfoLabel->textFormat() == Qt::PlainText ? QLatin1StringView("\n") : QLatin1String("<br>");
-        widgets.keyInfoLabel->setText(lines.join(lineSeparator));
-
-        widgets.generateButton->setText(i18nc("@action:button", "Regenerate Key"));
-        widgets.generateButton->setToolTip(i18nc("@info:tooltip", "Generate a new key for this card slot replacing the existing key"));
-        if (widgets.createCSRButton) {
-            widgets.createCSRButton->setEnabled(DeVSCompliance::algorithmIsCompliant(widgets.keyInfo.algorithm));
-        }
-    }
-
-    widgets.generateButton->setEnabled(!widgets.generateButton->isHidden());
-}
-
-void OpenPGPKeyCardWidget::Private::showCertificateDetails(const std::string &openPGPKeyRef)
-{
-    const KeyWidgets &widgets = mKeyWidgets.at(openPGPKeyRef);
-
-    if (widgets.keyFingerprint.size() >= 16) {
-        const std::string keyid = widgets.keyFingerprint.substr(widgets.keyFingerprint.size() - 16);
-        const auto subkeys = KeyCache::instance()->findSubkeysByKeyID({keyid});
-        if (!subkeys.empty() && !subkeys[0].isNull()) {
-            auto cmd = new Commands::DetailsCommand(subkeys[0].parent());
-            cmd->setParentWidget(q);
-            cmd->start();
-            return;
-        }
-    }
-    KMessageBox::error(q, i18nc("@info", "Sorry, I cannot find the key with fingerprint %1.", Formatting::prettyID(widgets.keyFingerprint.c_str())));
-}
-
-OpenPGPKeyCardWidget::OpenPGPKeyCardWidget(QWidget *parent)
-    : QWidget{parent}
-    , d{std::make_unique<Private>(this)}
-{
-    connect(KeyCache::instance().get(), &KeyCache::keysMayHaveChanged, this, [this]() {
-        d->update();
-    });
-}
-
-OpenPGPKeyCardWidget::~OpenPGPKeyCardWidget() = default;
-
-void OpenPGPKeyCardWidget::setAllowedActions(Actions actions)
-{
-    d->setAllowedActions(actions);
-}
-
-void OpenPGPKeyCardWidget::update(const Card *card)
-{
-    d->update(card);
-}
-
-#include "moc_openpgpkeycardwidget.cpp"
diff --git a/src/view/openpgpkeycardwidget.h b/src/view/openpgpkeycardwidget.h
deleted file mode 100644
index cb20577ea..000000000
--- a/src/view/openpgpkeycardwidget.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*  view/openpgpkeycardwidget.h
-
-    This file is part of Kleopatra, the KDE keymanager
-    SPDX-FileCopyrightText: 2021, 2022 g10 Code GmbH
-    SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-#pragma once
-
-#include <QWidget>
-
-#include <memory>
-
-namespace Kleo
-{
-
-namespace SmartCard
-{
-class Card;
-}
-
-class OpenPGPKeyCardWidget : public QWidget
-{
-    Q_OBJECT
-public:
-    enum Action {
-        NoAction = 0x00,
-        CreateCSR = 0x01,
-        GenerateKey = 0x02,
-        AllActions = CreateCSR | GenerateKey,
-    };
-    Q_DECLARE_FLAGS(Actions, Action)
-
-    explicit OpenPGPKeyCardWidget(QWidget *parent = nullptr);
-    ~OpenPGPKeyCardWidget() override;
-
-    void setAllowedActions(Actions actions);
-
-public Q_SLOTS:
-    void update(const SmartCard::Card *card);
-
-Q_SIGNALS:
-    void createCSRRequested(const std::string &keyRef);
-    void generateKeyRequested(const std::string &keyRef);
-
-private:
-    class Private;
-    std::unique_ptr<Private> d;
-};
-}
-
-Q_DECLARE_OPERATORS_FOR_FLAGS(Kleo::OpenPGPKeyCardWidget::Actions)