okay, this is a little too complicated… but its fun at least in theory