implement software functions