Time to refactor . . . When teaching OO to a person or group that has little experience with OO, picking a subset of a language that supports OO may be warranted. Picking a language subset means that less time is spent learning the in's and out's of the language, and more time [is spent] learning, understanding, and implementing basic OO concepts. However, it must be understood by the participants that the language subset being used is in no way meant to limit the choice of language constructs when implementing further projects. In particular, when [an] individual becomes more aware and comfortable using the more difficult parts of the language, [he] should. When working in a team environment that has settled on a LanguageSubset, it needs to be understood that the choice of the subset is JustRules, ready to be changed based on the needs of the project. The choice of a LanguageSubset can cause many controversies. But, if the subset is considered JustaRule, and if that rule can change easily with the consensus of the team, then it is more likely that the team will accept the subset. -- HankRoark I'm assuming you're talking about C++ here :-) Personally, I'd pick a different language to teach the concepts (the obvious candidate being Smalltalk but there are others) and then move to the relevant language. A couple of years ago I was working with quite a bright chap who just couldn't get his head around C++ and was soaking up all our time. We moved him to Python and he suddenly turned productive. What bothers me about LanguageSubset is that, in complex languages, it's easy to bump into side-effects (C++ and PL1 have fine examples of this) and not know what's going on. --SteveFreeman