Hi Ian: I am preparing for my fall class ("your" class): http://www.ccs.neu.edu/home/lieber/com3205/f02/f02.html using a text book that uses the LoD as a solid ingredient. I will have my students implement a LoD checker (object form) from design to implementation. Implementation shown below in AspectJ. I was wondering whether I may borrow some of your lecture notes and other materials for this class? It is the first time I am teaching it. -- Karl aspect Check { java.util.HashMap map=new java.util.HashMap(); java.util.HashMap map2=new java.util.HashMap(); java.util.HashMap global = new java.util.HashMap(); pointcut callsite(Object caller,Object callee): this(caller) && target(callee) && call(* *(..)) && !within(Check); pointcut inmethodbody(Object a): this(a) && withincode(* *.*(..)) && !within(Check) && call(*.new(..)); after() returning (Object o): get(static * *.*) && !within(Check) { global.put(o,null); } before(Object a,Object b): set(* *.*) && args(b) && this(a) && !within(Check) { if(!map.containsKey(a)) map.put(a,new java.util.Vector()); java.util.Vector v = (java.util.Vector)map.get(a); v.add(b); } after(Object o) returning(Object a): inmethodbody(o) { if(!map2.containsKey(o)) map2.put(o,new java.util.Vector()); java.util.Vector v = (java.util.Vector)map2.get(o); v.add(a); } after(Object caller,Object callee): callsite(caller,callee) { if(caller==callee || global.containsKey(callee)) return; if(map.containsKey(caller)) { java.util.Vector v = (java.util.Vector)map.get(caller); for(int i=0;i