REFACTOR integrate all components