sync following
more refactor. remove domain logic from service layer