This is pretty much how it works