refactored to OOP, added assoc loading via natural keys