parsing logic is more separated