abstract forking with lazy variables