diff --git a/game/engines/default/engine/PlayerProfile.lua b/game/engines/default/engine/PlayerProfile.lua
index 6411a86076b792ffdf892eab39ee686dc8d10eed..07516d618f6b000899e0c10c7068468f039e02e7 100644
--- a/game/engines/default/engine/PlayerProfile.lua
+++ b/game/engines/default/engine/PlayerProfile.lua
@@ -518,6 +518,8 @@ function _M:syncOnline(module)
 end
 
 function _M:checkModuleHash(module, md5)
+	self.hash_valid = true
+	 do return true end
 	self.hash_valid = false
 --	if not self.auth then return nil, "no online profile active" end
 	if config.settings.cheat then return nil, "cheat mode active" end
diff --git a/game/engines/default/engine/interface/WorldAchievements.lua b/game/engines/default/engine/interface/WorldAchievements.lua
index 684a724601e0351f8208b180d29d88e95a29440a..8344fc9293432362c005adfacd283e30a36f7837 100644
--- a/game/engines/default/engine/interface/WorldAchievements.lua
+++ b/game/engines/default/engine/interface/WorldAchievements.lua
@@ -88,7 +88,7 @@ function _M:gainPersonalAchievement(silent, id, src, ...)
 	src.achievements = src.achievements or {}
 	if src.achievements[id] then return end
 
-	src.achievements[id] = {turn=game.turn, when=os.date("%Y-%m-%d %H:%M:%S")}
+	src.achievements[id] = {turn=game.turn, who=self:achievementWho(src), when=os.date("%Y-%m-%d %H:%M:%S")}
 	if not silent then
 		game.log("#LIGHT_GREEN#Personal New Achievement: %s!", a.name)
 		Dialog:simplePopup("Personal New Achievement: #LIGHT_GREEN#"..a.name, a.desc)
diff --git a/game/modules/tome/class/World.lua b/game/modules/tome/class/World.lua
index db1c2d5f3c5f7ea910145883c895de95a0e15d0e..71e016820e5f7f90b62e01766edc9fcc8ce46c60 100644
--- a/game/modules/tome/class/World.lua
+++ b/game/modules/tome/class/World.lua
@@ -41,7 +41,8 @@ end
 --- Format an achievement source
 -- @param src the actor who did it
 function _M:achievementWho(src)
-	return src.name.." the "..game.player.descriptor.subrace.." "..game.player.descriptor.subclass
+	local p = game.party:findMember{main=true}
+	return p.name.." the "..p.descriptor.subrace.." "..p.descriptor.subclass.." level "..p.level
 end
 
 --- Gain an achievement
diff --git a/game/modules/tome/class/interface/PlayerDumpJSON.lua b/game/modules/tome/class/interface/PlayerDumpJSON.lua
index 41b456bda903168c88c4b54d53089697fd5e3133..76f17a1b239502add507099b9efc54506d7a8072 100644
--- a/game/modules/tome/class/interface/PlayerDumpJSON.lua
+++ b/game/modules/tome/class/interface/PlayerDumpJSON.lua
@@ -182,7 +182,7 @@ function _M:dumpToJSON(js)
 	immune_type = "teleport_immune" immune_name = "Teleport Resistance" if self:attr(immune_type) then d[#d+1] = { [immune_name] = string.format("%d%%", util.bound(self:attr(immune_type) * 100, 0, 100)) } end
 
 	-------------------------------------------------------------------
-	-- Effects
+	-- Talents
 	-------------------------------------------------------------------
 	local tdef = js:newSection("talents", "talents", "pairs", "add")
 	for i, tt in ipairs(self.talents_types_def) do
@@ -199,7 +199,8 @@ function _M:dumpToJSON(js)
 						local typename = "class"
 						if t.generic then typename = "generic" end
 						local skillname = ("<ul><li>%s (%s)</li></ul>"):format(t.name, typename)
-						tdef[#tdef+1] = { [skillname] = ("%d/%d"):format(self:getTalentLevelRaw(t.id), t.points) }
+						local desc = self:getTalentFullDescription(t):toString()
+						tdef[#tdef+1] = { [skillname] = {val=("%d/%d"):format(self:getTalentLevelRaw(t.id), t.points), tooltip=desc} }
 					end
 				end
 			end
@@ -241,7 +242,7 @@ function _M:dumpToJSON(js)
 	local achs = js:newSection("achievements", "achievements", "pairs", "break")
 	for id, data in pairs(self.achievements or {}) do
 		local a = world:getAchievementFromId(id)
-		achs[#achs+1] = { [a.name] = {val=game.calendar:getTimeDate(data.turn, "%s %s %s year of Ascendancy at %02d:%02d"), tooltip=a.desc} }
+		achs[#achs+1] = { [a.name] = {val=game.calendar:getTimeDate(data.turn, "%s %s %s year of Ascendancy at %02d:%02d"), tooltip=a.desc.."\nBy "..data.who} }
 	end
 	table.sort(achs, function(a, b) local aname = next(a) local bname = next(b) return aname < bname end)