Hi, I'll be answering your question about DAJ and it's perplexing behavior of using DJ, a runtime tool for compile time code generation. Basically, DAJ compile and runs the user's code to generate the traversal code. DAJ first generates some stubs that the user expects from DAJ. Then, it compiles the user code with CreateClassGraph.java. It runs the compiled code to generate the traversals. Then, compiles the user code with the generated code. During the execution of the user code in the third step, the code in CreateClassGraph.java is an AspectJ aspect that intercepts the call to the main method. It then uses DJ to create an instance of ClassGraph. Then, DAJ starts to process the traversals. Thus, by executing the user code during the compilation process, we can use DJ to calculate the traversals. There's a pictorial representation of this process in the thesis defense presentation. I believe that it's also in my final draft of the thesis. I don't quite understand your question about the Class.forName("someclass"). When the constructor for ClassGraph is called, DJ uses Java Reflection to construct a representation of the class graph for the current running program. If you use the Java Reflection for your own purposes, it shouldn't affect your code or vice versa. John