make code more readable
extract function for evaluating properties
don't use "options" for the object with values
extract variable for final result
run replace recursively if there is key to replace
don't throw maximum call size error