diff --git a/bindings/GeometryDash.bro b/bindings/GeometryDash.bro
index c9e5c297..13979d1c 100644
--- a/bindings/GeometryDash.bro
+++ b/bindings/GeometryDash.bro
@@ -4560,7 +4560,7 @@ class PlayerObject : GameObject, AnimatedSpriteDelegate {
     void modeDidChange() = mac 0x22bfd0;
     void placeStreakPoint() = mac 0x21af90, win 0x1f95e0;
     void playBurstEffect() = mac 0x21c780, win 0x1f6790;
-    void playDeathEffect() = mac 0x225930, win 0x2efbe0;
+    void playDeathEffect() = mac 0x225930, win 0x1efbe0;
     void playDynamicSpiderRun() = mac 0x222ec0, win 0x1f9d80;
     void playerDestroyed(bool) = mac 0x2256d0, win 0x1efaa0;
     bool playerIsFalling() = mac 0x21c730, win 0x1f5d60;
diff --git a/loader/include/Geode/utils/cocos.hpp b/loader/include/Geode/utils/cocos.hpp
index 401400fb..e0f38990 100644
--- a/loader/include/Geode/utils/cocos.hpp
+++ b/loader/include/Geode/utils/cocos.hpp
@@ -410,16 +410,31 @@ namespace geode::cocos {
      * or nullptr if index exceeds bounds
      */
     template <class Type = cocos2d::CCNode>
-    static Type* getChildOfType(cocos2d::CCNode* node, size_t index) {
+    static Type* getChildOfType(cocos2d::CCNode* node, int index) {
         size_t indexCounter = 0;
 
-        for (size_t i = 0; i < node->getChildrenCount(); ++i) {
-            auto obj = cast::typeinfo_cast<Type*>(node->getChildren()->objectAtIndex(i));
-            if (obj != nullptr) {
-                if (indexCounter == index) {
-                    return obj;
+        // start from end for negative index
+        if (index < 0) {
+            index = -index - 1;
+            for (size_t i = node->getChildrenCount() - 1; i >= 0; i--) {
+                auto obj = cast::typeinfo_cast<Type*>(node->getChildren()->objectAtIndex(i));
+                if (obj != nullptr) {
+                    if (indexCounter == index) {
+                        return obj;
+                    }
+                    ++indexCounter;
+                }
+            }
+        }
+        else {
+            for (size_t i = 0; i < node->getChildrenCount(); i++) {
+                auto obj = cast::typeinfo_cast<Type*>(node->getChildren()->objectAtIndex(i));
+                if (obj != nullptr) {
+                    if (indexCounter == index) {
+                        return obj;
+                    }
+                    ++indexCounter;
                 }
-                ++indexCounter;
             }
         }
 
diff --git a/loader/src/ids/AddIDs.hpp b/loader/src/ids/AddIDs.hpp
index 30dddcfc..7a8c967f 100644
--- a/loader/src/ids/AddIDs.hpp
+++ b/loader/src/ids/AddIDs.hpp
@@ -33,6 +33,8 @@ void setIDs(CCNode* node, int startIndex, Args... args) {
 }
 
 static void switchToMenu(CCNode* node, CCMenu* menu) {
+    if (!node || !menu) return;
+    
     auto worldPos = node->getParent()->convertToWorldSpace(node->getPosition());
 
     node->retain();
@@ -56,6 +58,14 @@ static void switchChildrenToMenu(CCNode* parent, CCMenu* menu, Args... args) {
 
 template <typename T, typename ...Args>
 static CCMenu* detachAndCreateMenu(CCNode* parent, const char* menuID, Layout* layout, T first, Args... args) {
+    if (!first) {
+        auto menu = CCMenu::create();
+        menu->setID(menuID);
+        menu->setLayout(layout);
+        parent->addChild(menu);
+        return menu;
+    }
+
     auto oldMenu = first->getParent();
 
     first->retain();
@@ -78,3 +88,12 @@ static CCMenu* detachAndCreateMenu(CCNode* parent, const char* menuID, Layout* l
 
     return newMenu;
 }
+
+static CCSize getSizeSafe(CCNode* node) {
+    if (node) {
+        return node->getScaledContentSize();
+    }
+    else {
+        return CCSizeZero;
+    }
+}
diff --git a/loader/src/ids/CreatorLayer.cpp b/loader/src/ids/CreatorLayer.cpp
index 73a5a4f9..8d7ca140 100644
--- a/loader/src/ids/CreatorLayer.cpp
+++ b/loader/src/ids/CreatorLayer.cpp
@@ -91,7 +91,7 @@ $register_ids(CreatorLayer) {
         auto exitBtn = setIDSafe(menu, 0, "exit-button");
         menu->setPositionY(
             menu->getPositionY() - 125.f / 2 + 
-                exitBtn->getScaledContentSize().height / 2
+                getSizeSafe(exitBtn).height / 2
         );
         menu->setContentSize({ 60.f, 125.f });
         menu->setLayout(
diff --git a/loader/src/ids/EditLevelLayer.cpp b/loader/src/ids/EditLevelLayer.cpp
index 2f9a2803..5a0fc534 100644
--- a/loader/src/ids/EditLevelLayer.cpp
+++ b/loader/src/ids/EditLevelLayer.cpp
@@ -77,7 +77,7 @@ $register_ids(EditLevelLayer) {
         auto backBtn = setIDSafe(menu, 0, "back-button");
         menu->setPositionX(
             menu->getPositionX() + 100.f / 2 - 
-                backBtn->getScaledContentSize().width / 2
+                getSizeSafe(backBtn).width / 2
         );
         menu->setContentSize({ 100.f, 50.f });
         menu->setLayout(
diff --git a/loader/src/ids/EditorUI.cpp b/loader/src/ids/EditorUI.cpp
index 19d5595f..2be9770a 100644
--- a/loader/src/ids/EditorUI.cpp
+++ b/loader/src/ids/EditorUI.cpp
@@ -11,6 +11,9 @@ $register_ids(EditorUI) {
     setIDSafe(this, this->getChildrenCount() - 2, "layer-index-label");
     setIDSafe(this, this->getChildrenCount() - 1, "object-info-label");
 
+    auto winSize = CCDirector::get()->getWinSize();
+    auto topMenuWidth = winSize.width / 2 - 90.f;
+
     if (auto menu = getChildOfType<CCMenu>(this, 0)) {
         menu->setID("toolbar-categories-menu");
 
@@ -28,7 +31,7 @@ $register_ids(EditorUI) {
 
             "undo-button",
             "redo-button",
-            "delete-button",
+            "delete-trash-button",
 
             "music-playback-button",
 
@@ -45,10 +48,11 @@ $register_ids(EditorUI) {
         auto toolbarTogglesMenu = detachAndCreateMenu(
             this,
             "toolbar-toggles-menu",
-            ColumnLayout::create()
-                ->setCrossAxisOverflow(false)
-                ->setAxisAlignment(AxisAlignment::Even)
-                ->setCrossAxisAlignment(AxisAlignment::Even),
+            // ColumnLayout::create()
+            //     ->setCrossAxisOverflow(false)
+            //     ->setAxisAlignment(AxisAlignment::Even)
+            //     ->setCrossAxisAlignment(AxisAlignment::Even),
+            nullptr,
             menu->getChildByID("swipe-button"),
             menu->getChildByID("free-move-button"),
             menu->getChildByID("snap-button"),
@@ -60,42 +64,82 @@ $register_ids(EditorUI) {
         toolbarTogglesMenu->setContentSize({ 100.f, 100.f });
         toolbarTogglesMenu->updateLayout();
 
-        detachAndCreateMenu(
+        auto undoMenu = detachAndCreateMenu(
             this,
-            "top-left-menu",
-            RowLayout::create(),
+            "undo-menu",
+            RowLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start)
+                ->setGap(10.f),
             menu->getChildByID("undo-button"),
             menu->getChildByID("redo-button"),
-            menu->getChildByID("delete-button")
+            menu->getChildByID("delete-trash-button")
         );
-
-        detachAndCreateMenu(
-            this, "playback-menu", RowLayout::create(), menu->getChildByID("music-playback-button")
+        undoMenu->setContentSize({ topMenuWidth, 50.f });
+        undoMenu->setPositionX(
+            undoMenu->getPositionX() + topMenuWidth / 2 - 
+                getSizeSafe(undoMenu->getChildByID("undo-button")).width / 2
         );
+        undoMenu->updateLayout();
 
-        detachAndCreateMenu(
+        auto playBackMenu = detachAndCreateMenu(
+            this,
+            "playback-menu",
+            RowLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start),
+            menu->getChildByID("music-playback-button")
+        );
+        playBackMenu->setContentSize({ 100.f, 50.f });
+        playBackMenu->setPositionX(
+            playBackMenu->getPositionX() + 100.f / 2 - 
+                getSizeSafe(playBackMenu->getChildByID("music-playback-button")).width / 2
+        );
+        playBackMenu->updateLayout();
+
+        auto playTestMenu = detachAndCreateMenu(
             this,
             "playtest-menu",
-            RowLayout::create(),
+            RowLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start),
             menu->getChildByID("playtest-button"),
             menu->getChildByID("stop-playtest-button")
         );
+        playTestMenu->setContentSize({ 100.f, 50.f });
+        playTestMenu->setPositionX(
+            playTestMenu->getPositionX() + 100.f / 2 - 
+                getSizeSafe(playTestMenu->getChildByID("playtest-button")).width / 2
+        );
+        playTestMenu->updateLayout();
 
-        detachAndCreateMenu(
+        auto zoomMenu = detachAndCreateMenu(
             this,
             "zoom-menu",
-            ColumnLayout::create(),
-            menu->getChildByID("zoom-in-button"),
-            menu->getChildByID("zoom-out-button")
+            ColumnLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start),
+            menu->getChildByID("zoom-out-button"),
+            menu->getChildByID("zoom-in-button")
         );
+        zoomMenu->setPositionY(
+            zoomMenu->getPositionY() + 75.f / 2 - 
+                getSizeSafe(zoomMenu->getChildByID("zoom-out-button")).height / 2
+        );
+        zoomMenu->setContentSize({ 50.f, 75.f });
+        zoomMenu->updateLayout();
 
-        detachAndCreateMenu(
+        auto linkMenu = detachAndCreateMenu(
             this,
             "link-menu",
-            ColumnLayout::create(),
-            menu->getChildByID("link-button"),
-            menu->getChildByID("unlink-button")
+            ColumnLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start)
+                ->setGrowCrossAxis(true),
+            menu->getChildByID("unlink-button"),
+            menu->getChildByID("link-button")
         );
+        linkMenu->setPositionY(
+            linkMenu->getPositionY() + 75.f / 2 -
+                getSizeSafe(linkMenu->getChildByID("unlink-button")).height / 2
+        );
+        linkMenu->setContentSize({ 125.f, 75.f });
+        linkMenu->updateLayout();
     }
 
     if (auto menu = getChildOfType<CCMenu>(this, 1)) {
@@ -119,10 +163,11 @@ $register_ids(EditorUI) {
         auto deleteButtonMenu = detachAndCreateMenu(
             menu,
             "delete-button-menu",
-            ColumnLayout::create()
-                ->setCrossAxisOverflow(false)
-                ->setAxisAlignment(AxisAlignment::Even)
-                ->setCrossAxisAlignment(AxisAlignment::Even),
+            // ColumnLayout::create()
+            //     ->setCrossAxisOverflow(false)
+            //     ->setAxisAlignment(AxisAlignment::Even)
+            //     ->setCrossAxisAlignment(AxisAlignment::Even),
+            nullptr,
             menu->getChildByID("delete-button"),
             menu->getChildByID("delete-all-of-button"),
             menu->getChildByID("delete-startpos-button")
@@ -136,10 +181,11 @@ $register_ids(EditorUI) {
         auto deleteFilterMenu = detachAndCreateMenu(
             menu,
             "delete-filter-menu",
-            ColumnLayout::create()
-                ->setCrossAxisOverflow(false)
-                ->setAxisAlignment(AxisAlignment::Even)
-                ->setCrossAxisAlignment(AxisAlignment::Even),
+            // ColumnLayout::create()
+            //     ->setCrossAxisOverflow(false)
+            //     ->setAxisAlignment(AxisAlignment::Even)
+            //     ->setCrossAxisAlignment(AxisAlignment::Even),
+            nullptr,
             menu->getChildByID("delete-filter-none"),
             menu->getChildByID("delete-filter-static"),
             menu->getChildByID("delete-filter-detail"),
@@ -200,44 +246,58 @@ $register_ids(EditorUI) {
 
         auto topRightMenu = detachAndCreateMenu(
             this,
-            "top-right-menu",
+            "settings-menu",
             RowLayout::create()
+                ->setAxisReverse(true)
                 ->setAxisAlignment(AxisAlignment::End),
             menu->getChildByID("pause-button"),
             menu->getChildByID("settings-button")
         );
-        topRightMenu->setContentSize({ 60.f, 125.f });
-        topRightMenu->setPositionX(topRightMenu->getPositionX() - 125.f / 2);
+        topRightMenu->setContentSize({ topMenuWidth, 60.f });
+        topRightMenu->setPositionX(
+            topRightMenu->getPositionX() - topMenuWidth / 2 + 
+                getSizeSafe(topRightMenu->getChildByID("pause-button")).width / 2
+        );
         topRightMenu->updateLayout();
 
         auto rightMenu = detachAndCreateMenu(
             this,
             "editor-buttons-menu",
             ColumnLayout::create()
-                ->setAxisAlignment(AxisAlignment::Even)
+                ->setAxisAlignment(AxisAlignment::Center)
                 ->setCrossAxisAlignment(AxisAlignment::End)
+                ->setGap(-3.5f)
+                ->setGrowCrossAxis(true)
+                ->setCrossAxisOverflow(false)
                 ->setCrossAxisReverse(true),
-            menu->getChildByID("copy-paste-button"),
-            menu->getChildByID("edit-object-button"),
-            menu->getChildByID("paste-color-button"),
-            menu->getChildByID("deselect-button"),
-            menu->getChildByID("paste-button"),
-            menu->getChildByID("edit-group-button"),
-            menu->getChildByID("paste-state-button"),
-            menu->getChildByID("go-to-layer-button"),
             menu->getChildByID("copy-button"),
+            menu->getChildByID("paste-button"),
+            menu->getChildByID("copy-paste-button"),
             menu->getChildByID("edit-special-button"),
+            menu->getChildByID("edit-group-button"),
+            menu->getChildByID("edit-object-button"),
             menu->getChildByID("copy-values-button"),
-            menu->getChildByID("hsv-button")
+            menu->getChildByID("paste-state-button"),
+            menu->getChildByID("paste-color-button"),
+            menu->getChildByID("hsv-button"),
+            menu->getChildByID("go-to-layer-button"),
+            menu->getChildByID("deselect-button")
+        );
+        for (auto btn : CCArrayExt<CCNode>(rightMenu->getChildren())) {
+            btn->setContentSize({ 40.f, 40.f });
+        }
+        rightMenu->setContentSize({ 210.f, 160.f });
+        rightMenu->setPosition(
+            winSize.width - 210.f / 2 - 5.f,
+            winSize.height / 2 + 50.f
         );
-        rightMenu->setContentSize({ 125.f, 125.f });
-        rightMenu->setPosition(rightMenu->getPosition() - CCPoint { 125.f, 125.f });
         rightMenu->updateLayout();
 
         detachAndCreateMenu(
             this,
             "layer-menu",
-            RowLayout::create(),
+            // RowLayout::create(),
+            nullptr,
             menu->getChildByID("all-layers-button"),
             menu->getChildByID("prev-layer-button"),
             this->getChildByID("layer-index-label"),
diff --git a/loader/src/ids/GJGarageLayer.cpp b/loader/src/ids/GJGarageLayer.cpp
index 3d973602..f1520364 100644
--- a/loader/src/ids/GJGarageLayer.cpp
+++ b/loader/src/ids/GJGarageLayer.cpp
@@ -10,8 +10,10 @@ $register_ids(GJGarageLayer) {
     setIDSafe(this, 2, "username-label");
     setIDSafe(this, 6, "player-icon");
 
+    auto winSize = CCDirector::get()->getWinSize();
+
     if (auto menu = getChildOfType<CCMenu>(this, 0)) {
-        menu->setID("icon-select-menu");
+        menu->setID("category-menu");
 
         setIDs(
             menu,
@@ -26,6 +28,13 @@ $register_ids(GJGarageLayer) {
             "trail-button",
             "death-effect-button"
         );
+
+        menu->setContentSize({ 320.f, 50.f });
+        menu->setLayout(
+            RowLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start)
+                ->setGap(-4.f)
+        );
     }
 
     setIDs(
@@ -47,15 +56,62 @@ $register_ids(GJGarageLayer) {
         "color-selection-menu"
     );
 
-    if (auto menu = getChildOfType<CCMenu>(this, 11)) {
+    if (auto menu = getChildOfType<CCMenu>(this, 1)) {
         menu->setID("top-left-menu");
 
         setIDs(menu, 0, "back-button", "shop-button", "shards-button");
 
-        detachAndCreateMenu(
-            menu, "shards-button-menu", ColumnLayout::create(), menu->getChildByID("shards-button")
+        auto backBtn = menu->getChildByID("back-button");
+        auto backMenu = detachAndCreateMenu(
+            this,
+            "back-menu",
+            RowLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start),
+            backBtn
         );
+        backMenu->setContentSize({ 100.f, 50.f });
+        backMenu->setPositionX(
+            backMenu->getPositionX() + 100.f / 2 - 
+                getSizeSafe(backBtn).width / 2
+        );
+        backMenu->updateLayout();
+
+        auto shardsBtn = menu->getChildByID("shards-button");
+        auto shardsMenu = detachAndCreateMenu(
+            this,
+            "shards-menu",
+            ColumnLayout::create()
+                ->setAxisReverse(true)
+                ->setAxisAlignment(AxisAlignment::End),
+            shardsBtn
+        );
+        shardsMenu->setContentSize({ 50.f, 100.f });
+        shardsMenu->setPositionY(
+            shardsMenu->getPositionY() - 100.f / 2 + 
+                getSizeSafe(shardsBtn).height / 2
+        );
+        shardsMenu->updateLayout();
     }
+
+    auto bottomLeftMenu = CCMenu::create();
+    bottomLeftMenu->setID("bottom-left-menu");
+    bottomLeftMenu->setContentSize({ 50.f, 70.f });
+    bottomLeftMenu->setPosition(30.f, 115.f);
+    bottomLeftMenu->setLayout(
+        ColumnLayout::create()
+            ->setAxisAlignment(AxisAlignment::Start)
+    );
+    this->addChild(bottomLeftMenu);
+
+    auto bottomRightMenu = CCMenu::create();
+    bottomRightMenu->setID("bottom-right-menu");
+    bottomRightMenu->setContentSize({ 50.f, 110.f });
+    bottomRightMenu->setPosition(winSize.width - 30.f, 135.f);
+    bottomRightMenu->setLayout(
+        ColumnLayout::create()
+            ->setAxisAlignment(AxisAlignment::Start)
+    );
+    this->addChild(bottomRightMenu);
 }
 
 struct GJGarageLayerIDs : Modify<GJGarageLayerIDs, GJGarageLayer> {
diff --git a/loader/src/ids/LevelBrowserLayer.cpp b/loader/src/ids/LevelBrowserLayer.cpp
index 713d2922..d196b35e 100644
--- a/loader/src/ids/LevelBrowserLayer.cpp
+++ b/loader/src/ids/LevelBrowserLayer.cpp
@@ -7,9 +7,20 @@
 USE_GEODE_NAMESPACE();
 
 $register_ids(LevelBrowserLayer) {
+    auto winSize = CCDirector::get()->getWinSize();
+
     if (auto menu = getChildOfType<CCMenu>(this, 0)) {
         menu->setID("back-menu");
-        setIDSafe(menu, 0, "back-button");
+        auto btn = setIDSafe(menu, 0, "back-button");
+        menu->setContentSize({ 100.f, 50.f });
+        menu->setPositionX(
+            menu->getPositionX() + 100.f / 2 - 
+                getSizeSafe(btn).width / 2
+        );
+        menu->setLayout(
+            RowLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start)
+        );
     }
 
     if (m_searchObject->m_searchType == SearchType::MyLevels) {
@@ -26,10 +37,10 @@ $register_ids(LevelBrowserLayer) {
                     myLevelsBtn
                 );
                 menu->setPositionY(
-                    menu->getPositionY() + 100.f / 2 - 
+                    menu->getPositionY() + 125.f / 2 - 
                         myLevelsBtn->getScaledContentSize().height / 2
                 );
-                menu->setContentSize({ 50.f, 100.f });
+                menu->setContentSize({ 50.f, 125.f });
                 menu->updateLayout();
             }
 
@@ -39,7 +50,7 @@ $register_ids(LevelBrowserLayer) {
             );
             menu->setPositionY(
                 menu->getPositionY() + 130.f / 2 - 
-                    newLvlBtn->getScaledContentSize().height / 2
+                    getSizeSafe(newLvlBtn).height / 2
             );
             menu->setContentSize({ 50.f, 130.f });
             menu->updateLayout();
@@ -101,8 +112,47 @@ $register_ids(LevelBrowserLayer) {
                 );
                 pageMenu->updateLayout();
             }
+
+            if (auto prevPageBtn = setIDSafe(menu, 0, "prev-page-button")) {
+                auto navMenu = detachAndCreateMenu(
+                    this,
+                    "prev-page-menu",
+                    RowLayout::create()
+                        ->setAxisAlignment(AxisAlignment::Start),
+                    prevPageBtn
+                );
+                prevPageBtn->setZOrder(-1);
+                navMenu->setContentSize({ 90.f, 40.f });
+                navMenu->setPositionX(
+                    navMenu->getPositionX() + 90.f / 2 - 
+                        prevPageBtn->getScaledContentSize().width / 2
+                );
+                navMenu->updateLayout();
+            }
+
+            auto nextPageBtn = setIDSafe(menu, 0, "next-page-button");
+
+            menu->setID("next-page-menu");
+            menu->setLayout(
+                RowLayout::create()
+                    ->setAxisReverse(true)
+                    ->setAxisAlignment(AxisAlignment::End)
+            );
+            menu->setContentSize({ 90.f, 40.f });
+            menu->setPositionX(
+                winSize.width - 90.f / 2 - 5.f
+            );
+            menu->updateLayout();
         }
     }
+
+    auto bottomMenu = CCMenu::create();
+    bottomMenu->setID("bottom-menu");
+    bottomMenu->setContentSize({ 375.f, 50.f });
+    bottomMenu->setPosition(winSize.width / 2, 28.f);
+    bottomMenu->setZOrder(15);
+    bottomMenu->setLayout(RowLayout::create());
+    this->addChild(bottomMenu);
 }
 
 struct LevelBrowserLayerIDs : Modify<LevelBrowserLayerIDs, LevelBrowserLayer> {
diff --git a/loader/src/ids/LevelInfoLayer.cpp b/loader/src/ids/LevelInfoLayer.cpp
index 3d4a3716..4f27ac48 100644
--- a/loader/src/ids/LevelInfoLayer.cpp
+++ b/loader/src/ids/LevelInfoLayer.cpp
@@ -35,8 +35,22 @@ $register_ids(LevelInfoLayer) {
     setIDSafe<CustomSongWidget>(this, 0, "custom-songs-widget");
 
     if (auto menu = getChildOfType<CCMenu>(this, 0)) {
-        menu->setID("exit-menu");
-        setIDSafe(menu, 0, "exit-button");
+        menu->setID("play-menu");
+        setIDSafe(menu, 0, "play-button");
+    }
+
+    if (auto menu = getChildOfType<CCMenu>(this, 2)) {
+        menu->setID("back-menu");
+        auto backBtn = setIDSafe(menu, 0, "back-button");
+        menu->setPositionX(
+            menu->getPositionX() + 100.f / 2 - 
+                getSizeSafe(backBtn).width / 2
+        );
+        menu->setContentSize({ 100.f, 50.f });
+        menu->setLayout(
+            RowLayout::create()
+                ->setAxisAlignment(AxisAlignment::Start)
+        );
     }
 
     if (auto menu = getChildOfType<CCMenu>(this, 1)) {
@@ -47,18 +61,23 @@ $register_ids(LevelInfoLayer) {
                 this,
                 "creator-info-menu",
                 ColumnLayout::create()
-                    ->setAxisAlignment(AxisAlignment::Start),
+                    ->setAxisReverse(true)
+                    ->setAxisAlignment(AxisAlignment::End),
                 name
             );
-            menu->setPositionY(menu->getPositionY() + 100.f / 2);
-            menu->setContentSize({ 60.f, 100.f });
+            menu->setPositionY(
+                menu->getPositionY() - 40.f / 2 + 
+                    name->getScaledContentSize().height / 2
+            );
+            menu->setContentSize({ 60.f, 40.f });
             menu->updateLayout();
         }
 
         auto leftSideMenu = CCMenu::create();
-        leftSideMenu->setPosition(winSize / 2 + ccp(-254.f, 30.f));
+        leftSideMenu->setPosition(winSize / 2 + ccp(-254.f, 0.f));
         leftSideMenu->setLayout(ColumnLayout::create());
         leftSideMenu->setID("left-side-menu");
+        leftSideMenu->setContentSize({ 50.f, 225.f });
         this->addChild(leftSideMenu);
 
         menu->setPosition(winSize / 2 + ccp(254.f, 0.f));
@@ -80,6 +99,20 @@ $register_ids(LevelInfoLayer) {
         setIDSafe(menu, 4, "like-button");
         setIDSafe(menu, 5, "rate-button");
 
+        menu->setPosition(
+            menu->getPositionX() + static_cast<CCNode*>(
+                menu->getChildren()->firstObject()
+            )->getPositionX(),
+            winSize.height / 2
+        );
+        menu->setContentSize({ 60.f, winSize.height - 15.f });
+        menu->setLayout(
+            ColumnLayout::create()
+                ->setGap(3.f)
+                ->setAxisAlignment(AxisAlignment::End)
+                ->setAxisReverse(true)
+        );
+
         setIDSafe(leftSideMenu, 0, "copy-button");
 
         menu->updateLayout();
diff --git a/loader/src/ids/MenuLayer.cpp b/loader/src/ids/MenuLayer.cpp
index ef92f509..954402c9 100644
--- a/loader/src/ids/MenuLayer.cpp
+++ b/loader/src/ids/MenuLayer.cpp
@@ -46,9 +46,9 @@ $register_ids(MenuLayer) {
                     ->setAxisAlignment(AxisAlignment::Start),
                 pfp
             );
-            profileMenu->setContentSize({ 200.f, 50.f });
+            profileMenu->setContentSize({ 150.f, 50.f });
             profileMenu->setPositionX(
-                profileMenu->getPositionX() + 200.f / 2 - 
+                profileMenu->getPositionX() + 150.f / 2 - 
                     pfp->getScaledContentSize().height / 2
             );
             profileMenu->updateLayout();
@@ -127,7 +127,7 @@ $register_ids(MenuLayer) {
         menu->setContentSize({ 100.f, 50.f });
         menu->setPositionX(
             menu->getPositionX() - 100.f / 2 + 
-                moreGamesBtn->getScaledContentSize().width / 2
+                getSizeSafe(moreGamesBtn).width / 2
         );
         menu->setLayout(
             RowLayout::create()
@@ -136,18 +136,26 @@ $register_ids(MenuLayer) {
         );
     }
 
-    // add a menu to the top right corner that is empty but prolly a place mods 
-    // want to add stuff to since it's symmetrically opposite to the close button
-    auto menu = CCMenu::create();
-    menu->setPosition(winSize.width - 200.f / 2, winSize.height - 50.f / 2);
-    menu->setID("top-right-menu");
-    menu->setContentSize({ 200.f, 50.f });
-    menu->setLayout(
+    // add a menu to the top right corner and middle left that are empty 
+    // but prolly a place mods want to add stuff
+
+    auto topRightMenu = CCMenu::create();
+    topRightMenu->setPosition(winSize.width - 200.f / 2, winSize.height - 50.f / 2);
+    topRightMenu->setID("top-right-menu");
+    topRightMenu->setContentSize({ 200.f, 50.f });
+    topRightMenu->setLayout(
         RowLayout::create()
             ->setAxisReverse(true)
             ->setAxisAlignment(AxisAlignment::End)
     );
-    this->addChild(menu);
+    this->addChild(topRightMenu);
+
+    auto middleLeftMenu = CCMenu::create();
+    middleLeftMenu->setPosition(25.f, 215.f);
+    middleLeftMenu->setID("side-menu");
+    middleLeftMenu->setContentSize({ 50.f, 120.f });
+    middleLeftMenu->setLayout(ColumnLayout::create());
+    this->addChild(middleLeftMenu);
 }
 
 struct $modify(MenuLayer) {