more functions implemented