add most of the core functionality