fleshing out some interfaces and beginning to add tests