tiny bit better, this will need major refactoring later