add extra comments
refactor by extacting methods
refactor more by extracting methods