refactoring + add follow functionality