A method for evaluating a dependency graph having a temporally dependent variable that is used to evaluate the dependency graph for a frame other than that at which the temporally dependent variable was evaluated, the method (300, 800) comprising: receiving, by a processor, a request to evaluate the dependency graph for a requested frame of an animation; identifying, based on a temporal dependency list (400, 600, 700), that a value of the temporally dependent variable is dirty for a first frame different from the requested frame, wherein a value of the temporally dependent variable for the first frame is used to evaluate the dependency graph for the requested frame, and wherein the temporal dependency list comprises a list of values of the temporally dependent variable determined by previous evaluations of the dependency graph; in response to receiving the request to evaluate the dependency graph for the requested frame, evaluating the value that has been identified as a dirty value, wherein evaluating the identified dirty value comprises: identifying, based on the temporal dependency list, each frame where the temporally dependent variable has a dirty value, wherein the temporally dependent variable of the requested frame is dependent upon each frame identified; and evaluating portions of the dependency graph required to evaluate the temporally dependent variable for each frame identified; updating the list of values of the temporal dependency list based on the evaluation of the identified dirty values; and evaluating at least a portion of the dependency graph at the requested frame based at least in part on the updated list of values of the temporal dependency list. receiving, by a processor, a request to evaluate the dependency graph for a requested frame of an animation; identifying, based on a temporal dependency list (400, 600, 700), that a value of the temporally dependent variable is dirty for a first frame different from the requested frame, wherein a value of the temporally dependent variable for the first frame is used to evaluate the dependency graph for the requested frame, and wherein the temporal dependency list comprises a list of values of the temporally dependent variable determined by previous evaluations of the dependency graph; in response to receiving the request to evaluate the dependency graph for the requested frame, evaluating the value that has been identified as a dirty value, wherein evaluating the identified dirty value comprises: identifying, based on the temporal dependency list, each frame where the temporally dependent variable has a dirty value, wherein the temporally dependent variable of the requested frame is dependent upon each frame identified; and evaluating portions of the dependency graph required to evaluate the temporally dependent variable for each frame identified; identifying, based on the temporal dependency list, each frame where the temporally dependent variable has a dirty value, wherein the temporally dependent variable of the requested frame is dependent upon each frame identified; and evaluating portions of the dependency graph required to evaluate the temporally dependent variable for each frame identified; updating the list of values of the temporal dependency list based on the evaluation of the identified dirty values; and evaluating at least a portion of the dependency graph at the requested frame based at least in part on the updated list of values of the temporal dependency list.