seperate test and implementation.