improve architecture in preparation for new features