refactor, rewrite, add way more configuration