Refactored to use an scalable approach of Actors so that it can be paralelized on multiple machines