diff --git a/loader/include/Geode/modify/IDManager.hpp b/loader/include/Geode/modify/IDManager.hpp
index aa3851ab..e8e5e5b8 100644
--- a/loader/include/Geode/modify/IDManager.hpp
+++ b/loader/include/Geode/modify/IDManager.hpp
@@ -9,7 +9,7 @@ namespace cocos2d {
 
 namespace geode {
     template<class T>
-    concept IDProvidable = requires {
+    concept IDProvidable = std::is_base_of_v<cocos2d::CCNode, T> && requires {
         { T::CLASS_NAME } -> std::convertible_to<const char*>;
     };
 
@@ -53,13 +53,12 @@ namespace geode {
 }
 
 #define $register_ids(Layer_) \
-	struct GEODE_CONCAT(ProvideIDsFor, Layer_);\
+    struct GEODE_CONCAT(ProvideIDsFor, Layer_) : public Layer_ {\
+        void provide();\
+    };\
 	$execute {\
 		NodeStringIDManager::get()->registerProvider(\
             &geodeInternalProvideIDsFor<GEODE_CONCAT(ProvideIDsFor, Layer_)>\
         );\
 	};\
-    struct GEODE_CONCAT(ProvideIDsFor, Layer_) : public Layer_ {\
-        void provide();\
-    };\
     void GEODE_CONCAT(ProvideIDsFor, Layer_)::provide()