add tests & fixes