much more clean code