Like Allie, I've worked on 2 large projects (80 to 100 tables) which used a table like this (using Sybase, not Oracle). We called that one table the codelist table. It contained a variety of shortish lists (typically less than 50 rows) of various id-name-value triplets. Each row was prefixed by the 4th column that Allie calls "realm" but what we called something else (I don't remember but something more generic like "list"). Doing this was much more efficient than having separate tables for all of those various lists of triples. In the rare case where we really needed a separate code list table, it was generally named so as to make its function clear: foobar_ct, where ct stood for code table. We definitely need to get everything out of the variables table -- in its current incarnation! -- that is NOT needed on each and every page. It makes no sense to load all kinds of cruft that is only needed once in a while. Whether the solution is Adrian's or Allie's will be based on other criteria, as both appear to solve the problem of loading unneeded data on each page. ..chrisxj