I started refactoring messages by detaching "long" messages (those which appear when you enter a new place etc.) from the regular messages displayed on top line of the screen. Then I rewrote Game_Message class with std::string style code taken from Kaduria. Messages are now event driven so adding a message will only add it to a list without directly showing it.
A while back I added a primitive event system for Teemu. What I didn't realize then was that direct messages and event messages created a logic error where some messages were displayed in wrong order. This also happens with current event driven message system, because messages and events to display them are two different layers of events! The reason why it went like that was that I suck as a programmer. Yes, I'm afraid it's the case.
Anyway, I think fixing the event problem is not going to be too difficult, because there are only few events happening. More so, only those events that have something to do with regular messages are wrong.