spec'd everything out, wrote tests