diff --git a/src/CommunitiesListItem.h b/src/CommunitiesListItem.h
index 0cc5d60c6581a5c68b27cde3d9129d4b27b0eafe..535a6ec0d4ba1b037be29258c1551f3dd54556e8 100644
--- a/src/CommunitiesListItem.h
+++ b/src/CommunitiesListItem.h
@@ -7,7 +7,6 @@
 #include "ui/Theme.h"
 
 class RippleOverlay;
-class QPainter;
 class QMouseEvent;
 
 class CommunitiesListItem : public QWidget
diff --git a/src/InviteeItem.cpp b/src/InviteeItem.cpp
index 906a3bfef1e25f8c95f7ed1232a3452436c5fe4b..a6b471dcd384ca7cd1c6f135c8065b89c41359e6 100644
--- a/src/InviteeItem.cpp
+++ b/src/InviteeItem.cpp
@@ -1,4 +1,5 @@
 #include <QHBoxLayout>
+#include <QLabel>
 #include <QPushButton>
 
 #include "InviteeItem.h"
diff --git a/src/InviteeItem.h b/src/InviteeItem.h
index 582904b4eec2e55c0e71eb60ab0dcdf90037ce12..54c619388724e5d940b4abb368da5f30a01f4846 100644
--- a/src/InviteeItem.h
+++ b/src/InviteeItem.h
@@ -1,11 +1,11 @@
 #pragma once
 
-#include <QLabel>
 #include <QWidget>
 
 #include <mtx/identifiers.hpp>
 
 class QPushButton;
+class QLabel;
 
 class InviteeItem : public QWidget
 {
diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp
index bb329699f36dd83ad5a6c92f67782a1f40db8509..4ed0890112694c4406249d1ba7a9c3f0f3f72e47 100644
--- a/src/LoginPage.cpp
+++ b/src/LoginPage.cpp
@@ -16,6 +16,7 @@
  */
 
 #include <QDesktopServices>
+#include <QLabel>
 #include <QPainter>
 #include <QStyleOption>
 
@@ -118,7 +119,7 @@ LoginPage::LoginPage(QWidget *parent)
         deviceName_->setLabel(tr("Device name"));
         deviceName_->setToolTip(
           tr("A name for this device, which will be shown to others, when verifying your devices. "
-             "If none is provided, a random string is used for privacy purposes."));
+             "If none is provided a default is used."));
 
         serverInput_ = new TextField(this);
         serverInput_->setLabel("Homeserver address");
@@ -179,6 +180,12 @@ LoginPage::LoginPage(QWidget *parent)
         connect(serverInput_, SIGNAL(editingFinished()), this, SLOT(onServerAddressEntered()));
 }
 
+void
+LoginPage::loginError(const QString &msg)
+{
+        error_label_->setText(msg);
+}
+
 void
 LoginPage::onMatrixIdEntered()
 {
diff --git a/src/LoginPage.h b/src/LoginPage.h
index 8a402aea22d8f8bf33c3191fe1ee8e901e8972ff..c9220297a7a292ce7bf4d6bada6e1be2ca483445 100644
--- a/src/LoginPage.h
+++ b/src/LoginPage.h
@@ -17,8 +17,6 @@
 
 #pragma once
 
-#include <QLabel>
-#include <QLayout>
 #include <QWidget>
 
 class FlatButton;
@@ -26,6 +24,9 @@ class LoadingIndicator;
 class OverlayModal;
 class RaisedButton;
 class TextField;
+class QLabel;
+class QVBoxLayout;
+class QHBoxLayout;
 
 namespace mtx {
 namespace responses {
@@ -65,7 +66,7 @@ protected:
 
 public slots:
         // Displays errors produced during the login.
-        void loginError(const QString &msg) { error_label_->setText(msg); }
+        void loginError(const QString &msg);
 
 private slots:
         // Callback for the back button.
diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp
index 03e9ab34cba12ca67fb09c858ea3cda166f1f940..e57961ef3cdbc845c098e2fdb31aed1980d625c3 100644
--- a/src/RegisterPage.cpp
+++ b/src/RegisterPage.cpp
@@ -15,6 +15,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <QLabel>
 #include <QMetaType>
 #include <QPainter>
 #include <QStyleOption>
diff --git a/src/RegisterPage.h b/src/RegisterPage.h
index ebc24bb1292da10f3c25dcf3483cb891d296efd5..59ba3d1d8f200ea8799ea9ad4aeb2576b34cd2b8 100644
--- a/src/RegisterPage.h
+++ b/src/RegisterPage.h
@@ -17,8 +17,8 @@
 
 #pragma once
 
-#include <QLabel>
-#include <QLayout>
+#include <QWidget>
+
 #include <memory>
 
 #include <mtx/user_interactive.hpp>
@@ -26,6 +26,9 @@
 class FlatButton;
 class RaisedButton;
 class TextField;
+class QLabel;
+class QVBoxLayout;
+class QHBoxLayout;
 
 class RegisterPage : public QWidget
 {
diff --git a/src/RoomList.cpp b/src/RoomList.cpp
index 85a2202646486b00163c3a000badaf1ac5b98ca4..b4c507b5187a2a4a40b393cd6c3015bd37abbcd9 100644
--- a/src/RoomList.cpp
+++ b/src/RoomList.cpp
@@ -21,6 +21,8 @@
 #include <QObject>
 #include <QPainter>
 #include <QScroller>
+#include <QStyle>
+#include <QStyleOption>
 #include <QTimer>
 
 #include "Logging.h"
diff --git a/src/SideBarActions.cpp b/src/SideBarActions.cpp
index 4934ec05466986890bcf206f2b74f4337a4c0b22..5af01cc2afc2a84fb8e35b147f8a50f565b28c6c 100644
--- a/src/SideBarActions.cpp
+++ b/src/SideBarActions.cpp
@@ -1,6 +1,8 @@
 #include <QIcon>
 #include <QPainter>
 #include <QResizeEvent>
+#include <QStyle>
+#include <QStyleOption>
 
 #include <mtx/requests.hpp>
 
diff --git a/src/TopRoomBar.h b/src/TopRoomBar.h
index 1aa5934b6fd0040dba9c79c641185581dfd289a2..0c33c1e0d1fff1f72824de9cf252818530904a04 100644
--- a/src/TopRoomBar.h
+++ b/src/TopRoomBar.h
@@ -27,7 +27,6 @@ class Menu;
 class TextLabel;
 class OverlayModal;
 
-class QPainter;
 class QLabel;
 class QHBoxLayout;
 class QVBoxLayout;
diff --git a/src/UserInfoWidget.cpp b/src/UserInfoWidget.cpp
index 2e21d41faef4520bfb9693d5108fafcffb1b64f8..e11aa6aaea749aec5a2a9bbc6d6c3c5bf5391260 100644
--- a/src/UserInfoWidget.cpp
+++ b/src/UserInfoWidget.cpp
@@ -16,7 +16,10 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <QLabel>
 #include <QPainter>
+#include <QStyle>
+#include <QStyleOption>
 #include <QTimer>
 
 #include <iostream>
diff --git a/src/UserInfoWidget.h b/src/UserInfoWidget.h
index e1a925a478ea3f8a489a3386dabbdd74b175150b..575ade525ebded3a87f2ddf8d1e453ba812e4915 100644
--- a/src/UserInfoWidget.h
+++ b/src/UserInfoWidget.h
@@ -17,13 +17,16 @@
 
 #pragma once
 
-#include <QLabel>
-#include <QLayout>
+#include <QWidget>
 
 class Avatar;
 class FlatButton;
 class OverlayModal;
 
+class QLabel;
+class QHBoxLayout;
+class QVBoxLayout;
+
 class UserInfoWidget : public QWidget
 {
         Q_OBJECT
diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h
index 7dfa39132831c6d80453632af1ec5cf360ff1352..f80c2b2b4dcfc6420aaecf2fd171405684fd1757 100644
--- a/src/UserSettingsPage.h
+++ b/src/UserSettingsPage.h
@@ -17,17 +17,18 @@
 
 #pragma once
 
-#include <QComboBox>
 #include <QFontDatabase>
-#include <QFormLayout>
 #include <QFrame>
-#include <QLabel>
-#include <QLayout>
 #include <QProcessEnvironment>
 #include <QSharedPointer>
 #include <QWidget>
 
 class Toggle;
+class QLabel;
+class QFormLayout;
+class QComboBox;
+class QHBoxLayout;
+class QVBoxLayout;
 
 constexpr int OptionMargin       = 6;
 constexpr int LayoutTopMargin    = 50;
diff --git a/src/dialogs/InviteUsers.cpp b/src/dialogs/InviteUsers.cpp
index 691035ce0ed68875864a2edf796424b1fa08fc58..f85adb8ff7fa7437d8b05ea373433e3244b35f43 100644
--- a/src/dialogs/InviteUsers.cpp
+++ b/src/dialogs/InviteUsers.cpp
@@ -1,5 +1,6 @@
 #include <QDebug>
 #include <QIcon>
+#include <QLabel>
 #include <QListWidget>
 #include <QListWidgetItem>
 #include <QPushButton>
diff --git a/src/dialogs/InviteUsers.h b/src/dialogs/InviteUsers.h
index 952c97a5613cefd6250a38f41563c4cbedf1adb8..684f60b4bf1daf8cabd7f3fb4df1e0c865a14532 100644
--- a/src/dialogs/InviteUsers.h
+++ b/src/dialogs/InviteUsers.h
@@ -1,13 +1,13 @@
 #pragma once
 
 #include <QFrame>
-#include <QLabel>
-#include <QListWidgetItem>
 #include <QStringList>
 
 class QPushButton;
+class QLabel;
 class TextField;
 class QListWidget;
+class QListWidgetItem;
 
 namespace dialogs {
 
diff --git a/src/dialogs/ReadReceipts.cpp b/src/dialogs/ReadReceipts.cpp
index 0edd1ebfef9f8bd5a2435be654c44b023e129886..970d9125de8a83292a0088379cf42b89343c6634 100644
--- a/src/dialogs/ReadReceipts.cpp
+++ b/src/dialogs/ReadReceipts.cpp
@@ -1,5 +1,6 @@
 #include <QDebug>
 #include <QIcon>
+#include <QLabel>
 #include <QListWidgetItem>
 #include <QPainter>
 #include <QPushButton>
@@ -163,3 +164,10 @@ ReadReceipts::paintEvent(QPaintEvent *)
         QPainter p(this);
         style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }
+
+void
+ReadReceipts::hideEvent(QHideEvent *event)
+{
+        userList_->clear();
+        QFrame::hideEvent(event);
+}
diff --git a/src/dialogs/ReadReceipts.h b/src/dialogs/ReadReceipts.h
index e298af0a6f21a21129ca528eca5dd15368548240..2e7a0217ca0dec7b846baa80db5370cdcc086785 100644
--- a/src/dialogs/ReadReceipts.h
+++ b/src/dialogs/ReadReceipts.h
@@ -2,12 +2,12 @@
 
 #include <QDateTime>
 #include <QFrame>
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QListWidget>
-#include <QVBoxLayout>
 
 class Avatar;
+class QLabel;
+class QListWidget;
+class QHBoxLayout;
+class QVBoxLayout;
 
 namespace dialogs {
 
@@ -47,11 +47,7 @@ public slots:
 
 protected:
         void paintEvent(QPaintEvent *event) override;
-        void hideEvent(QHideEvent *event) override
-        {
-                userList_->clear();
-                QFrame::hideEvent(event);
-        }
+        void hideEvent(QHideEvent *event) override;
 
 private:
         QLabel *topLabel_;
diff --git a/src/dialogs/RoomSettings.cpp b/src/dialogs/RoomSettings.cpp
index cc10ac91d601c2f8d117bc9789f79d43fe8b6e45..26aece32e254e2e69d060f0b0ad9b570a09abd14 100644
--- a/src/dialogs/RoomSettings.cpp
+++ b/src/dialogs/RoomSettings.cpp
@@ -1,5 +1,6 @@
 #include <QApplication>
 #include <QComboBox>
+#include <QEvent>
 #include <QFileDialog>
 #include <QFontDatabase>
 #include <QImageReader>
@@ -41,6 +42,17 @@ constexpr int WIDGET_SPACING    = 15;
 constexpr int TEXT_SPACING      = 4;
 constexpr int BUTTON_SPACING    = 2 * TEXT_SPACING;
 
+bool
+ClickableFilter::eventFilter(QObject *obj, QEvent *event)
+{
+        if (event->type() == QEvent::MouseButtonRelease) {
+                emit clicked();
+                return true;
+        }
+
+        return QObject::eventFilter(obj, event);
+}
+
 EditModal::EditModal(const QString &roomId, QWidget *parent)
   : QWidget(parent)
   , roomId_{roomId}
@@ -93,6 +105,28 @@ EditModal::EditModal(const QString &roomId, QWidget *parent)
         move(center.x() - (width() * 0.5), center.y() - (height() * 0.5));
 }
 
+void
+EditModal::topicEventSent()
+{
+        errorField_->hide();
+        close();
+}
+
+void
+EditModal::nameEventSent(const QString &name)
+{
+        errorField_->hide();
+        emit nameChanged(name);
+        close();
+}
+
+void
+EditModal::error(const QString &msg)
+{
+        errorField_->setText(msg);
+        errorField_->show();
+}
+
 void
 EditModal::applyClicked()
 {
diff --git a/src/dialogs/RoomSettings.h b/src/dialogs/RoomSettings.h
index e41c866c91866850d1609d1154a9a30a8066535e..e0918afdcc681c655751f1de54e03768c3a17719 100644
--- a/src/dialogs/RoomSettings.h
+++ b/src/dialogs/RoomSettings.h
@@ -1,9 +1,7 @@
 #pragma once
 
-#include <QEvent>
 #include <QFrame>
 #include <QImage>
-#include <QLabel>
 
 #include <mtx/events/guest_access.hpp>
 
@@ -21,6 +19,8 @@ class QPixmap;
 class TextField;
 class TextField;
 class Toggle;
+class QLabel;
+class QEvent;
 
 class ClickableFilter : public QObject
 {
@@ -35,15 +35,7 @@ signals:
         void clicked();
 
 protected:
-        bool eventFilter(QObject *obj, QEvent *event) override
-        {
-                if (event->type() == QEvent::MouseButtonRelease) {
-                        emit clicked();
-                        return true;
-                }
-
-                return QObject::eventFilter(obj, event);
-        }
+        bool eventFilter(QObject *obj, QEvent *event) override;
 };
 
 /// Convenience class which connects events emmited from threads
@@ -72,24 +64,9 @@ signals:
         void nameChanged(const QString &roomName);
 
 private slots:
-        void topicEventSent()
-        {
-                errorField_->hide();
-                close();
-        }
-
-        void nameEventSent(const QString &name)
-        {
-                errorField_->hide();
-                emit nameChanged(name);
-                close();
-        }
-
-        void error(const QString &msg)
-        {
-                errorField_->setText(msg);
-                errorField_->show();
-        }
+        void topicEventSent();
+        void nameEventSent(const QString &name);
+        void error(const QString &msg);
 
         void applyClicked();
 
diff --git a/src/emoji/Category.cpp b/src/emoji/Category.cpp
index e674e9db3711fc294b30c247ad798e418b568c7b..5197c474283f8a5626b8145f5d70d9fa31f5704a 100644
--- a/src/emoji/Category.cpp
+++ b/src/emoji/Category.cpp
@@ -15,9 +15,12 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <QLabel>
+#include <QListView>
 #include <QPainter>
 #include <QScrollBar>
 #include <QStyleOption>
+#include <QVBoxLayout>
 
 #include "Config.h"
 
diff --git a/src/emoji/Category.h b/src/emoji/Category.h
index 2f39d6217bcb7e5261cbf000c982e09237f595bf..79e616ee48f01bd3228245bd6788232fd10b3f55 100644
--- a/src/emoji/Category.h
+++ b/src/emoji/Category.h
@@ -18,13 +18,14 @@
 #pragma once
 
 #include <QColor>
-#include <QLabel>
-#include <QLayout>
-#include <QListView>
-#include <QStandardItemModel>
 
 #include "ItemDelegate.h"
 
+class QLabel;
+class QListView;
+class QStandardItemModel;
+class QVBoxLayout;
+
 namespace emoji {
 
 class Category : public QWidget
diff --git a/src/popups/PopupItem.cpp b/src/popups/PopupItem.cpp
index 5513f942cad78c1115080faa17da34e228765599..b378484390e0c6e3d60bfc70c3bb969ac5882c40 100644
--- a/src/popups/PopupItem.cpp
+++ b/src/popups/PopupItem.cpp
@@ -1,3 +1,4 @@
+#include <QLabel>
 #include <QPaintEvent>
 #include <QPainter>
 #include <QStyleOption>
diff --git a/src/popups/PopupItem.h b/src/popups/PopupItem.h
index 7a710fdb3502481c5940e44cbda69be2d26b55fd..17a4f6bca2ad88ce66b08e02bf2263c967420360 100644
--- a/src/popups/PopupItem.h
+++ b/src/popups/PopupItem.h
@@ -1,8 +1,5 @@
 #pragma once
 
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QPoint>
 #include <QWidget>
 
 #include "../AvatarProvider.h"
@@ -10,6 +7,8 @@
 
 class Avatar;
 struct SearchResult;
+class QLabel;
+class QHBoxLayout;
 
 class PopupItem : public QWidget
 {
diff --git a/src/popups/SuggestionsPopup.h b/src/popups/SuggestionsPopup.h
index 63c44538aef8685a981470d784de470a23093924..73bfe6f7ae9f716d316e99f91f0bfa7c3d0ad81f 100644
--- a/src/popups/SuggestionsPopup.h
+++ b/src/popups/SuggestionsPopup.h
@@ -1,8 +1,5 @@
 #pragma once
 
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QPoint>
 #include <QWidget>
 
 #include "CacheStructs.h"