a bit glitchy but seems to be working well overall