diff --git a/loader/include/Geode/loader/Event.hpp b/loader/include/Geode/loader/Event.hpp
index 8054640b..601817b5 100644
--- a/loader/include/Geode/loader/Event.hpp
+++ b/loader/include/Geode/loader/Event.hpp
@@ -17,6 +17,8 @@ namespace geode {
 	struct GEODE_DLL BasicEventHandler {
 		virtual PassThrough passThrough(Event*) = 0;
 
+		virtual ~BasicEventHandler();
+
 		void listen();
 		void unlisten();
 	};
diff --git a/loader/src/load/Event.cpp b/loader/src/load/Event.cpp
index 73a78f3c..3baa2ec9 100644
--- a/loader/src/load/Event.cpp
+++ b/loader/src/load/Event.cpp
@@ -13,6 +13,10 @@ void BasicEventHandler::unlisten() {
 	Event::s_handlers.erase(this);
 }
 
+BasicEventHandler::~BasicEventHandler() {
+	this->unlisten();
+}
+
 Event::~Event() {}
 
 void Event::postFrom(Mod* m) {
diff --git a/loader/src/utils/cocos.cpp b/loader/src/utils/cocos.cpp
index cd614159..539b6c16 100644
--- a/loader/src/utils/cocos.cpp
+++ b/loader/src/utils/cocos.cpp
@@ -118,7 +118,13 @@ void geode::cocos::reloadTextures(CreateLayerFunc returnTo) {
 }
 
 class $modify(LoadingLayer) {
-    void loadingFinished() {
+    void loadAssets() {
+        // loadFinished is inlined on Macchew OS :sob:
+
+        if (m_loadStep < 14) {
+            return LoadingLayer::loadAssets();
+        }
+
         // Default behaviour
         if (!LOADING_FINISHED_SCENE) {
             return LoadingLayer::loadingFinished();