Here is a general algorithm for comparing two similar tables (or copies of tables). for r = each record of t1 not in t2 // based on primary key display record end-for for r = each record of t2 not in t1 display record end-for for key = each record common to both r1 = getRecord(t1, key) r2 = getRecord(t2, key) for each attribute in r1 not in r2 display key, attribute, and value end-for for each attribute in r2 not in r1 display key, attribute, and value end-for for attr = each attribute in r1 if r1[attr] not-equal-to r2[attr] display key, attribute, r1[attr], r2[attr] end-if end-for end-for ------- '''Trees''' One technique for comparing trees is to print them as text, and then use text-based difference finders common in most operating systems. Use recursion to create the outline-like format, and perhaps disable white-space sensativity so that different levels won't be over-emphasized. You may want to try it with and without the full node path, as each will emphasize different kinds of changes. Here is a pre-differenced sample text file: node 1 foo=7 bar=9 ..node 1.2 foo=12 bar=7 ..node 1.3 foo=9 node 2 bar=6 ..node 2.1 foo=12 ....node 2.1.1 foo=12 bar=99 ..node 2.2 bar=786 (Dots used to prevent TabMunging, but may not otherwise be needed in actual file.)