- Everything is a proxy. - 3 layers. 1. Check Sugarcube datastore. - Sugarcube datastore is set (or deleted) automagically whenever a value on the proxy is modified. 2. Check Init datastore (also stores actual inited non-proxy objects). - Initialized with a data object containing key-value pairs. - can have nested create()s to init child objects (ie, a Person's Inventory). 3. Check actual non-proxy object fields. - straightforward field return. - All access, even in internal methods, is done through proxy. - Provide access to a proxy object called 'me', to replace 'this'. - Using 'this' is only acceptable in constructor. - This fixes the problem of object methods getting the wrong data depending on the inheritance hierarchy.