At present, The GUI has created a NetworkConnection From that Network, it has created a Mailbox From that Mailbox, it has requested a list of messages in the Inbox (we'll call that list messages); The GUI calls the preferences class to get preferences for organizing messages Options currentOptions = new Options(userName); SetOfRules ordering = currentOptions.getOption("sorting or filtering or something"); SortFilter filter = new SortFilter(ordering); messages = filter.sort(messages); pop up a new Inbox window and display the messages // For each message, we just have the message header for (int i = 0 ; i < messages.length(); i++) { // Get the information on that message MessageHeader info = messages.getHeader(i); String from = info.get("Sender"); String to = info.get("Recipient"); String date = info.get("Date"); String subject = info.get("Subject"); someCoolJavaCodeWeWrite(from,to,date,subject); } // User clicks on a message. Remember which message // they've selected. // User selects "Display the message already!" // Goal: Display the message // Check preferences (skipped) // Get the message Message messageToDisplay = mailbox.getMessage( messages.getHeader(messageNum).getField("Message Name")) // Display it (implementation-dependent) // User requests a picture of the sender PhotoInt photo = new PhotoStub(userName); photo.displayPhoto(); // If there is no picture, // this displays a picture of // User wants to reply // Determine if the user wants it quoted. // Determine the user's preferences MailMessage mynewMessage; // Eventually ... SendMail outgoing = new SendMailStub(); outgoing.sendMessage(mynewMessage);