it could be a bit more cleaner