further optimisation ( avoid hasOwnProperty, cached nodeID)