add more tests, find more bugs...