Merge pull request #11 from celeen/perform_async

split up perform method for single responsibility
more tests, some passing