add public API and such implementations