refactor, add limit parameter