IMHO as a bare minimum we should:
- fix the dictionaries, so they don't use bindings as their internal associations
- initialize references correcly - as described above
- create an API for Undeclared, and remove all direct references to it, it shouldn't be exposed at all