handle message internally