diff --git a/game/engines/default/engine/interface/ActorTalents.lua b/game/engines/default/engine/interface/ActorTalents.lua
index 33724860c861b2c442db04c86f8f9bc545f542a5..3417a07877ada9108c09c2fec732ac0f173935d0 100644
--- a/game/engines/default/engine/interface/ActorTalents.lua
+++ b/game/engines/default/engine/interface/ActorTalents.lua
@@ -81,7 +81,7 @@ function _M:newTalent(t)
 	self.talents_def[t.id] = t
 	assert(not self[t.id], "talent already exists with id T_"..t.short_name)
 	self[t.id] = t.id
-	print("[TALENT]", t.name, t.short_name, t.id)
+--	print("[TALENT]", t.name, t.short_name, t.id)
 
 	-- Register in the type
 	table.insert(self.talents_types_def[t.type[1]].talents, t)
diff --git a/game/engines/default/engine/interface/WorldAchievements.lua b/game/engines/default/engine/interface/WorldAchievements.lua
index 8b97871867f84d78606878ce6a3d2ea754efb31c..30b77f38bbd33286f04468e6eb7a9684152458da 100644
--- a/game/engines/default/engine/interface/WorldAchievements.lua
+++ b/game/engines/default/engine/interface/WorldAchievements.lua
@@ -52,7 +52,7 @@ function _M:newAchievement(t)
 
 	self.achiev_defs[t.id] = t
 	self.achiev_defs[#self.achiev_defs+1] = t
-	print("[ACHIEVEMENT] defined", t.order, t.id)
+--	print("[ACHIEVEMENT] defined", t.order, t.id)
 end
 
 function _M:loadAchievements()
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 34fc5b1093f002c19450dc668f6629668dec753a..c491eb68f4a0446562d0a5b9cfd8ddea931581ee 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -47,6 +47,7 @@ local NPC = require "mod.class.NPC"
 local PlayerDisplay = require "mod.class.PlayerDisplay"
 
 local HotkeysDisplay = require "engine.HotkeysDisplay"
+local HotkeysIconsDisplay = require "engine.HotkeysIconsDisplay"
 local ActorsSeenDisplay = require "engine.ActorsSeenDisplay"
 local LogDisplay = require "engine.LogDisplay"
 local LogFlasher = require "engine.LogFlasher"
@@ -108,7 +109,7 @@ function _M:run()
 
 	self.player_display = PlayerDisplay.new(0, 200, 200, self.h - 200, {30,30,0}, font_mono, size_mono)
 --	self.flash = LogFlasher.new(0, 0, self.w, 20, nil, font, size, {255,255,255}, {0,0,0})
-	self.map_h_stop = self.h - font_mono_h * 4
+	self.map_h_stop = self.h - 64
 	self.logdisplay = LogDisplay.new(216, self.map_h_stop - font_h * config.settings.tome.log_lines -16, (self.w - 216) / 2, font_h * config.settings.tome.log_lines, nil, font, size, nil, nil)
 	self.logdisplay.resizeToLines = function() self.logdisplay:resize(216, self.map_h_stop - font_h * config.settings.tome.log_lines -16, (self.w - 216) / 2, font_h * config.settings.tome.log_lines) end
 	self.logdisplay:enableShadow(1)
@@ -120,7 +121,7 @@ function _M:run()
 	profile.chat:enableFading(config.settings.tome.log_fade or 3)
 	profile.chat:enableDisplayChans(false)
 
-	self.hotkeys_display = HotkeysDisplay.new(nil, 216, self.h - font_mono_h * 4.2, self.w - 216, font_mono_h * 4.2, "/data/gfx/ui/talents-list.png", font_mono, size_mono)
+	self.hotkeys_display = HotkeysIconsDisplay.new(nil, 216, self.h - 64, self.w - 216, 64, "/data/gfx/ui/talents-list.png", font_mono, size_mono)
 	self.hotkeys_display:enableShadow(0.6)
 	self.hotkeys_display:setColumns(3)
 	self.npcs_display = ActorsSeenDisplay.new(nil, 216, self.h - font_mono_h * 4.2, self.w - 216, font_mono_h * 4.2, "/data/gfx/ui/talents-list.png", font_mono, size_mono)
diff --git a/game/modules/tome/class/interface/PlayerLore.lua b/game/modules/tome/class/interface/PlayerLore.lua
index de902a10526379476b0846cdaa39b979373d09ff..5c9d19dbb354f89780bd4dcb230f3c91001d350a 100644
--- a/game/modules/tome/class/interface/PlayerLore.lua
+++ b/game/modules/tome/class/interface/PlayerLore.lua
@@ -47,7 +47,7 @@ function _M:newLore(t)
 
 	self.lore_defs[t.id] = t
 	self.lore_defs[#self.lore_defs+1] = t
-	print("[LORE] defined", t.order, t.id)
+--	print("[LORE] defined", t.order, t.id)
 end
 
 function _M:init(t)
diff --git a/game/modules/tome/data/factions.lua b/game/modules/tome/data/factions.lua
index 265bdf2297e379b36734c40bf13e002074ba2728..57a4a722cae21d7ca3a82bb79470d726e48d4ba6 100644
--- a/game/modules/tome/data/factions.lua
+++ b/game/modules/tome/data/factions.lua
@@ -67,7 +67,7 @@ for i, line in ipairs(lines) do
 			end
 		else
 			local n = tonumber(d)
-			if n then print(j, i, factsid[j], factsid[i], n*100)
+			if n then
 				facts[factsid[j]].reactions[factsid[i]] = n * 100
 			end
 		end
@@ -76,7 +76,7 @@ end
 
 for f1, data in pairs(facts) do
 	for f2, v in pairs(data.reactions) do
-		print("[FACTION] initial reaction", f1, f2, " => ", v)
+--		print("[FACTION] initial reaction", f1, f2, " => ", v)
 		engine.Faction:setInitialReaction(f1, f2, v, true)
 	end
 end
diff --git a/game/modules/tome/data/general/npcs/bear.lua b/game/modules/tome/data/general/npcs/bear.lua
index 914e93196f11fe929aa5e4746f19a70aa467d48b..f417e63d02535ac3d8fa9382b781adc07dcb67d2 100644
--- a/game/modules/tome/data/general/npcs/bear.lua
+++ b/game/modules/tome/data/general/npcs/bear.lua
@@ -42,7 +42,7 @@ newEntity{
 	life_rating = 12,
 	resolvers.tmasteries{ ["technique/other"]=0.25 },
 
-	resists = { [DamageType.FIRE] = 20, [DamageType.COLD] = 20, [DamageType.POISON] = 20 },
+	resists = { [DamageType.FIRE] = 20, [DamageType.COLD] = 20, [DamageType.NATURE] = 20 },
 	on_die = function(self, who)
 		local part = "BEAR_PAW"
 		if game.player:hasQuest("brotherhood-of-alchemists") then
diff --git a/game/modules/tome/data/gfx/talents/acid_infusion.png b/game/modules/tome/data/gfx/talents/acid_infusion.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a340923bf5cbf3f895dad8993c73846b48ddf61
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/acid_infusion.png differ
diff --git a/game/modules/tome/data/gfx/talents/aegis.png b/game/modules/tome/data/gfx/talents/aegis.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d44cbb78b7629edf294ddaee41d70f6f7ed0d2d
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/aegis.png differ
diff --git a/game/modules/tome/data/gfx/talents/alchemist_protection.png b/game/modules/tome/data/gfx/talents/alchemist_protection.png
new file mode 100644
index 0000000000000000000000000000000000000000..0240080e55e2c4892b5bb398c9dd8d668da0fd7e
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/alchemist_protection.png differ
diff --git a/game/modules/tome/data/gfx/talents/arcane_eye.png b/game/modules/tome/data/gfx/talents/arcane_eye.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb85736b086c2a1ed35e593a52fb752d793eaca9
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/arcane_eye.png differ
diff --git a/game/modules/tome/data/gfx/talents/arcane_power.png b/game/modules/tome/data/gfx/talents/arcane_power.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc3b369a815f0496b07400b734d1e4e519bed03a
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/arcane_power.png differ
diff --git a/game/modules/tome/data/gfx/talents/arcane_shield.png b/game/modules/tome/data/gfx/talents/arcane_shield.png
new file mode 100644
index 0000000000000000000000000000000000000000..1daeaecd63bfd9848975ba0596853236f1e05a0e
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/arcane_shield.png differ
diff --git a/game/modules/tome/data/gfx/talents/blastwave.png b/game/modules/tome/data/gfx/talents/blastwave.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebe3399fb6c552cdfc6e0393afdaa38307f6f148
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/blastwave.png differ
diff --git a/game/modules/tome/data/gfx/talents/blunt_thrust.png b/game/modules/tome/data/gfx/talents/blunt_thrust.png
new file mode 100644
index 0000000000000000000000000000000000000000..f44e17d8c1ef47cf367f73571a345895f2298c89
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/blunt_thrust.png differ
diff --git a/game/modules/tome/data/gfx/talents/blur_sight.png b/game/modules/tome/data/gfx/talents/blur_sight.png
new file mode 100644
index 0000000000000000000000000000000000000000..040e05a1378a657c711cd0f45295c01e80f41e26
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/blur_sight.png differ
diff --git a/game/modules/tome/data/gfx/talents/body_of_fire.png b/game/modules/tome/data/gfx/talents/body_of_fire.png
new file mode 100644
index 0000000000000000000000000000000000000000..1347a010e0e8b5d13e01e57942f98dc0f4032ecb
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/body_of_fire.png differ
diff --git a/game/modules/tome/data/gfx/talents/body_of_stone.png b/game/modules/tome/data/gfx/talents/body_of_stone.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d72ea660924cb276736c9cbf3619feca9fe46ee
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/body_of_stone.png differ
diff --git a/game/modules/tome/data/gfx/talents/burning_wake.png b/game/modules/tome/data/gfx/talents/burning_wake.png
new file mode 100644
index 0000000000000000000000000000000000000000..098f8bb106dc36e04ea159d2a88cfa773d35a33a
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/burning_wake.png differ
diff --git a/game/modules/tome/data/gfx/talents/chain_lightning.png b/game/modules/tome/data/gfx/talents/chain_lightning.png
new file mode 100644
index 0000000000000000000000000000000000000000..b44d17ad602004311aa1ce3ba6d96c80cf257647
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/chain_lightning.png differ
diff --git a/game/modules/tome/data/gfx/talents/channel_staff.png b/game/modules/tome/data/gfx/talents/channel_staff.png
new file mode 100644
index 0000000000000000000000000000000000000000..d88118c06c51dc43132096f7a06ccbcb4af755e2
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/channel_staff.png differ
diff --git a/game/modules/tome/data/gfx/talents/cleansing_flames.png b/game/modules/tome/data/gfx/talents/cleansing_flames.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ce6ce5abbca5e19ec201b1bed023272a8d96541
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/cleansing_flames.png differ
diff --git a/game/modules/tome/data/gfx/talents/congeal_time.png b/game/modules/tome/data/gfx/talents/congeal_time.png
new file mode 100644
index 0000000000000000000000000000000000000000..6626df3b4ae53b1b173cdc66c55a4cf6e45402e3
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/congeal_time.png differ
diff --git a/game/modules/tome/data/gfx/talents/corrosive_vapour.png b/game/modules/tome/data/gfx/talents/corrosive_vapour.png
new file mode 100644
index 0000000000000000000000000000000000000000..24e169d153b5445e7ab8b4b16acb24a808b3dff4
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/corrosive_vapour.png differ
diff --git a/game/modules/tome/data/gfx/talents/create_alchemist_gems.png b/game/modules/tome/data/gfx/talents/create_alchemist_gems.png
new file mode 100644
index 0000000000000000000000000000000000000000..2762950a020ff5dd9f2d352b56e248222a9b0a8a
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/create_alchemist_gems.png differ
diff --git a/game/modules/tome/data/gfx/talents/crystalline_focus.png b/game/modules/tome/data/gfx/talents/crystalline_focus.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9048f0bf2da574d0eb84b485b286049d2b64b7e
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/crystalline_focus.png differ
diff --git a/game/modules/tome/data/gfx/talents/defensive_posture.png b/game/modules/tome/data/gfx/talents/defensive_posture.png
new file mode 100644
index 0000000000000000000000000000000000000000..0317f9177c9753c9a254bbe780ff012a6ebfcf5f
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/defensive_posture.png differ
diff --git a/game/modules/tome/data/gfx/talents/dig.png b/game/modules/tome/data/gfx/talents/dig.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca2ebadb9479992236b60000c214441bbac985f6
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/dig.png differ
diff --git a/game/modules/tome/data/gfx/talents/disperse_magic.png b/game/modules/tome/data/gfx/talents/disperse_magic.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9cde3eac37712e742c6c765234a72b3640c9bc6
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/disperse_magic.png differ
diff --git a/game/modules/tome/data/gfx/talents/displacement_shield.png b/game/modules/tome/data/gfx/talents/displacement_shield.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f0c8eef2452c471d73908ef8b79317f5da91e17
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/displacement_shield.png differ
diff --git a/game/modules/tome/data/gfx/talents/disruption_shield.png b/game/modules/tome/data/gfx/talents/disruption_shield.png
new file mode 100644
index 0000000000000000000000000000000000000000..186f5d1e17a7a2ae316e203236bb55ef2b6d6829
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/disruption_shield.png differ
diff --git a/game/modules/tome/data/gfx/talents/earthen_barrier.png b/game/modules/tome/data/gfx/talents/earthen_barrier.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e23084273e93ced59e4c254c6e38ded693b344b
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/earthen_barrier.png differ
diff --git a/game/modules/tome/data/gfx/talents/earthen_missiles.png b/game/modules/tome/data/gfx/talents/earthen_missiles.png
new file mode 100644
index 0000000000000000000000000000000000000000..4800c1b39058457dfdb76c402bb44daa7ba603db
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/earthen_missiles.png differ
diff --git a/game/modules/tome/data/gfx/talents/earthquake.png b/game/modules/tome/data/gfx/talents/earthquake.png
new file mode 100644
index 0000000000000000000000000000000000000000..665f1a25a9dc25e2461ce25bf4a05ed1af70793a
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/earthquake.png differ
diff --git a/game/modules/tome/data/gfx/talents/essence_of_speed.png b/game/modules/tome/data/gfx/talents/essence_of_speed.png
new file mode 100644
index 0000000000000000000000000000000000000000..93ccfa0daac42bd770047f48cd503f2d6f6c5f46
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/essence_of_speed.png differ
diff --git a/game/modules/tome/data/gfx/talents/explosion_expert.png b/game/modules/tome/data/gfx/talents/explosion_expert.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fa1b054806014025f8d9a0c28a824c087768567
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/explosion_expert.png differ
diff --git a/game/modules/tome/data/gfx/talents/extract_gems.png b/game/modules/tome/data/gfx/talents/extract_gems.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc4cfaeb1c43eab58d3f7b75a175a94faf461657
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/extract_gems.png differ
diff --git a/game/modules/tome/data/gfx/talents/feather_wind.png b/game/modules/tome/data/gfx/talents/feather_wind.png
new file mode 100644
index 0000000000000000000000000000000000000000..5fa506cd3340764888b7caa3cb823481845c702d
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/feather_wind.png differ
diff --git a/game/modules/tome/data/gfx/talents/fiery_hands.png b/game/modules/tome/data/gfx/talents/fiery_hands.png
new file mode 100644
index 0000000000000000000000000000000000000000..7359e781b081697f22a1d0a7cfc597c2f3f56dff
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/fiery_hands.png differ
diff --git a/game/modules/tome/data/gfx/talents/fire_infusion.png b/game/modules/tome/data/gfx/talents/fire_infusion.png
new file mode 100644
index 0000000000000000000000000000000000000000..c58a7bf656e3a977233aa2ab7c00705049a6a777
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/fire_infusion.png differ
diff --git a/game/modules/tome/data/gfx/talents/fire_storm.png b/game/modules/tome/data/gfx/talents/fire_storm.png
new file mode 100644
index 0000000000000000000000000000000000000000..02ffd87ae7d1a49cd20a1339fc2ee7ee827ee81f
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/fire_storm.png differ
diff --git a/game/modules/tome/data/gfx/talents/fireflash.png b/game/modules/tome/data/gfx/talents/fireflash.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e5e5941bd6c1400ca927991919b6dabe217d7fb
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/fireflash.png differ
diff --git a/game/modules/tome/data/gfx/talents/flame.png b/game/modules/tome/data/gfx/talents/flame.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff04e0ad81b54806033fb2517fd760e39a190261
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/flame.png differ
diff --git a/game/modules/tome/data/gfx/talents/flameshock.png b/game/modules/tome/data/gfx/talents/flameshock.png
new file mode 100644
index 0000000000000000000000000000000000000000..36bce568449e210ab88f297bf9e76ae7e0b89a32
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/flameshock.png differ
diff --git a/game/modules/tome/data/gfx/talents/freeze.png b/game/modules/tome/data/gfx/talents/freeze.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe66397df3932ea3d46c49644e5a2a7b31518611
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/freeze.png differ
diff --git a/game/modules/tome/data/gfx/talents/frost_hands.png b/game/modules/tome/data/gfx/talents/frost_hands.png
new file mode 100644
index 0000000000000000000000000000000000000000..5809b3a4009fb30c26a07e6ec29ae7009db271d5
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/frost_hands.png differ
diff --git a/game/modules/tome/data/gfx/talents/frost_infusion.png b/game/modules/tome/data/gfx/talents/frost_infusion.png
new file mode 100644
index 0000000000000000000000000000000000000000..7489ded2af788be1465f66d79b261f2295f87ae8
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/frost_infusion.png differ
diff --git a/game/modules/tome/data/gfx/talents/frozen_ground.png b/game/modules/tome/data/gfx/talents/frozen_ground.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e79371ceb592ec3df807db3461945522b7f4874
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/frozen_ground.png differ
diff --git a/game/modules/tome/data/gfx/talents/gem_golem.png b/game/modules/tome/data/gfx/talents/gem_golem.png
new file mode 100644
index 0000000000000000000000000000000000000000..604f4d798b8b5648edb32a0f81b8439def7dad39
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/gem_golem.png differ
diff --git a/game/modules/tome/data/gfx/talents/gem_portal.png b/game/modules/tome/data/gfx/talents/gem_portal.png
new file mode 100644
index 0000000000000000000000000000000000000000..acaf7c21f8406b1d189d4519e5c1e35794b4d6c0
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/gem_portal.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_arcane_pull.png b/game/modules/tome/data/gfx/talents/golem_arcane_pull.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3648d8dbcfabf0439f18a07ba0fd8c9e6fdb954
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_arcane_pull.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_beam.png b/game/modules/tome/data/gfx/talents/golem_beam.png
new file mode 100644
index 0000000000000000000000000000000000000000..ccba8f6bb1bdfaa35d69d32b8d2286b44ae80c68
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_beam.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_crush.png b/game/modules/tome/data/gfx/talents/golem_crush.png
new file mode 100644
index 0000000000000000000000000000000000000000..bedc90f332718fab3ca156c3b3c7399505222300
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_crush.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_destruct.png b/game/modules/tome/data/gfx/talents/golem_destruct.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3aeeb9307676dea5d70a39aa1d4f49302041bd9
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_destruct.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_knockback.png b/game/modules/tome/data/gfx/talents/golem_knockback.png
new file mode 100644
index 0000000000000000000000000000000000000000..a786af7706e5ccf2d94202558a5a575048a9fbf7
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_knockback.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_molten_skin.png b/game/modules/tome/data/gfx/talents/golem_molten_skin.png
new file mode 100644
index 0000000000000000000000000000000000000000..46157a1b8a3b67dca7e26d114e3240f6e98d5c7e
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_molten_skin.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_portal.png b/game/modules/tome/data/gfx/talents/golem_portal.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f9e637d9f9c82af1e0167d7b03d392eae964908
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_portal.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_pound.png b/game/modules/tome/data/gfx/talents/golem_pound.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6dece1f50cd397db84e9ffd843dbc29a6755804
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_pound.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_power.png b/game/modules/tome/data/gfx/talents/golem_power.png
new file mode 100644
index 0000000000000000000000000000000000000000..651b4afbbb6ba35a5ac114dc2c5e1e380ef38918
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_power.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_reflective_skin.png b/game/modules/tome/data/gfx/talents/golem_reflective_skin.png
new file mode 100644
index 0000000000000000000000000000000000000000..af6012835afdd4c27fa2d1b208706f85041d6ad5
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_reflective_skin.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_resilience.png b/game/modules/tome/data/gfx/talents/golem_resilience.png
new file mode 100644
index 0000000000000000000000000000000000000000..05cb5f0ca283abab3ff313b2d0c97888cc7b7918
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_resilience.png differ
diff --git a/game/modules/tome/data/gfx/talents/golem_taunt.png b/game/modules/tome/data/gfx/talents/golem_taunt.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e5e4a63d2dd5b0f7f17a8cae7c1f437373e346f
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/golem_taunt.png differ
diff --git a/game/modules/tome/data/gfx/talents/heal.png b/game/modules/tome/data/gfx/talents/heal.png
new file mode 100644
index 0000000000000000000000000000000000000000..18d74c25d5f295a6ab2f8411eec6d27d3657b949
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/heal.png differ
diff --git a/game/modules/tome/data/gfx/talents/heat.png b/game/modules/tome/data/gfx/talents/heat.png
new file mode 100644
index 0000000000000000000000000000000000000000..299f6ce18c4003c47abd889fc0888684eab74193
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/heat.png differ
diff --git a/game/modules/tome/data/gfx/talents/hurricane.png b/game/modules/tome/data/gfx/talents/hurricane.png
new file mode 100644
index 0000000000000000000000000000000000000000..6abd6c97fc52f66992f107dfef4056bfcc26db97
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/hurricane.png differ
diff --git a/game/modules/tome/data/gfx/talents/ice_shards.png b/game/modules/tome/data/gfx/talents/ice_shards.png
new file mode 100644
index 0000000000000000000000000000000000000000..62a7efe21be8346e17f017f48d2c00a6daed74eb
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/ice_shards.png differ
diff --git a/game/modules/tome/data/gfx/talents/ice_storm.png b/game/modules/tome/data/gfx/talents/ice_storm.png
new file mode 100644
index 0000000000000000000000000000000000000000..6accfcecd10249ac36300b90f305aef23e23337a
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/ice_storm.png differ
diff --git a/game/modules/tome/data/gfx/talents/illuminate.png b/game/modules/tome/data/gfx/talents/illuminate.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e0f3c4626c933b5b524ae4fbb02afe6055e53f8
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/illuminate.png differ
diff --git a/game/modules/tome/data/gfx/talents/imbue_item.png b/game/modules/tome/data/gfx/talents/imbue_item.png
new file mode 100644
index 0000000000000000000000000000000000000000..2759ff8744e8be431ff4defe83e118cfd914724c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/imbue_item.png differ
diff --git a/game/modules/tome/data/gfx/talents/inferno.png b/game/modules/tome/data/gfx/talents/inferno.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9d78cbfdf0bfe07947f5c3b80b2b85616799f13
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/inferno.png differ
diff --git a/game/modules/tome/data/gfx/talents/inner_power.png b/game/modules/tome/data/gfx/talents/inner_power.png
new file mode 100644
index 0000000000000000000000000000000000000000..db392750c1a7dd6cccd591a5d90022c5460ae2c6
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/inner_power.png differ
diff --git a/game/modules/tome/data/gfx/talents/invisibility.png b/game/modules/tome/data/gfx/talents/invisibility.png
new file mode 100644
index 0000000000000000000000000000000000000000..083a910c08ae0afc46a1ea110f63240430e38606
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/invisibility.png differ
diff --git a/game/modules/tome/data/gfx/talents/invoke_golem.png b/game/modules/tome/data/gfx/talents/invoke_golem.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8a632cf0d213c2f41e90445ca62a1f6ffa4f1c8
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/invoke_golem.png differ
diff --git a/game/modules/tome/data/gfx/talents/keen_senses.png b/game/modules/tome/data/gfx/talents/keen_senses.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0685368dc897118083c60350c129fb43948c025
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/keen_senses.png differ
diff --git a/game/modules/tome/data/gfx/talents/life_tap.png b/game/modules/tome/data/gfx/talents/life_tap.png
new file mode 100644
index 0000000000000000000000000000000000000000..f89dfcba9730cbd085864fd3fc100a614f791a8e
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/life_tap.png differ
diff --git a/game/modules/tome/data/gfx/talents/lightning.png b/game/modules/tome/data/gfx/talents/lightning.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec7208f2bd51f41ac6ea46780a1fe1fac0ebdfbe
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/lightning.png differ
diff --git a/game/modules/tome/data/gfx/talents/lightning_infusion.png b/game/modules/tome/data/gfx/talents/lightning_infusion.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1bbb002b0d741110b091b17e0627d8574ad3644
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/lightning_infusion.png differ
diff --git a/game/modules/tome/data/gfx/talents/manaflow.png b/game/modules/tome/data/gfx/talents/manaflow.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c33d7b6685b50438db0af3773d791456c787814
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/manaflow.png differ
diff --git a/game/modules/tome/data/gfx/talents/manathrust.png b/game/modules/tome/data/gfx/talents/manathrust.png
new file mode 100644
index 0000000000000000000000000000000000000000..6238a5c90b38889c6cba73673d6cb12f4fa0e0f3
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/manathrust.png differ
diff --git a/game/modules/tome/data/gfx/talents/metaflow.png b/game/modules/tome/data/gfx/talents/metaflow.png
new file mode 100644
index 0000000000000000000000000000000000000000..471c2571fb6e6e78613ee4e47c9b36d13f21381a
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/metaflow.png differ
diff --git a/game/modules/tome/data/gfx/talents/nova.png b/game/modules/tome/data/gfx/talents/nova.png
new file mode 100644
index 0000000000000000000000000000000000000000..6914fa65c3e33c50381895e53a49a8700c3e81e5
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/nova.png differ
diff --git a/game/modules/tome/data/gfx/talents/phantasmal_shield.png b/game/modules/tome/data/gfx/talents/phantasmal_shield.png
new file mode 100644
index 0000000000000000000000000000000000000000..47c392e836aec42139211f12911ac819b438a29c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/phantasmal_shield.png differ
diff --git a/game/modules/tome/data/gfx/talents/phase_door.png b/game/modules/tome/data/gfx/talents/phase_door.png
new file mode 100644
index 0000000000000000000000000000000000000000..7759ad6c32112aa45c2dd43f469a6c74e8c97379
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/phase_door.png differ
diff --git a/game/modules/tome/data/gfx/talents/premonition.png b/game/modules/tome/data/gfx/talents/premonition.png
new file mode 100644
index 0000000000000000000000000000000000000000..54a0c3d7e109832d6fc8205cbeae3f97f4c5d4a6
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/premonition.png differ
diff --git a/game/modules/tome/data/gfx/talents/probability_travel.png b/game/modules/tome/data/gfx/talents/probability_travel.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ed2f934427c2fde2c84149ced979f68f015c964
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/probability_travel.png differ
diff --git a/game/modules/tome/data/gfx/talents/probabiliy_travel.png b/game/modules/tome/data/gfx/talents/probabiliy_travel.png
new file mode 100644
index 0000000000000000000000000000000000000000..7cb5537c524333ccd3034ae5b19433039b3ac04c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/probabiliy_travel.png differ
diff --git a/game/modules/tome/data/gfx/talents/quicken_spells.png b/game/modules/tome/data/gfx/talents/quicken_spells.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec7b4b5d63bb013e06cde867f37f669783d49a42
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/quicken_spells.png differ
diff --git a/game/modules/tome/data/gfx/talents/refit_golem.png b/game/modules/tome/data/gfx/talents/refit_golem.png
new file mode 100644
index 0000000000000000000000000000000000000000..4319aa686aa91fd36f60ccc83d1b7ecd11314ff5
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/refit_golem.png differ
diff --git a/game/modules/tome/data/gfx/talents/runic_golem.png b/game/modules/tome/data/gfx/talents/runic_golem.png
new file mode 100644
index 0000000000000000000000000000000000000000..14f7275a171f2d12ca6e4765e6e8c8c4245278a9
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/runic_golem.png differ
diff --git a/game/modules/tome/data/gfx/talents/shatter.png b/game/modules/tome/data/gfx/talents/shatter.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f138d1a5b4ad653aabed75d487d5f3e663a6380
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/shatter.png differ
diff --git a/game/modules/tome/data/gfx/talents/shielding.png b/game/modules/tome/data/gfx/talents/shielding.png
new file mode 100644
index 0000000000000000000000000000000000000000..3f3a865dc3f2681d55ac383aa0ebe6fd268bc230
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/shielding.png differ
diff --git a/game/modules/tome/data/gfx/talents/shock.png b/game/modules/tome/data/gfx/talents/shock.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c2ad5cd04bf59f79a074c8529178bc27b0fc709
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/shock.png differ
diff --git a/game/modules/tome/data/gfx/talents/shockwave_bomb.png b/game/modules/tome/data/gfx/talents/shockwave_bomb.png
new file mode 100644
index 0000000000000000000000000000000000000000..aefc404e61079959f3c68b7d73fe1cf1d0d713f1
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/shockwave_bomb.png differ
diff --git a/game/modules/tome/data/gfx/talents/smoke_bomb.png b/game/modules/tome/data/gfx/talents/smoke_bomb.png
new file mode 100644
index 0000000000000000000000000000000000000000..321eb28e2284332ac5aa87b5bf9fa9eac3f73fb4
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/smoke_bomb.png differ
diff --git a/game/modules/tome/data/gfx/talents/spell_shaping.png b/game/modules/tome/data/gfx/talents/spell_shaping.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3a6878f9c0a79382f462a758e0f8edf63c1303b
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/spell_shaping.png differ
diff --git a/game/modules/tome/data/gfx/talents/staff_mastery.png b/game/modules/tome/data/gfx/talents/staff_mastery.png
new file mode 100644
index 0000000000000000000000000000000000000000..48663f7cefa8c1f868ea30259fa3f705ad874df1
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/staff_mastery.png differ
diff --git a/game/modules/tome/data/gfx/talents/stone_skin.png b/game/modules/tome/data/gfx/talents/stone_skin.png
new file mode 100644
index 0000000000000000000000000000000000000000..31d6fb197f372327b39162b810717eee57a93c00
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/stone_skin.png differ
diff --git a/game/modules/tome/data/gfx/talents/stone_touch.png b/game/modules/tome/data/gfx/talents/stone_touch.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d56d113960fd095d6f7615672c010693abec21a
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/stone_touch.png differ
diff --git a/game/modules/tome/data/gfx/talents/stone_wall.png b/game/modules/tome/data/gfx/talents/stone_wall.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d6e434583bace46874abb96dad6f3196dc99485
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/stone_wall.png differ
diff --git a/game/modules/tome/data/gfx/talents/strike.png b/game/modules/tome/data/gfx/talents/strike.png
new file mode 100644
index 0000000000000000000000000000000000000000..d61660cea5b10563b6315dcd842c20b1c222dc39
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/strike.png differ
diff --git a/game/modules/tome/data/gfx/talents/supercharge_golem.png b/game/modules/tome/data/gfx/talents/supercharge_golem.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fda8bc549f1659f253d17bc14d936be06cd2cda
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/supercharge_golem.png differ
diff --git a/game/modules/tome/data/gfx/talents/teleport.png b/game/modules/tome/data/gfx/talents/teleport.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b6471c748628cc3b8b0f3906371bba47ba14bd3
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/teleport.png differ
diff --git a/game/modules/tome/data/gfx/talents/tempest.png b/game/modules/tome/data/gfx/talents/tempest.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a85f837e89a0a6f26f7b0d2360ebcc2b88243e4
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/tempest.png differ
diff --git a/game/modules/tome/data/gfx/talents/throw_bomb.png b/game/modules/tome/data/gfx/talents/throw_bomb.png
new file mode 100644
index 0000000000000000000000000000000000000000..33e1de3c76b5c7be80955114f38b8b76c07ce3ec
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/throw_bomb.png differ
diff --git a/game/modules/tome/data/gfx/talents/thunderstorm.png b/game/modules/tome/data/gfx/talents/thunderstorm.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d0fece666e82be5a93fa9135c0c1a14b5978f0e
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/thunderstorm.png differ
diff --git a/game/modules/tome/data/gfx/talents/tidal_wave.png b/game/modules/tome/data/gfx/talents/tidal_wave.png
new file mode 100644
index 0000000000000000000000000000000000000000..5542bf7f1d29205a3c11407cdc7f9fbac18a34c6
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/tidal_wave.png differ
diff --git a/game/modules/tome/data/gfx/talents/time_prison.png b/game/modules/tome/data/gfx/talents/time_prison.png
new file mode 100644
index 0000000000000000000000000000000000000000..d81a3dec223bf1913585f1c8c0fdd7fd7d249dce
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/time_prison.png differ
diff --git a/game/modules/tome/data/gfx/talents/time_shield.png b/game/modules/tome/data/gfx/talents/time_shield.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a165ec377c691ee5293c273879e95b6ceeefd77
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/time_shield.png differ
diff --git a/game/modules/tome/data/gfx/talents/uttercold.png b/game/modules/tome/data/gfx/talents/uttercold.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b93ed9aa87bbb7bdd6d279d913ebfc7d071ac56
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/uttercold.png differ
diff --git a/game/modules/tome/data/gfx/talents/vision.png b/game/modules/tome/data/gfx/talents/vision.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b63349cb2105ee5d12f3a33217adde44e4d11fb
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/vision.png differ
diff --git a/game/modules/tome/data/gfx/talents/wildfire.png b/game/modules/tome/data/gfx/talents/wildfire.png
new file mode 100644
index 0000000000000000000000000000000000000000..e23b07cfcf9d9003ec9eda426617f7886f180e88
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/wildfire.png differ
diff --git a/game/modules/tome/data/talents.lua b/game/modules/tome/data/talents.lua
index 55b31d6e7fb0adab478da56f74cb9583282cd036..39843ff1fa7d6d0c42f5ae2f906e36434a551ada 100644
--- a/game/modules/tome/data/talents.lua
+++ b/game/modules/tome/data/talents.lua
@@ -18,6 +18,7 @@
 -- darkgod@te4.org
 
 local tacticals = {}
+local Entity = require "engine.Entity"
 
 local oldNewTalent = newTalent
 newTalent = function(t)
@@ -36,19 +37,11 @@ newTalent = function(t)
 		end
 		t.tactical = tacts
 	end
---[[
-	if t.image then
-		if type(t.image) == "boolean" then
-			local name = t.name:gsub(" ", ""):lower()
-			t.image = core.display.loadImage("data/gfx/talents/"..name..".png")
-			assert(t.image, "talent auto image requested by not found for: "..t.name)
-		else
-			t.image = core.display.loadImage("data/gfx/"..t.image..".png")
-			assert(t.image, "talent image requested by not found for: "..t.name)
-		end
-		t.image_texture = t.image:glTexture()
+
+	if not t.image then
+		t.image = "talents/"..(t.short_name or t.name):lower():gsub("[^a-z0-9_]", "_")..".png"
 	end
-]]
+	t.display_entity = Entity.new{image=t.image}
 	return oldNewTalent(t)
 end
 
diff --git a/game/modules/tome/data/talents/spells/fire.lua b/game/modules/tome/data/talents/spells/fire.lua
index 9cc0372dbd40ff4ac09ed4db7513ce1ed222710f..691bb8a1e46f769278407db768cb09b6f003e002 100644
--- a/game/modules/tome/data/talents/spells/fire.lua
+++ b/game/modules/tome/data/talents/spells/fire.lua
@@ -18,7 +18,7 @@
 -- darkgod@te4.org
 
 newTalent{
-	name = "Flame", image = true,
+	name = "Flame",
 	type = {"spell/fire",1},
 	require = spells_req1,
 	points = 5,
diff --git a/src/core_lua.c b/src/core_lua.c
index b17cffd0e5111c3a2f7573bec778b7f3584c3dbd..bd360d187b4d81bb384fdcb377eb204107d87fdf 100644
--- a/src/core_lua.c
+++ b/src/core_lua.c
@@ -955,6 +955,97 @@ static int gl_draw_quad(lua_State *L)
 	return 0;
 }
 
+static int gl_draw_quad_part(lua_State *L)
+{
+	int x = luaL_checknumber(L, 1);
+	int y = luaL_checknumber(L, 2);
+	int w = luaL_checknumber(L, 3);
+	int h = luaL_checknumber(L, 4);
+	float angle = luaL_checknumber(L, 5);
+	float r = luaL_checknumber(L, 6) / 255;
+	float g = luaL_checknumber(L, 7) / 255;
+	float b = luaL_checknumber(L, 8) / 255;
+	float a = luaL_checknumber(L, 9) / 255;
+
+	int xw = w + x;
+	int yh = h + y;
+	int midx = x + w / 2, midy = y + h / 2;
+
+	if (lua_isuserdata(L, 10))
+	{
+		GLuint *t = (GLuint*)auxiliar_checkclass(L, "gl{texture}", 10);
+		tglBindTexture(GL_TEXTURE_2D, *t);
+	}
+	else if (lua_toboolean(L, 10))
+	{
+		// Do nothing, we keep the currently bound texture
+	}
+	else
+	{
+		tglBindTexture(GL_TEXTURE_2D, gl_tex_white);
+	}
+
+	GLfloat texcoords[2*10] = {
+		0, 0,
+		0, 1,
+		1, 1,
+		1, 0,
+		1, 0,
+		1, 0,
+		1, 0,
+		1, 0,
+		1, 0,
+		1, 0,
+	};
+	GLfloat colors[4*10] = {
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+	};
+	GLfloat vertices[2*10] = {
+		midx, midy,
+		midx, y,
+	};
+
+	if (angle < 0) angle = 0;
+	else if (angle > 360) angle = 360;
+
+	int i = 4;
+	float quadrant = angle / 45;
+	float rad = (angle - (45 * (int)quadrant)) * M_PI / 180;
+	float s = sin(rad) / 2;
+
+	if (quadrant >= 7)                 { vertices[i++] = x + w * s; vertices[i++] = y; }
+	else if (quadrant < 7)             { vertices[i++] = x; vertices[i++] = y; }
+	if (quadrant >= 6 && quadrant < 7) { vertices[i++] = x; vertices[i++] = midy - h * s; }
+	else if (quadrant < 6)             { vertices[i++] = x; vertices[i++] = midy; }
+	if (quadrant >= 5 && quadrant < 6) { vertices[i++] = x; vertices[i++] = yh - h * s; }
+	else if (quadrant < 5)             { vertices[i++] = x; vertices[i++] = yh; }
+	if (quadrant >= 4 && quadrant < 5) { vertices[i++] = midx - w * s; vertices[i++] = yh; }
+	else if (quadrant < 4)             { vertices[i++] = midx; vertices[i++] = yh; }
+	if (quadrant >= 3 && quadrant < 4) { vertices[i++] = xw - w * s; vertices[i++] = yh; }
+	else if (quadrant < 3)             { vertices[i++] = xw; vertices[i++] = yh; }
+	if (quadrant >= 2 && quadrant < 3) { vertices[i++] = xw; vertices[i++] = midy + h * s; }
+	else if (quadrant < 2)             { vertices[i++] = xw; vertices[i++] = midy; }
+	if (quadrant >= 1 && quadrant < 2) { vertices[i++] = xw; vertices[i++] = y + h * s; }
+	else if (quadrant < 1)             { vertices[i++] = xw; vertices[i++] = y; }
+	if (quadrant >= 0 && quadrant < 1) { vertices[i++] = midx + w * s; vertices[i++] = y; }
+
+	glColorPointer(4, GL_FLOAT, 0, colors);
+	glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
+	glVertexPointer(2, GL_FLOAT, 0, vertices);
+
+	glDrawArrays(GL_TRIANGLE_FAN, 0, i / 2);
+	return 0;
+}
+
 
 static int sdl_load_image(lua_State *L)
 {
@@ -1888,6 +1979,7 @@ static const struct luaL_reg displaylib[] =
 	{"newFBO", gl_new_fbo},
 	{"newQuadratic", gl_new_quadratic},
 	{"drawQuad", gl_draw_quad},
+	{"drawQuadPart", gl_draw_quad_part},
 	{"FBOActive", gl_fbo_is_active},
 	{"disableFBO", gl_fbo_disable},
 	{"drawStringNewSurface", sdl_surface_drawstring_newsurface},