overhaul interface for more flexibility

closes #4