add core function