added private implementations