Stuart: here is an answer to your question to Alexey. -- Karl Let's assume you have a class A = B. and from A exactly one B is reachable. In Demeter/Java, instead of using the generated get_b() you can write your own adaptive version: // an adaptive method where visitor is inlined and strategy // is explicit. A{ B my_get_b() to B { before B (@ return_val = host; @) } } Advantages of my_get_b(): it will work correctly, without change, if the B gets more deeply nested inside the A. Disadvantages of my_get_b(): You have to maintain the invariant, as the class graph evolves, that from A exactly one B is reachable. Or alternatively, you have to update the strategy used by my_get_b(). Maintaining the invariant or changing the strategy is easier than maintaining the access code yourself. When should you use my_get_b() instead of get_b()? If you expect the A class to evolve so that the B-class gets deeper nested in the A-class. The decision is up to you. See (LoD-PP) in: ftp://ftp.ccs.neu.edu/pub/people/lieber/faq/Demeter-FAQ -- Karl Lieberherr