add core implementation