BRANCH OBSOLETE:
Testing branch removed, new design and implementation will be made.