- Re-written to make more efficient use of HashSets and much less reliance on numerous lists
- TODO: better notifications/less repetitive code