add async message handling