split out parts; more tests