diff --git a/bones.lua b/bones.lua
new file mode 100644
index 0000000000000000000000000000000000000000..142125c70041163b2d151ee2e26fa079bb60d86c
--- /dev/null
+++ b/bones.lua
@@ -0,0 +1,20 @@
+-- bones owner saving workaround
+-- https://github.com/minetest/minetest_game/blob/master/mods/bones/init.lua#L120
+
+local bones_def = minetest.registered_items["bones:bones"]
+assert(bones_def)
+
+local bones_on_timer = bones_def.on_timer
+assert(bones_on_timer)
+assert(type(bones_on_timer) == "function")
+
+minetest.override_item("bones:bones", {
+	on_timer = function(pos, elapsed)
+		-- save owner in separate field
+		local meta = minetest.get_meta(pos)
+		meta:set_string("_owner", meta:get_string("owner"))
+
+		-- call original function
+		bones_on_timer(pos, elapsed)
+	end
+})
diff --git a/init.lua b/init.lua
index f4c249cfde79ed758161fc0495fc7e511e9ac0d5..5f5af2d6645927a5ddf7f893d3bdd44515d629e2 100644
--- a/init.lua
+++ b/init.lua
@@ -17,6 +17,10 @@ dofile(MP.."/privs.lua")
 dofile(MP.."/show_waypoint.lua")
 dofile(MP.."/search.lua")
 
+if minetest.get_modpath("bones") then
+	dofile(MP.."/bones.lua")
+end
+
 
 -- optional mapserver-bridge stuff below
 local http = minetest.request_http_api()
diff --git a/mod.conf b/mod.conf
index 76046d8c6fc71775575559263f7f6f85a65d6f1e..aff3949dc9e937cd255bf6957e19e94a7b6c8178 100644
--- a/mod.conf
+++ b/mod.conf
@@ -1,3 +1,3 @@
 name = mapserver
 description = Mod for the mapserver.
-optional_depends = default, dye, advtrains, minecart, monitoring
+optional_depends = default, dye, advtrains, minecart, monitoring, bones