diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index af392548834a96fbd92aff3a63642d6f836510df..979d33baa159dffdf55d8c24591c5be75e6c33f4 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -3323,8 +3323,6 @@ function _M:levelup()
 		self:no_points_on_levelup()
 	end
 
-	if self:knowTalent(self.T_LEGACY_OF_THE_NALOREN) then self:callTalent(self.T_LEGACY_OF_THE_NALOREN,"updateTalent") end-- Update Bonus Talent levels
-
 	-- Gain some basic resistances
 	if not self.no_auto_resists then
 		-- Make up a random list of resists the first time
@@ -3386,11 +3384,7 @@ function _M:levelup()
 		engine.Autolevel:autoLevel(self)
 	end
 
-	-- Force levelup of the golem
-	if self.alchemy_golem then
-		self.alchemy_golem.max_level = self.max_level  -- make sure golem can level up with master
-		self.alchemy_golem:forceLevelup(self.level)
-	end
+	self:fireTalentCheck("callbackOnLevelup", self.level)
 
 	-- Notify party levelups
 	if self.x and self.y and game.party:hasMember(self) and not self.silent_levelup then
@@ -4890,6 +4884,7 @@ local sustainCallbackCheck = {
 	callbackOnMove = "talents_on_move",
 	callbackOnRest = "talents_on_rest",
 	callbackOnRun = "talents_on_run",
+	callbackOnLevelup = "talents_on_levelup",
 	callbackOnDeath = "talents_on_death",
 	callbackOnSummonDeath = "talents_on_summon_death",
 	callbackOnKill = "talents_on_kill",
diff --git a/game/modules/tome/data/talents/spells/golemancy.lua b/game/modules/tome/data/talents/spells/golemancy.lua
index 888d421eb7f82dd3282aa48ae68bbdcba1d506dc..30daa409f874468a9d0e6854ca4d4acb45122d4f 100644
--- a/game/modules/tome/data/talents/spells/golemancy.lua
+++ b/game/modules/tome/data/talents/spells/golemancy.lua
@@ -316,6 +316,12 @@ newTalent{
 		game:playSoundNear(self, "talents/arcane")
 		return true
 	end,
+	-- This is an all-catch talent, and it is auto-learned on anything involving golems, so this is a good place to stick that onto
+	callbackOnLevelup = function(self, t, new_level)
+		local _, golem = getGolem(self)
+		golem.max_level = self.max_level
+		golem:forceLevelup(new_level)
+	end,
 	info = function(self, t)
 		local heal = t.getHeal(self, t)
 		return ([[Take care of your golem:
diff --git a/game/modules/tome/data/talents/uber/str.lua b/game/modules/tome/data/talents/uber/str.lua
index 9202a4d4ea53731099366587c49b59d102c9e3d1..a2a5c2e252d3fd8cdbca46036fef9431be2cf474 100644
--- a/game/modules/tome/data/talents/uber/str.lua
+++ b/game/modules/tome/data/talents/uber/str.lua
@@ -171,7 +171,7 @@ uberTalent{
 	end} },
 	-- _M:levelup function in mod.class.Actor.lua updates the talent levels with character level
 	bonusLevel = function(self, t) return math.ceil(self.level/10) end,
-	updateTalent = function(self, t)
+	callbackOnLevelup = function(self, t, new_level)
 		local p = self.talents_learn_vals[t.id] or {}
 		if p.__tmpvals then
 			for i = 1, #p.__tmpvals do