added some tests and fixed some bugs