diff --git a/mods/CORE/controls/init.lua b/mods/CORE/controls/init.lua
index ef57281a4..7f308d8e0 100644
--- a/mods/CORE/controls/init.lua
+++ b/mods/CORE/controls/init.lua
@@ -31,6 +31,7 @@ local known_controls = {
 	aux1 = true,
 	down = true,
 	up = true,
+	zoom = true,
 }
 
 minetest.register_on_joinplayer(function(player)
diff --git a/mods/ITEMS/mcl_bows/bow.lua b/mods/ITEMS/mcl_bows/bow.lua
index 6ae64a14e..3126f822b 100644
--- a/mods/ITEMS/mcl_bows/bow.lua
+++ b/mods/ITEMS/mcl_bows/bow.lua
@@ -239,7 +239,7 @@ end
 
 
 controls.register_on_release(function(player, key, time)
-	if key~="RMB" then return end
+	if key~="RMB" and key~="zoom" then return end
 	--local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
 	local wielditem = player:get_wielded_item()
 	if (wielditem:get_name()=="mcl_bows:bow_0" or wielditem:get_name()=="mcl_bows:bow_1" or wielditem:get_name()=="mcl_bows:bow_2" or
@@ -307,28 +307,30 @@ end)
 controls.register_on_hold(function(player, key, time)
 	local name = player:get_player_name()
 	local creative = minetest.is_creative_enabled(name)
-	if key ~= "RMB" or not (creative or get_arrow(player)) then
+	if (key ~= "RMB" and key ~= "zoom") or not (creative or get_arrow(player)) then
 		return
 	end
 	--local inv = minetest.get_inventory({type="player", name=name})
 	local wielditem = player:get_wielded_item()
-	if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then
-		local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
-		if enchanted then
-			wielditem:set_name("mcl_bows:bow_0_enchanted")
-		else
-			wielditem:set_name("mcl_bows:bow_0")
-		end
-		player:set_wielded_item(wielditem)
-		if minetest.get_modpath("playerphysics") then
-			-- Slow player down when using bow
-			playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_bow", PLAYER_USE_BOW_SPEED)
-		end
-		bow_load[name] = minetest.get_us_time()
-		bow_index[name] = player:get_wield_index()
+	if bow_load[name] == nil
+		and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted")
+		and (wielditem:get_meta():get("active") or key == "zoom") and (creative or get_arrow(player)) then
+			local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
+			if enchanted then
+				wielditem:set_name("mcl_bows:bow_0_enchanted")
+			else
+				wielditem:set_name("mcl_bows:bow_0")
+			end
+			player:set_wielded_item(wielditem)
+			if minetest.get_modpath("playerphysics") then
+				-- Slow player down when using bow
+				playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_bow", PLAYER_USE_BOW_SPEED)
+			end
+			bow_load[name] = minetest.get_us_time()
+			bow_index[name] = player:get_wield_index()
 
-		-- begin Bow Zoom.
-		mcl_fovapi.apply_modifier(player, "bowcomplete")
+			-- begin Bow Zoom.
+			mcl_fovapi.apply_modifier(player, "bowcomplete")
 	else
 		if player:get_wield_index() == bow_index[name] then
 			if type(bow_load[name]) == "number" then
diff --git a/mods/ITEMS/mcl_bows/crossbow.lua b/mods/ITEMS/mcl_bows/crossbow.lua
index df7b5f560..012268fa8 100644
--- a/mods/ITEMS/mcl_bows/crossbow.lua
+++ b/mods/ITEMS/mcl_bows/crossbow.lua
@@ -263,7 +263,7 @@ end
 
 
 controls.register_on_release(function(player, key, time)
-	if key~="RMB" then return end
+	if key~="RMB" and key~="zoom" then return end
 	--local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
 	local wielditem = player:get_wielded_item()
 	if wielditem:get_name()=="mcl_bows:crossbow_2" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2" and minetest.is_creative_enabled(player:get_player_name()) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and minetest.is_creative_enabled(player:get_player_name()) then
@@ -359,7 +359,7 @@ end)
 controls.register_on_hold(function(player, key, time)
 	local name = player:get_player_name()
 	local creative = minetest.is_creative_enabled(name)
-	if key ~= "RMB" then
+	if key ~= "RMB" and key ~= "zoom" then
 		return
 	end
 	--local inv = minetest.get_inventory({type="player", name=name})
@@ -373,22 +373,24 @@ controls.register_on_hold(function(player, key, time)
 		BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL
 	end
 
-	if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then
-		local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
-		if enchanted then
-			wielditem:set_name("mcl_bows:crossbow_0_enchanted")
-			play_load_sound(0, player:get_pos())
-		else
-			wielditem:set_name("mcl_bows:crossbow_0")
-			play_load_sound(0, player:get_pos())
-		end
-		player:set_wielded_item(wielditem)
-		if minetest.get_modpath("playerphysics") then
-			-- Slow player down when using bow
-			playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_crossbow", PLAYER_USE_CROSSBOW_SPEED)
-		end
-		bow_load[name] = minetest.get_us_time()
-		bow_index[name] = player:get_wield_index()
+	if bow_load[name] == nil
+		and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted")
+		and (wielditem:get_meta():get("active") or key=="zoom") and (creative or get_arrow(player)) then
+			local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
+			if enchanted then
+				wielditem:set_name("mcl_bows:crossbow_0_enchanted")
+				play_load_sound(0, player:get_pos())
+			else
+				wielditem:set_name("mcl_bows:crossbow_0")
+				play_load_sound(0, player:get_pos())
+			end
+			player:set_wielded_item(wielditem)
+			if minetest.get_modpath("playerphysics") then
+				-- Slow player down when using bow
+				playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_crossbow", PLAYER_USE_CROSSBOW_SPEED)
+			end
+			bow_load[name] = minetest.get_us_time()
+			bow_index[name] = player:get_wield_index()
 	else
 		if player:get_wield_index() == bow_index[name] then
 			if type(bow_load[name]) == "number" then
diff --git a/mods/ITEMS/mcl_spyglass/init.lua b/mods/ITEMS/mcl_spyglass/init.lua
index 31d461107..afa7adaf4 100644
--- a/mods/ITEMS/mcl_spyglass/init.lua
+++ b/mods/ITEMS/mcl_spyglass/init.lua
@@ -58,17 +58,21 @@ local function remove_scope(player)
 end
 
 controls.register_on_press(function(player, key)
-	if key ~= "RMB" then return end
-	add_scope(player)
+	if key ~= "RMB" and key ~= "zoom" then return end
+	if spyglass_scope[player] == nil then
+		add_scope(player)
+	end
 end)
 
 controls.register_on_release(function(player, key, time)
-	if key ~= "RMB" then return end
+	if key ~= "RMB" and key ~= "zoom" then return end
+	local ctrl = player:get_player_control()
+	if key == "RMB" and ctrl.zoom or key == "zoom" and ctrl.place then return end
 	remove_scope(player)
 end)
 
 controls.register_on_hold(function(player, key, time)
-	if key ~= "RMB" then return end
+	if key ~= "RMB" and key ~= "zoom" then return end
 	local wielditem = player:get_wielded_item()
 	if wielditem:get_name() == "mcl_spyglass:spyglass" then
 		mcl_fovapi.apply_modifier(player, "spyglass") -- apply the FOV effect.