Separated functionality! Should be easier to understand