refactored classes away to keep simple, proper api for additions