Optimise logic, add more usage flexibility as well as next and previous methods