version 1.0, all functionality exists, needs possible refactoring