diff --git a/advtrains/survival_recipes.lua b/advtrains/survival_recipes.lua
new file mode 100644
index 0000000000000000000000000000000000000000..c5823a0edba2c93f4a28c889e839072d76923645
--- /dev/null
+++ b/advtrains/survival_recipes.lua
@@ -0,0 +1,205 @@
+local greens = {"dye:green", "dye:dark_green"}
+
+minetest.register_craft({
+    output = "advtrains_interlocking:tcb_node",
+    recipe = {{"default:mese_crystal_fragment"},
+              {"default:steel_ingot"}}
+    })
+minetest.register_craft({
+    output = "advtrains_interlocking:tcb_node 9",
+    recipe = {{"default:mese_crystal"},
+              {"default:steelblock"}}
+    })
+
+minetest.register_craft({
+    output = "advtrains_line_automation:dtrack_stop_placer",
+    recipe = {{"dye:black"},
+              {"default:mese_crystal_fragment"},
+              {"advtrains:dtrack_placer"}}
+    })
+minetest.register_craft({
+    output = "advtrains_interlocking:dtrack_npr_placer",
+    recipe = {{"advtrains_line_automation:dtrack_stop_placer"}}
+    })
+minetest.register_craft({
+    output = "advtrains_interlocking:dtrack_stop_placer",
+    recipe = {{"advtrains_line_automation:dtrack_npr_placer"}}
+    })
+
+--[[
+-- TODO: fix crash in advtrains before adding recipe
+minetest.register_craft({
+    output = "advtrains:dtrack_atc_placer",
+    recipe = {{"dye:blue"},
+              {"default:mese_crystal_fragment"},
+              {"advtrains:dtrack_placer"}}
+    })
+]]--
+for i,color in ipairs(greens) do
+    minetest.register_craft({
+        output = "advtrains:dtrack_unload_placer",
+        recipe = {{color},
+                  {"default:mese_crystal_fragment"},
+                  {"advtrains:dtrack_placer"}}
+        })
+end
+minetest.register_craft({
+    output = "advtrains:dtrack_load_placer",
+    recipe = {{"dye:red"},
+              {"default:mese_crystal_fragment"},
+              {"advtrains:dtrack_placer"}}
+    })
+minetest.register_craft({
+    output = "advtrains:dtrack_load_placer",
+    recipe = {{"advtrains:dtrack_unload_placer"}}
+    })
+minetest.register_craft({
+    output = "advtrains:dtrack_unload_placer",
+    recipe = {{"advtrains:dtrack_load_placer"}}
+    })
+
+minetest.register_craft({
+    output = "advtrains_luaautomation:dtrack_placer",
+    recipe = {{"dye:blue"},
+              {"mesecons_microcontroller:microcontroller0000"},
+              {"advtrains:dtrack_placer"}}
+    })
+minetest.register_craft({
+    output = "advtrains_luaautomation:oppanel",
+    recipe = {
+        {"default:steel_ingot","dye:blue","default:steel_ingot"},
+        {"default:steel_ingot","mesecons_microcontroller:microcontroller0000","default:steel_ingot"}}
+    })
+
+minetest.register_craft({
+    output = "advtrains:engine_japan",
+    recipe = {{"advtrains:wagon_japan"},
+              {"default:mese"}}
+    })
+minetest.register_craft({
+    output = "advtrains:wagon_japan",
+    recipe = {
+        {"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
+        {"default:steel_ingot","advtrains:subway_wagon","default:steel_ingot"},
+        {"default:steel_ingot","default:steel_ingot","default:steel_ingot"}}
+    })
+
+minetest.register_craft({
+    output = "advtrains:wagon_wood",
+    recipe = {
+        {"default:steel_ingot","","default:steel_ingot"},
+        {"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
+        {"advtrains:wheel","advtrains:wheel","advtrains:wheel"}}
+    })
+minetest.register_craft({
+    output = "advtrains:wagon_tank",
+    recipe = {
+        {"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
+        {"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
+        {"advtrains:wheel","advtrains:wheel","advtrains:wheel"}}
+    })
+
+
+
+minetest.register_craft({
+    output = "advtrains_signals_ks:mast_mast_0",
+    recipe = {{"default:steel_ingot"},
+        {"default:steel_ingot"},
+        {"default:steel_ingot"}}
+    })
+minetest.register_craft({
+    output = "advtrains_signals_ks:hs_danger_0 2",
+    type = "shapeless",
+    recipe = {"advtrains:signal_off", "advtrains:signal_off", "dye:white", "dye:yellow"}
+    })
+minetest.register_craft({
+    output = "advtrains_signals_ks:ra_danger_0 2",
+    type = "shapeless",
+    recipe = {"advtrains:signal_off", "advtrains:signal_off", "dye:white"}
+    })
+
+minetest.register_craft({
+    output = "advtrains:signal_wall_l_off",
+    recipe = {{"advtrains:signal_wall_t_off"}}
+    })
+minetest.register_craft({
+    output = "advtrains:signal_wall_r_off",
+    recipe = {{"advtrains:signal_wall_l_off"}}
+    })
+minetest.register_craft({
+    output = "advtrains:signal_wall_t_off",
+    recipe = {{"advtrains:signal_wall_r_off"}}
+    })
+
+for i,color in ipairs(greens) do
+    minetest.register_craft({
+        output = "advtrains:signal_wall_l_off 2",
+        recipe = {{"default:steel_ingot", "dye:red"},
+            {"", color},
+            {"default:steel_ingot", "default:steel_ingot"}}
+        })
+    minetest.register_craft({
+        output = "advtrains:signal_wall_r_off 2",
+        recipe = {{"dye:red", "default:steel_ingot"},
+            {color, ""},
+            {"default:steel_ingot", "default:steel_ingot"}}
+        })
+    minetest.register_craft({
+        output = "advtrains:signal_wall_t_off 2",
+        recipe = {{"default:steel_ingot", "", "default:steel_ingot"},
+            {"default:steel_ingot", color, "dye:red"}}
+        })
+end
+
+minetest.register_craft({
+    output = "advtrains_signals_ks:sign_8_0 2",
+    type = "shapeless",
+    recipe = {"default:sign_wall_steel", "default:sign_wall_steel", "default:steel_ingot", "dye:white", "dye:black"}
+    })
+minetest.register_craft({
+    output = "advtrains_signals_ks:sign_8_0 2",
+    type = "shapeless",
+    recipe = {"basic_signs:sign_wall_steel_white_black", "default:steel_ingot"}
+    })
+minetest.register_craft({
+    output = "advtrains_signals_ks:sign_8_0 2",
+    recipe = {{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+        {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+        {"dye:black", "default:steel_ingot", "dye:white"}}
+    })
+minetest.register_craft({
+    output = "advtrains_signals_ks:sign_8_0 2",
+    recipe = {{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+        {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+        {"dye:white", "default:steel_ingot", "dye:black"}}
+    })
+
+
+
+for rot = 0, 3 do
+  local pos = function(n)
+    if n == rot then
+      return "dye:white"
+    else
+      return "dye:red"
+    end
+  end
+  minetest.register_craft({
+    output = "advtrains:across_off 2",
+    recipe = {
+        {pos(3), "", pos(2)},
+        {pos(0), "default:mese_crystal_fragment", pos(1)},
+        {"", "default:steel_ingot", ""}}
+    })
+end
+
+
+-- add recipe with normal green for signal
+minetest.register_craft({
+    output = "advtrains:signal_off 2",
+    recipe = {
+        {"", "dye:red", "default:steel_ingot"},
+        {"", "dye:green", "default:steel_ingot"},
+        {"", "", "default:steel_ingot"},
+    }
+})
diff --git a/depends.txt b/depends.txt
index ba37940b4a98713726fa84710d51c474742d726e..8731817e9e3f52d3ddda188b411ae64b9acf87cd 100644
--- a/depends.txt
+++ b/depends.txt
@@ -4,3 +4,6 @@ xpanes
 basic_materials
 mesecons_luacontroller
 moreblocks
+advtrains_interlocking
+advtrains_signals_ks
+advtrains_luaautomation
diff --git a/init.lua b/init.lua
index d99dfdc47b05176b8942115b5e57528801aed11a..2c16f1ca84169dfe373f05ab768896cebb60324e 100644
--- a/init.lua
+++ b/init.lua
@@ -6,6 +6,8 @@ local MP = minetest.get_modpath("kif_custom")
 -- some items don't have recipes. fill them in
 dofile(MP.."/missing_recipes.lua")
 
+-- make some advtrains recipes craftable from survival
+dofile(MP.."/advtrains/survival_recipes.lua")
 -- make trains ignore microblocks and some others
 dofile(MP.."/advtrains/ignore_collisions.lua")