avoid circular dependency