bit of cleanup
keep track of dependent nodes
add invalidation semantics