Rewritten rolling-translate to be recursive
the old version was digusting and hard to read