ready to refactory the whole structure.