this is a pain but it's really cool once it works