works but prob has bugs and is ugly