refactor business to use delegates instead of exception