diff --git a/src/CombinedImagePackModel.h b/src/CombinedImagePackModel.h
index 78598469b4e069a18905e6130a4d85aee83eb209..b0560ee3379829be3e2b2f83927204f82e9aafb1 100644
--- a/src/CombinedImagePackModel.h
+++ b/src/CombinedImagePackModel.h
@@ -33,6 +33,12 @@ public:
             return {};
         return images.at(static_cast<size_t>(row)).image;
     }
+    QString shortcodeAt(int row)
+    {
+        if (row < 0 || static_cast<size_t>(row) >= images.size())
+            return {};
+        return images.at(static_cast<size_t>(row)).shortcode;
+    }
 
 private:
     std::string room_id;
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index 7a7d22b79070a81536a0db7f09ba77de3e4d9bc0..a82796a8c8d57c34a1fff20f7adc4854ea7b8097 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -636,7 +636,7 @@ InputBar::sticker(CombinedImagePackModel *model, int row)
     mtx::events::msg::StickerImage sticker{};
     sticker.info = img.info.value_or(mtx::common::ImageInfo{});
     sticker.url  = img.url;
-    sticker.body = img.body;
+    sticker.body = img.body.empty() ? model->shortcodeAt(row).toStdString() : img.body;
 
     // workaround for https://github.com/vector-im/element-ios/issues/2353
     sticker.info.thumbnail_url           = sticker.url;