diff --git a/mods/CORE/mcl_bubble_column/init.lua b/mods/CORE/mcl_bubble_column/init.lua
index 05cf80cd9..756e365e2 100644
--- a/mods/CORE/mcl_bubble_column/init.lua
+++ b/mods/CORE/mcl_bubble_column/init.lua
@@ -10,8 +10,8 @@ if minetest.features.use_texture_alpha_string_modes then
 	WATER_ALPHA = nil
 end
 
-minetest.register_node("mcl_bubble_column:water_flowing", {
-	description = S("Bubble Column Flowing Water"),
+minetest.register_node("mcl_bubble_column:water_flowing_up", {
+	description = S("Bubble Column Flowing Water (up)"),
 	_doc_items_create_entry = false,
 	wield_image = "default_water_flowing_animated.png^[verticalframe:64:0",
 	drawtype = "flowingliquid",
@@ -41,8 +41,8 @@ minetest.register_node("mcl_bubble_column:water_flowing", {
 	drop = "",
 	drowning = 4,
 	liquidtype = "flowing",
-	liquid_alternative_flowing = "mcl_bubble_column:water_flowing",
-	liquid_alternative_source = "mcl_bubble_column:water_source",
+	liquid_alternative_flowing = "mcl_bubble_column:water_flowing_up",
+	liquid_alternative_source = "mcl_bubble_column:water_source_up",
 	liquid_viscosity = WATER_VISC,
 	liquid_range = 7,
 	post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
@@ -52,7 +52,7 @@ minetest.register_node("mcl_bubble_column:water_flowing", {
 	_mcl_hardness = -1,
 })
 
-minetest.register_node("mcl_bubble_column:water_source", {
+minetest.register_node("mcl_bubble_column:water_source_up", {
 	description = S("Bubble Column Water Source"),
 	_doc_items_entry_name = S("Water"),
 	_doc_items_longdesc = S("Boosts you up"),
@@ -81,8 +81,8 @@ minetest.register_node("mcl_bubble_column:water_source", {
 	drop = "",
 	drowning = 4,
 	liquidtype = "source",
-	liquid_alternative_flowing = "mcl_bubble_column:water_flowing",
-	liquid_alternative_source = "mcl_bubble_column:water_source",
+	liquid_alternative_flowing = "mcl_bubble_column:water_flowing_up",
+	liquid_alternative_source = "mcl_bubble_column:water_source_up",
 	liquid_viscosity = WATER_VISC,
 	liquid_range = 7,
 	post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
@@ -93,30 +93,44 @@ minetest.register_node("mcl_bubble_column:water_source", {
 	_mcl_hardness = -1,
 })
 
-
 minetest.register_globalstep(function()
     for _,player in ipairs(minetest.get_connected_players()) do
         local name = player:get_player_name()
         local pos = player:get_pos()
         local node = minetest.get_node(pos)
-        if node.name == "mcl_bubble_column:water_source" then
+        if node.name == "mcl_bubble_column:water_source_up" then
             local velocity = player:get_player_velocity()
-            local velocityadd = {x = 0, y = 2, z = 0}
+            local velocityadd = {x = 0, y = 3, z = 0}
             player:add_player_velocity(velocityadd)
         end
     end
 end)
 
+minetest.register_abm{
+    label = "entities go up",
+    nodenames = {"mcl_bubble_column:water_source_up"},
+    interval = 0.05,
+    chance = 1,
+    action = function(pos)
+        for _,entity in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do
+        	local pos = entity:get_pos()
+            local velocity = entity:get_velocity()
+            local velocityadd = {x = 0, y = 2, z = 0}
+            entity:add_velocity(velocityadd)
+    	end
+    end,
+}
+
 minetest.register_abm{
     label = "bubbles go up",
-    nodenames = {"mcl_bubble_column:water_source"},
+    nodenames = {"mcl_bubble_column:water_source_up"},
     interval = 1,
     chance = 1,
     action = function(pos)
         local uppos = vector.add(pos, {x = 0, y = 1, z = 0})
         local upposnode = minetest.get_node(uppos)
         if upposnode.name == "mcl_core:water_source" then
-            minetest.set_node(uppos, {name = "mcl_bubble_column:water_source"})
+            minetest.set_node(uppos, {name = "mcl_bubble_column:water_source_up"})
         end
     end,
 }
@@ -130,14 +144,14 @@ minetest.register_abm{
         local downpos = vector.add(pos, {x = 0, y = 1, z = 0})
         local downposnode = minetest.get_node(downpos)
         if downposnode.name == "mcl_core:water_source" then
-            minetest.set_node(downpos, {name = "mcl_bubble_column:water_source"})
+            minetest.set_node(downpos, {name = "mcl_bubble_column:water_source_up"})
         end
     end,
 }
 
 minetest.register_abm{
     label = "stop bubble column",
-    nodenames = {"mcl_bubble_column:water_source"},
+    nodenames = {"mcl_bubble_column:water_source_up"},
     interval = 1,
     chance = 1,
     action = function(pos)
@@ -149,8 +163,8 @@ minetest.register_abm{
     end,
 }
 minetest.register_abm{
-    label = "bubbles",
-    nodenames = {"mcl_bubble_column:water_source"},
+    label = "bubbles up",
+    nodenames = {"mcl_bubble_column:water_source_up"},
     interval = 1,
     chance = 1,
     action = function(pos)
@@ -172,3 +186,184 @@ minetest.register_abm{
 		})
     end,
 }
+--whirlpools(take you down)
+
+
+minetest.register_node("mcl_bubble_column:water_flowing_down", {
+	description = S("Bubble Column Flowing Water(down)"),
+	_doc_items_create_entry = false,
+	wield_image = "default_water_flowing_animated.png^[verticalframe:64:0",
+	drawtype = "flowingliquid",
+	tiles = {"default_water_flowing_animated.png^[verticalframe:64:0"},
+	special_tiles = {
+		{
+			image="default_water_flowing_animated.png",
+			backface_culling=false,
+			animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0}
+		},
+		{
+			image="default_water_flowing_animated.png",
+			backface_culling=false,
+			animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0}
+		},
+	},
+	sounds = mcl_sounds.node_sound_water_defaults(),
+	is_ground_content = false,
+	alpha = WATER_ALPHA,
+	use_texture_alpha = USE_TEXTURE_ALPHA,
+	paramtype = "light",
+	paramtype2 = "flowingliquid",
+	walkable = false,
+	pointable = false,
+	diggable = false,
+	buildable_to = true,
+	drop = "",
+	drowning = 4,
+	liquidtype = "flowing",
+	liquid_alternative_flowing = "mcl_bubble_column:water_flowing_down",
+	liquid_alternative_source = "mcl_bubble_column:water_source_down",
+	liquid_viscosity = WATER_VISC,
+	liquid_range = 7,
+	post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
+	groups = { water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, freezes=1, melt_around=1, dig_by_piston=1},
+	_mcl_blast_resistance = 100,
+	-- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
+	_mcl_hardness = -1,
+})
+
+minetest.register_node("mcl_bubble_column:water_source_down", {
+	description = S("Whirlpool Water Source"),
+	_doc_items_entry_name = S("Water"),
+	_doc_items_longdesc = S("Takes you down!"),
+	_doc_items_hidden = false,
+	drawtype = "liquid",
+	tiles = {
+		{name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
+	},
+	special_tiles = {
+		-- New-style water source material (mostly unused)
+		{
+			name="default_water_source_animated.png",
+			animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0},
+			backface_culling = false,
+		}
+	},
+	sounds = mcl_sounds.node_sound_water_defaults(),
+	is_ground_content = false,
+	alpha = WATER_ALPHA,
+	use_texture_alpha = USE_TEXTURE_ALPHA,
+	paramtype = "light",
+	walkable = false,
+	pointable = false,
+	diggable = false,
+	buildable_to = true,
+	drop = "",
+	drowning = 4,
+	liquidtype = "source",
+	liquid_alternative_flowing = "mcl_bubble_column:water_flowing_down",
+	liquid_alternative_source = "mcl_bubble_column:water_source_down",
+	liquid_viscosity = WATER_VISC,
+	liquid_range = 7,
+	post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
+	stack_max = 64,
+	groups = { water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, dig_by_piston=1},
+	_mcl_blast_resistance = 100,
+	-- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
+	_mcl_hardness = -1,
+})
+
+
+minetest.register_globalstep(function()
+    for _,player in ipairs(minetest.get_connected_players()) do
+        local name = player:get_player_name()
+        local pos = player:get_pos()
+        local node = minetest.get_node(pos)
+        if node.name == "mcl_bubble_column:water_source_down" then
+            local velocity = player:get_player_velocity()
+            local velocityadd = {x = 0, y = -0.5, z = 0}
+            player:add_player_velocity(velocityadd)
+        end
+    end
+end)
+
+
+minetest.register_abm{
+    label = "entities go down",
+    nodenames = {"mcl_bubble_column:water_source_down"},
+    interval = 0.05,
+    chance = 1,
+    action = function(pos)
+        for _,entity in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do
+        	local pos = entity:get_pos()
+            local velocity = entity:get_velocity()
+            local velocityadd = {x = 0, y = -3, z = 0}
+            entity:add_velocity(velocityadd)
+    	end
+    end,
+}
+
+minetest.register_abm{
+    label = "whirlpools go up",
+    nodenames = {"mcl_bubble_column:water_source_down"},
+    interval = 1,
+    chance = 1,
+    action = function(pos)
+        local uppos = vector.add(pos, {x = 0, y = 1, z = 0})
+        local upposnode = minetest.get_node(uppos)
+        if upposnode.name == "mcl_core:water_source" then
+            minetest.set_node(uppos, {name = "mcl_bubble_column:water_source_down"})
+        end
+    end,
+}
+
+minetest.register_abm{
+    label = "start whirlpool",
+    nodenames = {"mcl_nether:magma"},
+    interval = 1,
+    chance = 1,
+    action = function(pos)
+        local downpos = vector.add(pos, {x = 0, y = 1, z = 0})
+        local downposnode = minetest.get_node(downpos)
+        if downposnode.name == "mcl_core:water_source" then
+            minetest.set_node(downpos, {name = "mcl_bubble_column:water_source_down"})
+        end
+    end,
+}
+
+minetest.register_abm{
+    label = "stop whirlpool",
+    nodenames = {"mcl_bubble_column:water_source_down"},
+    interval = 1,
+    chance = 1,
+    action = function(pos)
+        local downpos = vector.add(pos, {x = 0, y = -1, z = 0})
+        local downposnode = minetest.get_node(downpos)
+        if downposnode.name == "mcl_core:water_source" then
+            minetest.set_node(pos, {name = "mcl_core:water_source"})
+        end
+    end,
+}
+minetest.register_abm{
+    label = "bubbles down",
+    nodenames = {"mcl_bubble_column:water_source_down"},
+    interval = 1,
+    chance = 1,
+    action = function(pos)
+        minetest.add_particlespawner({
+			amount = 10,
+			time = 0.15,
+			minpos = vector.add(pos, { x = -0.25, y = 0, z = -0.25 }),
+			maxpos = vector.add(pos, { x = 0.25, y = 0, z = 0.75 }),
+			attached = player,
+			minvel = {x = -0.2, y = 0, z = -0.2},
+			maxvel = {x = 0.5, y = 0, z = 0.5},
+			minacc = {x = -0.4, y = -4, z = -0.4},
+			maxacc = {x = 0.5, y = -1, z = 0.5},
+			minexptime = 0.3,
+			maxexptime = 0.8,
+			minsize = 0.7,
+			maxsize = 2.4,
+			texture = "mcl_particles_bubble.png"
+		})
+    end,
+}