An intelligent diagnostic tutor, DIAG , selects problems adaptively and generates all tutoring dialogs from its analysis of a model of the target system. The learner performs tests on a graphical representation of the target system and calls on DIAG for assistance when needed. During exercises, the tutoring functions can advise the learner about the implications of particular test outcomes, the rationality of suspecting particular replaceable units, and advisability of performing various diagnostic actions. After exercises, DIAG can critique the learner’s testing strategy, and it can generate and explain an expert diagnostic strategy for the previous fault. A prototype application of a very complex system demonstrates the range of tutoring capabilities achieved by the system.