further refactor and modularisation