diff --git a/CMakeLists.txt b/CMakeLists.txt
index 439a4971ee0cf7e7790102c3726e8b9494056d18..90cd3d67ec867da92b006a02810533a4b566d34a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -329,19 +329,24 @@ set(SRC_FILES
 	src/ui/UIA.cpp
 	src/ui/UserProfile.cpp
 
+	src/voip/CallDevices.cpp
+	src/voip/CallManager.cpp
+	src/voip/WebRTCSession.cpp
+
+	src/encryption/DeviceVerificationFlow.cpp
+	src/encryption/Olm.cpp
+	src/encryption/SelfVerificationStatus.cpp
+
 	# Generic notification stuff
 	src/notifications/Manager.cpp
 
 	src/AvatarProvider.cpp
 	src/BlurhashProvider.cpp
 	src/Cache.cpp
-	src/CallDevices.cpp
-	src/CallManager.cpp
 	src/ChatPage.cpp
 	src/Clipboard.cpp
 	src/ColorImageProvider.cpp
 	src/CompletionProxyModel.cpp
-	src/DeviceVerificationFlow.cpp
 	src/EventAccessors.cpp
 	src/InviteesModel.cpp
 	src/JdenticonProvider.cpp
@@ -351,7 +356,6 @@ set(SRC_FILES
 	src/MatrixClient.cpp
 	src/MemberList.cpp
 	src/MxcImageProvider.cpp
-	src/Olm.cpp
 	src/ReadReceiptsModel.cpp
 	src/RegisterPage.cpp
 	src/SSOHandler.cpp
@@ -364,8 +368,6 @@ set(SRC_FILES
 	src/RoomDirectoryModel.cpp
 	src/RoomsModel.cpp
 	src/Utils.cpp
-	src/SelfVerificationStatus.cpp
-	src/WebRTCSession.cpp
 	src/WelcomePage.cpp
 	src/main.cpp
 
@@ -542,19 +544,24 @@ qt5_wrap_cpp(MOC_HEADERS
 	src/ui/UIA.h
 	src/ui/UserProfile.h
 
+	src/voip/CallDevices.h
+	src/voip/CallManager.h
+	src/voip/WebRTCSession.h
+
+	src/encryption/SelfVerificationStatus.h
+	src/encryption/DeviceVerificationFlow.h
+	src/encryption/Olm.h
+
 	src/notifications/Manager.h
 
 	src/AvatarProvider.h
 	src/BlurhashProvider.h
 	src/CacheCryptoStructs.h
 	src/Cache_p.h
-	src/CallDevices.h
-	src/CallManager.h
 	src/ChatPage.h
 	src/Clipboard.h
 	src/CombinedImagePackModel.h
 	src/CompletionProxyModel.h
-	src/DeviceVerificationFlow.h
 	src/ImagePackListModel.h
 	src/InviteesModel.h
 	src/JdenticonProvider.h
@@ -562,7 +569,6 @@ qt5_wrap_cpp(MOC_HEADERS
 	src/MainWindow.h
 	src/MemberList.h
 	src/MxcImageProvider.h
-	src/Olm.h
 	src/RegisterPage.h
 	src/RoomsModel.h
 	src/SSOHandler.h
@@ -572,8 +578,6 @@ qt5_wrap_cpp(MOC_HEADERS
 	src/UsersModel.h
 	src/RoomDirectoryModel.h
 	src/RoomsModel.h
-	src/SelfVerificationStatus.h
-	src/WebRTCSession.h
 	src/WelcomePage.h
 	src/ReadReceiptsModel.h
 )
diff --git a/src/Cache.cpp b/src/Cache.cpp
index ea3dd52581a8f0bf11f770c51fd147a93a266c29..ecfbe6c9a4cecda24b1ebd4cfa497a9d1c7ca6b0 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -30,9 +30,9 @@
 #include "EventAccessors.h"
 #include "Logging.h"
 #include "MatrixClient.h"
-#include "Olm.h"
 #include "UserSettingsPage.h"
 #include "Utils.h"
+#include "encryption/Olm.h"
 
 //! Should be changed when a breaking change occurs in the cache format.
 //! This will reset client's data.
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 673f39ee476e0669f76987d177e8fbcd6c797cb6..9239e342a4d950791b5c5fa5abde9e678b274f3f 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -12,19 +12,19 @@
 #include "AvatarProvider.h"
 #include "Cache.h"
 #include "Cache_p.h"
-#include "CallManager.h"
 #include "ChatPage.h"
-#include "DeviceVerificationFlow.h"
 #include "EventAccessors.h"
 #include "Logging.h"
 #include "MainWindow.h"
 #include "MatrixClient.h"
-#include "Olm.h"
 #include "UserSettingsPage.h"
 #include "Utils.h"
+#include "encryption/DeviceVerificationFlow.h"
+#include "encryption/Olm.h"
 #include "ui/OverlayModal.h"
 #include "ui/Theme.h"
 #include "ui/UserProfile.h"
+#include "voip/CallManager.h"
 
 #include "notifications/Manager.h"
 
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index c8eb2d24bf021944f1ebe6733821968b603a4a88..34db0d1d7ad52657b3d5d062b2bf2a1a13d08132 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -26,11 +26,11 @@
 #include "TrayIcon.h"
 #include "UserSettingsPage.h"
 #include "Utils.h"
-#include "WebRTCSession.h"
 #include "WelcomePage.h"
 #include "ui/LoadingIndicator.h"
 #include "ui/OverlayModal.h"
 #include "ui/SnackBar.h"
+#include "voip/WebRTCSession.h"
 
 #include "dialogs/CreateRoom.h"
 
diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp
index cc1f8206359cb1c5150bc7e0e012fdd70e4a9a0c..340709a60e83b84c0bd910fb2f138fda7724b0e0 100644
--- a/src/UserSettingsPage.cpp
+++ b/src/UserSettingsPage.cpp
@@ -14,7 +14,6 @@
 #include <QLineEdit>
 #include <QMessageBox>
 #include <QPainter>
-#include <QProcessEnvironment>
 #include <QPushButton>
 #include <QResizeEvent>
 #include <QScrollArea>
@@ -26,14 +25,14 @@
 #include <QtQml>
 
 #include "Cache.h"
-#include "CallDevices.h"
 #include "Config.h"
 #include "MatrixClient.h"
-#include "Olm.h"
 #include "UserSettingsPage.h"
 #include "Utils.h"
+#include "encryption/Olm.h"
 #include "ui/FlatButton.h"
 #include "ui/ToggleButton.h"
+#include "voip/CallDevices.h"
 
 #include "config/nheko.h"
 
diff --git a/src/DeviceVerificationFlow.cpp b/src/encryption/DeviceVerificationFlow.cpp
similarity index 100%
rename from src/DeviceVerificationFlow.cpp
rename to src/encryption/DeviceVerificationFlow.cpp
diff --git a/src/DeviceVerificationFlow.h b/src/encryption/DeviceVerificationFlow.h
similarity index 100%
rename from src/DeviceVerificationFlow.h
rename to src/encryption/DeviceVerificationFlow.h
diff --git a/src/Olm.cpp b/src/encryption/Olm.cpp
similarity index 100%
rename from src/Olm.cpp
rename to src/encryption/Olm.cpp
diff --git a/src/Olm.h b/src/encryption/Olm.h
similarity index 100%
rename from src/Olm.h
rename to src/encryption/Olm.h
diff --git a/src/SelfVerificationStatus.cpp b/src/encryption/SelfVerificationStatus.cpp
similarity index 100%
rename from src/SelfVerificationStatus.cpp
rename to src/encryption/SelfVerificationStatus.cpp
diff --git a/src/SelfVerificationStatus.h b/src/encryption/SelfVerificationStatus.h
similarity index 100%
rename from src/SelfVerificationStatus.h
rename to src/encryption/SelfVerificationStatus.h
diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp
index 7144424a924d820c888cc931ac027cf98eb534c0..d7296a7c94c3bdf207a300c03730297767475739 100644
--- a/src/timeline/EventStore.cpp
+++ b/src/timeline/EventStore.cpp
@@ -15,7 +15,6 @@
 #include "EventAccessors.h"
 #include "Logging.h"
 #include "MatrixClient.h"
-#include "Olm.h"
 #include "Utils.h"
 
 Q_DECLARE_METATYPE(Reaction)
diff --git a/src/timeline/EventStore.h b/src/timeline/EventStore.h
index 53dbaff41e2e017b65152b80bf48ff7399caff75..9b857dcfacf5214ed971261fd31479e91e5417f1 100644
--- a/src/timeline/EventStore.h
+++ b/src/timeline/EventStore.h
@@ -15,8 +15,8 @@
 #include <mtx/responses/messages.hpp>
 #include <mtx/responses/sync.hpp>
 
-#include "Olm.h"
 #include "Reaction.h"
+#include "encryption/Olm.h"
 
 class EventStore : public QObject
 {
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index f33d1dfd460dc8dce3b2beeede826123f49b2cd8..ed97a2cabfa3e61d5d46e3d907a1729441b5957c 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -26,7 +26,6 @@
 #include "Logging.h"
 #include "MainWindow.h"
 #include "MatrixClient.h"
-#include "Olm.h"
 #include "RoomsModel.h"
 #include "TimelineModel.h"
 #include "TimelineViewManager.h"
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 720a78fe4c44d4c00136a455285b5b57c13b970c..0e5ce510b1ea80258d676bdfe635a02d5e1f9f57 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -27,10 +27,10 @@
 #include "MatrixClient.h"
 #include "MemberList.h"
 #include "MxcImageProvider.h"
-#include "Olm.h"
 #include "ReadReceiptsModel.h"
 #include "TimelineViewManager.h"
 #include "Utils.h"
+#include "encryption/Olm.h"
 
 Q_DECLARE_METATYPE(QModelIndex)
 
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index a30a145d808f046a88ec1dba99af9ecd7e5fb423..86f59c52b67203f73e6fe4bb3448dfaa7b5a8ea3 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -18,7 +18,6 @@
 #include "CombinedImagePackModel.h"
 #include "CompletionProxyModel.h"
 #include "DelegateChooser.h"
-#include "DeviceVerificationFlow.h"
 #include "EventAccessors.h"
 #include "ImagePackListModel.h"
 #include "InviteesModel.h"
@@ -29,13 +28,14 @@
 #include "ReadReceiptsModel.h"
 #include "RoomDirectoryModel.h"
 #include "RoomsModel.h"
-#include "SelfVerificationStatus.h"
 #include "SingleImagePackModel.h"
 #include "UserSettingsPage.h"
 #include "UsersModel.h"
 #include "dialogs/ImageOverlay.h"
 #include "emoji/EmojiModel.h"
 #include "emoji/Provider.h"
+#include "encryption/DeviceVerificationFlow.h"
+#include "encryption/SelfVerificationStatus.h"
 #include "ui/MxcAnimatedImage.h"
 #include "ui/MxcMediaProxy.h"
 #include "ui/NhekoCursorShape.h"
diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index ab078aa7cb42ea7cfa5ccefedba1c72c3ec4188f..723282d615d7df5114dc3129ef4c788e2fee1529 100644
--- a/src/timeline/TimelineViewManager.h
+++ b/src/timeline/TimelineViewManager.h
@@ -17,16 +17,16 @@
 #include <mtx/responses/sync.hpp>
 
 #include "Cache.h"
-#include "CallManager.h"
 #include "JdenticonProvider.h"
 #include "Logging.h"
 #include "TimelineModel.h"
 #include "Utils.h"
-#include "WebRTCSession.h"
 #include "emoji/EmojiModel.h"
 #include "emoji/Provider.h"
 #include "timeline/CommunitiesModel.h"
 #include "timeline/RoomlistModel.h"
+#include "voip/CallManager.h"
+#include "voip/WebRTCSession.h"
 
 class MxcImageProvider;
 class BlurhashProvider;
diff --git a/src/ui/NhekoGlobalObject.cpp b/src/ui/NhekoGlobalObject.cpp
index 11fc568179202feedd59daec8b8eef169484d287..15f2a5af81b6f1f324452448aa55c8efb2d62fc7 100644
--- a/src/ui/NhekoGlobalObject.cpp
+++ b/src/ui/NhekoGlobalObject.cpp
@@ -14,7 +14,7 @@
 #include "MainWindow.h"
 #include "UserSettingsPage.h"
 #include "Utils.h"
-#include "WebRTCSession.h"
+#include "voip/WebRTCSession.h"
 
 Nheko::Nheko()
 {
diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp
index 591110af71f6ed0f82933e7d36d1f3016abf8a7c..d62e3248b13705a45ed0fa22189461d4776e2d65 100644
--- a/src/ui/UserProfile.cpp
+++ b/src/ui/UserProfile.cpp
@@ -9,10 +9,10 @@
 
 #include "Cache_p.h"
 #include "ChatPage.h"
-#include "DeviceVerificationFlow.h"
 #include "Logging.h"
 #include "UserProfile.h"
 #include "Utils.h"
+#include "encryption/DeviceVerificationFlow.h"
 #include "mtx/responses/crypto.hpp"
 #include "timeline/TimelineModel.h"
 #include "timeline/TimelineViewManager.h"
diff --git a/src/CallDevices.cpp b/src/voip/CallDevices.cpp
similarity index 100%
rename from src/CallDevices.cpp
rename to src/voip/CallDevices.cpp
diff --git a/src/CallDevices.h b/src/voip/CallDevices.h
similarity index 100%
rename from src/CallDevices.h
rename to src/voip/CallDevices.h
diff --git a/src/CallManager.cpp b/src/voip/CallManager.cpp
similarity index 100%
rename from src/CallManager.cpp
rename to src/voip/CallManager.cpp
diff --git a/src/CallManager.h b/src/voip/CallManager.h
similarity index 100%
rename from src/CallManager.h
rename to src/voip/CallManager.h
diff --git a/src/WebRTCSession.cpp b/src/voip/WebRTCSession.cpp
similarity index 100%
rename from src/WebRTCSession.cpp
rename to src/voip/WebRTCSession.cpp
diff --git a/src/WebRTCSession.h b/src/voip/WebRTCSession.h
similarity index 100%
rename from src/WebRTCSession.h
rename to src/voip/WebRTCSession.h