added core functionality