I decided not to put much text into the diagrams, so that it's easy to adjust the operation and use case names. Below are the contents of the bbject classes in the class diagrams Env: Participant n <> relative to UserInterface ----- ----- Env: UserInterface 1 <> relative to MatchMaker ----- ----- OpenAccount (Person) PayFee (Person, Amount) FillForm (Person) Form UpdateForm (Person) Form FileDatingForm (Person, Form) FilePartyForm (Person, Form, Party) CloseAccount (Person) Env: Operator 1 <> relative to MatchMaker ----- ----- Sys: Env: MatchMaker 1 ----- ----- AddParticipant (Person) DeleteParticipant (Person) AddMoney (Person, Amount) ParticpantIsPaid? (Person) Boolean AddFormOfParticipant (Person, Form) UpdateFormOfParticipant (Person, Form) DeleteFormOfParticipant (Person) ReadFormOfParticipant (Person) Form ParticipantIsMatched? (Person) Boolean UnmatchedParticpants () ListOf(Person) RunDatingMatchForParticipant (Person) ListOf(Person) AddParty (Party) DeleteParty (Party) RunPartyMatch (Party) ListOf(PairOf(Person)) Sys: Database 1 <> ----- ----- AddParticipant (Person) DeleteParticipant (Person) AddMoney (Person, Amount) ParticpantIsPaid? (Person) Boolean AddFormOfParticipant (Person, Form) UpdateFormOfParticipant (Person, Form) DeleteFormOfParticipant (Person) ReadFormOfParticipant (Person) Form ParticipantIsMatched? (Person) Boolean UnmatchedParticpants () ListOf(Person) AddParty (Party) DeleteParty (Party) Sys: Amount <> Sys: Person j <> ----- ----- CreatePerson () Person AddNameToPerson (Person, Text) Person AddAddressToPerson (Person, Text) Person AddE-mailAddressToPerson (Person, Text) Person Same? (Person, Person) Boolean GetNameOfPerson (Person) Text GetAddressOfPerson (Person) Text GetE-mailAddressOfPerson (Person) Text Sys: Party k <> ----- NumberOfParticipants: Integer ----- CreatePartyWithMaxPopulation (Max:Integer) Party SetPartyPopulation (Party, Integer) Party AddParticipantToParty (Party, Person) Party GetParticipantsFromParty (Party) ListOf(Person) Sys: Form l <> ----- ----- CreateFormWithNquestions (n:Integer) Form AddQuestionNtoForm (Form, n:Integer, Question) Form AnswerQuestionNinForm (Form, n:Integer, Question) Form Sys: Question m <> ----- ----- CreateQuestion (Text) Question QuestionIsAnswered? (Question) Boolean AnswerQuestion (Question, Integer, Integer, Integer) Question IsMutualMatch? (Question, Question) Boolean StrengthOfMatch (Question, Question) Integer USE CASES For UserInterface <>: AddParticipant (Person) DeleteParticipant (Person) AddMoney (Person, Amount) AddFormOfParticipant (Person, Form) UpdateFormOfParticipant (Person, Form) DeleteFormOfParticipant (Person) ReadFormOfParticipant (Person) Form For Operator <> and UserInterface <>: ParticpantIsPaid? (Person) Boolean ParticipantIsMatched? (Person) Boolean RunDatingMatchForParticipant (Person) ListOf(Person) For Operator <>: UnmatchedParticpants () ListOf(Person) AddParty (Party) DeleteParty (Party) RunPartyMatch (Party) ListOf(PairOf(Person))