early return on error
early return on error
refactor
separate compilation