adding some more tests and implementations