recursive evaluate calls are actually cached, much faster
improved debug printing