full implementation, push tests passing