see remark about removing circular dependencies