This is a brief description of the main classes in ISU, an the role they play.
ISUUser: An user in the ISU system. It has a name, an eMail, a status (offline, online, etc), password, contacts, and messages. 'contacts' is an IdentitySet with ISUContacts and messages is an OrderedCollection with ISUMessages. It also has the messages #sendMessage:aString to:aContact and #sendMessage:aString to:aContact inReplyTo:anISUMessage
ISUContact: It's a role of an ISUUser, but with its protocol reduced (ie. you cannot send #messages, #contacts, or #password but you can send #name, #eMail and #status. The most important thing of this role is that is a "dependent" of View/Controller to one side and Model to the other.
ISUSystem: It's a singleton and is gonna be remotely available. It has a collection of ISUUSers and methods for finding an ISUUser by supplying its name and password or eMail and password.... (NOTE: the only way of obataing an ISUUser is with its password). It also has a method for finding ISUContacts. If you haven'got the password then you don't get "complete" access to the user, just to the contact rol.
ISUMessage: It has when, sender, receiver, content and inReplyTo attributes. It knows if it's an initiating message or a reply to another message, and if this is the case, it knows to which message it's replying to.
ISUClientView: This is THE View. It has an ISUUser as its model.