[fix] stick to classic callback pattern