deal with circular reference