the version without parent-pointers is dropped due to the poor performance