diff --git a/game/engines/default/data/keybinds/hotkeys.lua b/game/engines/default/data/keybinds/hotkeys.lua
index b9f8f664caf2774c3b92eff9a829f860d0407790..d7ef60b68d3463e77486ad8aca84fe2d81022f02 100644
--- a/game/engines/default/data/keybinds/hotkeys.lua
+++ b/game/engines/default/data/keybinds/hotkeys.lua
@@ -239,6 +239,80 @@ defineAction{
 	name = "Third Hotkey 12",
 }
 
+-- Alt + Hotkeys
+defineAction{
+	default = { "sym:_1:false:false:true:false" },
+	type = "HOTKEY_FOURTH_1",
+	group = "hotkeys",
+	name = "Fourth Hotkey 1",
+}
+defineAction{
+	default = { "sym:_2:false:false:true:false" },
+	type = "HOTKEY_FOURTH_2",
+	group = "hotkeys",
+	name = "Fourth Hotkey 2",
+}
+defineAction{
+	default = { "sym:_3:false:false:true:false" },
+	type = "HOTKEY_FOURTH_3",
+	group = "hotkeys",
+	name = "Fourth Hotkey 3",
+}
+defineAction{
+	default = { "sym:_4:false:false:true:false" },
+	type = "HOTKEY_FOURTH_4",
+	group = "hotkeys",
+	name = "Fourth Hotkey 4",
+}
+defineAction{
+	default = { "sym:_5:false:false:true:false" },
+	type = "HOTKEY_FOURTH_5",
+	group = "hotkeys",
+	name = "Fourth Hotkey 5",
+}
+defineAction{
+	default = { "sym:_6:false:false:true:false" },
+	type = "HOTKEY_FOURTH_6",
+	group = "hotkeys",
+	name = "Fourth Hotkey 6",
+}
+defineAction{
+	default = { "sym:_7:false:false:true:false" },
+	type = "HOTKEY_FOURTH_7",
+	group = "hotkeys",
+	name = "Fourth Hotkey 7",
+}
+defineAction{
+	default = { "sym:_8:false:false:true:false" },
+	type = "HOTKEY_FOURTH_8",
+	group = "hotkeys",
+	name = "Fourth Hotkey 8",
+}
+defineAction{
+	default = { "sym:_9:false:false:true:false" },
+	type = "HOTKEY_FOURTH_9",
+	group = "hotkeys",
+	name = "Fourth Hotkey 9",
+}
+defineAction{
+	default = { "sym:_0:false:false:true:false" },
+	type = "HOTKEY_FOURTH_10",
+	group = "hotkeys",
+	name = "Fourth Hotkey 10",
+}
+defineAction{
+	default = { "sym:_MINUS:false:false:true:false" },
+	type = "HOTKEY_FOURTH_11",
+	group = "hotkeys",
+	name = "Fourth Hotkey 11",
+}
+defineAction{
+	default = { "sym:_EQUALS:false:false:true:false" },
+	type = "HOTKEY_FOURTH_12",
+	group = "hotkeys",
+	name = "Fourth Hotkey 12",
+}
+
 defineAction{
 	default = { "sym:_PAGEUP:false:false:false:false" },
 	type = "HOTKEY_PREV_PAGE",
diff --git a/game/engines/default/engine/dialogs/ShowEquipInven.lua b/game/engines/default/engine/dialogs/ShowEquipInven.lua
index 732efa94cce59f95a0b331df9f87c2a9e129d2ca..aad90445aa1bcf631b0e29c4bbfbf58d55428fd8 100644
--- a/game/engines/default/engine/dialogs/ShowEquipInven.lua
+++ b/game/engines/default/engine/dialogs/ShowEquipInven.lua
@@ -114,6 +114,18 @@ function _M:init(title, actor, filter, action, on_select)
 		HOTKEY_THIRD_10 = function() self:defineHotkey(34) end,
 		HOTKEY_THIRD_11 = function() self:defineHotkey(35) end,
 		HOTKEY_THIRD_12 = function() self:defineHotkey(36) end,
+		HOTKEY_FOURTH_1 = function() self:defineHotkey(37) end,
+		HOTKEY_FOURTH_2 = function() self:defineHotkey(38) end,
+		HOTKEY_FOURTH_3 = function() self:defineHotkey(39) end,
+		HOTKEY_FOURTH_4 = function() self:defineHotkey(40) end,
+		HOTKEY_FOURTH_5 = function() self:defineHotkey(41) end,
+		HOTKEY_FOURTH_6 = function() self:defineHotkey(42) end,
+		HOTKEY_FOURTH_7 = function() self:defineHotkey(43) end,
+		HOTKEY_FOURTH_8 = function() self:defineHotkey(44) end,
+		HOTKEY_FOURTH_9 = function() self:defineHotkey(45) end,
+		HOTKEY_FOURTH_10 = function() self:defineHotkey(46) end,
+		HOTKEY_FOURTH_11 = function() self:defineHotkey(47) end,
+		HOTKEY_FOURTH_12 = function() self:defineHotkey(48) end,
 		ACCEPT = function()
 			if self.focus_ui and self.focus_ui.ui == self.c_inven then self:use(self.c_inven.list[self.c_inven.sel])
 			elseif self.focus_ui and self.focus_ui.ui == self.c_equip then self:use(self.c_equip.list[self.c_equip.sel])
diff --git a/game/engines/default/engine/dialogs/UseTalents.lua b/game/engines/default/engine/dialogs/UseTalents.lua
index 8561908864e4cf7331887c3f4910b2507a23e47e..3f606e3b0c06b65ee9c08c06737a10dfe9a5d8ea 100644
--- a/game/engines/default/engine/dialogs/UseTalents.lua
+++ b/game/engines/default/engine/dialogs/UseTalents.lua
@@ -98,6 +98,18 @@ Check out the keybinding screen in the game menu to bind hotkeys to a key (defau
 		HOTKEY_THIRD_10 = function() self:defineHotkey(34) end,
 		HOTKEY_THIRD_11 = function() self:defineHotkey(35) end,
 		HOTKEY_THIRD_12 = function() self:defineHotkey(36) end,
+		HOTKEY_FOURTH_1 = function() self:defineHotkey(37) end,
+		HOTKEY_FOURTH_2 = function() self:defineHotkey(38) end,
+		HOTKEY_FOURTH_3 = function() self:defineHotkey(39) end,
+		HOTKEY_FOURTH_4 = function() self:defineHotkey(40) end,
+		HOTKEY_FOURTH_5 = function() self:defineHotkey(41) end,
+		HOTKEY_FOURTH_6 = function() self:defineHotkey(42) end,
+		HOTKEY_FOURTH_7 = function() self:defineHotkey(43) end,
+		HOTKEY_FOURTH_8 = function() self:defineHotkey(44) end,
+		HOTKEY_FOURTH_9 = function() self:defineHotkey(45) end,
+		HOTKEY_FOURTH_10 = function() self:defineHotkey(46) end,
+		HOTKEY_FOURTH_11 = function() self:defineHotkey(47) end,
+		HOTKEY_FOURTH_12 = function() self:defineHotkey(48) end,
 		EXIT = function() game:unregisterDialog(self) end,
 	}
 end
diff --git a/game/engines/default/engine/interface/ActorTalents.lua b/game/engines/default/engine/interface/ActorTalents.lua
index 10850e0006ca11c4b626cc37ffde26f0ed66af59..f1d1586a77d89daed721c0625fbda78a3e765bff 100644
--- a/game/engines/default/engine/interface/ActorTalents.lua
+++ b/game/engines/default/engine/interface/ActorTalents.lua
@@ -273,7 +273,7 @@ function _M:learnTalent(t_id, force, nb)
 				end
 			end
 			if not found then
-				for i = 1, 36 do
+				for i = 1, 48 do
 					if not self.hotkey[i] then
 						self.hotkey[i] = {"talent", t_id}
 						break
diff --git a/game/engines/default/engine/interface/PlayerHotkeys.lua b/game/engines/default/engine/interface/PlayerHotkeys.lua
index 8072ac9e11913f41894e2cfdee5cf0974cd72749..11003eb6222309ce006a262c6dba7df0e9e44ded 100644
--- a/game/engines/default/engine/interface/PlayerHotkeys.lua
+++ b/game/engines/default/engine/interface/PlayerHotkeys.lua
@@ -42,15 +42,15 @@ function _M:sortHotkeys()
 				print("[SORTING HOTKEYS] pairing",known_t_id,i)
 				self.hotkey[i] = {"talent", known_t_id}
 				-- Remove from old
-				for z = 1, 36 do if old[z] and old[z][1] == "talent" and old[z][2] == known_t_id then old[z] = nil break end end
+				for z = 1, 48 do if old[z] and old[z][1] == "talent" and old[z][2] == known_t_id then old[z] = nil break end end
 			end
 		end
 	end
 
 	-- Read all the rest
-	for j = 1, 36 do
+	for j = 1, 48 do
 		if old[j] then
-			for i = 1, 36 do if not self.hotkey[i] then
+			for i = 1, 48 do if not self.hotkey[i] then
 				self.hotkey[i] = old[j]
 				print("[SORTING HOTKEYS] added back", old[j][2], i)
 				break
@@ -106,7 +106,7 @@ function _M:hotkeyAutoTalents()
 	for tid, _ in pairs(self.talents) do
 		local t = self:getTalentFromId(tid)
 		if t.mode == "activated" or t.mode == "sustained" then
-			for i = 1, 36 do
+			for i = 1, 48 do
 				if not self.hotkey[i] then
 					self.hotkey[i] = {"talent", tid}
 					break
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 2715273197282f517de1913819a2710defacdc47..72146d8294ffe358b0f85110d892498e421a21f5 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -1167,6 +1167,18 @@ function _M:setupCommands()
 		HOTKEY_THIRD_10 = not_wild(function() self.player:activateHotkey(34) end),
 		HOTKEY_THIRD_11 = not_wild(function() self.player:activateHotkey(35) end),
 		HOTKEY_THIRD_12 = not_wild(function() self.player:activateHotkey(36) end),
+		HOTKEY_FOURTH_1 = not_wild(function() self.player:activateHotkey(37) end),
+		HOTKEY_FOURTH_2 = not_wild(function() self.player:activateHotkey(38) end),
+		HOTKEY_FOURTH_3 = not_wild(function() self.player:activateHotkey(39) end),
+		HOTKEY_FOURTH_4 = not_wild(function() self.player:activateHotkey(40) end),
+		HOTKEY_FOURTH_5 = not_wild(function() self.player:activateHotkey(41) end),
+		HOTKEY_FOURTH_6 = not_wild(function() self.player:activateHotkey(42) end),
+		HOTKEY_FOURTH_7 = not_wild(function() self.player:activateHotkey(43) end),
+		HOTKEY_FOURTH_8 = not_wild(function() self.player:activateHotkey(44) end),
+		HOTKEY_FOURTH_9 = not_wild(function() self.player:activateHotkey(45) end),
+		HOTKEY_FOURTH_10 = not_wild(function() self.player:activateHotkey(46) end),
+		HOTKEY_FOURTH_11 = not_wild(function() self.player:activateHotkey(47) end),
+		HOTKEY_FOURTH_12 = not_wild(function() self.player:activateHotkey(48) end),
 		HOTKEY_PREV_PAGE = not_wild(function() self.player:prevHotkeyPage() self.log("Hotkey page %d is now displayed.", self.player.hotkey_page) end),
 		HOTKEY_NEXT_PAGE = not_wild(function() self.player:nextHotkeyPage() self.log("Hotkey page %d is now displayed.", self.player.hotkey_page) end),
 
diff --git a/game/modules/tome/class/interface/ActorInscriptions.lua b/game/modules/tome/class/interface/ActorInscriptions.lua
index a684c0dbfa1d8b9838d7dca9c9e675b18aaeeca7..f8cd741e33357a674e05aaa5c9ba1c3211c6c402 100644
--- a/game/modules/tome/class/interface/ActorInscriptions.lua
+++ b/game/modules/tome/class/interface/ActorInscriptions.lua
@@ -85,7 +85,7 @@ function _M:setInscription(id, name, data, cooldown, vocal, src, bypass_max_same
 	local oldname = self.inscriptions[id]
 	local oldpos = nil
 	if oldname then
-		for i = 1, 36 do
+		for i = 1, 48 do
 			if self.hotkey[i] and self.hotkey[i][1] == "talent" and self.hotkey[i][2] == "T_"..oldname then oldpos = i break end
 		end
 		self:unlearnTalent(self["T_"..oldname])
@@ -109,7 +109,7 @@ function _M:setInscription(id, name, data, cooldown, vocal, src, bypass_max_same
 
 	-- Hotkey
 	if oldpos then
-		for i = 1, 36 do
+		for i = 1, 48 do
 			if self.hotkey[i] and self.hotkey[i][1] == "talent" and self.hotkey[i][2] == "T_"..name then self.hotkey[i] = nil end
 		end
 		self.hotkey[oldpos] = {"talent", "T_"..name}
diff --git a/game/modules/tome/dialogs/MapMenu.lua b/game/modules/tome/dialogs/MapMenu.lua
index 4e3a998fe087e793f2dfef72e18fe39868f1d71a..da86b58f5d22f750fd2a6907aa39752a1b2fd740 100644
--- a/game/modules/tome/dialogs/MapMenu.lua
+++ b/game/modules/tome/dialogs/MapMenu.lua
@@ -165,8 +165,8 @@ function _M:generateList()
 		end
 		table.sort(tals, function(a, b)
 			local ha, hb
-			for i = 1, 36 do if player.hotkey[i] and player.hotkey[i][1] == "talent" and player.hotkey[i][2] == a.talent.id then ha = i end end
-			for i = 1, 36 do if player.hotkey[i] and player.hotkey[i][1] == "talent" and player.hotkey[i][2] == b.talent.id then hb = i end end
+			for i = 1, 48 do if player.hotkey[i] and player.hotkey[i][1] == "talent" and player.hotkey[i][2] == a.talent.id then ha = i end end
+			for i = 1, 48 do if player.hotkey[i] and player.hotkey[i][1] == "talent" and player.hotkey[i][2] == b.talent.id then hb = i end end
 
 			if ha and hb then return ha < hb
 			elseif ha and not hb then return ha < 999999
diff --git a/game/modules/tome/dialogs/UseTalents.lua b/game/modules/tome/dialogs/UseTalents.lua
index eed78be1a5f0a190e85b05bb52b11c9cc80bda41..8b0157b2648ec67a67b312c600680e4df1630f7a 100644
--- a/game/modules/tome/dialogs/UseTalents.lua
+++ b/game/modules/tome/dialogs/UseTalents.lua
@@ -109,6 +109,18 @@ Right click or press '*' to configure.
 		HOTKEY_THIRD_10 = function() self:defineHotkey(34) end,
 		HOTKEY_THIRD_11 = function() self:defineHotkey(35) end,
 		HOTKEY_THIRD_12 = function() self:defineHotkey(36) end,
+		HOTKEY_FOURTH_1 = function() self:defineHotkey(37) end,
+		HOTKEY_FOURTH_2 = function() self:defineHotkey(38) end,
+		HOTKEY_FOURTH_3 = function() self:defineHotkey(39) end,
+		HOTKEY_FOURTH_4 = function() self:defineHotkey(40) end,
+		HOTKEY_FOURTH_5 = function() self:defineHotkey(41) end,
+		HOTKEY_FOURTH_6 = function() self:defineHotkey(42) end,
+		HOTKEY_FOURTH_7 = function() self:defineHotkey(43) end,
+		HOTKEY_FOURTH_8 = function() self:defineHotkey(44) end,
+		HOTKEY_FOURTH_9 = function() self:defineHotkey(45) end,
+		HOTKEY_FOURTH_10 = function() self:defineHotkey(46) end,
+		HOTKEY_FOURTH_11 = function() self:defineHotkey(47) end,
+		HOTKEY_FOURTH_12 = function() self:defineHotkey(48) end,
 		EXIT = function() game:unregisterDialog(self) end,
 	}
 end
@@ -118,7 +130,7 @@ function _M:defineHotkey(id)
 	local item = self.cur_item
 	if not item or not item.talent then return end
 
-	for i = 1, 36 do
+	for i = 1, 48 do
 		if self.actor.hotkey[i] and self.actor.hotkey[i][1] == "talent" and self.actor.hotkey[i][2] == item.talent then self.actor.hotkey[i] = nil end
 	end
 
@@ -163,11 +175,11 @@ function _M:use(item, button)
 		else table.insert(list, 1, {name="Enable automatic use", what="auto-en"})
 		end
 
-		for i = 1, 36 do list[#list+1] = {name="Hotkey "..i, what=i} end
+		for i = 1, 48 do list[#list+1] = {name="Hotkey "..i, what=i} end
 		Dialog:listPopup("Bind talent: "..item.name:toString(), "How do you want to bind this talent?", list, 400, 500, function(b)
 			if not b then return end
 			if type(b.what) == "number" then
-				for i = 1, 36 do
+				for i = 1, 48 do
 					if self.actor.hotkey[i] and self.actor.hotkey[i][1] == "talent" and self.actor.hotkey[i][2] == item.talent then self.actor.hotkey[i] = nil end
 				end
 				self.actor.hotkey[b.what] = {"talent", item.talent}
@@ -181,7 +193,7 @@ function _M:use(item, button)
 			elseif b.what == "unbind" then
 				if self.actor.auto_shoot_talent == item.talent then self.actor.auto_shoot_talent = nil end
 				if self.actor.auto_shoot_midclick_talent == item.talent then self.actor.auto_shoot_midclick_talent = nil end
-				for i = 1, 36 do
+				for i = 1, 48 do
 					if self.actor.hotkey[i] and self.actor.hotkey[i][1] == "talent" and self.actor.hotkey[i][2] == item.talent then self.actor.hotkey[i] = nil end
 				end
 			elseif b.what == "auto-en" then
@@ -233,7 +245,7 @@ function _M:generateList()
 					desc=self.actor:getTalentFullDescription(t),
 					color=function() return {0xFF, 0xFF, 0xFF} end,
 					hotkey=function(item)
-						for i = 1, 36 do if self.actor.hotkey[i] and self.actor.hotkey[i][1] == "talent" and self.actor.hotkey[i][2] == item.talent then
+						for i = 1, 48 do if self.actor.hotkey[i] and self.actor.hotkey[i][1] == "talent" and self.actor.hotkey[i][2] == item.talent then
 							return "H.Key "..i..""
 						end end
 						return ""
@@ -290,7 +302,7 @@ function _M:generateList()
 				desc=self.actor:getTalentFullDescription(t),
 				color=function() return {0xFF, 0xFF, 0xFF} end,
 				hotkey=function(item)
-					for i = 1, 36 do if self.actor.hotkey[i] and self.actor.hotkey[i][1] == "talent" and self.actor.hotkey[i][2] == item.talent then
+					for i = 1, 48 do if self.actor.hotkey[i] and self.actor.hotkey[i][1] == "talent" and self.actor.hotkey[i][2] == item.talent then
 						return "H.Key "..i..""
 					end end
 					return ""