diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index ecf436664a0d9e288f41fa79cad3c72a793bdcc8..3388d952cbd87c66f46b47dedbe56ede5828b2de 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -366,6 +366,20 @@ function _M:act()
 
 	if self.never_act then return false end
 
+	-- Compute bonuses based on actors in FOV
+	if self:knowTalent(self.T_MILITANT_MIND) and not self:hasEffect(self.EFF_MILITANT_MIND) then
+		local nb_foes = 0
+		local act
+		for i = 1, #self.fov.actors_dist do
+			act = self.fov.actors_dist[i]
+			if self:reactionToward(act) < 0 and self:canSee(act) then nb_foes = nb_foes + 1 end
+		end
+		if nb_foes > 1 then
+			nb_foes = math.min(nb_foes, self:getTalentLevel(self.T_MILITANT_MIND))
+			self:setEffect(self.EFF_MILITANT_MIND, 4, {power=self:getTalentLevel(self.T_MILITANT_MIND) * nb_foes * 0.6})
+		end
+	end
+
 	return true
 end
 
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index ebfcc59b39091cebafa6b0cca9969127d3c2cf71..88d081f8b4c851db6c46d827d182b2af2d4f47c4 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -217,7 +217,12 @@ function _M:attackTargetWith(target, weapon, damtype, mult)
 	local atk, def = self:combatAttack(weapon), target:combatDefense()
 	if not self:canSee(target) then atk = atk / 3 end
 	local dam, apr, armor = self:combatDamage(weapon), self:combatAPR(weapon), target:combatArmor()
-	print("[ATTACK] to ", target.name, " :: ", dam, apr, armor, "::", mult)
+	print("[ATTACK] to ", target.name, " :: ", dam, apr, armor, def, "::", mult)
+
+	if target:knowTalent(target.T_DUCK_AND_DODGE) then
+		local diff = util.bound((self.size_category or 3) - (target.size_category or 2), 0, 5)
+		def = def + diff * target:getTalentLevelRaw(target.T_DUCK_AND_DODGE) * 1.2
+	end
 
 	-- If hit is over 0 it connects, if it is 0 we still have 50% chance
 	local hitted = false
diff --git a/game/modules/tome/data/talents/misc/races.lua b/game/modules/tome/data/talents/misc/races.lua
index 147380cd8fac2c7c0dfdf8bb4ebe393c1711f403..978c0d0563795197ac734b84e8225d6e993175dc 100644
--- a/game/modules/tome/data/talents/misc/races.lua
+++ b/game/modules/tome/data/talents/misc/races.lua
@@ -478,6 +478,50 @@ newTalent{
 	end,
 }
 
+newTalent{
+	name = "Duck and Dodge",
+	type = {"race/halfling", 2},
+	require = racial_req2,
+	points = 5,
+	mode = "passive",
+	info = function(self, t)
+		return ([[Halfling have long learnt to use their small stature as an advantage when fighting the other races.
+		Increases defense in melee based on the size difference between the attacker and you (+%d defence per size).]]):
+		format(self:getTalentLevelRaw(t) * 1.2)
+	end,
+}
+
+newTalent{
+	name = "Militant Mind",
+	type = {"race/halfling", 3},
+	require = racial_req3,
+	points = 5,
+	mode = "passive",
+	info = function(self, t)
+		return ([[Halfling have always been a very organised and methodical race, the more foes they face the more organised they are.
+		If two or more foes are in sight your physical power, spellpower and mindpower are increased by %0.1f per foes (up to %d foes).]]):
+		format(self:getTalentLevel(t) * 0.6, self:getTalentLevel(t))
+	end,
+}
+
+newTalent{
+	name = "Indomitable",
+	type = {"race/halfling", 4},
+	require = racial_req4,
+	points = 5,
+	no_energy = true,
+	cooldown = function(self, t) return 50 - self:getTalentLevel(t) * 5 end,
+	tactical = { DEFEND = 1 },
+	action = function(self, t)
+		self:setEffect(self.EFF_FREE_ACTION, 3 + self:getTalentLevel(t), {})
+		return true
+	end,
+	info = function(self, t)
+		return ([[Halflings are one of the more powerful military force of the known world, they have been at war with most other races for thousand of years.
+		Instantly makes you immune to stuns, dazes and pinning effects for %d turns.]]):format(3 + self:getTalentLevel(t))
+	end,
+}
+
 ------------------------------------------------------------------
 -- Orcs powers
 ------------------------------------------------------------------
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index 030c68d372d9e49f950f4f2c65c029e47d402ea2..c974bd7de0bc4e06636947a0993fd68aacf737fd 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -3517,4 +3517,23 @@ newEffect{
 	end,
 	deactivate = function(self, eff)
 	end,
-}
\ No newline at end of file
+}
+
+newEffect{
+	name = "MILITANT_MIND",
+	desc = "Militant Mind",
+	long_desc = function(self, eff) return ("Increases physical power, spellpower and mindpower by %d."):format(eff.power) end,
+	type = "other",
+	status = "beneficial",
+	parameters = { power=10 },
+	activate = function(self, eff)
+		eff.damid = self:addTemporaryValue("combat_dam", eff.power)
+		eff.spellid = self:addTemporaryValue("combat_spellpower", eff.power)
+		eff.mindid = self:addTemporaryValue("combat_mindpower", eff.power)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("combat_dam", eff.damid)
+		self:removeTemporaryValue("combat_spellpower", eff.spellid)
+		self:removeTemporaryValue("combat_mindpower", eff.mindid)
+	end,
+}
diff --git a/ideas/races.ods b/ideas/races.ods
index 24dc9dcf46c115bd5a4d8bc9a97490b7d1572dca..1bb4474747546c775fce39284bfe176863060ea4 100644
Binary files a/ideas/races.ods and b/ideas/races.ods differ