diff --git a/resources/qml/dialogs/ImagePackEditorDialog.qml b/resources/qml/dialogs/ImagePackEditorDialog.qml
index 893012152b2f9a08dce71cea13188f5aaa3b3fb3..b839c9e344b1f4f1c03a0aa2f9353b34fedd35e2 100644
--- a/resources/qml/dialogs/ImagePackEditorDialog.qml
+++ b/resources/qml/dialogs/ImagePackEditorDialog.qml
@@ -186,7 +186,7 @@ ApplicationWindow {
 
                     ToggleButton {
                         checked: imagePack.isEmotePack
-                        onToggled: imagePack.isEmotePack = checked
+                        onClicked: imagePack.isEmotePack = checked
                         Layout.alignment: Qt.AlignRight
                     }
 
@@ -196,7 +196,7 @@ ApplicationWindow {
 
                     ToggleButton {
                         checked: imagePack.isStickerPack
-                        onToggled: imagePack.isStickerPack = checked
+                        onClicked: imagePack.isStickerPack = checked
                         Layout.alignment: Qt.AlignRight
                     }
 
@@ -251,7 +251,7 @@ ApplicationWindow {
 
                     ToggleButton {
                         checked: imagePack.data(imagePack.index(currentImageIndex, 0), SingleImagePackModel.IsEmote)
-                        onToggled: imagePack.setData(imagePack.index(currentImageIndex, 0), text, SingleImagePackModel.IsEmote)
+                        onClicked: imagePack.setData(imagePack.index(currentImageIndex, 0), checked, SingleImagePackModel.IsEmote)
                         Layout.alignment: Qt.AlignRight
                     }
 
@@ -261,7 +261,7 @@ ApplicationWindow {
 
                     ToggleButton {
                         checked: imagePack.data(imagePack.index(currentImageIndex, 0), SingleImagePackModel.IsSticker)
-                        onToggled: imagePack.setData(imagePack.index(currentImageIndex, 0), text, SingleImagePackModel.IsSticker)
+                        onClicked: imagePack.setData(imagePack.index(currentImageIndex, 0), checked, SingleImagePackModel.IsSticker)
                         Layout.alignment: Qt.AlignRight
                     }
 
diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml
index c57867fd60094bea3eb03a879e02da301c4ecf66..5181619c03ca620323743d09e12cdfcfad171e15 100644
--- a/resources/qml/dialogs/ImagePackSettingsDialog.qml
+++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml
@@ -62,6 +62,34 @@ ApplicationWindow {
                     enabled: !Settings.mobileMode
                 }
 
+                footer: ColumnLayout {
+                    Button {
+                        palette: Nheko.colors
+                        onClicked: {
+                            var dialog = packEditor.createObject(timelineRoot, {
+                                "imagePack": packlist.newPack(false)
+                            });
+                            dialog.show();
+                        }
+                        width: packlist.width
+                        visible: !packlist.containsAccountPack
+                        text: qsTr("Create account pack")
+                    }
+
+                    Button {
+                        palette: Nheko.colors
+                        onClicked: {
+                            var dialog = packEditor.createObject(timelineRoot, {
+                                "imagePack": packlist.newPack(true)
+                            });
+                            dialog.show();
+                        }
+                        width: packlist.width
+                        text: qsTr("New room pack")
+                    }
+
+                }
+
                 delegate: AvatarListTile {
                     id: packItem
 
diff --git a/src/Cache.cpp b/src/Cache.cpp
index f3f3dbb65290259b1316541c165ab9d8192e1e9d..6650334ad57da6aac13ed2a259e78fb43785682f 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -3401,7 +3401,7 @@ Cache::getImagePacks(const std::string &room_id, std::optional<bool> stickers)
                         info.pack.pack   = pack.pack;
 
                         for (const auto &img : pack.images) {
-                                if (img.second.overrides_usage() &&
+                                if (stickers.has_value() && img.second.overrides_usage() &&
                                     (stickers ? !img.second.is_sticker() : !img.second.is_emoji()))
                                         continue;
 
diff --git a/src/ImagePackListModel.cpp b/src/ImagePackListModel.cpp
index 89f1f68ec72ac6688ce8837108947ac85b15f524..6392de22876807a3d7a589c6069c587c749e2e08 100644
--- a/src/ImagePackListModel.cpp
+++ b/src/ImagePackListModel.cpp
@@ -74,3 +74,21 @@ ImagePackListModel::packAt(int row)
         QQmlEngine::setObjectOwnership(e, QQmlEngine::CppOwnership);
         return e;
 }
+
+SingleImagePackModel *
+ImagePackListModel::newPack(bool inRoom)
+{
+        ImagePackInfo info{};
+        if (inRoom)
+                info.source_room = room_id;
+        return new SingleImagePackModel(info);
+}
+
+bool
+ImagePackListModel::containsAccountPack() const
+{
+        for (const auto &p : packs)
+                if (p->roomid().isEmpty())
+                        return true;
+        return false;
+}
diff --git a/src/ImagePackListModel.h b/src/ImagePackListModel.h
index 0a044690f98d2e8e346264fdb512493d8fdaccc1..2aa5abb25e8200fe0485bdf7cb33f4bc529ef3c2 100644
--- a/src/ImagePackListModel.h
+++ b/src/ImagePackListModel.h
@@ -12,6 +12,7 @@ class SingleImagePackModel;
 class ImagePackListModel : public QAbstractListModel
 {
         Q_OBJECT
+        Q_PROPERTY(bool containsAccountPack READ containsAccountPack CONSTANT)
 public:
         enum Roles
         {
@@ -29,6 +30,9 @@ public:
         QVariant data(const QModelIndex &index, int role) const override;
 
         Q_INVOKABLE SingleImagePackModel *packAt(int row);
+        Q_INVOKABLE SingleImagePackModel *newPack(bool inRoom);
+
+        bool containsAccountPack() const;
 
 private:
         std::string room_id;
diff --git a/src/SingleImagePackModel.cpp b/src/SingleImagePackModel.cpp
index ddecf1ad7f078adf7ed9b6b016435acefab919a9..dea25264083b9feb86d14bc10e325e5246424257 100644
--- a/src/SingleImagePackModel.cpp
+++ b/src/SingleImagePackModel.cpp
@@ -15,7 +15,7 @@
 #include "timeline/Permissions.h"
 #include "timeline/TimelineModel.h"
 
-Q_DECLARE_METATYPE(mtx::common::ImageInfo);
+Q_DECLARE_METATYPE(mtx::common::ImageInfo)
 
 SingleImagePackModel::SingleImagePackModel(ImagePackInfo pack_, QObject *parent)
   : QAbstractListModel(parent)
@@ -285,6 +285,8 @@ SingleImagePackModel::save()
                                   ChatPage::instance()->showNotification(
                                     tr("Failed to update image pack: {}")
                                       .arg(QString::fromStdString(e->matrix_error.error)));
+
+                          nhlog::net()->info("Uploaded image pack: {}", statekey_);
                   });
         }
 }