diff --git a/init.lua b/init.lua
index 5cf906d..1662cf7 100644
--- a/init.lua
+++ b/init.lua
@@ -16,6 +16,9 @@ local S = minetest.get_translator('mtimer')
 mtimer = {
     translator = S,
     dialog = {},
+    config = {
+        manual_gc = minetest.settings:get_bool('mtimer_manual_gc', false)
+    },
     meta = {
         visible = { key = 'mtimer:visible', default = 'true' },
         position = { key = 'mtimer:position', default = 'bl' },
diff --git a/settingtypes.txt b/settingtypes.txt
new file mode 100644
index 0000000..e8b98fa
--- /dev/null
+++ b/settingtypes.txt
@@ -0,0 +1,10 @@
+# Manual Lua garbage collection
+#
+# This setting addresses a bug that reportedly happens
+# on Windows. Lua seems to run out of memory. When this
+# setting is enabled mTimer runs the Lua garbage
+# collector automatically every 10 seconds.
+#
+# If you’re on Windows and your game does not crash
+# simply ignore this setting.
+mtimer_manual_gc (Perform manual Lua garbage collection) bool false
diff --git a/system/register_globalstep.lua b/system/register_globalstep.lua
index 7270769..349ffef 100644
--- a/system/register_globalstep.lua
+++ b/system/register_globalstep.lua
@@ -1,5 +1,6 @@
 local m = mtimer
 local update_timer = m.update_timer
+local manual_gc = m.config.manual_gc
 local connected_players = minetest.get_connected_players
 local timer = 0
 
@@ -17,3 +18,15 @@ minetest.register_globalstep(function(dtime)
 
     timer = 0
 end)
+
+
+-- @see https://gitlab.com/4w/mtimer/issues/7
+if manual_gc == true then
+    local gc_timer = 0
+    minetest.register_globalstep(function(dtime)
+        gc_timer = gc_timer + dtime;
+        if gc_timer < 10 then return end
+        collectgarbage()
+        gc_timer = 0
+    end)
+end
diff --git a/system/update_timer.lua b/system/update_timer.lua
index 9b1d96c..69ac9bb 100644
--- a/system/update_timer.lua
+++ b/system/update_timer.lua
@@ -1,5 +1,6 @@
 local m = mtimer
 
+
 -- Calculate HUD positions and offsets
 --
 -- Based on the given named position a table of positional tables is returned