interface mostly done...need to write tests