huge refactoring / L