It's too slow, and it's ugly... but it works