Refactor to expose common interface among messages

Hey man, I took a shot at this refactor, figured I'd see if you were into it.