prevent components nuking parent data in certain edge cases
minor tidy up - give some anonymous functions names, use internal get() helper instead of prototype method