avoid circular deps