diff --git a/modules/vertex_lights_2d/SCsub b/modules/vertex_lights_2d/SCsub
index 32429a9a2..8a4e41ca5 100644
--- a/modules/vertex_lights_2d/SCsub
+++ b/modules/vertex_lights_2d/SCsub
@@ -6,3 +6,4 @@ module_env = env.Clone()
 
 module_env.add_source_files(env.modules_sources,"register_types.cpp")
 module_env.add_source_files(env.modules_sources,"vertex_lights_2d.cpp")
+module_env.add_source_files(env.modules_sources,"vertex_light_data.cpp")
diff --git a/modules/vertex_lights_2d/vertex_light_data.cpp b/modules/vertex_lights_2d/vertex_light_data.cpp
new file mode 100644
index 000000000..95cef854e
--- /dev/null
+++ b/modules/vertex_lights_2d/vertex_light_data.cpp
@@ -0,0 +1,33 @@
+/*************************************************************************/
+/*  vertex_light_data.cpp                                                */
+/*************************************************************************/
+/*                         This file is part of:                         */
+/*                          PANDEMONIUM ENGINE                           */
+/*             https://github.com/Relintai/pandemonium_engine            */
+/*************************************************************************/
+/* Copyright (c) 2022-present Péter Magyar.                              */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */
+/*                                                                       */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the       */
+/* "Software"), to deal in the Software without restriction, including   */
+/* without limitation the rights to use, copy, modify, merge, publish,   */
+/* distribute, sublicense, and/or sell copies of the Software, and to    */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions:                                             */
+/*                                                                       */
+/* The above copyright notice and this permission notice shall be        */
+/* included in all copies or substantial portions of the Software.       */
+/*                                                                       */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
+/*************************************************************************/
+
+#include "vertex_light_data.h"
+
diff --git a/modules/vertex_lights_2d/vertex_light_data.h b/modules/vertex_lights_2d/vertex_light_data.h
new file mode 100644
index 000000000..b3fca57ea
--- /dev/null
+++ b/modules/vertex_lights_2d/vertex_light_data.h
@@ -0,0 +1,83 @@
+#ifndef VERTEX_LIGHT_DATA_H
+#define VERTEX_LIGHT_DATA_H
+
+/*************************************************************************/
+/*  vertex_light_data.h                                                  */
+/*************************************************************************/
+/*                         This file is part of:                         */
+/*                          PANDEMONIUM ENGINE                           */
+/*             https://github.com/Relintai/pandemonium_engine            */
+/*************************************************************************/
+/* Copyright (c) 2022-present Péter Magyar.                              */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */
+/*                                                                       */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the       */
+/* "Software"), to deal in the Software without restriction, including   */
+/* without limitation the rights to use, copy, modify, merge, publish,   */
+/* distribute, sublicense, and/or sell copies of the Software, and to    */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions:                                             */
+/*                                                                       */
+/* The above copyright notice and this permission notice shall be        */
+/* included in all copies or substantial portions of the Software.       */
+/*                                                                       */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
+/*************************************************************************/
+
+#include "core/containers/hash_map.h"
+#include "core/containers/rid.h"
+#include "core/containers/vector.h"
+#include "core/math/color.h"
+#include "core/math/vector2i.h"
+
+#include "vertex_lights_2d.h"
+
+class VertexLightMap2D;
+class VertexLightQuadrant2D;
+class VertexLightData2D;
+
+class VertexLightData2D : public RID_Data {
+public:
+	Vector2 position;
+	Color color;
+	VertexLights2D::VertexLight2DMode mode;
+	Vector2i z_range;
+	Vector2i layer_range;
+	int item_cull_mask;
+	
+	VertexLightMap2D *map;
+	VertexLightQuadrant2D *quadrant;
+
+	VertexLightData2D() {
+		item_cull_mask = 1;
+		map = NULL;
+		quadrant = NULL;
+	}
+};
+
+class VertexLightQuadrant2D : public RID_Data {
+public:
+	LocalVector<VertexLightData2D *> lights;
+	
+	VertexLightMap2D *map;
+	
+	VertexLightQuadrant2D() {
+		map = NULL;
+	}
+};
+
+class VertexLightMap2D : public RID_Data {
+public:
+	HashMap<Vector2i, VertexLightQuadrant2D *> quadrants;
+	Vector2i quadrant_size;
+};
+
+#endif
diff --git a/modules/vertex_lights_2d/vertex_lights_2d.cpp b/modules/vertex_lights_2d/vertex_lights_2d.cpp
index 956164f5b..fba721fc7 100644
--- a/modules/vertex_lights_2d/vertex_lights_2d.cpp
+++ b/modules/vertex_lights_2d/vertex_lights_2d.cpp
@@ -31,6 +31,10 @@
 
 #include "vertex_lights_2d.h"
 
+#include "core/config/project_settings.h"
+
+#include "vertex_light_data.h"
+
 /*
 Transform VertexLights2D::get_transform() const {
 	return _transform;
@@ -93,6 +97,9 @@ VertexLights2D::VertexLights2D() {
 	ERR_FAIL_COND(_self);
 
 	_self = this;
+	
+	GLOBAL_DEF("vertex_lights_2d/default_quadrant_size", Vector2i(256, 256));
+	_default_quadrant_size = GLOBAL_GET("vertex_lights_2d/default_quadrant_size");
 }
 
 VertexLights2D::~VertexLights2D() {
diff --git a/modules/vertex_lights_2d/vertex_lights_2d.h b/modules/vertex_lights_2d/vertex_lights_2d.h
index 05bee6926..216f6f362 100644
--- a/modules/vertex_lights_2d/vertex_lights_2d.h
+++ b/modules/vertex_lights_2d/vertex_lights_2d.h
@@ -37,8 +37,12 @@
 #include "core/containers/hash_map.h"
 #include "core/containers/vector.h"
 #include "core/math/color.h"
+#include "core/math/vector2i.h"
+
+class VertexLightMap2D;
+class VertexLightQuadrant2D;
+class VertexLightData2D;
 
-#include "core/math/transform.h"
 
 class VertexLights2D : public Object {
 	GDCLASS(VertexLights2D, Object);
@@ -87,29 +91,10 @@ public:
 protected:
 	static void _bind_methods();
 
-	struct VertexLightData2D {
-		Vector2 position;
-		Color color;
-		VertexLight2DMode mode;
-		Vector2i z_range;
-		Vector2i layer_range;
-		int item_cull_mask;
-
-		VertexLightData2D() {
-			item_cull_mask = 1;
-		}
-	};
-
-	struct VertexLightQuadrant2D {
-		HashMap<RID, VertexLightData2D*> lights;
-		Vector2i size;
-	};
-
-	struct VertexLightMap2D {
-		HashMap<Vector2i, VertexLightQuadrant2D*> quadrants;
-	};
-
-	HashMap<RID, VertexLightMap2D*> _maps;
+	mutable RID_Owner<VertexLightMap2D> map_owner;
+	mutable RID_Owner<VertexLightQuadrant2D> quadrant_owner;
+	mutable RID_Owner<VertexLightData2D> light_data_owner;
+	
 	Vector2i _default_quadrant_size;
 
 	static VertexLights2D *_self;