avoid circular dep