diff --git a/ElunaTemplate.cpp b/ElunaTemplate.cpp
new file mode 100644
index 0000000000..2a9a4fff82
--- /dev/null
+++ b/ElunaTemplate.cpp
@@ -0,0 +1,87 @@
+/*
+* Copyright (C) 2010 - 2024 Eluna Lua Engine
+* This program is free software licensed under GPL version 3
+* Please see the included DOCS/LICENSE.md for more information
+*/
+
+// Eluna
+#include "LuaEngine.h"
+#include "ElunaIncludes.h"
+#include "ElunaTemplate.h"
+#include "ElunaUtility.h"
+
+#if defined TRACKABLE_PTR_NAMESPACE
+ElunaConstrainedObjectRef GetWeakPtrFor(Aura const* obj)
+{
+#if defined ELUNA_TRINITY
+ Map* map = obj->GetOwner()->GetMap();
+#elif defined ELUNA_CMANGOS
+ Map* map = obj->GetTarget()->GetMap();
+#endif
+ return { obj->GetWeakPtr(), map };
+}
+ElunaConstrainedObjectRef GetWeakPtrFor(BattleGround const* obj) { return { obj->GetWeakPtr(), obj->GetBgMap() }; }
+ElunaConstrainedObjectRef GetWeakPtrFor(Group const* obj) { return { obj->GetWeakPtr(), nullptr }; }
+ElunaConstrainedObjectRef GetWeakPtrFor(Guild const* obj) { return { obj->GetWeakPtr(), nullptr }; }
+ElunaConstrainedObjectRef