diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 35c9d883bba3fbb784b55f02ac1b25c27dc7141f..154540f30e733c08db8c6459934ae491a55c0914 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -69,7 +69,6 @@ _M.__is_actor = true
 _M.stats_per_level = 3
 
 -- Speeds are multiplicative, not additive
-_M.temporary_values_conf.global_speed = "inv1"
 _M.temporary_values_conf.movement_speed = "mult0"
 _M.temporary_values_conf.combat_physspeed = "mult0"
 _M.temporary_values_conf.combat_spellspeed = "mult0"
@@ -85,6 +84,8 @@ function _M:init(t, no_default)
 	self.combat_apr = 0
 	self.combat_dam = 0
 	self.global_speed = 1
+	self.global_speed_base = 1
+	self.global_speed_add = 0
 	self.movement_speed = 1
 	self.combat_physcrit = 0
 	self.combat_physspeed = 1
@@ -210,6 +211,7 @@ function _M:init(t, no_default)
 	self.talents[self.T_ATTACK] = self.talents[self.T_ATTACK] or 1
 
 	self:resetCanSeeCache()
+	self:recomputeGlobalSpeed()
 end
 
 function _M:useEnergy(val)
@@ -1700,6 +1702,12 @@ function _M:onStatChange(stat, v)
 	end
 end
 
+function _M:recomputeGlobalSpeed()
+	if self.global_speed_add > 0 then self.global_speed = self.global_speed_base + self.global_speed_add
+	else self.global_speed = self.global_speed_base * math.exp(self.global_speed_add)
+	end
+end
+
 --- Called when a temporary value changes (added or deleted)
 -- Takes care to call onStatChange when needed
 -- @param prop the property changing
@@ -1708,6 +1716,8 @@ end
 function _M:onTemporaryValueChange(prop, v, base)
 	if base == self.inc_stats then
 		self:onStatChange(prop, v)
+	elseif prop == "global_speed_add" then
+		self:recomputeGlobalSpeed()
 	end
 end
 
diff --git a/game/modules/tome/data/birth/races/undead.lua b/game/modules/tome/data/birth/races/undead.lua
index 4f4e355fa30a7463ecffa5b14fd09adc9a3bd2c7..9c0bfc535e323b3bb978ac8d140d3800241c7d2f 100644
--- a/game/modules/tome/data/birth/races/undead.lua
+++ b/game/modules/tome/data/birth/races/undead.lua
@@ -114,7 +114,7 @@ newBirthDescriptor
 		cut_immune = 1,
 		stun_immune = 0.5,
 		fear_immune = 1,
-		global_speed = 0.8,
+		global_speed_add = -0.2,
 		moddable_tile = "ghoul",
 		moddable_tile_nude = true,
 	},
diff --git a/game/modules/tome/data/general/npcs/bear.lua b/game/modules/tome/data/general/npcs/bear.lua
index f417e63d02535ac3d8fa9382b781adc07dcb67d2..804dc989a145b2ce3da0a9aeaea21a747ff7786d 100644
--- a/game/modules/tome/data/general/npcs/bear.lua
+++ b/game/modules/tome/data/general/npcs/bear.lua
@@ -31,7 +31,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
-	global_speed = 0.9,
+	global_speed_base = 0.9,
 	stats = { str=18, dex=13, mag=5, con=15 },
 	infravision = 10,
 	rank = 2,
diff --git a/game/modules/tome/data/general/npcs/bird.lua b/game/modules/tome/data/general/npcs/bird.lua
index 2ac50f30bded41e14f8b02fbf22a76c11b0b90e5..399ec225d084746a4a5a317b6b4548dd18dbe29a 100644
--- a/game/modules/tome/data/general/npcs/bird.lua
+++ b/game/modules/tome/data/general/npcs/bird.lua
@@ -30,7 +30,7 @@ newEntity{
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 
 	stats = { str=12, dex=20, mag=3, con=13 },
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	combat_armor = 1, combat_def = 5,
 	combat = { dam=5, atk=15, apr=7, dammod={str=0.6} },
 	infravision = 10,
diff --git a/game/modules/tome/data/general/npcs/canine.lua b/game/modules/tome/data/general/npcs/canine.lua
index 7cf1cefee4c711a04dad38cf10ac4dc3fe1ff728..d93af5454e605080942482951cd5ed060d78730c 100644
--- a/game/modules/tome/data/general/npcs/canine.lua
+++ b/game/modules/tome/data/general/npcs/canine.lua
@@ -34,7 +34,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	stats = { str=10, dex=17, mag=3, con=7 },
 	combat = { dammod={str=0.6} },
 	combat_armor = 1, combat_def = 1,
diff --git a/game/modules/tome/data/general/npcs/crystal.lua b/game/modules/tome/data/general/npcs/crystal.lua
index e63d742ef1e4ac73c3d6b97e3307db10dd47ad02..b356b89756d2a02b61b90c74d17c1e112daed606 100644
--- a/game/modules/tome/data/general/npcs/crystal.lua
+++ b/game/modules/tome/data/general/npcs/crystal.lua
@@ -14,7 +14,7 @@ newEntity{
 
 	max_life = resolvers.rngavg(12,34),
 	stats = { str=1, dex=5, mag=20, con=1 },
-	global_speed = 0.7,
+	global_speed_base = 0.7,
 	infravision = 10,
 	combat_def = 1,
 	never_move = 1,
@@ -53,7 +53,7 @@ newEntity{ name = "wisp",
 	life_rating = 1, rank = 1, size_category = 1,
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move = "move_astar", talent_in = 1 },
-	global_speed = 1,
+	global_speed_base = 1,
 	stats = { str = 9, dex = 20, mag = 20 },
 	resolvers.talents{
 		[Talents.T_EXPLODE] = 3,
diff --git a/game/modules/tome/data/general/npcs/horror-corrupted.lua b/game/modules/tome/data/general/npcs/horror-corrupted.lua
index 9e45d6a33861c05c2a2b961732dbaedba9c068f3..ea022de532422df4072c07a2f3783ab6cc97fc38 100644
--- a/game/modules/tome/data/general/npcs/horror-corrupted.lua
+++ b/game/modules/tome/data/general/npcs/horror-corrupted.lua
@@ -170,7 +170,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	autolevel = "rogue",
 	ai = "tactical", ai_state = { talent_in=2, ai_move="move_astar", },
 	ai_tactic = resolvers.tactic "ranged",
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 
 	resists = { [DamageType.BLIGHT] = 50, [DamageType.DARKNESS] = 20,  [DamageType.LIGHT] = - 20 },
 
@@ -197,7 +197,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	size_category = 3,
 	autolevel = "warrior",
 
-	global_speed = 0.8,
+	global_speed_base = 0.8,
 
 	resists = { [DamageType.ACID] = 50, [DamageType.DARKNESS] = 20,  [DamageType.LIGHT] = - 20 },
 
@@ -227,7 +227,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
 
-	global_speed = 0.8,
+	global_speed_base = 0.8,
 
 	resists = { [DamageType.DARKNESS] = 50,  [DamageType.LIGHT] = - 20 },
 
diff --git a/game/modules/tome/data/general/npcs/horror.lua b/game/modules/tome/data/general/npcs/horror.lua
index 82c4e22e8f2be168dd4ac5c1d4bb4cbfe47c653b..a7d2322b0fcc8d1b774b56ec40a89b35b02a1c7f 100644
--- a/game/modules/tome/data/general/npcs/horror.lua
+++ b/game/modules/tome/data/general/npcs/horror.lua
@@ -44,7 +44,7 @@ newEntity{
 
 newEntity{ base = "BASE_NPC_HORROR",
 	name = "worm that walks", color=colors.SANDY_BROWN,
-	desc = [[A bulging rotten robe seems to tear at the seams, with masses of bloated worms spilling from out and around the moving form.  Two arm-like appendages, each made up of overlapping mucous-drenched maggots, grasp tightly around the handles of bile-coated waraxes. 
+	desc = [[A bulging rotten robe seems to tear at the seams, with masses of bloated worms spilling from out and around the moving form.  Two arm-like appendages, each made up of overlapping mucous-drenched maggots, grasp tightly around the handles of bile-coated waraxes.
 	Each swing drips pestulant fluid before it, and each droplet writhes and wriggles in the air before splashing against the ground.]],
 	level_range = {25, nil}, exp_worth = 1,
 	rarity = 5,
@@ -53,7 +53,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	rank = 3,
 	hate_regen = 1,
 	vim_regen = 1,
-	
+
 	autolevel = "warriormage",
 	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=1, ally_compassion=0 },
 	ai_tactic = resolvers.tactic "melee",
@@ -65,9 +65,9 @@ newEntity{ base = "BASE_NPC_HORROR",
 	disease_immune = 1,
 
 	resists = { [DamageType.PHYSICAL] = 50, [DamageType.ACID] = 100, [DamageType.BLIGHT] = 100, [DamageType.FIRE] = -50},
-	damage_affinity = { [DamageType.BLIGHT] = 50 },	
+	damage_affinity = { [DamageType.BLIGHT] = 50 },
 	no_auto_resists = true,
-	
+
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 	resolvers.drops{chance=20, nb=1, {} },
 	resolvers.equip{
@@ -88,7 +88,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 		[Talents.T_BLOODLUST]={base=4, every=8},
 		[Talents.T_RUIN]={base=4, every=8},
 		[Talents.T_CORRUPTED_STRENGTH]={base=3, every=15},
-		
+
 		[Talents.T_BLINDSIDE]={base=3, every=12},
 
 		[Talents.T_WEAPON_COMBAT]={base=5, every=10, max=10},
@@ -157,7 +157,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	combat_armor = 1, combat_def = 30,
 	combat = { dam=resolvers.levelup(20, 1, 1.1), atk=20, apr=50, dammod={mag=1}, damtype=DamageType.DARKSTUN},
 
-	ai = "tactical", 
+	ai = "tactical",
 	ai_tactic = resolvers.tactic"ranged",
 	ai_state = { ai_target="target_player_radius", sense_radius=10, talent_in=1, },
 	dont_pass_target = true,
@@ -541,7 +541,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	autolevel = "warrior",
 	max_life = resolvers.rngavg(120, 150),
 	life_rating = 16,
-	global_speed = 0.7,
+	global_speed_base = 0.7,
 	combat_armor = 1, combat_def = 0,
 	combat = { dam=resolvers.levelup(resolvers.rngavg(25,150), 1, 1.2), atk=resolvers.rngavg(25,130), apr=1, dammod={str=1.1} },
 
@@ -598,7 +598,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	size_category = 3,
 	max_life = resolvers.rngavg(100,180),
 	life_rating = 12,
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	autolevel = "rogue",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
 	combat_armor = 10, combat_def = 10,
diff --git a/game/modules/tome/data/general/npcs/major-demon.lua b/game/modules/tome/data/general/npcs/major-demon.lua
index 2f7f19d7cf2b2622c10424a7bbc10082f13dbd73..1829985bc05587a8cc59b34598508570b5332632 100644
--- a/game/modules/tome/data/general/npcs/major-demon.lua
+++ b/game/modules/tome/data/general/npcs/major-demon.lua
@@ -105,7 +105,7 @@ Oh, and it is twice as big, too.]],
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 4,
 	rank = 3,
-	global_speed = 1.4,
+	global_speed_base = 1.4,
 	size_category = 5,
 	autolevel = "warriormage",
 	life_rating = 20,
@@ -137,7 +137,7 @@ newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 4,
 	rank = 3,
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	size_category = 3,
 	autolevel = "caster",
 	life_rating = 6,
@@ -170,7 +170,7 @@ It moves swiftly toward you, casting terrible spells and swinging its weapons at
 	level_range = {39, nil}, exp_worth = 1,
 	rarity = 6,
 	rank = 3,
-	global_speed = 1.3,
+	global_speed_base = 1.3,
 	size_category = 4,
 	autolevel = "warriormage",
 	life_rating = 25,
@@ -209,7 +209,7 @@ newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 	level_range = {43, nil}, exp_worth = 1,
 	rarity = 7,
 	rank = 3,
-	global_speed = 1.3,
+	global_speed_base = 1.3,
 	size_category = 4,
 	autolevel = "warrior",
 	life_rating = 25,
@@ -246,7 +246,7 @@ newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 	level_range = {47, nil}, exp_worth = 1,
 	rarity = 8,
 	rank = 3,
-	global_speed = 1,
+	global_speed_base = 1,
 	size_category = 5,
 	autolevel = "warriormage",
 	life_rating = 30,
diff --git a/game/modules/tome/data/general/npcs/minotaur.lua b/game/modules/tome/data/general/npcs/minotaur.lua
index a1a46b31e7fbf41eb482241083e1c5d254f46409..47fb67585f567e859c608c01026b0550a71332fb 100644
--- a/game/modules/tome/data/general/npcs/minotaur.lua
+++ b/game/modules/tome/data/general/npcs/minotaur.lua
@@ -45,7 +45,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	stats = { str=15, dex=12, mag=6, cun=12, con=15 },
 
 	resolvers.tmasteries{ ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3, ["technique/combat-training"]=0.3, },
diff --git a/game/modules/tome/data/general/npcs/molds.lua b/game/modules/tome/data/general/npcs/molds.lua
index e00a2efa9e2360995c6cbce621208a602abf2566..bb3e3d585453ea5c38a82df4433e45a6b5784ba0 100644
--- a/game/modules/tome/data/general/npcs/molds.lua
+++ b/game/modules/tome/data/general/npcs/molds.lua
@@ -29,7 +29,7 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=1, },
 	stats = { str=10, dex=15, mag=3, con=3 },
-	global_speed = 0.6,
+	global_speed_base = 0.6,
 	infravision = 10,
 	combat_armor = 1, combat_def = 1,
 	never_move = 1,
diff --git a/game/modules/tome/data/general/npcs/mummy.lua b/game/modules/tome/data/general/npcs/mummy.lua
index 58475a277cdc90285ae8cca1bafd6b8fb0d31e20..30ea7c13e266f2d2e8c090ad0372252373b6adbc 100644
--- a/game/modules/tome/data/general/npcs/mummy.lua
+++ b/game/modules/tome/data/general/npcs/mummy.lua
@@ -30,7 +30,7 @@ newEntity{
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	global_speed = 0.8,
+	global_speed_base = 0.8,
 	stats = { str=14, dex=12, mag=10, con=12 },
 	infravision = 10,
 	rank = 2,
diff --git a/game/modules/tome/data/general/npcs/naga.lua b/game/modules/tome/data/general/npcs/naga.lua
index 6442badf32820a5d299b6468df7cc072583a59f3..bd271b3cddac9a1e8ecbcb2008acb36205700b97 100644
--- a/game/modules/tome/data/general/npcs/naga.lua
+++ b/game/modules/tome/data/general/npcs/naga.lua
@@ -44,7 +44,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	stats = { str=15, dex=15, mag=15, con=10 },
 	on_die = function(self, who)
 		local part = "NAGA_TONGUE"
diff --git a/game/modules/tome/data/general/npcs/ooze.lua b/game/modules/tome/data/general/npcs/ooze.lua
index c4aea2ea22adcb59ba5fb85976f2fd0f13287dcf..552ecf46f5f4f062c9be1e703097846ca5c927b2 100644
--- a/game/modules/tome/data/general/npcs/ooze.lua
+++ b/game/modules/tome/data/general/npcs/ooze.lua
@@ -30,7 +30,7 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=10, dex=15, mag=3, con=10 },
-	global_speed = 0.7,
+	global_speed_base = 0.7,
 	combat_armor = 1, combat_def = 1,
 	rank = 1,
 	size_category = 3,
diff --git a/game/modules/tome/data/general/npcs/ritch.lua b/game/modules/tome/data/general/npcs/ritch.lua
index 0bc4cbeb6b3edab4505fbb391febbfd812ab5cc3..8cd2cb9047922b356128469163c7db914a0e49f5 100644
--- a/game/modules/tome/data/general/npcs/ritch.lua
+++ b/game/modules/tome/data/general/npcs/ritch.lua
@@ -37,7 +37,7 @@ Vicious predators, they inject corrupting diseases into their foes, and their sh
 
 	autolevel = "slinger",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	stats = { str=15, dex=15, mag=8, con=10 },
 
 	poison_immune = 0.5,
diff --git a/game/modules/tome/data/general/npcs/snake.lua b/game/modules/tome/data/general/npcs/snake.lua
index 765aa593ddb9336f1cf5b9ad87527b9cf0cc2059..9ffbe7b9ff8e78af9c259fbba6d8f08537608f3f 100644
--- a/game/modules/tome/data/general/npcs/snake.lua
+++ b/game/modules/tome/data/general/npcs/snake.lua
@@ -33,7 +33,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=3, ai_move="move_snake" },
-	global_speed = 1.3,
+	global_speed_base = 1.3,
 	stats = { str=14, dex=23, mag=5, con=5 },
 	combat_armor = 1, combat_def = 1,
 }
@@ -121,7 +121,7 @@ newEntity{ base = "BASE_NPC_SNAKE",
 	max_life = resolvers.rngavg(100,120),
 	combat_armor = 14, combat_def = 5,
 	combat = { dam=resolvers.levelup(12, 1, 0.7), atk=10, apr=10 },
-	global_speed = 1,
+	global_speed_base = 1,
 
 	resolvers.talents{ [Talents.T_CONSTRICT]=5 },
 }
diff --git a/game/modules/tome/data/general/npcs/spider.lua b/game/modules/tome/data/general/npcs/spider.lua
index 6fafb79b0f431690f468addd7a2ab13f11ba62d2..b533f01dba33cd80fae25ce8466db211c4041c1c 100644
--- a/game/modules/tome/data/general/npcs/spider.lua
+++ b/game/modules/tome/data/general/npcs/spider.lua
@@ -35,7 +35,7 @@ newEntity{
 
 	autolevel = "spider",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
-	global_speed = 1.2,
+	global_speed_base = 1.2,
 	stats = { str=15, dex=15, mag=8, con=10 },
 
 	resolvers.inscriptions(2, "infusion"),
diff --git a/game/modules/tome/data/general/npcs/swarm.lua b/game/modules/tome/data/general/npcs/swarm.lua
index afc8bd6d452b2d7421c252dafebfea322980671e..64e147d110fa56504cb6e22a4d282fa999d050a4 100644
--- a/game/modules/tome/data/general/npcs/swarm.lua
+++ b/game/modules/tome/data/general/npcs/swarm.lua
@@ -31,7 +31,7 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=1, dex=20, mag=3, con=1 },
-	global_speed = 2,
+	global_speed_base = 2,
 	infravision = 10,
 	combat_armor = 1, combat_def = 10,
 	rank = 1,
diff --git a/game/modules/tome/data/general/npcs/telugoroth.lua b/game/modules/tome/data/general/npcs/telugoroth.lua
index 71ee215a63f2a6aef90a342f0b64606537024bb2..43ff2e13087bd6e6413921b33ba1095099081484 100644
--- a/game/modules/tome/data/general/npcs/telugoroth.lua
+++ b/game/modules/tome/data/general/npcs/telugoroth.lua
@@ -38,7 +38,7 @@ newEntity{
 
 	autolevel = "dexmage",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	global_speed = 1.5,
+	global_speed_base = 1.5,
 	stats = { str=8, dex=12, mag=12, wil=12, con=10 },
 
 	resists = { [DamageType.PHYSICAL] = 10, [DamageType.TEMPORAL] = 100, },
diff --git a/game/modules/tome/data/general/npcs/troll.lua b/game/modules/tome/data/general/npcs/troll.lua
index 50cd47d0f680aca0dd9839d884f867584a828b9e..8aca8c3c4979f4423b61eecd8611d25deefa18b7 100644
--- a/game/modules/tome/data/general/npcs/troll.lua
+++ b/game/modules/tome/data/general/npcs/troll.lua
@@ -123,7 +123,7 @@ newEntity{ base = "BASE_NPC_TROLL",
 	level_range = {38, nil}, exp_worth = 1,
 	rarity = 6,
 	rank = 3,
-	global_speed = 1.6,
+	global_speed_base = 1.6,
 	life_rating = 25,
 	max_life = resolvers.rngavg(220,240),
 
diff --git a/game/modules/tome/data/general/npcs/vermin.lua b/game/modules/tome/data/general/npcs/vermin.lua
index b01681782bdf17420aecd94634585a108fc39229..3c9c662d041005c5156b5cd69f54c88ba652282b 100644
--- a/game/modules/tome/data/general/npcs/vermin.lua
+++ b/game/modules/tome/data/general/npcs/vermin.lua
@@ -28,7 +28,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	global_speed = 0.9,
+	global_speed_base = 0.9,
 	stats = { str=10, dex=15, mag=3, con=3 },
 	combat_armor = 1, combat_def = 1,
 	infravision = 10,
@@ -78,7 +78,7 @@ newEntity{ base = "BASE_NPC_WORM",
 
 	autolevel = "warriormage",
 	resolvers.talents{ [Talents.T_CRAWL_ACID]=2, [Talents.T_ROTTING_DISEASE]=4, [Talents.T_MULTIPLY]=1 },
-	
+
 	on_die = function(self, src)
 		game.level.map:addEffect(self,
 			self.x, self.y, 5,
diff --git a/game/modules/tome/data/general/npcs/wild-drake.lua b/game/modules/tome/data/general/npcs/wild-drake.lua
index d112bbaa8740178723916a1f82f42b9d0be09f48..d61ba88cf8a4db0ba4b4a073e4fcf0c0291f44fb 100644
--- a/game/modules/tome/data/general/npcs/wild-drake.lua
+++ b/game/modules/tome/data/general/npcs/wild-drake.lua
@@ -50,7 +50,7 @@ newEntity{ base = "BASE_NPC_WILD_DRAKE",
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 6,
 	rank = 3,
-	global_speed = 1.3,
+	global_speed_base = 1.3,
 	size_category = 5,
 	autolevel = "warrior",
 	max_life = resolvers.rngavg(170,190),
@@ -79,7 +79,7 @@ newEntity{ base = "BASE_NPC_WILD_DRAKE",
 	level_range = {40, nil}, exp_worth = 1,
 	rarity = 7,
 	rank = 3,
-	global_speed = 1.4,
+	global_speed_base = 1.4,
 	size_category = 4,
 	autolevel = "caster",
 	max_life = resolvers.rngavg(100,120),
diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua
index 50e935fba8efdfdedabe2857db8c6b08f0208c0a..cba467c5c161488d5bfcfd068c856efac84d99bb 100644
--- a/game/modules/tome/data/general/objects/world-artifacts.lua
+++ b/game/modules/tome/data/general/objects/world-artifacts.lua
@@ -1971,7 +1971,7 @@ newEntity{ base = "BASE_MACE",
 	},
 	ureslak_bonuses = {
 		{ name = "Flaming", damtype = DamageType.FIREBURN, wielder = {
-			global_speed = 0.3,
+			global_speed_add = 0.3,
 			resists = { [DamageType.FIRE] = 45 },
 			resists_pen = { [DamageType.FIRE] = 30 },
 			inc_damage = { [DamageType.FIRE] = 30 },
diff --git a/game/modules/tome/data/talents/chronomancy/anomalies.lua b/game/modules/tome/data/talents/chronomancy/anomalies.lua
index 3dab47914262e7a59756f64fd4bcf8120b918b4f..697e5e7d511f49f74427644b6da37726713a7c56 100644
--- a/game/modules/tome/data/talents/chronomancy/anomalies.lua
+++ b/game/modules/tome/data/talents/chronomancy/anomalies.lua
@@ -319,7 +319,7 @@ newTalent{
 				combat = { dam=resolvers.mbonus(40, 15), atk=15, apr=15, dammod={mag=0.8}, damtype=DamageType.TEMPORAL },
 				body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 				autolevel = "none",
-				global_speed = 1.5,
+				global_speed_base = 1.5,
 				stats = { str=8, dex=12, mag=12, wil= 12, con=10 },
 				ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=2, },
 				level_range = {self.level, self.level},
diff --git a/game/modules/tome/data/talents/corruptions/shadowflame.lua b/game/modules/tome/data/talents/corruptions/shadowflame.lua
index 5190318b7c897b164568b609c2c01454d7334aa8..c837c1e7e48a2ec380226ef8fdfdbbb2efdc617d 100644
--- a/game/modules/tome/data/talents/corruptions/shadowflame.lua
+++ b/game/modules/tome/data/talents/corruptions/shadowflame.lua
@@ -93,7 +93,7 @@ newTalent{
 		local power = self:getTalentLevel(t) * 0.03
 		return {
 			demon = self:addTemporaryValue("demon", 1),
-			speed = self:addTemporaryValue("global_speed", power),
+			speed = self:addTemporaryValue("global_speed_add", power),
 			res = self:addTemporaryValue("resists", {[DamageType.FIRE]=self:combatTalentSpellDamage(t, 20, 30), [DamageType.DARKNESS]=self:combatTalentSpellDamage(t, 20, 35)}),
 			particle = self:addParticles(Particles.new("shadowfire", 1)),
 		}
@@ -102,7 +102,7 @@ newTalent{
 		self.type, self.subtype = unpack(self.__old_type)
 		self.__old_type = nil
 		self:removeTemporaryValue("resists", p.res)
-		self:removeTemporaryValue("global_speed", p.speed)
+		self:removeTemporaryValue("global_speed_add", p.speed)
 		self:removeTemporaryValue("demon", p.demon)
 		self:removeParticles(p.particle)
 		return true
diff --git a/game/modules/tome/data/talents/gifts/summon-melee.lua b/game/modules/tome/data/talents/gifts/summon-melee.lua
index 81fdf137b4b7caefa9bfe7ee86d4c50dad29a84c..c049fbb277d121039ee7844b9dd07b1dd1a2ccdf 100644
--- a/game/modules/tome/data/talents/gifts/summon-melee.lua
+++ b/game/modules/tome/data/talents/gifts/summon-melee.lua
@@ -60,7 +60,7 @@ newTalent{
 			stats = {str=0, dex=0, con=0, cun=0, wil=0, mag=0},
 			inc_stats = { str=15 + (self:getWil(130, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=10 + self:getTalentLevel(t) * 2, mag=5, con=15 + self:getTalentLevelRaw(self.T_RESILIENCE)*2 },
 			level_range = {self.level, self.level}, exp_worth = 0,
-			global_speed = 1.2,
+			global_speed_base = 1.2,
 
 			max_life = resolvers.rngavg(25,50),
 			life_rating = 6,
@@ -223,7 +223,7 @@ newTalent{
 
 			autolevel = "none",
 			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=2, },
-			global_speed=1.2,
+			global_speed_base=1.2,
 			stats = {str=0, dex=0, con=0, cun=0, wil=0, mag=0},
 			inc_stats = { str=25 + (self:getWil(140, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=18, con=10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2, },
 
diff --git a/game/modules/tome/data/talents/misc/races.lua b/game/modules/tome/data/talents/misc/races.lua
index 21779a040e9eaba1d5db34cd7a50622a14f78e9e..989c7506f7e553fc3103c6ff5213fa4ef62805ca 100644
--- a/game/modules/tome/data/talents/misc/races.lua
+++ b/game/modules/tome/data/talents/misc/races.lua
@@ -704,10 +704,12 @@ newTalent{
 	points = 5,
 	mode = "passive",
 	on_learn = function(self, t)
-		self.global_speed = self.global_speed + 0.03
+		self.global_speed_base = self.global_speed_base + 0.03
+		self:recomputeGlobalSpeed()
 	end,
 	on_unlearn = function(self, t)
-		self.global_speed = self.global_speed - 0.03
+		self.global_speed_base = self.global_speed_base - 0.03
+		self:recomputeGlobalSpeed()
 	end,
 	info = function(self, t)
 		return ([[Yeeks live fast, think fast, and sacrifice fast for the Way.
diff --git a/game/modules/tome/data/talents/spells/temporal.lua b/game/modules/tome/data/talents/spells/temporal.lua
index 8f29ac439ba1a925bdc701bfdf2db3b38d304243..1ac52d8739a48608e4b20c78ce60739834ebd46a 100644
--- a/game/modules/tome/data/talents/spells/temporal.lua
+++ b/game/modules/tome/data/talents/spells/temporal.lua
@@ -117,11 +117,11 @@ newTalent{
 		game:playSoundNear(self, "talents/spell_generic")
 		local power = t.getHaste(self, t)
 		return {
-			speed = self:addTemporaryValue("global_speed", power),
+			speed = self:addTemporaryValue("global_speed_add", power),
 		}
 	end,
 	deactivate = function(self, t, p)
-		self:removeTemporaryValue("global_speed", p.speed)
+		self:removeTemporaryValue("global_speed_add", p.speed)
 		return true
 	end,
 	info = function(self, t)
diff --git a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
index 6ea2d572e04bdcfeaff48008b07a7c2fb5987f7c..2bf8153d4f35d5e406cbe8c76a5d07b5e4eed5a3 100644
--- a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
+++ b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
@@ -133,12 +133,12 @@ newTalent{
 	getStamina = function(self, t) return self:getTalentLevel(t) * 1.5 end,
 	activate = function(self, t)
 		return {
-			speed = self:addTemporaryValue("global_speed", -t.getSpeed(self, t)),
+			speed = self:addTemporaryValue("global_speed_add", -t.getSpeed(self, t)),
 			stamina = self:addTemporaryValue("stamina_regen", t.getStamina(self, t)),
 		}
 	end,
 	deactivate = function(self, t, p)
-		self:removeTemporaryValue("global_speed", p.speed)
+		self:removeTemporaryValue("global_speed_add", p.speed)
 		self:removeTemporaryValue("stamina_regen", p.stamina)
 		return true
 	end,
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index d6375e93d7cb3c4987a8186963e72d4197bf9b23..7ef76c13b350815f79413bda158376b166e7350d 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -690,10 +690,10 @@ newEffect{
 	on_gain = function(self, err) return "#Target# speeds up.", "+Fast" end,
 	on_lose = function(self, err) return "#Target# slows down.", "-Fast" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("global_speed", eff.power)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", eff.power)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 	end,
 }
 
@@ -707,11 +707,11 @@ newEffect{
 	on_gain = function(self, err) return "#Target# slows down.", "+Slow" end,
 	on_lose = function(self, err) return "#Target# speeds up.", "-Slow" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("global_speed", -eff.power)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", -eff.power)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 	end,
 }
 
@@ -1979,11 +1979,11 @@ newEffect{
 	on_lose = function(self, err) return "#Target# overcomes the gloom.", "-Slow" end,
 	activate = function(self, eff)
 		eff.particle = self:addParticles(Particles.new("gloom_slow", 1))
-		eff.tmpid = self:addTemporaryValue("global_speed", -eff.power)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", -eff.power)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 		self:removeParticles(eff.particle)
 	end,
 }
@@ -2131,7 +2131,7 @@ newEffect{
 		if eff.hateLoss or 0 > 0 then eff.hateLossId = self:addTemporaryValue("hate_regen", -eff.hateLoss) end
 		if eff.critical or 0 > 0 then eff.criticalId = self:addTemporaryValue("combat_physcrit", eff.critical) end
 		if eff.damage or 0 > 0 then eff.damageId = self:addTemporaryValue("inc_damage", {[DamageType.PHYSICAL]=eff.damage}) end
-		if eff.speed or 0 > 0 then eff.speedId = self:addTemporaryValue("global_speed", eff.speed * 0.01) end
+		if eff.speed or 0 > 0 then eff.speedId = self:addTemporaryValue("global_speed_add", eff.speed * 0.01) end
 		if eff.attack or 0 > 0 then eff.attackId = self:addTemporaryValue("combat_atk", self:combatAttack() * eff.attack * 0.01) end
 		if eff.evasion or 0 > 0 then eff.evasionId = self:addTemporaryValue("evasion", eff.evasion) end
 
@@ -2141,7 +2141,7 @@ newEffect{
 		if eff.hateLossId then self:removeTemporaryValue("hate_regen", eff.hateLossId) end
 		if eff.criticalId then self:removeTemporaryValue("combat_physcrit", eff.criticalId) end
 		if eff.damageId then self:removeTemporaryValue("inc_damage", eff.damageId) end
-		if eff.speedId then self:removeTemporaryValue("global_speed", eff.speedId) end
+		if eff.speedId then self:removeTemporaryValue("global_speed_add", eff.speedId) end
 		if eff.attackId then self:removeTemporaryValue("combat_atk", eff.attackId) end
 		if eff.evasionId then self:removeTemporaryValue("evasion", eff.evasionId) end
 
@@ -2205,10 +2205,10 @@ newEffect{
 	on_gain = function(self, err) return nil, "+Invigorated" end,
 	on_lose = function(self, err) return nil, "-Invigorated" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("global_speed", eff.speed * 0.01)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", eff.speed * 0.01)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 	end,
 	on_merge = function(self, old_eff, new_eff)
 		old_eff.dur = math.min(old_eff.dur + new_eff.dur, 15)
@@ -2498,13 +2498,13 @@ newEffect{
 	on_lose = function(self, err) return "#Target# slows down.", "-Wild Speed" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("wild_speed", 1)
-		eff.moveid = self:addTemporaryValue("global_speed", eff.power/100)
+		eff.moveid = self:addTemporaryValue("global_speed_add", eff.power/100)
 		if self.ai_state then eff.aiid = self:addTemporaryValue("ai_state", {no_talents=1}) end -- Make AI not use talents while using it
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("wild_speed", eff.tmpid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("global_speed", eff.moveid)
+		self:removeTemporaryValue("global_speed_add", eff.moveid)
 	end,
 }
 
@@ -2519,13 +2519,13 @@ newEffect{
 	on_lose = function(self, err) return "#Target# slows down.", "-Step Up" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("step_up", 1)
-		eff.moveid = self:addTemporaryValue("global_speed", eff.power/100)
+		eff.moveid = self:addTemporaryValue("global_speed_add", eff.power/100)
 		if self.ai_state then eff.aiid = self:addTemporaryValue("ai_state", {no_talents=1}) end -- Make AI not use talents while using it
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("step_up", eff.tmpid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("global_speed", eff.moveid)
+		self:removeTemporaryValue("global_speed_add", eff.moveid)
 	end,
 }
 
@@ -2540,7 +2540,7 @@ newEffect{
 	on_lose = function(self, err) return "#Target# is back to normal.", "-Lightning Speed" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("lightning_speed", 1)
-		eff.moveid = self:addTemporaryValue("global_speed", eff.power/100)
+		eff.moveid = self:addTemporaryValue("global_speed_add", eff.power/100)
 		eff.resistsid = self:addTemporaryValue("resists", {
 			[DamageType.PHYSICAL]=30,
 			[DamageType.LIGHTNING]=100,
@@ -2553,7 +2553,7 @@ newEffect{
 		self:removeTemporaryValue("lightning_speed", eff.tmpid)
 		self:removeTemporaryValue("resists", eff.resistsid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("global_speed", eff.moveid)
+		self:removeTemporaryValue("global_speed_add", eff.moveid)
 	end,
 }
 
@@ -3008,11 +3008,11 @@ newEffect{
 	on_lose = function(self, err) return "#Target# overcomes the madness.", "-Slow" end,
 	activate = function(self, eff)
 		eff.particle = self:addParticles(Particles.new("gloom_slow", 1))
-		eff.tmpid = self:addTemporaryValue("global_speed", -eff.power)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", -eff.power)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 		self:removeParticles(eff.particle)
 	end,
 }
@@ -3300,11 +3300,11 @@ newEffect{
 	on_gain = function(self, err) return "#Target# is being crushed.", "+Imploding" end,
 	on_lose = function(self, err) return "#Target# shakes off the crushing forces.", "-Imploding" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("global_speed", -0.5)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", -0.5)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 	end,
 	on_timeout = function(self, eff)
 		DamageType:get(DamageType.PHYSICAL).projector(eff.src, self.x, self.y, DamageType.PHYSICAL, eff.power)
@@ -3407,10 +3407,10 @@ newEffect{
 	status = "beneficial",
 	parameters = { power=10 },
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("global_speed", 1)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", 1)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 		self:setEffect(self.EFF_TEMPORAL_STUN, eff.power, {})
 	end,
 }
@@ -3888,12 +3888,12 @@ newEffect{
 	on_lose = function(self, err) return "#Target# has recovered from the maiming.", "-Maimed" end,
 	activate = function(self, eff)
 		eff.damid = self:addTemporaryValue("combat_dam", -eff.dam)
-		eff.tmpid = self:addTemporaryValue("global_speed", -0.3)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", -0.3)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("combat_dam", eff.damid)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 	end,
 }
 
@@ -3987,10 +3987,10 @@ newEffect{
 	on_gain = function(self, err) return "#Target# speeds up.", "+Reflexive Dodging" end,
 	on_lose = function(self, err) return "#Target# slows down.", "-Reflexive Dodging" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("global_speed", eff.power)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", eff.power)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 	end,
 }
 
@@ -4092,7 +4092,7 @@ newEffect{
 	parameters = { },
 	activate = function(self, eff)
 		if eff.type == DamageType.FIRE then
-			eff.tmpid = self:addTemporaryValue("global_speed", 0.1 + eff.power / 16)
+			eff.tmpid = self:addTemporaryValue("global_speed_add", 0.1 + eff.power / 16)
 		elseif eff.type == DamageType.COLD then
 			eff.tmpid = self:addTemporaryValue("combat_armor", 3 + eff.power * 2)
 		elseif eff.type == DamageType.LIGHTNING then
@@ -4113,7 +4113,7 @@ newEffect{
 	end,
 	deactivate = function(self, eff)
 		if eff.type == DamageType.FIRE then
-			self:removeTemporaryValue("global_speed", eff.tmpid)
+			self:removeTemporaryValue("global_speed_add", eff.tmpid)
 		elseif eff.type == DamageType.COLD then
 			self:removeTemporaryValue("combat_armor", eff.tmpid)
 		elseif eff.type == DamageType.LIGHTNING then
@@ -4281,11 +4281,11 @@ newEffect{
 	on_gain = function(self, err) return "#Target# speeds up.", "+Haste" end,
 	on_lose = function(self, err) return "#Target# slows down.", "-Haste" end,
 	activate = function(self, eff)
-		eff.glbid = self:addTemporaryValue("global_speed", eff.power)
+		eff.glbid = self:addTemporaryValue("global_speed_add", eff.power)
 		eff.spdid = self:addTemporaryValue("combat_spellspeed", eff.power/2)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("global_speed", eff.glbid)
+		self:removeTemporaryValue("global_speed_add", eff.glbid)
 		self:removeTemporaryValue("combat_spellspeed", eff.spdid)
 	end,
 }
@@ -4609,7 +4609,7 @@ newEffect{
 		return old_eff
 	end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("global_speed", eff.power)
+		eff.tmpid = self:addTemporaryValue("global_speed_add", eff.power)
 		eff.critid = self:addTemporaryValue("combat_physcrit", eff.crit)
 		eff.dieatid = self:addTemporaryValue("die_at", -self.max_life * eff.dieat)
 	end,
@@ -4621,7 +4621,7 @@ newEffect{
 			game.logSeen(self, "%s dies when it's frenzy ends!", self.name:capitalize())
 			self:die(self)
 		end
-		self:removeTemporaryValue("global_speed", eff.tmpid)
+		self:removeTemporaryValue("global_speed_add", eff.tmpid)
 		self:removeTemporaryValue("combat_physcrit", eff.critid)
 		self:removeTemporaryValue("die_at", eff.dieatid)
 	end,
diff --git a/game/modules/tome/data/zones/arena/npcs.lua b/game/modules/tome/data/zones/arena/npcs.lua
index 9dff6b57cee18dfa2e5260200845763d388dbbce..460541cfc787a1a6628f41e11f28b973c2724368 100644
--- a/game/modules/tome/data/zones/arena/npcs.lua
+++ b/game/modules/tome/data/zones/arena/npcs.lua
@@ -52,7 +52,7 @@ newEntity{ name = "flying skull",
 	life_rating = 1, rank = 1, size_category = 1,
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move = "move_astar", talent_in = 1 },
-	global_speed = 1,
+	global_speed_base = 1,
 	stats = { str = 9, dex = 20, mag = 20 },
 	resolvers.talents{
 		[Talents.T_EXPLODE] = 3,
diff --git a/game/modules/tome/data/zones/flooded-cave/npcs.lua b/game/modules/tome/data/zones/flooded-cave/npcs.lua
index 6df0eb984cafdbe9342c05fbe9e0982f45d13876..d1b1ddc4864a262473896f5c1fbc9f08b727c484 100644
--- a/game/modules/tome/data/zones/flooded-cave/npcs.lua
+++ b/game/modules/tome/data/zones/flooded-cave/npcs.lua
@@ -29,7 +29,7 @@ newEntity{ define_as = "UKLLMSWWIK",
 	faction="water-lair",
 	display = "D", color=colors.VIOLET,
 	desc = [[It looks like a cross between a shark and a dragon, only nastier.]],
-	global_speed = 1.4,
+	global_speed_base = 1.4,
 	level_range = {30, nil}, exp_worth = 4,
 	max_life = 250, life_rating = 27, fixed_rating = true,
 	max_stamina = 85,
diff --git a/game/modules/tome/data/zones/reknor/npcs.lua b/game/modules/tome/data/zones/reknor/npcs.lua
index 53a499dac0aa2488676baf89fcea594e35e05d92..63ef088575ac50f7f67e47ee9c64582f958af44e 100644
--- a/game/modules/tome/data/zones/reknor/npcs.lua
+++ b/game/modules/tome/data/zones/reknor/npcs.lua
@@ -118,7 +118,7 @@ newEntity{ define_as = "HARNO",
 	name = "Harno, Herald of Last Hope",
 	display = "@", color=colors.LIGHT_BLUE,
 	desc = [[This is one of the heralds of Last Hope. He seems to be looking for you.]],
-	global_speed = 2,
+	global_speed_base = 2,
 	level_range = {40, 40}, exp_worth = 0,
 	max_life = 150, life_rating = 12,
 	rank = 3,
diff --git a/game/modules/tome/data/zones/temple-of-creation/npcs.lua b/game/modules/tome/data/zones/temple-of-creation/npcs.lua
index b875d6575962c1836c1c26dfc46822e2dd8cde13..e28cfa98f320a80ba2313f3b88c6ac72da6760b0 100644
--- a/game/modules/tome/data/zones/temple-of-creation/npcs.lua
+++ b/game/modules/tome/data/zones/temple-of-creation/npcs.lua
@@ -32,7 +32,7 @@ newEntity{ define_as = "SLASUL",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_naga_slasul.png", display_h=2, display_y=-1}}},
 	desc = [[This towering naga exudes power, and radiates a certain charismatic charm as well. His masculine face stares at you with great intensity, and you struggle to meet his gaze. His torso is bare apart from an exquisite pearl set directly in his chest, and in his muscular arms he holds ready a heavy mace and shield. You sense there is more to him also, as if the very power of the ocean were concentrated in this great creature, and that the wrath of it may come flooding out at any moment.]],
 	killer_message = "and perverted into a monstrous aberration as a warning to the surface",
-	global_speed = 1.7,
+	global_speed_base = 1.7,
 	level_range = {30, nil}, exp_worth = 4,
 	max_life = 350, life_rating = 19, fixed_rating = true,
 	max_stamina = 85,