add core functionality