more routines. but need to be tested