diff --git a/loader/src/ui/nodes/IconButtonSprite.cpp b/loader/src/ui/nodes/IconButtonSprite.cpp
index c12c855a..880d4bb7 100644
--- a/loader/src/ui/nodes/IconButtonSprite.cpp
+++ b/loader/src/ui/nodes/IconButtonSprite.cpp
@@ -36,18 +36,23 @@ bool IconButtonSprite::init(
 void IconButtonSprite::updateLayout() {
     static constexpr float const PAD = 7.5f;
 
+    bool hasText = m_label->getString() && strlen(m_label->getString());
+
     auto size = CCSize { 20.f, 20.f };
-    if (m_label->getString() && strlen(m_label->getString())) {
+    if (hasText) {
         m_label->limitLabelWidth(100.f, .6f, .1f);
         size.width += m_label->getScaledContentSize().width;
+        if (m_icon) {
+            size.width += PAD;
+        }
     }
     if (m_icon) {
-        limitNodeSize(m_icon, size, 1.f, .1f);
+        limitNodeSize(m_icon, { 20, 20 }, 1.f, .1f);
     }
     size.height += 15.f;
 
     if (m_icon) {
-        size.width += m_icon->getScaledContentSize().width + PAD;
+        size.width += m_icon->getScaledContentSize().width;
     }
 
     this->setContentSize(size);
@@ -55,10 +60,16 @@ void IconButtonSprite::updateLayout() {
     m_bg->setPosition(m_obContentSize / 2);
 
     if (m_icon) {
-        m_label->setPosition(
-            size.height / 2 + m_icon->getScaledContentSize().width / 2 + PAD, size.height / 2 + 1.f
-        );
-        m_icon->setPosition(size.height / 2, size.height / 2);
+        if (hasText) {
+            m_label->setPosition(
+                size.height / 2 + m_icon->getScaledContentSize().width / 2 + PAD,
+                size.height / 2 + 1.f
+            );
+            m_icon->setPosition(size.height / 2, size.height / 2);
+        }
+        else {
+            m_icon->setPosition(size.width / 2, size.height / 2);
+        }
     }
     else {
         m_label->setPosition(size.height / 2, size.height / 2);