diff --git a/README.md b/README.md
index 215912f..120cb45 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,8 @@ Ethereal Mapgen mod for Minetest (works on all except v6)
  - Added coloured candles (thanks wRothbard)
  - Rename some biomes to fall inline with default for spawning
  - Make stairs and doors a soft dependency, fix willow recipes (thanks sangeet)
+ - Added 'ethereal.flightpotion_duration' setting, potion also works on 0.4.x clients
+ - Added olive wood fences, gates, mese posts
 
 ### 1.28
 
diff --git a/biomes.lua b/biomes.lua
index 71d8c64..b729e2a 100644
--- a/biomes.lua
+++ b/biomes.lua
@@ -1,9 +1,4 @@
 
--- clear default mapgen biomes, decorations but keep ores
-minetest.clear_registered_biomes()
-minetest.clear_registered_decorations()
---minetest.clear_registered_ores()
-
 local S = ethereal.intllib
 
 
@@ -291,7 +286,7 @@ if ethereal.glacier == 1 then
 	})
 end
 
-if ethereal.tundra and minetest.registered_nodes["default:permafrost"] then
+if ethereal.tundra == 1 and minetest.registered_nodes["default:permafrost"] then
 
 	minetest.register_biome({
 		name = "tundra_highland",
diff --git a/biomes_init.lua b/biomes_init.lua
new file mode 100644
index 0000000..95e5250
--- /dev/null
+++ b/biomes_init.lua
@@ -0,0 +1,91 @@
+
+--[[
+
+	Apologies for any breakages to current biomes or mods, the following code was
+	forced by wsor4035 so that Ethereal would be approved for contentdb inclusion
+
+]]--
+
+
+local old_biomes = {}
+local old_decor = {}
+
+
+-- backup registered biome data
+for key, def in pairs(minetest.registered_biomes) do
+	old_biomes[key] = def
+end
+
+for key, def in pairs(minetest.registered_decorations) do
+	old_decor[key] = def
+end
+
+
+-- clear current biome data
+minetest.clear_registered_biomes()
+minetest.clear_registered_decorations()
+-- minetest.clear_registered_ores()
+
+
+-- create list of default biomes to remove
+local def_biomes = {
+	"rainforest_swamp", "grassland_dunes", "cold_desert", "taiga", "icesheet_ocean",
+	"snowy_grassland_under", "desert", "deciduous_forest", "taiga_ocean", "desert_ocean",
+	"tundra_ocean", "snowy_grassland_ocean", "sandstone_desert", "tundra_under",
+	"coniferous_forest_ocean", "tundra", "sandstone_desert_under", "grassland",
+	"rainforest", "grassland_ocean", "tundra_beach", "rainforest_under", "savanna_under",
+	"icesheet", "savanna_ocean", "tundra_highland", "savanna", "cold_desert_under",
+	"cold_desert_ocean", "desert_under", "taiga_under", "savanna_shore",
+	"sandstone_desert_ocean", "snowy_grassland", "coniferous_forest_under",
+	"deciduous_forest_ocean", "grassland_under", "icesheet_under", "rainforest_ocean",
+	"deciduous_forest_shore", "deciduous_forest_under", "coniferous_forest_dunes",
+	"coniferous_forest"
+}
+
+
+-- only re-register biomes that aren't on the list
+for key, def in pairs(old_biomes) do
+
+	local can_add = true
+
+	for num, bio in pairs(def_biomes) do
+
+		if key == bio then
+			can_add = false
+		end
+	end
+
+	if can_add == true then
+		minetest.register_biome(def)
+	end
+end
+
+
+-- only re-register decorations that don't appear in any of the above biomes
+for key, def in pairs(old_decor) do
+
+	local can_add = true
+
+	if type(def.biomes) == "table" then
+
+		for num, bio in pairs(def.biomes) do
+
+			can_add = true
+
+			for n, b in pairs(def_biomes) do
+
+				if bio == b then
+					can_add = false
+				end
+			end
+		end
+	else
+		if def.biomes == key then
+			can_add = false
+		end
+	end
+
+	if can_add == true then
+		minetest.register_decoration(def)
+	end
+end
diff --git a/compatibility.lua b/compatibility.lua
index 03bb972..da49bec 100644
--- a/compatibility.lua
+++ b/compatibility.lua
@@ -22,7 +22,7 @@ minetest.register_alias("ethereal:strawberry_bush", "ethereal:strawberry_7")
 minetest.register_alias("ethereal:seed_strawberry", "ethereal:strawberry")
 
 for i = 1, 5 do
-	minetest.register_alias("ethereal:wild_onion_"..i, "ethereal:onion_"..i)
+	minetest.register_alias("ethereal:wild_onion_" .. i, "ethereal:onion_" .. i)
 end
 
 minetest.register_alias("ethereal:onion_7", "ethereal:onion_4")
@@ -44,3 +44,8 @@ minetest.register_alias("ethereal:tree_sapling", "default:sapling")
 minetest.register_alias("ethereal:jungle_tree_sapling", "default:junglesapling")
 minetest.register_alias("ethereal:acacia_sapling", "default:acacia_sapling")
 minetest.register_alias("ethereal:pine_tree_sapling", "default:pine_sapling")
+
+-- check if pine bush stem exists, if not create alias
+if not minetest.registered_nodes["default:pine_bush_stem"] then
+	minetest.register_alias("default:pine_bush_stem", "default:wood")
+end
diff --git a/crystal.lua b/crystal.lua
index 0891e3a..4c3cd84 100644
--- a/crystal.lua
+++ b/crystal.lua
@@ -33,6 +33,7 @@ minetest.register_craftitem("ethereal:crystal_ingot", {
 	wield_image = "ethereal_crystal_ingot.png"
 })
 
+-- Check for builtin_item mod and add custom drop code to crystal spikes
 if minetest.get_modpath("builtin_item") then
 
 	minetest.override_item("ethereal:crystal_spike", {
@@ -93,7 +94,7 @@ minetest.register_craft({
 		"default:mese_crystal", "ethereal:crystal_spike",
 		"ethereal:crystal_spike", "default:mese_crystal", "bucket:bucket_water"
 	},
-	replacements = { {"bucket:bucket_water", "bucket:bucket_empty"} }
+	replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}}
 })
 
 -- Crystal Block
@@ -111,15 +112,13 @@ minetest.register_craft({
 	recipe = {
 		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"},
 		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"},
-		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"},
+		{"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}
 	}
 })
 
 minetest.register_craft({
 	output = "ethereal:crystal_ingot 9",
-	recipe = {
-		{"ethereal:crystal_block"},
-	}
+	recipe = {{"ethereal:crystal_block"}}
 })
 
 -- Crystal Sword (Powerful wee beastie)
@@ -167,7 +166,7 @@ minetest.register_tool("ethereal:axe_crystal", {
 				maxlevel = 3
 			}
 		},
-		damage_groups = {fleshy = 7},
+		damage_groups = {fleshy = 7}
 	},
 	groups = {axe = 1},
 	sound = {breaks = "default_tool_breaks"}
@@ -206,7 +205,7 @@ minetest.register_tool("ethereal:pick_crystal", {
 				maxlevel = 3
 			}
 		},
-		damage_groups = {fleshy = 6},
+		damage_groups = {fleshy = 6}
 	},
 	groups = {pickaxe = 1},
 	sound = {breaks = "default_tool_breaks"}
@@ -255,7 +254,7 @@ minetest.register_tool("ethereal:shovel_crystal", {
 				maxlevel = 3
 			}
 		},
-		damage_groups = {fleshy = 4},
+		damage_groups = {fleshy = 4}
 	},
 	groups = {shovel = 1},
 	sound = {breaks = "default_tool_breaks"}
diff --git a/debian/changelog b/debian/changelog
index f04c169..3f507b4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+minetest-mod-ethereal (20210923+git20220425.1.baf098f-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 07 May 2022 12:56:41 -0000
+
 minetest-mod-ethereal (20210923-1) unstable; urgency=medium
 
   * Bump debhelper-compat to level 13.
diff --git a/decor.lua b/decor.lua
index eef6b6a..e7f01e6 100644
--- a/decor.lua
+++ b/decor.lua
@@ -1,58 +1,62 @@
 
 if minetest.registered_nodes["farming:cotton_wild"] then
-minetest.register_decoration({
-	name = "farming:cotton_wild",
-	deco_type = "simple",
-	place_on = {"default:dry_dirt_with_dry_grass"},
-	sidelen = 16,
-	noise_params = {
-		offset = -0.1,
-		scale = 0.1,
-		spread = {x = 50, y = 50, z = 50},
-		seed = 4242,
-		octaves = 3,
-		persist = 0.7
-	},
-	biomes = {"savanna"},
-	y_max = 31000,
-	y_min = 1,
-	decoration = "farming:cotton_wild",
-})
+
+	minetest.register_decoration({
+		name = "farming:cotton_wild",
+		deco_type = "simple",
+		place_on = {"default:dry_dirt_with_dry_grass"},
+		sidelen = 16,
+		noise_params = {
+			offset = -0.1,
+			scale = 0.1,
+			spread = {x = 50, y = 50, z = 50},
+			seed = 4242,
+			octaves = 3,
+			persist = 0.7
+		},
+		biomes = {"savanna"},
+		y_max = 31000,
+		y_min = 1,
+		decoration = "farming:cotton_wild"
+	})
 end
 
 -- water pools in swamp areas if 5.0 detected
 if minetest.registered_nodes["default:permafrost"] then
-minetest.register_decoration({
-	deco_type = "simple",
-	place_on = {"default:dirt_with_grass"},
-	place_offset_y = -1,
-	sidelen = 16,
-	fill_ratio = 0.01,
-	biomes = {"swamp"},
-	y_max = 2,
-	y_min = 1,
-	flags = "force_placement",
-	decoration = "default:water_source",
-	spawn_by = "default:dirt_with_grass",
-	num_spawn_by = 8,
-})
-minetest.register_decoration({
-	deco_type = "simple",
-	place_on = {"default:dirt_with_grass"},
-	place_offset_y = -1,
-	sidelen = 16,
-	fill_ratio = 0.1,
-	biomes = {"swamp"},
-	y_max = 2,
-	y_min = 1,
-	flags = "force_placement",
-	decoration = "default:water_source",
-	spawn_by = {"default:dirt_with_grass", "default:water_source"},
-	num_spawn_by = 8,
-})
+
+	minetest.register_decoration({
+		deco_type = "simple",
+		place_on = {"default:dirt_with_grass"},
+		place_offset_y = -1,
+		sidelen = 16,
+		fill_ratio = 0.01,
+		biomes = {"swamp"},
+		y_max = 2,
+		y_min = 1,
+		flags = "force_placement",
+		decoration = "default:water_source",
+		spawn_by = "default:dirt_with_grass",
+		num_spawn_by = 8
+	})
+
+	minetest.register_decoration({
+		deco_type = "simple",
+		place_on = {"default:dirt_with_grass"},
+		place_offset_y = -1,
+		sidelen = 16,
+		fill_ratio = 0.1,
+		biomes = {"swamp"},
+		y_max = 2,
+		y_min = 1,
+		flags = "force_placement",
+		decoration = "default:water_source",
+		spawn_by = {"default:dirt_with_grass", "default:water_source"},
+		num_spawn_by = 8
+	})
 end
 
 if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then
+
 	minetest.register_decoration({
 		deco_type = "simple",
 		place_on = {"default:dry_dirt_with_dry_grass"},
@@ -70,7 +74,7 @@ if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then
 		y_min = 1,
 		decoration = "default:dry_dirt",
 		place_offset_y = -1,
-		flags = "force_placement",
+		flags = "force_placement"
 	})
 end
 
@@ -94,7 +98,7 @@ local add_node = function(a, b, c, d, e, f, g, h, i, j)
 		decoration = f,
 		height_max = g,
 		spawn_by = h,
-		num_spawn_by = i,
+		num_spawn_by = i
 	})
 end
 
@@ -183,7 +187,7 @@ add_node({"default:desert_sand"}, 0.005, {"desert"}, 1, 100,
 
 -- wild red mushroom
 add_node({"ethereal:mushroom_dirt"}, 0.01, {"mushroom"}, 1, 100,
-	{"flowers:mushroom_fertile_red"}, nil, nil, nil, ethereal.mushroom)
+	{"flowers:mushroom_red"}, nil, nil, nil, ethereal.mushroom)
 
 local list = {
 	{"junglee", {"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, ethereal.junglee},
@@ -197,26 +201,26 @@ local list = {
 -- wild red and brown mushrooms
 for _, row in pairs(list) do
 
-if row[3] == 1 then
-minetest.register_decoration({
-	deco_type = "simple",
-	place_on = row[2],
-	sidelen = 16,
-	noise_params = {
-		offset = 0,
-		scale = 0.009,
-		spread = {x = 200, y = 200, z = 200},
-		seed = 2,
-		octaves = 3,
-		persist = 0.66
-	},
-	biomes = {row[1]},
-	y_min = 1,
-	y_max = 120,
-	decoration = {"flowers:mushroom_brown", "flowers:mushroom_red"}
-})
-end
-
+	if row[3] == 1 then
+
+		minetest.register_decoration({
+			deco_type = "simple",
+			place_on = row[2],
+			sidelen = 16,
+			noise_params = {
+				offset = 0,
+				scale = 0.009,
+				spread = {x = 200, y = 200, z = 200},
+				seed = 2,
+				octaves = 3,
+				persist = 0.66
+			},
+			biomes = {row[1]},
+			y_min = 1,
+			y_max = 120,
+			decoration = {"flowers:mushroom_brown", "flowers:mushroom_red"}
+		})
+	end
 end
 
 -- jungle grass
@@ -273,14 +277,12 @@ add_node({"ethereal:bamboo_dirt"}, 0.35, {"sakura"}, 1, 100,
 -- grass on sand
 if minetest.registered_nodes["default:marram_grass_1"] then
 
-add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:marram_grass_1",
-	"default:marram_grass_2", "default:marram_grass_3"}, nil, nil, nil,
-	ethereal.sandclay)
-
+	add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:marram_grass_1",
+		"default:marram_grass_2", "default:marram_grass_3"}, nil, nil, nil,
+		ethereal.sandclay)
 else
-
-add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:grass_2",
-	"default:grass_3"}, nil, nil, nil, ethereal.sandclay)
+	add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:grass_2",
+		"default:grass_3"}, nil, nil, nil, ethereal.sandclay)
 end
 
 -- ferns
@@ -332,13 +334,14 @@ add_node({"default:dirt_with_grass"}, 0.05, {"grassytwo"}, 1, 100,
 	{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7",
 	"farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4",
 	"farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
-	"farming:cabbage_6", "farming:lettuce_5"}, nil, nil, nil, ethereal.grassytwo)
+	"farming:cabbage_6", "farming:lettuce_5", "farming:sunflower_8"}, nil, nil, nil,
+	ethereal.grassytwo)
 
 add_node({"default:dirt_with_grass"}, 0.05, {"deciduous_forest"}, 1, 100,
 	{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7",
 	"farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4",
 	"farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
-	"farming:beetroot_5"}, nil, nil, nil, ethereal.grassy)
+	"farming:beetroot_5", "farming:sunflower_8"}, nil, nil, nil, ethereal.grassy)
 
 add_node({"default:dirt_with_grass"}, 0.05, {"jumble"}, 1, 100,
 	{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7",
@@ -350,7 +353,8 @@ add_node({"ethereal:prairie_dirt"}, 0.05, {"prairie"}, 1, 100,
 	{"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:parsley_3",
 	"farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4",
 	"farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
-	"farming:pea_5", "farming:beetroot_5"}, nil, nil, nil, ethereal.prairie)
+	"farming:pea_5", "farming:beetroot_5", "farming:sunflower_8"}, nil, nil, nil,
+	ethereal.prairie)
 
 add_node({"ethereal:grove_dirt"}, 0.025, {"mediterranean"}, 1, 100,
 	{"farming:parsley_3"}, nil, nil, nil, ethereal.mediterranean)
@@ -373,7 +377,7 @@ add_node({"default:dirt_with_grass"}, 0.015, {"jumble"}, 1, 1,
 	1, ethereal.jumble)
 
 -- mint
-add_node({"default:dirt_with_grass", "default:dirt_with_coniferous_grass",
+add_node({"default:dirt_with_grass", "default:dirt_with_coniferous_litter",
 	"ethereal:bamboo_dirt"}, 0.003, nil, 1, 75, "farming:mint_4", nil,
 	"group:water", 1, 1)
 
@@ -458,7 +462,7 @@ if minetest.get_modpath("bakedclay") then
 minetest.register_decoration({
 	deco_type = "simple",
 	place_on = {
-		"ethereal:prairie_grass", "default:dirt_with_grass",
+		"ethereal:prairie_dirt", "default:dirt_with_grass",
 		"ethereal:grove_dirt"
 	},
 	sidelen = 16,
@@ -478,7 +482,7 @@ minetest.register_decoration({
 minetest.register_decoration({
 	deco_type = "simple",
 	place_on = {
-		"ethereal:prairie_grass", "default:dirt_with_grass",
+		"ethereal:prairie_dirt", "default:dirt_with_grass",
 		"ethereal:grove_dirt", "ethereal:bamboo_dirt"
 	},
 	sidelen = 16,
@@ -535,47 +539,50 @@ minetest.register_decoration({
 end
 
 
-if ethereal.desert and minetest.get_modpath("wine") then
-minetest.register_decoration({
-	deco_type = "simple",
-	place_on = {"default:desert_sand"},
-	sidelen = 16,
-	fill_ratio = 0.001,
-	biomes = {"desert"},
-	decoration = {"wine:blue_agave"}
-})
-end
-
+if ethereal.desert == 1 and minetest.get_modpath("wine") then
 
-if ethereal.snowy and minetest.registered_nodes["default:fern_1"] then
-local function register_fern_decoration(seed, length)
 	minetest.register_decoration({
-		name = "default:fern_" .. length,
 		deco_type = "simple",
-		place_on = {
-			"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
+		place_on = {"default:desert_sand"},
 		sidelen = 16,
-		noise_params = {
-			offset = 0,
-			scale = 0.2,
-			spread = {x = 100, y = 100, z = 100},
-			seed = seed,
-			octaves = 3,
-			persist = 0.7
-		},
-		y_max = 31000,
-		y_min = 6,
-		decoration = "default:fern_" .. length
+		fill_ratio = 0.001,
+		biomes = {"desert"},
+		decoration = {"wine:blue_agave"}
 	})
 end
 
-register_fern_decoration(14936, 3)
-register_fern_decoration(801, 2)
-register_fern_decoration(5, 1)
+
+if ethereal.snowy == 1 and minetest.registered_nodes["default:fern_1"] then
+
+	local function register_fern_decoration(seed, length)
+
+		minetest.register_decoration({
+			name = "default:fern_" .. length,
+			deco_type = "simple",
+			place_on = {
+				"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
+			sidelen = 16,
+			noise_params = {
+				offset = 0,
+				scale = 0.2,
+				spread = {x = 100, y = 100, z = 100},
+				seed = seed,
+				octaves = 3,
+				persist = 0.7
+			},
+			y_max = 31000,
+			y_min = 6,
+			decoration = "default:fern_" .. length
+		})
+	end
+
+	register_fern_decoration(14936, 3)
+	register_fern_decoration(801, 2)
+	register_fern_decoration(5, 1)
 end
 
 
-if ethereal.tundra and minetest.registered_nodes["default:permafrost"] then
+if ethereal.tundra == 1 and minetest.registered_nodes["default:permafrost"] then
 
 	-- Tundra moss
 
@@ -627,28 +634,30 @@ end
 
 
 if minetest.get_modpath("butterflies") then
-minetest.register_decoration({
-	name = "butterflies:butterfly",
-	deco_type = "simple",
-	place_on = {"default:dirt_with_grass", "ethereal:prairie_dirt"},
-	place_offset_y = 2,
-	sidelen = 80,
-	fill_ratio = 0.005,
-	biomes = {"deciduous_forest", "grassytwo", "prairie", "jumble"},
-	y_max = 31000,
-	y_min = 1,
-	decoration = {
-		"butterflies:butterfly_white",
-		"butterflies:butterfly_red",
-		"butterflies:butterfly_violet"
-	},
-	spawn_by = "group:flower",
-	num_spawn_by = 1
-})
+
+	minetest.register_decoration({
+		name = "butterflies:butterfly",
+		deco_type = "simple",
+		place_on = {"default:dirt_with_grass", "ethereal:prairie_dirt"},
+		place_offset_y = 2,
+		sidelen = 80,
+		fill_ratio = 0.005,
+		biomes = {"deciduous_forest", "grassytwo", "prairie", "jumble"},
+		y_max = 31000,
+		y_min = 1,
+		decoration = {
+			"butterflies:butterfly_white",
+			"butterflies:butterfly_red",
+			"butterflies:butterfly_violet"
+		},
+		spawn_by = "group:flower",
+		num_spawn_by = 1
+	})
 end
 
 
 if minetest.get_modpath("fireflies") then
+
 	minetest.register_decoration({
 		name = "fireflies:firefly_low",
 		deco_type = "simple",
@@ -673,6 +682,7 @@ end
 
 -- Coral Reef (Minetest 5.0)
 if minetest.registered_nodes["default:coral_green"] then
+
 	minetest.register_decoration({
 		name = "default:corals",
 		deco_type = "simple",
@@ -687,11 +697,7 @@ if minetest.registered_nodes["default:coral_green"] then
 			octaves = 3,
 			persist = 0.7,
 		},
-		biomes = {
-			"desert_ocean",
-			"savanna_ocean",
-			"junglee_ocean",
-		},
+		biomes = {"desert_ocean", "savanna_ocean", "junglee_ocean"},
 		y_max = -2,
 		y_min = -8,
 		flags = "force_placement",
diff --git a/dirt.lua b/dirt.lua
index 1bbd272..6bd4697 100644
--- a/dirt.lua
+++ b/dirt.lua
@@ -55,7 +55,6 @@ for n = 1, #dirts do
 			footstep = {name = "default_grass_footstep", gain = 0.25},
 		}),
 	})
-
 end
 
 
@@ -76,8 +75,7 @@ local flower_spread = function(pos, node)
 		return
 	end
 
-	if num > 3
-	and node.name == "ethereal:crystalgrass" then
+	if num > 3 and node.name == "ethereal:crystalgrass" then
 
 		local grass = minetest.find_nodes_in_area_under_air(
 			pos0, pos1, {"ethereal:crystalgrass"})
@@ -99,8 +97,7 @@ local flower_spread = function(pos, node)
 
 		return
 
-	elseif num > 3
-	and node.name == "ethereal:dry_shrub" then
+	elseif num > 3 and node.name == "ethereal:dry_shrub" then
 
 		local grass = minetest.find_nodes_in_area_under_air(
 			pos0, pos1, {"ethereal:dry_shrub"})
@@ -261,7 +258,6 @@ if not minetest.get_modpath("bakedclay") then
 		is_ground_content = ethereal.cavedirt,
 		sounds = default.node_sound_stone_defaults()
 	})
-
 end
 
 -- Quicksand (old style, sinking inside shows black instead of yellow effect,
diff --git a/extra.lua b/extra.lua
index 70f10a3..fee39e1 100644
--- a/extra.lua
+++ b/extra.lua
@@ -139,44 +139,6 @@ minetest.register_craft({
 	recipe = "ethereal:palmleaves"
 })
 
--- Candle from Wax and String/Cotton
-minetest.register_node("ethereal:candle", {
-	description = S("Candle"),
-	drawtype = "plantlike",
-	inventory_image = "ethereal_candle_static.png",
-	wield_image = "ethereal_candle_static.png",
-	tiles = {
-		{
-			name = "ethereal_candle.png",
-			animation = {
-				type="vertical_frames",
-				aspect_w = 32,
-				aspect_h = 32,
-				length = 1.0
-			}
-		}
-	},
-	paramtype = "light",
-	light_source = 11,
-	sunlight_propagates = true,
-	walkable = false,
-	groups = {dig_immediate = 3, attached_node = 1},
-	sounds = default.node_sound_defaults(),
-	selection_box = {
-		type = "fixed",
-		fixed = { -0.15, -0.5, -0.15, 0.15, 0, 0.15 }
-	}
-})
-
--- candle recipe
-minetest.register_craft({
-	output = "ethereal:candle 2",
-	recipe = {
-		{"farming:string"},
-		{"ethereal:palm_wax"},
-		{"ethereal:palm_wax"}
-	}
-})
 
 local function add_candle(col, dcol)
 
@@ -207,7 +169,7 @@ minetest.register_node("ethereal:candle" .. col, {
 	light_source = 11,
 	sunlight_propagates = true,
 	walkable = false,
-	groups = {dig_immediate = 3, attached_node = 1},
+	groups = {candle = 1, dig_immediate = 3, attached_node = 1},
 	sounds = default.node_sound_defaults(),
 	selection_box = {
 		type = "fixed",
@@ -219,7 +181,7 @@ minetest.register_node("ethereal:candle" .. col, {
 		minetest.register_craft({
 			output = "ethereal:candle" .. col,
 			recipe = {
-				{"ethereal:candle", "dye:" .. rcol},
+				{"group:candle", "dye:" .. rcol},
 			}
 		})
 	end
@@ -241,6 +203,23 @@ add_candle("red", "Red ")
 add_candle("violet", "Violet ")
 add_candle("yellow", "Yellow ")
 
+-- white candle recipe
+minetest.register_craft({
+	output = "ethereal:candle",
+	recipe = {
+		{"group:candle", "dye:white"}
+	}
+})
+
+-- candle recipe
+minetest.register_craft({
+	output = "ethereal:candle 2",
+	recipe = {
+		{"farming:string"},
+		{"ethereal:palm_wax"},
+		{"ethereal:palm_wax"}
+	}
+})
 
 -- Wooden Bowl
 minetest.register_craftitem("ethereal:bowl", {
@@ -296,7 +275,7 @@ minetest.register_node("ethereal:paper_wall", {
 	drawtype = "nodebox",
 	description = S("Paper Wall"),
 	tiles = {"ethereal_paper_wall.png"},
-	inventory_image_image = "ethereal_paper_wall.png",
+	inventory_image = "ethereal_paper_wall.png",
 	wield_image = "ethereal_paper_wall.png",
 	paramtype = "light",
 	groups = {snappy = 3},
@@ -307,12 +286,12 @@ minetest.register_node("ethereal:paper_wall", {
 	paramtype2 = "facedir",
 	selection_box = {
 		type = "fixed",
-		fixed = { -0.5, -0.5, 5/11, 0.5, 0.5, 8/16 }
+		fixed = {-0.5, -0.5, 5/11, 0.5, 0.5, 8/16}
 	},
 	node_box = {
 		type = "fixed",
 		fixed = {
-			{ -0.5, -0.5, 5/11, 0.5, 0.5, 8/16 }
+			{-0.5, -0.5, 5/11, 0.5, 0.5, 8/16}
 		}
 	}
 })
diff --git a/fences.lua b/fences.lua
index bb00a8d..2d624b4 100644
--- a/fences.lua
+++ b/fences.lua
@@ -60,6 +60,7 @@ add_fence("banana", "banana_wood", "Banana Wood", "ethereal_banana_wood")
 add_fence("mushroom", "mushroom_trunk", "Mushroom", "ethereal_mushroom_trunk")
 add_fence("birch", "birch_wood", "Birch", "moretrees_birch_wood")
 add_fence("sakura", "sakura_wood", "Sakura", "ethereal_sakura_wood")
+add_fence("olive", "olive_wood", "Olive", "ethereal_olive_wood")
 
 
 -- add compatibility for ethereal's to default wooden gates
diff --git a/flight.lua b/flight.lua
index 4173026..de4dbab 100644
--- a/flight.lua
+++ b/flight.lua
@@ -1,11 +1,14 @@
+local flight_secs = minetest.settings:get("ethereal.flightpotion_duration") or (5 * 60)
 local timer_check = 5 -- seconds per check
-local flight_secs = 5 * 60 -- seconds of flight
 local S = ethereal.intllib
+local is_50 = minetest.has_feature("object_use_texture_alpha")
 
 
 -- disable flight
 local function set_flight(user, set)
 
+	if not user then return end
+
 	local name = user:get_player_name()
 	local privs = minetest.get_player_privs(name)
 
@@ -16,9 +19,13 @@ local function set_flight(user, set)
 	-- when 'fly' removed set timer to temp value for checks
 	if not set then
 
-		local meta = user:get_meta() ; if not meta then return end
+		if is_50 then
+			local meta = user:get_meta() ; if not meta then return end
 
-		meta:set_string("ethereal:fly_timer", "-99")
+			meta:set_string("ethereal:fly_timer", "-99")
+		else
+			user:set_attribute("ethereal:fly_timer", "-99")
+		end
 	end
 end
 
@@ -26,8 +33,18 @@ end
 -- after function
 local function ethereal_set_flight(user)
 
-	local meta = user:get_meta() ; if not meta then return end
-	local timer = tonumber(meta:get_string("ethereal:fly_timer"))
+	if not user then return end
+
+	local timer, meta
+
+	if is_50 then
+
+		meta = user:get_meta() ; if not meta then return end
+
+		timer = tonumber(meta:get_string("ethereal:fly_timer") or "") or 0
+	else
+		timer = tonumber(user:get_attribute("ethereal:fly_timer") or "") or 0
+	end
 
 	if not timer then return end -- nil check
 
@@ -62,7 +79,11 @@ local function ethereal_set_flight(user)
 	end
 
 	-- store new timer setting
-	meta:set_string("ethereal:fly_timer", timer)
+	if is_50 then
+		meta:set_string("ethereal:fly_timer", timer)
+	else
+		user:set_attribute("ethereal:fly_timer", timer)
+	end
 
 	minetest.after(timer_check, function()
 		ethereal_set_flight(user)
@@ -73,10 +94,27 @@ end
 -- on join / leave
 minetest.register_on_joinplayer(function(player)
 
-	local meta = player:get_meta() ; if not meta then return end
-	local timer = tonumber(meta:get_string("ethereal:fly_timer"))
+	if not player then return end
+
+	local timer, meta
+
+	if is_50 then
+
+		meta = player:get_meta() ; if not meta then return end
+		timer = meta:get_string("ethereal:fly_timer") or ""
+	else
+		timer = player:get_attribute("ethereal:fly_timer") or ""
+	end
+
+	-- first run to set fly timer if no number found
+	if timer == "" then
+		ethereal_set_flight(player)
+		return
+	end
+
+	timer = tonumber(timer) or 0
 
-	if timer and timer == -99 then
+	if timer == -99 then
 		return
 	end
 
@@ -113,8 +151,15 @@ minetest.register_node("ethereal:flight_potion", {
 		-- get privs
 		local name = user:get_player_name()
 		local privs = minetest.get_player_privs(name)
-		local meta = user:get_meta()
-		local timer = meta:get_string("ethereal:fly_timer")
+		local timer, meta
+
+		if is_50 then
+
+			meta = user:get_meta() ; if not meta then return end
+			timer = meta:get_string("ethereal:fly_timer") or ""
+		else
+			timer = user:get_attribute("ethereal:fly_timer") or ""
+		end
 
 		if privs.fly then
 
@@ -131,9 +176,11 @@ minetest.register_node("ethereal:flight_potion", {
 			return
 		end
 
-		if not meta then return end
-
-		meta:set_string("ethereal:fly_timer", flight_secs)
+		if is_50 then
+			meta:set_string("ethereal:fly_timer", flight_secs)
+		else
+			user:set_attribute("ethereal:fly_timer", flight_secs)
+		end
 
 		minetest.chat_send_player(name,
 				minetest.get_color_escape_sequence("#1eff00")
diff --git a/food.lua b/food.lua
index c373c99..c2b8011 100644
--- a/food.lua
+++ b/food.lua
@@ -59,15 +59,13 @@ minetest.register_node("ethereal:banana_bunch", {
 
 -- Bunch to Single
 minetest.register_craft({
-	type = "shapeless",
 	output = "ethereal:banana 3",
-	recipe = {"ethereal:banana_bunch"}
+	recipe = {{"ethereal:banana_bunch"}}
 })
 
 minetest.register_craft({
-	type = "shapeless",
 	output = "ethereal:banana_bunch",
-	recipe = {"ethereal:banana", "ethereal:banana", "ethereal:banana"}
+	recipe = {{"ethereal:banana", "ethereal:banana", "ethereal:banana"}}
 })
 
 -- Banana Dough
@@ -77,9 +75,8 @@ minetest.register_craftitem("ethereal:banana_dough", {
 })
 
 minetest.register_craft({
-	type = "shapeless",
 	output = "ethereal:banana_dough",
-	recipe = {"group:food_flour", "group:food_banana"}
+	recipe = {{"group:food_flour", "group:food_banana"}}
 })
 
 minetest.register_craft({
@@ -193,7 +190,6 @@ minetest.register_node("ethereal:golden_apple", {
 		leafdecay = 3,leafdecay_drop = 1
 	},
 	drop = "ethereal:golden_apple",
---	on_use = minetest.item_eat(20),
 	on_use = function(itemstack, user, pointed_thing)
 		if user then
 			user:set_hp(20)
@@ -249,9 +245,7 @@ minetest.register_craftitem("ethereal:bucket_cactus", {
 
 minetest.register_craft({
 	output = "ethereal:bucket_cactus",
-	recipe = {
-		{"bucket:bucket_empty","default:cactus"},
-	}
+	recipe = {{"bucket:bucket_empty","default:cactus"}}
 })
 
 
@@ -267,7 +261,6 @@ minetest.register_craftitem("ethereal:firethorn_jelly", {
 if minetest.registered_items["farming:bowl"] then
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "ethereal:firethorn_jelly",
 	recipe = {
 		{"farming:mortar_pestle","vessels:glass_bottle", ""},
@@ -320,7 +313,6 @@ minetest.register_craftitem("ethereal:candied_lemon", {
 })
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "ethereal:candied_lemon",
 	recipe = {
 		{"farming:baking_tray", "ethereal:lemon", "group:food_sugar"}
@@ -349,7 +341,6 @@ minetest.register_node("ethereal:lemonade", {
 })
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "ethereal:lemonade",
 	recipe = {
 		{"ethereal:lemon", "group:food_sugar", "group:food_sugar"},
@@ -398,7 +389,6 @@ minetest.register_craftitem("ethereal:olive_oil", {
 })
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "ethereal:olive_oil",
 	recipe = {
 		{"ethereal:olive", "ethereal:olive", "ethereal:olive"},
@@ -469,7 +459,6 @@ minetest.register_craftitem("ethereal:fugu", {
 
 minetest.register_craft({
 	output = "ethereal:fugu",
---	type = "shapeless",
 	recipe = {
 		{"group:food_cutting_board", "ethereal:fish_pufferfish", "group:food_soy_sauce"}
 	},
@@ -487,7 +476,6 @@ minetest.register_craftitem("ethereal:teriyaki_chicken", {
 })
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "ethereal:teriyaki_chicken 2",
 	recipe = {
 		{"group:food_chicken_raw", "group:food_sugar", "group:food_soy_sauce"},
@@ -507,7 +495,6 @@ minetest.register_craftitem("ethereal:teriyaki_beef", {
 })
 
 minetest.register_craft({
---	type = "shapeless",
 	output = "ethereal:teriyaki_beef",
 	recipe = {
 		{"group:food_meat_raw", "group:food_sugar", "group:food_soy_sauce"},
diff --git a/init.lua b/init.lua
index eb4f2b7..1fea26a 100644
--- a/init.lua
+++ b/init.lua
@@ -1,60 +1,79 @@
 --[[
-
 	Minetest Ethereal Mod
 
 	Created by ChinChow
 
 	Updated by TenPlus1
-
 ]]
 
- -- DO NOT change settings below, use the settings.conf file instead
-ethereal = {
-
-	version = "20210614",
-	leaftype = minetest.settings:get('ethereal.leaftype') or 0,
-	leafwalk = minetest.settings:get_bool('ethereal.leafwalk', false),
-	cavedirt = minetest.settings:get_bool('ethereal.cavedirt', true),
-	torchdrop = minetest.settings:get_bool('ethereal.torchdrop', true),
-	papyruswalk = minetest.settings:get_bool('ethereal.papyruswalk', true),
-	lilywalk = minetest.settings:get_bool('ethereal.lilywalk', true),
-	xcraft = minetest.settings:get_bool('ethereal.xcraft', true),
-	flight = minetest.settings:get_bool('ethereal.flight', true),
-
-	glacier = minetest.settings:get('ethereal.glacier') or 1,
-	bamboo = minetest.settings:get('ethereal.bamboo') or 1,
-	mesa = minetest.settings:get('ethereal.mesa') or 1,
-	alpine = minetest.settings:get('ethereal.alpine') or 1,
-	healing = minetest.settings:get('ethereal.healing') or 1,
-	snowy = minetest.settings:get('ethereal.snowy') or 1,
-	frost = minetest.settings:get('ethereal.frost') or 1,
-	grassy = minetest.settings:get('ethereal.grassy') or 1,
-	caves = minetest.settings:get('ethereal.caves') or 1,
-	grayness = minetest.settings:get('ethereal.grayness') or 1,
-	grassytwo = minetest.settings:get('ethereal.grassytwo') or 1,
-	prairie = minetest.settings:get('ethereal.prairie') or 1,
-	jumble = minetest.settings:get('ethereal.jumble') or 1,
-	junglee = minetest.settings:get('ethereal.junglee') or 1,
-	desert = minetest.settings:get('ethereal.desert') or 1,
-	grove = minetest.settings:get('ethereal.grove') or 1,
-	mushroom = minetest.settings:get('ethereal.mushroom') or 1,
-	sandstone = minetest.settings:get('ethereal.sandstone') or 1,
-	quicksand = minetest.settings:get('ethereal.quicksand') or 1,
-	plains = minetest.settings:get('ethereal.plains') or 1,
-	savanna = minetest.settings:get('ethereal.savanna') or 1,
-	fiery = minetest.settings:get('ethereal.fiery') or 1,
-	sandclay = minetest.settings:get('ethereal.sandclay') or 1,
-	swamp = minetest.settings:get('ethereal.swamp') or 1,
-	sealife = minetest.settings:get('ethereal.sealife') or 1,
-	reefs = minetest.settings:get('ethereal.reefs') or 1,
-	sakura = minetest.settings:get('ethereal.sakura') or 1,
-	tundra = minetest.settings:get('ethereal.tundra') or 1,
-	mediterranean = minetest.settings:get('ethereal.mediterranean') or 1
-}
+
+ethereal = {version = "20220424"}
+
+
+local function setting(stype, name, default)
+
+	local value
+
+	if stype == "bool" then
+		value = minetest.settings:get_bool("ethereal." .. name)
+	elseif stype == "string" then
+		value = minetest.settings:get("ethereal." .. name)
+	elseif stype == "number" then
+		value = tonumber(minetest.settings:get("ethereal." .. name))
+	end
+
+	if value == nil then
+		value = default
+	end
+
+	ethereal[name] = value
+end
+
+
+-- DO NOT change settings below, use the settings.conf file instead
+
+setting("number", "leaftype", 0)
+setting("bool", "leafwalk", false)
+setting("bool", "cavedirt", true)
+setting("bool", "torchdrop", true)
+setting("bool", "papyruswalk", true)
+setting("bool", "lilywalk", true)
+setting("bool", "xcraft", true)
+setting("bool", "flight", true)
+setting("number", "glacier", 1)
+setting("number", "bamboo", 1)
+setting("number", "mesa", 1)
+setting("number", "alpine", 1)
+setting("number", "healing", 1)
+setting("number", "snowy", 1)
+setting("number", "frost", 1)
+setting("number", "grassy", 1)
+setting("number", "caves", 1)
+setting("number", "grayness", 1)
+setting("number", "grassytwo", 1)
+setting("number", "prairie", 1)
+setting("number", "jumble", 1)
+setting("number", "junglee", 1)
+setting("number", "desert", 1)
+setting("number", "grove", 1)
+setting("number", "mushroom", 1)
+setting("number", "sandstone", 1)
+setting("number", "quicksand", 1)
+setting("number", "plains", 1)
+setting("number", "savanna", 1)
+setting("number", "fiery", 1)
+setting("number", "sandclay", 1)
+setting("number", "swamp", 1)
+setting("number", "sealife", 1)
+setting("number", "reefs", 1)
+setting("number", "sakura", 1)
+setting("number", "tundra", 1)
+setting("number", "mediterranean", 1)
+
 
 local path = minetest.get_modpath("ethereal")
 
--- Load new settings if found
+-- Load settings.conf file if found
 local input = io.open(path.."/settings.conf", "r")
 if input then
 	dofile(path .. "/settings.conf")
@@ -101,6 +120,7 @@ dofile(path .. "/fishing.lua")
 dofile(path .. "/extra.lua")
 dofile(path .. "/sealife.lua")
 dofile(path .. "/fences.lua")
+dofile(path .. "/biomes_init.lua")
 dofile(path .. "/biomes.lua")
 dofile(path .. "/ores.lua")
 dofile(path .. "/schems.lua")
@@ -126,4 +146,4 @@ if minetest.get_modpath("xanadu") then
 	dofile(path .. "/plantpack.lua")
 end
 
-print (S("[MOD] Ethereal loaded"))
+print ("[MOD] Ethereal loaded")
diff --git a/leaves.lua b/leaves.lua
index e3e6de2..a75e37d 100644
--- a/leaves.lua
+++ b/leaves.lua
@@ -16,7 +16,7 @@ minetest.override_item("default:leaves", {
 	visual_scale = leafscale,
 	inventory_image = "default_leaves.png",
 	wield_image = "default_leaves.png",
-	walkable = ethereal.leafwalk,
+	walkable = ethereal.leafwalk
 })
 
 -- ability to craft big tree sapling
@@ -31,7 +31,7 @@ minetest.override_item("default:jungleleaves", {
 	visual_scale = leafscale,
 	inventory_image = "default_jungleleaves.png",
 	wield_image = "default_jungleleaves.png",
-	walkable = ethereal.leafwalk,
+	walkable = ethereal.leafwalk
 })
 
 -- default pine tree leaves
@@ -48,7 +48,7 @@ minetest.override_item("default:pine_needles", {
 			{items = {"ethereal:pine_nuts"}, rarity = 5},
 			{items = {"default:pine_needles"}}
 		}
-	},
+	}
 })
 
 -- default acacia tree leaves
@@ -57,7 +57,7 @@ minetest.override_item("default:acacia_leaves", {
 	inventory_image = "default_acacia_leaves.png",
 	wield_image = "default_acacia_leaves.png",
 	visual_scale = leafscale,
-	walkable = ethereal.leafwalk,
+	walkable = ethereal.leafwalk
 })
 
 -- default aspen tree leaves
@@ -66,7 +66,7 @@ minetest.override_item("default:aspen_leaves", {
 	inventory_image = "default_aspen_leaves.png",
 	wield_image = "default_aspen_leaves.png",
 	visual_scale = leafscale,
-	walkable = ethereal.leafwalk,
+	walkable = ethereal.leafwalk
 })
 
 -- willow twig
diff --git a/onion.lua b/onion.lua
index 2d0c0e5..83bf730 100644
--- a/onion.lua
+++ b/onion.lua
@@ -10,7 +10,7 @@ minetest.register_craftitem("ethereal:wild_onion_plant", {
 	on_place = function(itemstack, placer, pointed_thing)
 		return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:wild_onion_1")
 	end,
-	on_use = minetest.item_eat(2),
+	on_use = minetest.item_eat(2)
 })
 
 -- Define Onion growth stages
@@ -65,40 +65,55 @@ crop_def.drop = {
 }
 minetest.register_node("ethereal:onion_5", table.copy(crop_def))
 
+
 -- growing routine if farming redo isn't present
-if not farming or not farming.mod or farming.mod ~= "redo" then
-
-minetest.register_abm({
-	label = "Ethereal grow onion",
-	nodenames = {"ethereal:onion_1", "ethereal:onion_2", "ethereal:onion_3", "ethereal:onion_4"},
-	neighbors = {"farming:soil_wet"},
-	interval = 11,
-	chance = 20,
-	catch_up = false,
-	action = function(pos, node)
-
-		-- are we on wet soil?
-		pos.y = pos.y - 1
-		if minetest.get_item_group(minetest.get_node(pos).name, "soil") < 3 then
-			return
-		end
-		pos.y = pos.y + 1
+if farming and farming.mod and farming.mod == "redo" then
+
+	-- add to registered_plants
+	farming.registered_plants["ethereal:wild_onion_plant"] = {
+		crop = "ethereal:onion",
+		seed = "ethereal:wild_onion_plant",
+		minlight = farming.min_light,
+		maxlight = farming.max_light,
+		steps = 5
+	}
 
-		-- do we have enough light?
-		local light = minetest.get_node_light(pos)
+else
 
-		if not light
-		or light < 13 then
-			return
-		end
+	minetest.register_abm({
+		label = "Ethereal grow onion",
+		nodenames = {
+			"ethereal:onion_1", "ethereal:onion_2", "ethereal:onion_3",
+			"ethereal:onion_4"
+		},
+		neighbors = {"farming:soil_wet"},
+		interval = 11,
+		chance = 20,
+		catch_up = false,
+		action = function(pos, node)
 
-		-- grow to next stage
-		local num = node.name:split("_")[2]
+			-- are we on wet soil?
+			pos.y = pos.y - 1
 
-		node.name = "ethereal:onion_" .. tonumber(num + 1)
+			if minetest.get_item_group(minetest.get_node(pos).name, "soil") < 3 then
+				return
+			end
 
-		minetest.swap_node(pos, node)
-	end
-})
+			pos.y = pos.y + 1
 
-end -- END IF
+			-- do we have enough light?
+			local light = minetest.get_node_light(pos)
+
+			if not light or light < 13 then
+				return
+			end
+
+			-- grow to next stage
+			local num = node.name:split("_")[2]
+
+			node.name = "ethereal:onion_" .. tonumber(num + 1)
+
+			minetest.swap_node(pos, node)
+		end
+	})
+end
diff --git a/plantlife.lua b/plantlife.lua
index 975d28d..0fdbdb5 100644
--- a/plantlife.lua
+++ b/plantlife.lua
@@ -64,9 +64,7 @@ minetest.register_craftitem("ethereal:fire_dust", {
 
 minetest.register_craft({
 	output = "ethereal:fire_dust 2",
-	recipe = {
-		{"ethereal:fire_flower"}
-	}
+	recipe = {{"ethereal:fire_flower"}}
 })
 
 minetest.register_craft({
diff --git a/plantpack.lua b/plantpack.lua
index c15c4ca..b286cde 100644
--- a/plantpack.lua
+++ b/plantpack.lua
@@ -48,7 +48,7 @@ minetest.register_decoration({
 minetest.register_decoration({
 	deco_type = "simple",
 	place_on = {
-		"ethereal:prairie_grass", "default:dirt_with_grass",
+		"ethereal:prairie_dirt", "default:dirt_with_grass",
 		"ethereal:grove_dirt", "ethereal:bamboo_dirt"
 	},
 	sidelen = 16,
@@ -63,7 +63,7 @@ minetest.register_decoration({
 minetest.register_decoration({
 	deco_type = "simple",
 	place_on = {
-		"ethereal:prairie_grass", "default:dirt_with_grass",
+		"ethereal:prairie_dirt", "default:dirt_with_grass",
 		"ethereal:grove_dirt"
 	},
 	sidelen = 16,
@@ -79,7 +79,7 @@ minetest.register_decoration({
 minetest.register_decoration({
 	deco_type = "simple",
 	place_on = {
-		"ethereal:prairie_grass", "default:dirt_with_grass",
+		"ethereal:prairie_dirt", "default:dirt_with_grass",
 		"ethereal:grove_dirt", "ethereal:jungle_grass",
 		"ethereal:gray_dirt", "default:dirt_with_rainforest_litter"
 	},
diff --git a/sapling.lua b/sapling.lua
index c78c00c..9035d4b 100644
--- a/sapling.lua
+++ b/sapling.lua
@@ -138,6 +138,7 @@ function ethereal.grow_birch_tree(pos)
 end
 
 function ethereal.grow_sakura_tree(pos)
+
 	if math.random(10) == 1 then
 		add_tree(pos, 4, 0, 3, ethereal.sakura_tree,
 			{{"ethereal:sakura_leaves", "ethereal:sakura_leaves2"}})
diff --git a/schematics/waterlily.lua b/schematics/waterlily.lua
index 0373a88..31e4875 100644
--- a/schematics/waterlily.lua
+++ b/schematics/waterlily.lua
@@ -15,6 +15,13 @@ ethereal.waterlily = {
 if ethereal.lilywalk == true then
 
 	minetest.override_item("flowers:waterlily", {
-		walkable = true,
+		walkable = true
 	})
+
+	if minetest.registered_nodes["flowers:waterlily_waving"] then
+
+		minetest.override_item("flowers:waterlily_waving", {
+			walkable = true
+		})
+	end
 end
diff --git a/schems.lua b/schems.lua
index 6092fc2..f918c8e 100644
--- a/schems.lua
+++ b/schems.lua
@@ -57,7 +57,7 @@ add_schem("default:snowblock", 0.0005, {"glacier"}, 3, 50,
 	ethereal.igloo, ethereal.glacier, nil, "default:snowblock", 8, "random")
 
 -- sakura tree
-add_schem({"ethereal:bamboo_dirt"}, 0.01, {"sakura"}, 7, 100,
+add_schem({"ethereal:bamboo_dirt"}, 0.001, {"sakura"}, 7, 100,
 	ethereal.sakura_tree, ethereal.sakura, nil,
 	"ethereal:bamboo_dirt", 6)
 
@@ -163,25 +163,25 @@ add_schem({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 5, 35,
 
 -- default large cactus
 if ethereal.desert == 1 then
-minetest.register_decoration({
-	deco_type = "schematic",
-	place_on = {"default:desert_sand"},
-	sidelen = 80,
-	noise_params = {
-		offset = -0.0005,
-		scale = 0.0015,
-		spread = {x = 200, y = 200, z = 200},
-		seed = 230,
-		octaves = 3,
-		persist = 0.6
-	},
-	biomes = {"desert"},
-	y_min = 5,
-	y_max = 31000,
-	schematic = dpath .. "large_cactus.mts",
-	flags = "place_center_x",
-	rotation = "random",
-})
+	minetest.register_decoration({
+		deco_type = "schematic",
+		place_on = {"default:desert_sand"},
+		sidelen = 80,
+		noise_params = {
+			offset = -0.0005,
+			scale = 0.0015,
+			spread = {x = 200, y = 200, z = 200},
+			seed = 230,
+			octaves = 3,
+			persist = 0.6
+		},
+		biomes = {"desert"},
+		y_min = 5,
+		y_max = 31000,
+		schematic = dpath .. "large_cactus.mts",
+		flags = "place_center_x",
+		rotation = "random",
+	})
 end
 
 
@@ -230,6 +230,7 @@ minetest.register_decoration({
 
 -- default pine bush
 if minetest.registered_nodes["default:pine_bush"] then
+
 	minetest.register_decoration({
 		name = "default:pine_bush",
 		deco_type = "schematic",
@@ -254,27 +255,28 @@ end
 
 -- default blueberry bush
 if minetest.registered_nodes["default:blueberry_bush_leaves"] then
-minetest.register_decoration({
-	name = "default:blueberry_bush",
-	deco_type = "schematic",
-	place_on = {
-		"default:dirt_with_coniferous_litter", "default:dirt_with_snow"},
-	sidelen = 16,
-	noise_params = {
-		offset = -0.004,
-		scale = 0.01,
-		spread = {x = 100, y = 100, z = 100},
-		seed = 697,
-		octaves = 3,
-		persist = 0.7,
-	},
-	biomes = {"coniferous_forest", "taiga"},
-	y_max = 31000,
-	y_min = 1,
-	place_offset_y = 1,
-	schematic = dpath .. "blueberry_bush.mts",
-	flags = "place_center_x, place_center_z"
-})
+
+	minetest.register_decoration({
+		name = "default:blueberry_bush",
+		deco_type = "schematic",
+		place_on = {
+			"default:dirt_with_coniferous_litter", "default:dirt_with_snow"},
+		sidelen = 16,
+		noise_params = {
+			offset = -0.004,
+			scale = 0.01,
+			spread = {x = 100, y = 100, z = 100},
+			seed = 697,
+			octaves = 3,
+			persist = 0.7,
+		},
+		biomes = {"coniferous_forest", "taiga"},
+		y_max = 31000,
+		y_min = 1,
+		place_offset_y = 1,
+		schematic = dpath .. "blueberry_bush.mts",
+		flags = "place_center_x, place_center_z"
+	})
 end
 
 
@@ -303,10 +305,10 @@ minetest.register_decoration({
 -- coral reef
 if ethereal.reefs == 1 then
 
--- override corals so crystal shovel can pick them up intact
-minetest.override_item("default:coral_skeleton", {groups = {crumbly = 3}})
-minetest.override_item("default:coral_orange", {groups = {crumbly = 3}})
-minetest.override_item("default:coral_brown", {groups = {crumbly = 3}})
+	-- override corals so crystal shovel can pick them up intact
+	minetest.override_item("default:coral_skeleton", {groups = {crumbly = 3}})
+	minetest.override_item("default:coral_orange", {groups = {crumbly = 3}})
+	minetest.override_item("default:coral_brown", {groups = {crumbly = 3}})
 
 	minetest.register_decoration({
 		deco_type = "schematic",
diff --git a/sealife.lua b/sealife.lua
index edc908f..621a80a 100644
--- a/sealife.lua
+++ b/sealife.lua
@@ -68,9 +68,8 @@ minetest.register_node("ethereal:coral2", {
 })
 
 minetest.register_craft( {
-	type = "shapeless",
 	output = "dye:cyan 3",
-	recipe = {"ethereal:coral2"}
+	recipe = {{"ethereal:coral2"}}
 })
 
 -- Orange Coral
@@ -91,9 +90,8 @@ minetest.register_node("ethereal:coral3", {
 })
 
 minetest.register_craft( {
-	type = "shapeless",
 	output = "dye:orange 3",
-	recipe = {"ethereal:coral3"}
+	recipe = {{"ethereal:coral3"}}
 })
 
 -- Pink Coral
@@ -114,9 +112,8 @@ minetest.register_node("ethereal:coral4", {
 })
 
 minetest.register_craft( {
-	type = "shapeless",
 	output = "dye:pink 3",
-	recipe = {"ethereal:coral4"}
+	recipe = {{"ethereal:coral4"}}
 })
 
 -- Green Coral
@@ -137,9 +134,8 @@ minetest.register_node("ethereal:coral5", {
 })
 
 minetest.register_craft( {
-	type = "shapeless",
 	output = "dye:green 3",
-	recipe = {"ethereal:coral5"}
+	recipe = {{"ethereal:coral5"}}
 })
 
 -- Undersea Sand
@@ -156,6 +152,7 @@ minetest.register_node("ethereal:sandy", {
 
 -- randomly generate coral or seaweed and have seaweed grow up to 14 high
 if ethereal.sealife == 1 then
+
 minetest.register_abm({
 	label = "Grow coral/seaweed",
 	nodenames = {"ethereal:sandy"},
diff --git a/settingtypes.txt b/settingtypes.txt
index 44cdab6..2ca125c 100644
--- a/settingtypes.txt
+++ b/settingtypes.txt
@@ -37,3 +37,5 @@ ethereal.reefs (MT5 Coral biome, 1 = Enable / 0 = Disable) int 1
 ethereal.sakura (Sakura biome, 1 = Enable / 0 = Disable) int 1
 ethereal.tundra (Tundra biome, 1 = Enable / 0 = Disable) int 1
 ethereal.mediterranean (Mediterranean biome, 1 = Enable / 0 = Disable) int 1
+
+ethereal.flightpotion_duration (Flight Potion Duration) int 300
diff --git a/stairs.lua b/stairs.lua
index 9519e6f..784c596 100644
--- a/stairs.lua
+++ b/stairs.lua
@@ -16,13 +16,28 @@ local do_stair = function(description, name, node, groups, texture, sound)
 
 	elseif stairs_plus then
 
-		stairsplus:register_all("ethereal", name, node, {
+		local mod = "ethereal"
+
+		stairsplus:register_all(mod, name, node, {
 			description = S(description),
 			tiles = texture,
 			groups = groups,
 			sounds = sound,
 		})
 
+		-- aliases need to be set for previous stairs to avoid unknown nodes
+		minetest.register_alias_force("stairs:stair_" .. name,
+				mod .. ":stair_" .. name)
+
+		minetest.register_alias_force("stairs:stair_outer_" .. name,
+				mod .. ":stair_" .. name .. "_outer")
+
+		minetest.register_alias_force("stairs:stair_inner_" .. name,
+				mod .. ":stair_" .. name .. "_inner")
+
+		minetest.register_alias_force("stairs:slab_"  .. name,
+				mod .. ":slab_"  .. name)
+
 	else
 
 		stairs.register_stair_and_slab(name, node, groups, texture,
diff --git a/strawberry.lua b/strawberry.lua
index 753fed4..16329c6 100644
--- a/strawberry.lua
+++ b/strawberry.lua
@@ -84,44 +84,56 @@ crop_def.drop = {
 }
 minetest.register_node("ethereal:strawberry_8", table.copy(crop_def))
 
+
 -- growing routine if farming redo isn't present
-if not farming or not farming.mod or farming.mod ~= "redo" then
-
-minetest.register_abm({
-	label = "Ethereal grow strawberry",
-	nodenames = {
-		"ethereal:strawberry_1", "ethereal:strawberry_2", "ethereal:strawberry_3",
-		"ethereal:strawberry_4", "ethereal:strawberry_5", "ethereal:strawberry_6",
-		"ethereal:strawberry_7"
-	},
-	neighbors = {"farming:soil_wet"},
-	interval = 9,
-	chance = 20,
-	catch_up = false,
-	action = function(pos, node)
-
-		-- are we on wet soil?
-		pos.y = pos.y - 1
-		if minetest.get_item_group(minetest.get_node(pos).name, "soil") < 3 then
-			return
-		end
-		pos.y = pos.y + 1
+if farming and farming.mod and farming.mod == "redo" then
+
+	-- add to registered_plants
+	farming.registered_plants["ethereal:strawberry"] = {
+		crop = "ethereal:strawberry",
+		seed = "ethereal:strawberry",
+		minlight = farming.min_light,
+		maxlight = farming.max_light,
+		steps = 8
+	}
 
-		-- do we have enough light?
-		local light = minetest.get_node_light(pos)
+else
 
-		if not light
-		or light < 13 then
-			return
-		end
+	minetest.register_abm({
+		label = "Ethereal grow strawberry",
+		nodenames = {
+			"ethereal:strawberry_1", "ethereal:strawberry_2", "ethereal:strawberry_3",
+			"ethereal:strawberry_4", "ethereal:strawberry_5", "ethereal:strawberry_6",
+			"ethereal:strawberry_7"
+		},
+		neighbors = {"farming:soil_wet"},
+		interval = 9,
+		chance = 20,
+		catch_up = false,
+		action = function(pos, node)
 
-		-- grow to next stage
-		local num = node.name:split("_")[2]
+			-- are we on wet soil?
+			pos.y = pos.y - 1
 
-		node.name = "ethereal:strawberry_" .. tonumber(num + 1)
+			if minetest.get_item_group(minetest.get_node(pos).name, "soil") < 3 then
+				return
+			end
 
-		minetest.swap_node(pos, node)
-	end
-})
+			pos.y = pos.y + 1
 
-end -- END IF
+			-- do we have enough light?
+			local light = minetest.get_node_light(pos)
+
+			if not light or light < 13 then
+				return
+			end
+
+			-- grow to next stage
+			local num = node.name:split("_")[2]
+
+			node.name = "ethereal:strawberry_" .. tonumber(num + 1)
+
+			minetest.swap_node(pos, node)
+		end
+	})
+end
diff --git a/water.lua b/water.lua
index 61aa757..0aad8e9 100644
--- a/water.lua
+++ b/water.lua
@@ -6,7 +6,6 @@ minetest.register_node("ethereal:icebrick", {
 	description = S("Ice Brick"),
 	tiles = {"ethereal_brick_ice.png"},
 	paramtype = "light",
-	freezemelt = "default:water_source",
 	is_ground_content = false,
 	groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1},
 	sounds = default.node_sound_glass_defaults()
@@ -25,7 +24,6 @@ minetest.register_node("ethereal:snowbrick", {
 	description = S("Snow Brick"),
 	tiles = {"ethereal_brick_snow.png"},
 	paramtype = "light",
-	freezemelt = "default:water_source",
 	is_ground_content = false,
 	groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1},
 	sounds = default.node_sound_dirt_defaults({
@@ -43,7 +41,7 @@ minetest.register_craft({
 	}
 })
 
--- If Crystal Spike, Crystal Dirt, Snow near Water, change Water to Ice
+-- If Crystal Spike, Snow near Water, change Water to Ice
 minetest.register_abm({
 	label = "Ethereal freeze water",
 	nodenames = {
@@ -73,7 +71,7 @@ minetest.register_abm({
 		"default:dirt_with_snow", "ethereal:snowbrick", "ethereal:icebrick"
 	},
 	neighbors = {
-		"fire:basic_fire", "default:lava_source", "default:lava_flowing",
+		"fire:basic_flame", "default:lava_source", "default:lava_flowing",
 		"default:furnace_active", "default:torch", "default:torch_wall",
 		"default:torch_ceiling"
 	},
@@ -121,10 +119,12 @@ minetest.register_abm({
 		if node.name == "ethereal:dry_dirt"
 		or node.name == "default:dry_dirt" then
 			minetest.swap_node(pos, {name = "default:dirt"})
+		elseif node.name == "default:dirt_with_dry_grass" then
+			minetest.swap_node(pos, {name = "default:dirt_with_grass"})
 		else
 			minetest.swap_node(pos, {name = "default:dirt_with_dry_grass"})
 		end
-	end,
+	end
 })
 
 -- when enabled, drop torches that are touching water
diff --git a/wood.lua b/wood.lua
index 253d3f6..3e228e5 100644
--- a/wood.lua
+++ b/wood.lua
@@ -12,7 +12,7 @@ minetest.register_node("ethereal:sakura_trunk", {
 	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 -- sakura wood
@@ -23,7 +23,7 @@ minetest.register_node("ethereal:sakura_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -53,7 +53,7 @@ minetest.register_node("ethereal:willow_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -83,7 +83,7 @@ minetest.register_node("ethereal:redwood_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -113,7 +113,7 @@ minetest.register_node("ethereal:frost_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -143,7 +143,7 @@ minetest.register_node("ethereal:yellow_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -173,7 +173,7 @@ minetest.register_node("ethereal:palm_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -203,7 +203,7 @@ minetest.register_node("ethereal:banana_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -270,7 +270,7 @@ minetest.register_node("ethereal:birch_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({
@@ -327,7 +327,7 @@ minetest.register_node("ethereal:olive_wood", {
 	groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3},
 	sounds = default.node_sound_wood_defaults(),
 	paramtype2 = "facedir",
-	on_place = minetest.rotate_node,
+	on_place = minetest.rotate_node
 })
 
 minetest.register_craft({