Proper version (using recursive generation).