refactor code, try to add single responsibility where approp.
refactor code, try to add single responsibility where approp.