Ordentligt stor refactoring + kommentering.