need to refactor a little bit
working play, ugly