Here is a rough interface spec for what I'm planning to implement. More methods will probably be added to implement methods of other classes. Looking through your handout of the algorithm I've looked at each part where we need the rules and I'll give a quick rundown of what functions need to be called. The main classes are RRRConstraint -> RRConstraints.hpp : Constraint class RRRule -> RRRule.hpp : Base class for Rules RRGrammarRule -> RRRule.hpp : Grammar rule RRLexiconRule->RRRule.hpp : Lexicon rule TimeStampedObject -> TimeStampedObject.hpp Interface for using Rule time stamps RRRuleHistory -> RRRuleHistory.hpp Interface for set of rules (all of same type /rule ID) that keeps track of the history of changes to a rule. RRRuleCollection -> RRRuleCollection.hpp Acts as the Master Grammar and Master Lexicon So for each step in the algorithm that uses a rule, here is the method I envision that we use : 1. Keep calling RuleCollection::AddFromFile with rule files to be added 11. To get most current Lexical Rule : RRLexicalRule *GetMostRecentLexRule(vszSLWords,vszTLWords); To BIFURCATE, use a method called Clone that will make a copy of the rule. Use RRRuleCollection::GetNextAvailableID to get the next available ID for a certain POS 12. Refining can be done through the RRRule,RRLexicalRule,and RRConstraint interfaces. In general once a bifurcated, refined rule is ready to be added, simply update the time stamp (TimeStamp::SetTimeStampToCurrentTime()) and use RRRuleCollection::AddRule() For editing "an original rule" , I'm assuming we still keep the old one, so we can just clone add the rule again anyways. So this process is the same for grammar rules (16). 16. Grammar accessed from RRRuleCollection::GetMostRecentGrammarRule(std::string &szRuleID) 22. Getting a rule history will be done with RRRuleCollection::GetLexRuleHistory and RRRuleCollection::GetGrammarRuleHistory 25. RRRuleCollection::OutputMasterLexicon and RRRuleCollection::OutputMasterGrammar Will output the rules in the format of the trf files. More spefically, for each rule history, it will output the most current rule. More specific methods for manipulating constraints/Rules will be added.