diff --git a/aliases.lua b/aliases.lua
new file mode 100644
index 0000000..fce7218
--- /dev/null
+++ b/aliases.lua
@@ -0,0 +1,11 @@
+-- used to remove the old vine nodes. This gives room for the new nodes
+minetest.register_alias( 'vines:root', 'air' )
+minetest.register_alias( 'vines:root_rotten', 'air' )
+minetest.register_alias( 'vines:vine', 'air' )
+minetest.register_alias( 'vines:vine_rotten', 'air' )
+minetest.register_alias( 'vines:side', 'air' )
+minetest.register_alias( 'vines:side_rotten', 'air' )
+minetest.register_alias( 'vines:jungle', 'air' )
+minetest.register_alias( 'vines:jungle_rotten', 'air' )
+minetest.register_alias( 'vines:willow', 'air' )
+minetest.register_alias( 'vines:willow_rotten', 'air' )
diff --git a/functions.lua b/functions.lua
index ec0eba9..5ffb3c9 100644
--- a/functions.lua
+++ b/functions.lua
@@ -1,41 +1,41 @@
 vines.register_vine = function( name, defs, biome )
   --different properties for bottom and side vines.
-  local drop_node = 'vines:'..name
-  local drawtype = ''
   local selection_box
   local groups = { vines=1, snappy=3, flammable=2 }
 
-  local group_name = name..'_vines'
-  biome.spawn_surfaces[ #biome.spawn_surfaces ] = group_name
+  local vine_name_end = 'vines:'..name..'_end'
+  local vine_name_middle = 'vines:'..name..'_middle'
 
-  if ( biome.spawn_on_side ) then
-    selection_box = {
-      type = "wallmounted",
-    }
-    drawtype = 'signlike'
-  else
-    selection_box = {
-      type = "fixed",
-      fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 },
-    }
+  local vine_image_end = "vines_"..name.."_end.png"
+  local vine_image_middle = "vines_"..name.."_middle.png"
+
+  local drop_node = vine_name_end
+
+  biome.spawn_plants = { vine_name_end }
+
+  local vine_group = 'group:'..name..'_vines'
+  biome.spawn_surfaces[ #biome.spawn_surfaces + 1 ] = vine_group
+
+  local selection_box = { type = "wallmounted", }
+  local drawtype = 'signlike'
+  if ( not biome.spawn_on_side ) then
+    selection_box = { type = "fixed", fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 }, }
     drawtype = 'plantlike'
   end
 
-  biome.spawn_plants = { "vines:"..name }
-
-  minetest.register_node( "vines:"..name, {
+  minetest.register_node( vine_name_end, {
     description = defs.description,
     walkable = false,
     climbable = true,
-    wield_image = "vines_"..name..".png",
+    wield_image = vine_image_end,
     drop = "",
     sunlight_propagates = true,
     paramtype = "light",
     paramtype2 = "wallmounted",
     buildable_to = true,
-    tile_images = { "vines_"..name..".png" },
+    tile_images = { vine_image_end },
     drawtype = drawtype,
-    inventory_image = "vines_"..name..".png",
+    inventory_image = vine_image_end,
     groups = groups,
     sounds = default.node_sound_leaves_defaults(),
     selection_box = selection_box,
@@ -49,7 +49,7 @@ vines.register_vine = function( name, defs, biome )
       local bottom_node = minetest.get_node( bottom )
       if bottom_node.name == "air" then
         if not ( math.random( defs.average_length ) == 1 ) then
-          minetest.set_node( pos, { name = node.name..'_rotten', param2 = node.param2 } )
+          minetest.set_node( pos, { name = vine_name_middle, param2 = node.param2 } )
           minetest.set_node( bottom, { name = node.name, param2 = node.param2 } )
           local timer = minetest.get_node_timer( bottom_node )
           timer:start( math.random(5, 10) )
@@ -61,10 +61,9 @@ vines.register_vine = function( name, defs, biome )
     end
   })
 
-  local name = name..'_rotten'
 
-  minetest.register_node( "vines:"..name, {
-    description = "Rotten "..defs.description,
+  minetest.register_node( vine_name_middle, {
+    description = "Matured "..defs.description,
     walkable = false,
     climbable = true,
     drop = "",
@@ -72,10 +71,10 @@ vines.register_vine = function( name, defs, biome )
     paramtype = "light",
     paramtype2 = "wallmounted",
     buildable_to = true,
-    tile_images = { "vines_"..name..".png" },
-    wield_image = "vines_"..name..".png",
+    tile_images = { vine_image_middle },
+    wield_image = vine_image_middle,
     drawtype = drawtype,
-    inventory_image = "vines_"..name..".png",
+    inventory_image = vine_image_middle,
     groups = groups,
     sounds = default.node_sound_leaves_defaults(),
     selection_box = selection_box,
diff --git a/init.lua b/init.lua
index 5a32412..72eda93 100644
--- a/init.lua
+++ b/init.lua
@@ -4,6 +4,7 @@ vines = {
 }
 
 dofile( minetest.get_modpath( vines.name ) .. "/functions.lua" )
+dofile( minetest.get_modpath( vines.name ) .. "/aliases.lua" )
 dofile( minetest.get_modpath( vines.name ) .. "/recipes.lua" )
 dofile( minetest.get_modpath( vines.name ) .. "/crafts.lua" )
 dofile( minetest.get_modpath( vines.name ) .. "/nodes.lua" )
diff --git a/textures/vines_jungle.png b/textures/vines_jungle_end.png
similarity index 100%
rename from textures/vines_jungle.png
rename to textures/vines_jungle_end.png
diff --git a/textures/vines_jungle_rotten.png b/textures/vines_jungle_middle.png
similarity index 100%
rename from textures/vines_jungle_rotten.png
rename to textures/vines_jungle_middle.png
diff --git a/textures/vines_root.png b/textures/vines_root_end.png
similarity index 100%
rename from textures/vines_root.png
rename to textures/vines_root_end.png
diff --git a/textures/vines_root_rotten.png b/textures/vines_root_middle.png
similarity index 100%
rename from textures/vines_root_rotten.png
rename to textures/vines_root_middle.png
diff --git a/textures/vines_side.png b/textures/vines_side_end.png
similarity index 100%
rename from textures/vines_side.png
rename to textures/vines_side_end.png
diff --git a/textures/vines_side_rotten.png b/textures/vines_side_middle.png
similarity index 100%
rename from textures/vines_side_rotten.png
rename to textures/vines_side_middle.png
diff --git a/textures/vines_vine.png b/textures/vines_vine_end.png
similarity index 100%
rename from textures/vines_vine.png
rename to textures/vines_vine_end.png
diff --git a/textures/vines_vine_rotten.png b/textures/vines_vine_middle.png
similarity index 100%
rename from textures/vines_vine_rotten.png
rename to textures/vines_vine_middle.png
diff --git a/textures/vines_willow.png b/textures/vines_willow_end.png
similarity index 100%
rename from textures/vines_willow.png
rename to textures/vines_willow_end.png
diff --git a/textures/vines_willow_rotten.png b/textures/vines_willow_middle.png
similarity index 100%
rename from textures/vines_willow_rotten.png
rename to textures/vines_willow_middle.png
diff --git a/vines.lua b/vines.lua
index 349a1ee..2b5cf59 100644
--- a/vines.lua
+++ b/vines.lua
@@ -88,15 +88,13 @@ vines.register_vine( 'willow', {
   description = "Willow Vines",
   average_length = 9,
 },{
-  avoid_nodes = {"vines:willow", "vines:willow_rotten"},
+  avoid_nodes = { "vines:willow_middle" },
   avoid_radius = 5,
+  near_nodes = { 'default:water_source' },
+  near_nodes_size = 20,
+  plantlife_limit = -0.7,
+  spawn_chance = 10,
   spawn_delay = 500,
-  spawn_chance = 100,
-  spawn_surfaces = {"moretrees:willow_leaves"},
   spawn_on_side = true,
-  plantlife_limit = -0.9,
-  humidity_max = 1,
-  humidity_min = 0.8,
-  temp_min = 0.1,
-  temp_max = 1,
+  spawn_surfaces = {"moretrees:willow_leaves"},
 })