One problem that still needs to be solved in Self is that of privacy. I was reading the other day about namespaces in SmalltalkAgents, by QKS. I couldn't find much detail about it, but it sounded interesting.
If I understood correctly, they replace the lookup based on (selector, receiver class) by one based on the tuple (selector, receiver class, sender nameSpace). Like classes, namespaces for an inheritance tree (with the nameSpace Global as the root). They say the extra complexity doesn't slow things down very much since most lookups hit the cache.
You can get all kinds of privacy with this scheme: slots only visible to the object, visible to the object and all its children, and so on.
I think it also solves some of the problems that Urs pointed out in "Integrating Independently-Developed Components in Object-Oriented Languages". The nameSpace things was developed in SmalltalkAgents specially so they could have different applications see different methods for String>>copy, for example, depending on whether they were ported from Digitalk or Parcplace Smalltalk.
The problem is that I don't see how something like this could be done in Self, since the idea of name spaces is bound directly to the objects themselves (though not as much as in early Selfs, before annotations).
Anyway, this doesn't solve another problem I have with giving multiple names to a single method/slot. I'll write about that later.