make recursive optional