convert website to Lazarus/Phoenix
diff --git a/_projectCommon.php b/_projectCommon.php
index b3c6fc8..1af89cd 100644
--- a/_projectCommon.php
+++ b/_projectCommon.php
@@ -3,35 +3,43 @@
 	# Set the theme for your project's web pages.
 	# See the Committer Tools "How Do I" for list of themes
 	# https://dev.eclipse.org/committers/ 
-	$theme = "Phoenix";
+	$theme = "Lazarus";
 
 	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
 	#$projectInfo = new ProjectInfo("technology.aspectj");
 	#$projectInfo->generate_common_nav( $Nav );
 
+	$branding = <<<EOBRANDING
+<STYLE TYPE="text/css">
+  #midcolumn { margin-top: 5px; }
+  body { font-size: small; }
+</STYLE>	
+<div id="branding">
+<img src="/aspectj/aspectjbanner2.png" width="502" height="42" alt="AspectJ">
+</div>
+EOBRANDING;
+$Menu->setProjectBranding($branding);
+
 	$Nav->setLinkList(array());
 
 	# Define your project-wide Nav bars here.
 	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
-	$Nav->addNavSeparator("Eclipse Home", 	"/index.php");
-	$Nav->addNavSeparator("AspectJ", 	"/aspectj/index_new.php");
+	$Nav->addNavSeparator("AspectJ", 	"/aspectj/index.php");
 	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;About", "/aspectj/description.php", "_self", 1);
-	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Committers", "/aspectj/committers.php", 	"_self", 1);
+	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Team", "/aspectj/team.php", 	"_self", 1);
 	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Plans", "/aspectj/plans_new.php", 	"_self", 1);
 
 	$Nav->addNavSeparator("Users", "", "_self", 1);
 	#$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Getting Started", 	"/aspectj/gettingstarted.php", 	"_self", 1);
 	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Downloads", 	"/aspectj/downloads.php", 	"_self", 1);
+	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Docs", 	"/aspectj/docs.php", 	"_self", 1);
 	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Bugs", "/aspectj/bugs.php", 	"_self", 1);
-	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;FAQ", "/aspectj/doc/released/faq.html", "_self", 1);
-	#$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Demos", "/aspectj/demos/", "_self", 1);
-	#$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;New Features", "/aspectj/newfeatures/", "_self", 1);
-	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Mailing list", "http://dev.eclipse.org/mailman/listinfo/aspectj-users", "_self", 1);
-	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Newsgroup", "http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.aspectj", "_self", 1);
+	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;FAQ", "/aspectj/doc/released/faq.php", "_self", 1);
+	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;&nbsp;Mailing lists", "/aspectj/userlists.php", "_self", 1);
 
 	$Nav->addNavSeparator("Developers", "", "_self", 1);
 	#$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;Contributing", "/aspectj/developers.php", 	"_self", 1);
-	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;CVS", "http://dev.eclipse.org/viewcvs/indextech.cgi/org.aspectj/modules/", 	"_self", 1);
+	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;CVS", "http://dev.eclipse.org/viewcvs/index.cgi/org.aspectj/?cvsroot=Tools_Project", 	"_self", 1);
 	$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;Mailing list", "http://dev.eclipse.org/mailman/listinfo/aspectj-dev", "_self", 1);
 	#$Nav->addCustomNav("&nbsp;&nbsp;&nbsp;Work tasks", "/aspectj/tasks.php", 	"_self", 1);
 
diff --git a/blank.php b/blank.php
new file mode 100644
index 0000000..f7da3f3
--- /dev/null
+++ b/blank.php
@@ -0,0 +1,47 @@
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "The AspectJ Project";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
+	$pageAuthor		= "Type your name here";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+	# End: page-specific settings	
+		
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn" style="width: 80%">
+
+	  <h1></h1>
+
+	</div>
+
+</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/bugs.php b/bugs.php
index ed44384..418ade5 100644
--- a/bugs.php
+++ b/bugs.php
@@ -15,7 +15,7 @@
 	#
 	# Begin: page-specific settings.  Change these. 
 	$pageTitle 		= "AspectJ Bugs";
-	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse, Contributors";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
 	$pageAuthor		= "Andy Clement";
 	
 	# Add page-specific Nav bars here
@@ -26,16 +26,14 @@
 
 	# End: page-specific settings
 	#
-		
-	$rightcolumn = file_get_contents("rightcolumn.html");
-		
+				
 	# Paste your HTML content between the EOHTML markers!	
 	$html = <<<EOHTML
 
 <div id="maincontent">
 	<div id="midcolumn">
 	
-	<div align="center"><h1>$pageTitle</h1></div>
+	<h1>Bugs</h1>
 
 <p>The best way to report a problem or request a new feature in AspectJ
 is to use the Bugzilla system. Here are some useful links to get you
@@ -56,8 +54,6 @@
 		<hr class="clearer" />
 	</div>
 
-$rightcolumn
-
 </div>
 
 
diff --git a/description.php b/description.php
index 829e878..75f1bd6 100644
--- a/description.php
+++ b/description.php
@@ -25,8 +25,6 @@
 	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
 
 	# End: page-specific settings
-
-	$rightcolumn = file_get_contents("rightcolumn.html");
 		
 	# Paste your HTML content between the EOHTML markers!	
 	$html = <<<EOHTML
@@ -34,7 +32,7 @@
 <div id="maincontent">
 	<div id="midcolumn">
 	
-	<div align="center"><h1>$pageTitle</h1></div>
+	<h1>About</h1>
 		<table border="0" cellpadding="4">
           <tr>
           	<td valign="top"><img border=0 src="logo.gif" width="164" height="229" alt="AJDT screenshot"></td>
diff --git a/doc/released/faq.php b/doc/released/faq.php
new file mode 100644
index 0000000..5f74c72
--- /dev/null
+++ b/doc/released/faq.php
@@ -0,0 +1,3583 @@
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "AspectJ Frequently Asked Questions";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
+	$pageAuthor		= "Type your name here";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+	# End: page-specific settings	
+		
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn" style="width: 80%">
+
+	  <h1>Frequently Asked Questions</h1>
+
+<p>Copyright (c) 1997-2001 Xerox Corporation, 
+       2002 Palo Alto Research Center, Incorporated,
+       2003-2006 Contributors. All rights reserved.
+  </p><p>Last updated March 28, 2006
+  </p><p>
+   For a list of recently-updated FAQ entries, see <a href="#q:faqchanges">Q:What has changed since the last FAQ version?</a>
+  </p><div class="qandaset"><dl><dt>1 <a href="#overview">Overview</a></dt><dd><dl><dt>1.  <a href="#q:whatisaj">What is AspectJ?</a></dt><dt>2.  <a href="#q:benefits">What are the benefits of using AspectJ?</a></dt><dt>3.  <a href="#q:compability">Can AspectJ work with any Java program?</a></dt><dt>4.  <a href="#q:license">How is AspectJ licensed?</a></dt><dt>5.  <a href="#q:project">What is the AspectJ Project?</a></dt></dl></dd><dt>2 <a href="#quickstart">Quick Start</a></dt><dd><dl><dt>1.  <a href="#q:requirements">
+            What Java versions does AspectJ require and support?
+          </a></dt><dt>2.  <a href="#q:install">How do I download and install AspectJ?</a></dt><dt>3.  <a href="#q:startUsingAJ">How should I start using AspectJ?</a></dt><dt>4.  <a href="#q:integrateWithDevTools">How does AspectJ integrate with existing Java development
+            tools?
+          </a></dt></dl></dd><dt>3 <a href="#typicalprograms">Typical AspectJ programs</a></dt><dd><dl><dt>1.  <a href="#q:aspectsoptional">Are aspects always optional or non-functional parts of
+            a program?
+          </a></dt><dt>2.  <a href="#q:developmentAndProductionAspects">
+            What is the difference between development and production aspects?
+          </a></dt><dt>3.  <a href="#q:devAspects">
+            What are some common development aspects?
+          </a></dt><dt>4.  <a href="#q:prodAspects">
+            What are some common production aspects?
+          </a></dt></dl></dd><dt>4 <a href="#concepts">Basic AOP and AspectJ Concepts</a></dt><dd><dl><dt>1.  <a href="#q:crosscutting">What are scattering, tangling, and crosscutting?</a></dt><dt>2.  <a href="#q:joinpoints">What are join points?</a></dt><dt>3.  <a href="#q:pointcut">
+            What is a pointcut?
+          </a></dt><dt>4.  <a href="#q:advice">What is advice?</a></dt><dt>5.  <a href="#q:declarations">What are inter-type declarations?</a></dt><dt>6.  <a href="#q:whatisanaspect">What is an aspect?</a></dt></dl></dd><dt>5 <a href="#whyaop">Why AOP?</a></dt><dd><dl><dt>1.  <a href="#q:ccfromflaws">Are crosscutting concerns induced by flaws in parts of the
+          system design, programming language, operating system, etc. Or is
+          there something more fundamental going on?
+          </a></dt><dt>2.  <a href="#q:definingaspectspercc">Does it really make sense to define aspects in terms of
+          crosscutting?
+          </a></dt><dt>3.  <a href="#q:domainspecific">Is AOP restricted to domain-specific
+            applications?
+          </a></dt><dt>4.  <a href="#q:whyaopifinterceptors">Why do I need AOP if I can use interceptors
+                (or JVMPI or ref
+            lection)?
+          </a></dt></dl></dd><dt>6 <a href="#related">Related Technology</a></dt><dd><dl><dt>1.  <a href="#q:comparetonewforms">
+            How does AspectJ compare to other new forms of programming?
+          </a></dt><dt>2.  <a href="#q:compartoreflection">How do you compare the features of AspectJ with
+            reflective systems?
+          </a></dt><dt>3.  <a href="#q:comparetomixin">How do AspectJ features compare with those of mixin-based
+            inheritance?
+          </a></dt><dt>4.  <a href="#q:dynamicaop">How does AspectJ compare with more dynamic AOP?
+          </a></dt><dt>5.  <a href="#q:aopandxp">What is the relationship between AOP and 
+        XP (extreme programming AKA agile methods)?
+          </a></dt><dt>6.  <a href="#q:aspectjandcsharp">Will you support C#?</a></dt></dl></dd><dt>7 <a href="#adoption">Deciding to adopt AspectJ</a></dt><dd><dl><dt>1.  <a href="#q:productplans">
+            Is it safe to use AspectJ in my product plans?
+          </a></dt><dt>2.  <a href="#q:effectonsize">What is the effect of using AspectJ on the source code
+            size of programs?
+          </a></dt><dt>3.  <a href="#q:effectonperformance">
+            Does AspectJ add any performance overhead?
+          </a></dt><dt>4.  <a href="#q:modularityviolations">
+            I've heard that AspectJ leads to modularity violations.  Does it?
+          </a></dt><dt>5.  <a href="#q:encapsulation">
+            Why does AspectJ permit aspects to access and add members of another type?  
+            Isn't that violating OO encapsulation?
+          </a></dt><dt>6.  <a href="#q:aspectjandj2ee">Can I use AspectJ with J2EE?</a></dt><dt>7.  <a href="#q:aspectjandgj">Can I use AspectJ with Generic Java?</a></dt><dt>8.  <a href="#q:aspectjandj2me">Can I use AspectJ with J2ME?</a></dt><dt>9.  <a href="#q:aopinjava"> Are you working to put AOP into Java?  
+	   It seems that every AOP toolset currently uses proprietary mechanisms 
+	   to describe point-cuts, etc.
+          </a></dt><dt>10.  <a href="#q:support">What kind of support is available?</a></dt><dt>11.  <a href="#q:mailingLists">What mailing lists are there?</a></dt></dl></dd><dt>8 <a href="#compiler">Using the AspectJ compiler</a></dt><dd><dl><dt>1.  <a href="#q:compilerRequired">
+            Do I have to use the AspectJ compiler?
+          </a></dt><dt>2.  <a href="#q:requiredsources">
+            What files do I need to include when compiling AspectJ programs?
+          </a></dt><dt>3.  <a href="#q:listingsources">I have to list many files in the command line to
+            compile with ajc. Is there any other way to
+            provide the file names to ajc?
+          </a></dt><dt>4.  <a href="#q:compilerVM">What Java virtual machine (JVM) do I use to run the
+            AspectJ compiler?
+          </a></dt><dt>5.  <a href="#q:compilingForDifferentVMs">How can I use ajc to compile
+            programs for a JVM that is different from the one used to run it?
+          </a></dt><dt>6.  <a href="#q:assert">Does the ajc compiler support 
+        the assert keyword in Java 1.4?
+          </a></dt><dt>7.  <a href="#q:generics">Does the ajc compiler support 
+        generics and the other new language features of Java 5?
+          </a></dt><dt>8.  <a href="#q:versionCompatibility">Will aspects work with different versions of the compiler/weaver and runtime?
+          </a></dt><dt>9.  <a href="#q:msjvm">Are there any issues using AspectJ with the Microsoft
+            JVM?
+          </a></dt><dt>10.  <a href="#q:javacbytecode">Does ajc rely
+            on javac for generating Java bytecode
+            (.class) files?
+          </a></dt><dt>11.  <a href="#q:parsergenerators">
+            I noticed the AspectJ compiler doesn't use a parser generator.  Why is that?
+          </a></dt><dt>12.  <a href="#q:howIncrementalWorks">How does incremental mode work?
+          </a></dt></dl></dd><dt>9 <a href="#devtools">Integrating AspectJ into your development environment</a></dt><dd><dl><dt>1.  <a href="#q:knowWhenAspectsAffectClasses">How do I know which aspects affect a class when looking
+            at that class's source code?
+          </a></dt><dt>2.  <a href="#q:idesupport">What kind of IDE support is available for developing
+            AspectJ programs?
+          </a></dt><dt>3.  <a href="#q:idesupportplans">What plans are there to support my IDE?</a></dt><dt>4.  <a href="#q:portingajde">Can I port AJDE support to my development environment?</a></dt><dt>5.  <a href="#q:hybridbuilds">I want the aspects for development builds but 
+        remove them for production builds.  How can I set up the build
+        system so they are unpluggable?  And so I use javac
+        in my production build?
+          </a></dt><dt>6.  <a href="#q:stepwiseBuilds">
+            We compile module jars and then assemble them.  Can we continue this with AspectJ?
+          </a></dt><dt>7.  <a href="#q:incrementalModuleCompiles">We use modules and would like to use incremental compilation.
+                Is that possible?
+          </a></dt></dl></dd><dt>10 <a href="#notes">Programming notes and tips</a></dt><dd><dl><dt>1.  <a href="#q:methodsignatures">Is it possible to change methods by introducing keywords (like
+            synchronized), adding parameters, 
+                     or changing the "throws" clause?
+          </a></dt><dt>2.  <a href="#q:seeingjoinpoints">
+            I don't understand what join points exist.  How can I see them?
+          </a></dt><dt>3.  <a href="#q:comparecallandexecution">
+            What is the difference between call and execution join points?
+          </a></dt><dt>4.  <a href="#q:comparecflowandcflowbelow">
+            What is the difference between cflow and cflowbelow?
+          </a></dt><dt>5.  <a href="#q:recursiveentrypoints">How do I say that I want the topmost entrypoint in a
+	        recursive call? How about the most-recent prior entrypoint?
+          </a></dt><dt>6.  <a href="#q:initializationjoinpoints">What is the difference between constructor call, 
+          constructor execution, initialization, and static 
+          initialization join points?
+          </a></dt><dt>7.  <a href="#q:adviseconstructors">How do I work with an object right when it is created?
+          </a></dt><dt>8.  <a href="#q:andingpointcuts">
+            I want advice to run at two join points, but it doesn't run at all.  What gives?
+          </a></dt><dt>9.  <a href="#q:staticfieldreferences">
+            How do I refer to a static field when my advice crosscuts multiple classes?
+          </a></dt><dt>10.  <a href="#q:interfacesastypepatterns">I would like to reuse a type pattern, e.g., to
+	write advice that is limited to a certain set of classes.
+	Do I have to retype it each time?
+          </a></dt><dt>11.  <a href="#q:exampleprograms">Where do I find example programs and how-to's?</a></dt><dt>12.  <a href="#q:aspectlibraries">Are aspect libraries available?</a></dt><dt>13.  <a href="#q:serialversionuid">How does ajc interact with the
+            serialVersionUID?
+          </a></dt><dt>14.  <a href="#q:applets">How can I use AspectJ with applets?</a></dt><dt>15.  <a href="#q:typeoblivious">How can I specify types for advice that captures primitives, void, etc.?</a></dt><dt>16.  <a href="#q:versioninfo">How do I detect which version I am running?</a></dt></dl></dd><dt>11 <a href="#problems">Common Problems</a></dt><dd><dl><dt>1.  <a href="#q:infiniterecursion">When I run, I get a StackOverflowError
+        (or a long stack trace or no output whatsoever)
+          </a></dt><dt>2.  <a href="#q:typelessdeclarations">I've declared a field on every class in
+            my package; how do I use it in advice?
+          </a></dt><dt>3.  <a href="#q:ajcoom">The AspectJ compiler aborts with an OutOfMemoryError when
+          compiling many classes. How can I fix this?
+          </a></dt><dt>4.  <a href="#q:duplicateclass">
+            Why do I get a message that my class is already defined?
+          </a></dt><dt>5.  <a href="#q:ajcrecompile">
+            ajc recompiles all files every time. 
+          How can I make it recompile only the files that have changed?
+          </a></dt><dt>6.  <a href="#q:ajcjvm">
+            ajc is using the wrong JVM. How do I
+            fix it?
+          </a></dt><dt>7.  <a href="#q:idebalkingataspects">My IDE is trying to parse AspectJ files which makes my project unusable.
+                What can I do?
+          </a></dt><dt>8.  <a href="#q:idememory">I used to be able to compile my program in my IDE, but when I
+                use AJDE, I run out of memory (or it goes really slow).
+          </a></dt><dt>9.  <a href="#q:noaspectbound">
+            When I run, I get a NoAspectBoundException or a
+            ClassNotFound message for NoAspectBoundException.
+          </a></dt><dt>10.  <a href="#q:stacktraces">
+            My stack traces don't make sense.  What gives?
+          </a></dt><dt>11.  <a href="#q:advicenotrunning">
+            My advice is not running (or running twice), and I don't know why.
+          </a></dt><dt>12.  <a href="#q:adviceOnOveriddenMethods">
+            My advice runs for each overridden method!
+            </a></dt><dt>13.  <a href="#q:tejpsp">
+            I don't understand when thisEnclosingJoinPointStaticPart is available.
+          </a></dt><dt>14.  <a href="#q:packagedeclares">
+            I declared a member on a class with package access, but other classes in the package cannot see it.
+          </a></dt><dt>15.  <a href="#q:interfaceDeclarations">I declared a member on a interface, but javac does not see it.
+          </a></dt><dt>16.  <a href="#q:cantfindjavac">
+            ajc 1.0 complains that it can't find
+            javac. What's wrong?
+          </a></dt><dt>17.  <a href="#q:ajdocneeds13">
+          I'm running under 1.4, but ajdoc asks for 1.3 
+          (or throws IllegalAccessError for HtmlWriter.configuration)
+          </a></dt><dt>18.  <a href="#q:compileunits">I set up different files to my compiles to change what
+                the aspects see, but now I don't
+	        understand how the aspects are working.
+          </a></dt><dt>19.  <a href="#q:readingpreprocessedcode">I'm reading the code generated by ajc 1.0
+        in -preprocess mode, and it seems like it would not
+        work (or "like it works this way").
+          </a></dt><dt>20.  <a href="#q:injection">I've heard AspectJ can generate or inject code into my code.  
+	        Is this true?
+          </a></dt><dt>21.  <a href="#q:newjoinpoints">Why can't AspectJ pick out local variables (or array elements or ...)?
+          </a></dt><dt>22.  <a href="#q:reflectiveCalls">Why doesn't AspectJ pick out reflective calls?
+			  The pointcut call(void run()) 
+			  won't pick out a call using reflection, like
+			  ((Method)run).invoke(null, args).
+          </a></dt><dt>23.  <a href="#q:currentbugs">What are the bugs now most affecting users?</a></dt><dt>24.  <a href="#q:runtimeMemory">What extra memory is required at runtime?
+          </a></dt></dl></dd><dt>12 <a href="#aj11">AspectJ 1.1 and eclipse.org</a></dt><dd><dl><dt>1.  <a href="#q:whyeclipse">Why did the AspectJ project move to eclipse.org?
+          </a></dt><dt>2.  <a href="#q:eclipserequired">Do I have to download Eclipse to use AspectJ?
+          </a></dt><dt>3.  <a href="#q:eclipseetc">What are the relationships between AspectJ, JDT, 
+                Eclipse, AJDT, and IDE support generally?
+          </a></dt></dl></dd><dt></dt><dd><dl><dt>1.  <a href="#q:aspectj5features">
+            What are the new features of AspectJ 5?
+          </a></dt><dt>2.  <a href="#q:codeversusannotationstyles">
+            Should I use code- or annotation-style aspects?
+          </a></dt><dt>3.  <a href="#q:aspectj5ltw">
+            What's new about the load-time weaving support in AspectJ 5?
+          </a></dt></dl></dd><dt>14 <a href="#Technology">Understanding AspectJ Technology</a></dt><dd><dl><dt>1.  <a href="#q:implementation">Do I need to know how the compiler or weaver works?
+          </a></dt><dt>2.  <a href="#q:whitepapers">How does the compiler/weaver work? Are there any white papers?
+          </a></dt><dt>3.  <a href="#q:reflection">Does AspectJ use reflection at runtime?
+          </a></dt><dt>4.  <a href="#q:loadtimeWeaving">What about load-time weaving? Can I weave aspects at runtime?
+          </a></dt></dl></dd><dt>15 <a href="#Developers">AspectJ Project Development</a></dt><dd><dl><dt>1.  <a href="#q:howitworks">I'm interested in the code implementing AspectJ.
+          </a></dt><dt>2.  <a href="#q:contributions">How can I get involved with developing the AspectJ project?
+          </a></dt><dt>3.  <a href="#q:buildingsource">How do I get and compile the source code for AspectJ?
+          </a></dt><dt>4.  <a href="#q:buildingAspectJAndAJDT">How do I build AspectJ and integrate it into AJDT?
+          </a></dt><dt>5.  <a href="#q:devDocs">Where do I find developer documentation on building and testing AspectJ source code?
+          </a></dt><dt>6.  <a href="#q:harnesstestcases">How should I submit test cases for bugs?
+          </a></dt><dt>7.  <a href="#q:testharness">I'd like to run my test case.  How do I get the test harness?
+          </a></dt><dt>8.  <a href="#q:bcel">BCEL is used by AspectJ but it's not actively developed.  Will you change?
+          </a></dt></dl></dd><dt>16 <a href="#help">Getting Help</a></dt><dd><dl><dt>1.  <a href="#q:moreaboutaj">
+            How do I find out more about AspectJ?
+          </a></dt><dt>2.  <a href="#q:bugreports">How do I submit a bug report?</a></dt><dt>3.  <a href="#q:talktousers">
+            How do I communicate with other AspectJ users?
+          </a></dt><dt>4.  <a href="#q:searchingsite">
+            How can I search the email archives or the web site?
+          </a></dt><dt>5.  <a href="#q:writingbugsandemails">
+            How should I write email queries?
+          </a></dt><dt>6.  <a href="#q:idebugs">
+            How do I write bugs for IDE support?
+          </a></dt><dt>7.  <a href="#q:ajcbugs">
+            How do I write bugs for the AspectJ compiler?
+          </a></dt><dt>8.  <a href="#q:teachingmaterials">
+            Can you recommend reading or teaching material for AspectJ?
+          </a></dt><dt>9.  <a href="#q:consulting">
+            Where can our group get consulting and support?
+          </a></dt><dt>10.  <a href="#q:faqchanges">
+            What has changed since the last FAQ version?
+          </a></dt></dl></dd><dt>17 <a href="#project">About the AspectJ Project</a></dt><dd><dl><dt>1.  <a href="#q:opensource">What does the fact that AspectJ is an Open Source
+            Project mean to me?
+          </a></dt><dt>2.  <a href="#q:standardization">What are your plans to make AspectJ a general feature
+            of Java supported by Sun and the other key players in the Java
+            Industry?
+          </a></dt><dt>3.  <a href="#q:bytecodeweaving">When will AspectJ work from class files?
+	        When will it work at class-loading time?
+          </a></dt><dt>4.  <a href="#q:differences">What are the differences between the current and
+            previously released versions of AspectJ?
+          </a></dt><dt>5.  <a href="#q:schedule">
+            What is the AspectJ development schedule?
+          </a></dt><dt>6.  <a href="#q:java5">
+            Will AspectJ support Java 5?
+          </a></dt></dl></dd></dl><div class="qandadiv"><h3 class="title"><a name="overview"></a>1 Overview</h3><div class="qandaentry"><div class="question"><p><a name="q:whatisaj"></a><b>1. </b>What is AspectJ?</p></div><div class="answer"><p><a name="d0e23"></a><b></b>
+            AspectJ(tm) is a simple and practical extension to the 
+            Java(tm) programming
+            language that adds to Java aspect-oriented programming (AOP)
+            capabilities. AOP allows developers to reap the benefits of
+            modularity for concerns that cut across the natural units of
+            modularity. In object-oriented programs like Java, the natural unit
+            of modularity is the class. In AspectJ, aspects modularize concerns that
+            affect more than one class.  
+	  </p><p>You compile your program using the AspectJ compiler 
+          (perhaps using the supported development environments) 
+          and then run it, 
+          supplying a small (&lt; 100K) runtime library.
+          </p><p>The AspectJ technologies include 
+           a compiler (<tt>ajc</tt>), 
+           a debugger (<tt>ajdb</tt>), 
+           a documentation generator (<tt>ajdoc</tt>), 
+           a program structure browser (<tt>ajbrowser</tt>), 
+           and integration with
+            Eclipse, Sun-ONE/Netbeans, GNU Emacs/XEmacs, 
+            JBuilder, and Ant.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:benefits"></a><b>2. </b>What are the benefits of using AspectJ?</p></div><div class="answer"><p><a name="d0e46"></a><b></b>AspectJ can be used to improve the modularity of software
+            systems.
+          </p><p> Using ordinary Java, it can be difficult to modularize design
+          concerns such as
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e52"></a>system-wide error-handling</p></li><li><p><a name="d0e55"></a>contract enforcement</p></li><li><p><a name="d0e58"></a>distribution concerns</p></li><li><p><a name="d0e61"></a>feature variations</p></li><li><p><a name="d0e64"></a>context-sensitive behavior</p></li><li><p><a name="d0e67"></a>persistence</p></li><li><p><a name="d0e70"></a>testing</p></li></ul></div><p>The code for these concerns tends to be spread out across the
+            system. Because these concerns won't stay inside of any one module
+            boundary, we say that they <span class="emphasis"><i>crosscut</i></span> the
+            system's modularity.
+          </p><p>AspectJ adds constructs to Java that enable the modular
+            implementation of crosscutting concerns. This ability is
+            particularly valuable because crosscutting concerns tend to be both
+            complex and poorly localized, making them hard to deal with.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:compability"></a><b>3. </b>Can AspectJ work with any Java program?</p></div><div class="answer"><p><a name="d0e85"></a><b></b>AspectJ has been designed as a <span class="emphasis"><i>compatible</i></span>
+          extension to Java. By compatible, we mean
+          </p><div class="informaltable" id="d0e91"><a name="d0e91"></a><table border="0"><colgroup><col><col></colgroup><tbody><tr><td align="right"><span class="emphasis"><i>upward compatible</i></span></td><td>All legal Java programs are legal AspectJ
+                    programs.
+                  </td></tr><tr><td align="right"><span class="emphasis"><i>platform
+                    compatible
+                    </i></span></td><td>All legal AspectJ programs run on standard Java
+                    virtual machines.
+                  </td></tr><tr><td align="right"><span class="emphasis"><i>tool
+                    compatible
+                    </i></span></td><td>Existing tools can be extended to work with
+                    AspectJ.
+                  </td></tr><tr><td align="right"><span class="emphasis"><i>programmer compatible</i></span></td><td>Programming in AspectJ feels natural to Java
+                    programmers.
+                  </td></tr></tbody></table></div><p>The AspectJ tools run on any Java 2 Platform compatible
+            platform.  The AspectJ compiler produces classes that run
+            on any Java 1.1 (or later) compatible platform.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:license"></a><b>4. </b>How is AspectJ licensed?</p></div><div class="answer"><p><a name="d0e124"></a><b></b>AspectJ 1.5.2 source code and documentation is available under the
+            <a href="http://eclipse.org/legal/epl-v10.html" target="_top">Eclipse Public License 1.0</a>.
+          </p><p>AspectJ 1.1 through 1.5.1 source code and documentation is available under the
+            <a href="http://eclipse.org/legal/cpl-v10.html" target="_top">Common Public License 1.0</a>.
+          </p><p>The AspectJ 1.0 tools are open-source software available under the
+            <a href="http://www.opensource.org/licenses/mozilla1.1" target="_top">Mozilla Public License 1.1</a>.
+            That documentation is available under a separate license
+            that precludes for-profit or commercial
+              redistribution.  
+          </p><p>Most users only want to use AspectJ to build programs they distribute.
+          There are no restrictions here.  When you distribute your program, be sure to
+          include all the runtime classes from the aspectjrt.jar for that version of AspectJ.
+          When distributing only the runtime classes, you need not provide any notice that 
+          the program was compiled with AspectJ or includes binaries from the AspectJ project,
+          except as necessary to preserve the warranty disclaimers in our license.
+          </p><p>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:project"></a><b>5. </b>What is the AspectJ Project?</p></div><div class="answer"><p><a name="d0e148"></a><b></b>AspectJ is based on over ten years of research at
+            <a href="http://www.parc.xerox.com" target="_top">
+              Xerox Palo Alto Research Center
+            </a> 
+	as funded by Xerox, a U.S. Government grant (NISTATP), and a
+            DARPA contract.
+          </p><p>It has evolved through open-source releases 
+          to a strong user community and now operates as an
+          open source project at 
+           <a href="http://eclipse.org/aspectj" target="_top">
+                       http://eclipse.org/aspectj</a>
+            The AspectJ team works closely with the community
+            to ensure AspectJ continues to evolve as an effective 
+            aspect-oriented programming language and tool set.
+          </p><p>
+            The latest release is 1.2  
+	        which can be downloaded from the 
+             <a href="http://eclipse.org/aspectj" target="_top">AspectJ project page</a>,
+             including sources as described
+             <a href="#q:buildingsource">Q:How do I get and compile the source code for AspectJ?</a>.
+             Development is focused on supporting applications, 
+	         improving quality and performance, 
+             enhancing integration with IDE's,
+             and building the next generations of the language.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="quickstart"></a>2 Quick Start</h3><div class="qandaentry"><div class="question"><p><a name="q:requirements"></a><b>1. </b>
+            What Java versions does AspectJ require and support?
+          </p></div><div class="answer"><p><a name="d0e175"></a><b></b>
+          The AspectJ compiler produces programs for any released version of the 
+          Java platform (jdk1.1 and later).  When running, your program classes must
+	      be able to reach classes in the
+          small (&lt; 100K) runtime library (aspectjrt.jar) from the distribution.
+          The tools themselves require J2SE 1.3 or later to run,
+          but the compiler can produce classes for any 1.1-compliant
+          version of the Java platform.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:install"></a><b>2. </b>How do I download and install AspectJ?</p></div><div class="answer"><p><a name="d0e182"></a><b></b>From AspectJ's
+            <a href="http://eclipse.org/aspectj" target="_top">web page
+            </a>, download the AspectJ distribution.
+            The <tt>jar</tt> file is installed by executing
+          </p><pre class="programlisting">
+            java -jar <span class="emphasis"><i>jar file name</i></span>
+          </pre><p>Do <span class="bold"><b>not</b></span> try to extract the
+            <tt>jar</tt> file contents and then attempt to execute
+            <tt>java org.aspectj.tools.Main</tt>. (A
+            <tt>NoClassDefFoundError</tt> exception will be
+            thrown.) The AspectJ distribution is not designed to be installed
+            this way. Use the <tt>java -jar</tt> form shown above.
+          </p><p>To uninstall, remove the files the installer wrote in your 
+            file system.  In most cases, you can delete the top-level install
+	        directory (and all contained files), after you remove any
+	        new or updated files you want to keep. On Windows, no
+            registry settings were added or changed, so nothing needs to be
+            undone.  Do not install over prior versions, which might have 
+            different files.  Delete the prior version first.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:startUsingAJ"></a><b>3. </b>How should I start using AspectJ?</p></div><div class="answer"><p><a name="d0e219"></a><b></b>Many users adopt AspectJ in stages, first using it
+        to understand and validate their systems (relying on it only in
+        development) and then using it to implement crosscutting concerns
+        in production systems.  AspectJ has been designed to make each
+        step discrete and beneficial.
+          </p><p>
+            In order of increasing reliance, you may use AspectJ:
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e225"></a>
+                <span class="bold"><b> In the development
+                    process
+                </b></span> Use AspectJ to trace or log
+                  interesting information. You can do this by adding 
+                  simple AspectJ code that performs logging or tracing. 
+                  This kind of addition may be removed ("unplugged") for
+                  the final build since it does not implement a design
+                  requirement; the functionality of the system is unaffected by
+                  the aspect.
+              </p></li><li><p><a name="d0e231"></a>
+                <span class="bold"><b>As an ancillary part of your
+                    system
+                </b></span> Use AspectJ to more completely and
+                    accurately test the system.
+                  Add sophisticated code that can check contracts,
+                  provide debugging support, or implement test strategies. 
+                  Like pure development aspects, this code may also be 
+                  unplugged from production builds. However, the same code
+                  can often be helpful in diagnosing failures in deployed 
+                  production systems, so you may design the functionality
+                  to be deployed but disabled, and enable it when debugging.
+              </p></li><li><p><a name="d0e237"></a>
+                <span class="bold"><b>As an essential part of your
+                    system
+                </b></span> Use AspectJ to modularize
+                  crosscutting concerns in your system by design. 
+                  This uses AspectJ to implement logic integral to a system
+                  and is delivered in production builds.
+              </p></li></ul></div><p>This adoption sequence works well in practice and has been
+          followed by many projects.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:integrateWithDevTools"></a><b>4. </b>How does AspectJ integrate with existing Java development
+            tools?
+          </p></div><div class="answer"><p><a name="d0e249"></a><b></b>AspectJ products are designed to make it easy to integrate
+          AspectJ into an existing development process.  
+          Each release includes 
+          Ant tasks for building programs,
+          the AspectJ Development Environment (AJDE) for writing
+          aspects inside popular IDE's,  and
+          command-line tools for compiling and documenting Java and AspectJ code.
+          </p><p>AspectJ provides replacements for standard Java tools:
+            <div class="itemizedlist"><ul><li><p><a name="d0e256"></a><tt>ajc</tt>, the AspectJ compiler,
+                  runs on any Java 2 compatible platform, and produces classes
+                  that run on any Java 1.1 (or later) compatible platform.
+                </p></li><li><p><a name="d0e261"></a><tt>ajdoc</tt> produces API documentation like
+                javadoc, with additional crosscutting links.  For example,
+                it shows advice affecting
+                a particular method or all code affected by a given aspect.
+                At present, <tt>ajdoc</tt> is only supported in AspectJ 1.0.
+                </p></li></ul></div>
+          </p><p>For debugging, AspectJ supports JSR-45, which provides a mechanism for 
+          debugging .class files that have multiple source files.
+          Debugger clients and VM's are beginning to support this;
+          see Sun's J2SE 1.4.1 VM and jdb debugger
+          and recent versions of JBuilder.
+          </p><p>The AspectJ Development Environment (AJDE)
+           enables programmers to view and navigate the crosscutting structures
+           in their programs, integrated with existing support in 
+           popular Java IDE's for viewing and navigating object-oriented
+           structures. For many programmers this provides a deeper understanding
+           of how aspects work to modularize their concerns and permits them
+           to extend some of their development practices without 
+           having to abandon their existing tools.
+          </p><p>
+            AJDE is a set of API's providing the basis for the following
+            development tool integrations:
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e278"></a>Eclipse (version 2.0)
+                   in the Eclipse AspectJ Development Tools project
+                    <a href="http://eclipse.org/ajdt" target="_top">
+                                http://eclipse.org/ajdt
+                    </a>
+              </p></li><li><p><a name="d0e284"></a>Emacs (GNU version 20.3) 
+                    and XEmacs (version 21.1 on Unix and 21.4 on Windows), 
+                   in the SourceForge AspectJ for Emacs project
+                    <a href="http://aspectj4emacs.sourceforge.net" target="_top">
+                                http://aspectj4emacs.sourceforge.net
+                    </a>
+              </p></li><li><p><a name="d0e290"></a>JBuilder (versions 4 through 7) from Borland
+                    in the SourceForge AspectJ for JBuilder project
+                    <a href="http://aspectj4jbuildr.sourceforge.net" target="_top">
+                                http://aspectj4jbuildr.sourceforge.net
+                    </a>
+              </p></li><li><p><a name="d0e296"></a>Netbeans up to 3.4
+                    (and Sun Microsystems' Forte for Java (versions 2 and 3), Sun/One)
+                    in the SourceForge AspectJ for NetBeans project
+                    <a href="http://aspectj4netbean.sourceforge.net" target="_top">
+                                http://aspectj4netbean.sourceforge.net
+                    </a>
+              </p></li></ul></div><p>
+            The common functionality of AJDE is also available in
+            the stand-alone source code browser <tt>ajbrowser</tt>,
+            included in the tools distribution.
+          </p><p>Finally, as mentioned above,
+           AspectJ also supports building with Ant by providing
+           task interfaces to the ajc and ajdoc tools.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="typicalprograms"></a>3 Typical AspectJ programs</h3><div class="qandaentry"><div class="question"><p><a name="q:aspectsoptional"></a><b>1. </b>Are aspects always optional or non-functional parts of
+            a program?
+          </p></div><div class="answer"><p><a name="d0e316"></a><b></b>No. Although AspectJ can be used in a way that allows AspectJ
+            code to be removed for the final build, aspect-oriented code is not
+            <span class="emphasis"><i>always</i></span> optional or non-functional. Consider
+            what AOP really does: it makes the modules in a program correspond
+            to modules in the design. In any given design, some modules are
+            optional, and some are not.
+          </p><p>The examples directory included in the AspectJ distribution
+            contains some examples of the use aspects that are not optional.
+            Without aspects,
+          </p><div class="informaltable" id="d0e324"><a name="d0e324"></a><table border="0"><colgroup><col><col></colgroup><tbody><tr><td align="right"><span class="strong"><i>bean</i></span></td><td>Point objects would not be JavaBeans.</td></tr><tr><td align="right"><span class="strong"><i>introduction</i></span></td><td>Point objects would not be cloneable, comparable or
+                    serializable.
+                  </td></tr><tr><td align="right"><span class="strong"><i>spacewar</i></span></td><td>Nothing would be displayed.</td></tr><tr><td align="right"><span class="strong"><i>telecom</i></span></td><td>No calls would be billed.</td></tr></tbody></table></div></div></div><div class="qandaentry"><div class="question"><p><a name="q:developmentAndProductionAspects"></a><b>2. </b>
+            What is the difference between development and production aspects?
+          </p></div><div class="answer"><p><a name="d0e355"></a><b></b>
+            Production aspects are delivered with the finished product,
+	    while development aspects are used during the development process.
+	    Often production aspects are also used during development.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:devAspects"></a><b>3. </b>
+            What are some common development aspects?
+          </p></div><div class="answer"><p><a name="d0e362"></a><b></b>Aspects for logging, tracing, debugging, profiling
+	   or performance monitoring, or testing.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:prodAspects"></a><b>4. </b>
+            What are some common production aspects?
+          </p></div><div class="answer"><p><a name="d0e369"></a><b></b>
+            Aspects for performance monitoring and diagnostic systems, 
+	    display updating or notifications generally, security, 
+	    context passing, and error handling.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="concepts"></a>4 Basic AOP and AspectJ Concepts</h3><div class="qandaentry"><div class="question"><p><a name="q:crosscutting"></a><b>1. </b>What are scattering, tangling, and crosscutting?</p></div><div class="answer"><p><a name="d0e379"></a><b></b>
+	      "Scattering" is when similar code is distributed throughout many 
+          program modules.  This differs from a component being used by 
+          many other components since
+	      it involves the risk of misuse at each point and of inconsistencies
+	      across all points.  Changes to the implementation may require
+          finding and editing all affected code.
+          </p><p>"Tangling" is when two or more concerns are implemented in
+	      the same body of code or component, making it more difficult to understand.
+	      Changes to one implementation may cause unintended changes
+	      to other tangled concerns.
+          </p><p>"Crosscutting" is how to characterize a concern than spans
+	      multiple units of OO modularity - classes and objects.  Crosscutting
+	      concerns resist modularization using normal OO constructs, but 
+          aspect-oriented programs can modularize crosscutting concerns.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:joinpoints"></a><b>2. </b>What are join points?</p></div><div class="answer"><p><a name="d0e390"></a><b></b>Join points are well-defined points in the execution of a
+            program. Not every execution point is a join point: only those
+            points that can be used in a disciplined and principled manner are.
+            So, in AspectJ, the execution of a method call is a join point, but
+            "the execution of the expression at line 37 in file Foo.java" is
+            not.
+          </p><p>The rationale for restricting join points is similar to the
+            rationale for restricting access to memory (pointers) or
+            restricting control flow expressions (<tt>goto</tt>) in
+            Java: programs are easier to understand, maintain and extend
+            without the full power of the feature.
+          </p><p>AspectJ join points include reading or writing a field; calling
+            or executing an exception handler, method or constructor.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:pointcut"></a><b>3. </b>
+            What is a pointcut?
+          </p></div><div class="answer"><p><a name="d0e404"></a><b></b>A pointcut picks out
+            <a href="#q:joinpoints">
+              join points
+            </a>. These join points are described by the pointcut
+              declaration. Pointcuts can be defined in classes or in aspects,
+              and can be named or be anonymous.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:advice"></a><b>4. </b>What is advice?</p></div><div class="answer"><p><a name="d0e414"></a><b></b>Advice is code that executes at each
+	    <a href="#q:joinpoints">join point</a> picked out by a
+            <a href="#q:pointcut">pointcut</a>. There are three
+            kinds of advice: before advice, around advice and after advice. As
+            their names suggest, before advice runs before the join point
+            executes; around advice executes before and after the join point;
+            and after advice executes after the join point. The power of
+            advice comes from the advice being able to access values in the
+            execution context of a pointcut.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:declarations"></a><b>5. </b>What are inter-type declarations?</p></div><div class="answer"><p><a name="d0e427"></a><b></b>AspectJ enables you to declare members and supertypes of another class
+	in an aspect, subject to Java's type-safety and access rules.  These are
+	visible to other classes only if you declare them as accessible.  
+        You can also declare compile-time errors and warnings based on pointcuts.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:whatisanaspect"></a><b>6. </b>What is an aspect?</p></div><div class="answer"><p><a name="d0e434"></a><b></b>Aspects are a new class-like language element that has been
+            added to Java by AspectJ. Aspects are how developers encapsulate
+            concerns that cut across classes, the natural unit of modularity in
+            Java.
+          </p><p>Aspects are similar to classes because...
+            <div class="itemizedlist"><ul><li><p><a name="d0e440"></a>aspects have type</p></li><li><p><a name="d0e443"></a>
+                  aspects can extend classes and other aspects
+                </p></li><li><p><a name="d0e446"></a>
+                  aspects can be abstract or concrete
+                </p></li><li><p><a name="d0e449"></a>
+                  non-abstract aspects can be instantiated
+                </p></li><li><p><a name="d0e452"></a>aspects can have static and non-static state and
+                  behavior
+                </p></li><li><p><a name="d0e455"></a>aspects can have fields, methods, and types
+                  as members
+                </p></li><li><p><a name="d0e458"></a>the members of non-privileged aspects follow the
+                  same accessibility rules as those of classes
+                </p></li></ul></div>
+          </p><p>Aspects are different than classes because...
+            <div class="itemizedlist"><ul><li><p><a name="d0e465"></a>aspects can additionally include as members pointcuts,
+                  advice, and inter-type declarations;
+                </p></li><li><p><a name="d0e468"></a>aspects can be qualified by specifying the
+                  context in which the non-static state is available
+                </p></li><li><p><a name="d0e471"></a>aspects can't be used interchangeably with
+                  classes
+                </p></li><li><p><a name="d0e474"></a>aspects don't have constructors or finalizers,
+                  and they cannot be created with the new operator;
+		  they are automatically available as needed.
+                </p></li><li><p><a name="d0e477"></a>privileged aspects can access private members of
+                  other types
+                </p></li></ul></div>
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="whyaop"></a>5 Why AOP?</h3><div class="qandaentry"><div class="question"><p><a name="q:ccfromflaws"></a><b>1. </b>Are crosscutting concerns induced by flaws in parts of the
+          system design, programming language, operating system, etc. Or is
+          there something more fundamental going on?
+          </p></div><div class="answer"><p><a name="d0e488"></a><b></b>AOP's fundamental assumption is that in any sufficiently
+            complex system, there will inherently be some crosscutting
+            concerns.
+          </p><p>So, while there are some cases where you could re-factor a
+            system to make a concern no longer be crosscutting, the AOP idea
+            is that there are many cases where that is not possible, or where
+            doing so would damage the code in other ways.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:definingaspectspercc"></a><b>2. </b>Does it really make sense to define aspects in terms of
+          crosscutting?
+          </p></div><div class="answer"><p><a name="d0e497"></a><b></b>Yes.</p><p>The short summary is that it is right to define AOP in terms of
+            crosscutting, because well-written AOP programs have clear
+            crosscutting structure.  It would be a mistake to define AOP in
+            terms of "cleaning up tangling and scattering", because that isn't
+            particular to AOP, and past programming language innovations also
+            do that, as will future developments.
+          </p><p>(Slides for a long talk on this topic were once available at
+              http://www.cs.ubc.ca/~gregor/vinst-2-17-01.zip.)
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:domainspecific"></a><b>3. </b>Is AOP restricted to domain-specific
+            applications?
+          </p></div><div class="answer"><p><a name="d0e508"></a><b></b>No. Some implementations of AOP are domain-specific, but
+            AspectJ was specifically designed to be general-purpose.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:whyaopifinterceptors"></a><b>4. </b>Why do I need AOP if I can use interceptors
+                (or JVMPI or ref
+            lection)?
+          </p></div><div class="answer"><p><a name="d0e515"></a><b></b>There are many mechanisms people use now to implement
+          some crosscutting concerns.  But they don't have a way to express
+          the actual structure of the program so you (and your tools)
+	  can reason about it.  Using a language enables you to express the 
+          crosscutting in first-class constructs.  You can not only avoid the 
+          maintenance problems and structural requirements of some other 
+          mechanisms, but also combine forms of crosscutting so that all
+	  the mechanisms for a particular concern are one piece of code.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="related"></a>6 Related Technology</h3><div class="qandaentry"><div class="question"><p><a name="q:comparetonewforms"></a><b>1. </b>
+            How does AspectJ compare to other new forms of programming?
+          </p></div><div class="answer"><p><a name="d0e525"></a><b></b>There are many recent proposals for programming languages that
+            provide control over crosscutting concerns. Aspect-oriented
+            programming is an overall framework into which many of these
+            approaches fit. AspectJ is one particular instance of AOP,
+            distinguished by the fact that it was designed from the ground up
+            to be compatible with Java.
+          </p><p>For more alternatives for aspect-oriented programming, see 
+            <a href="http://aosd.net" target="_top">http://aosd.net</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:compartoreflection"></a><b>2. </b>How do you compare the features of AspectJ with
+            reflective systems?
+          </p></div><div class="answer"><p><a name="d0e537"></a><b></b>Reflective and aspect-oriented languages have an important
+            similarity: both provide programming support for dealing with
+            crosscutting concerns. In this sense reflective systems proved 
+            that independent programming of crosscutting concerns is
+            possible.
+          </p><p>But the control that reflection provides tends to be low-level
+            and extremely powerful. In contrast, AspectJ provides more
+            carefully controlled power, drawing on the rules learned from
+            object-oriented development to encourage a clean and understandable
+            program structure.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:comparetomixin"></a><b>3. </b>How do AspectJ features compare with those of mixin-based
+            inheritance?
+          </p></div><div class="answer"><p><a name="d0e546"></a><b></b>Some features of AspectJ, such as introduction, are related to
+            <span class="emphasis"><i>mixin-based inheritance</i></span>. But, in order to
+            support crosscutting, a core goal for AspectJ, AspectJ goes beyond
+            mixin-based inheritance.
+          </p><p>Firstly, an aspect imposes behavior on a class, rather than a
+            class requesting behavior from an aspect. An aspect can modify a
+            class without needing to edit that class. This property is
+            sometimes called <span class="emphasis"><i>reverse inheritance</i></span>.
+          </p><p>Secondly, a single aspect can affect multiple classes in
+            different ways. A single paint aspect can add different paint
+            methods to all the classes that know how to paint, unlike mixin
+            classes.
+          </p><p>
+So mixin-based inheritance doesn't have the reverse inheritance
+property, and mixins affect every class that mixes them in the same.
+If I want to do something like SubjectObserverProtocol, I need two
+mixins, SubjectPartofSubjectObserverProtocol and ObserverPartof...
+In AspectJ, both halves of the protocol can be captured in a single
+aspect.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:dynamicaop"></a><b>4. </b>How does AspectJ compare with more dynamic AOP?
+          </p></div><div class="answer"><p><a name="d0e565"></a><b></b>
+          Some AOP techniques are presented as "dynamic" because the weaving 
+          occurs when classes are loaded, because aspects can be configured 
+          in a separate XML file before launch, or because some advice
+          depends on runtime reflection.  They are said to be more flexible
+          than AspectJ.
+          </p><p>
+          This is a misconception.  First, the AspectJ 1.1 weaver has always 
+          supported weaving at compile-time or class-load-time.  Weaving at
+          compile-time reduces application launch and running time, and it helps
+          IDE's offer support for tracking down weaving errors and understanding
+          the impact of aspects on a system.
+          On the other hand, weaving at load-time simplifies build and deployment.
+          Before AspectJ 1.2, the user had to write a class loader that used the 
+          weaver API to weave at load time; since 1.2, AspectJ comes with a 
+          command-line launcher to support weaving at class-load-time without 
+          any other changes to a build configuration.  In AspectJ 5, we expect
+		  to get a similar level of support as AspectWerkz, and to exploit
+		  the class bytecode weaving hook available in Java 5 VM's.
+          </p><p>
+          Second, AspectJ programs, like Java programs generally, can be
+          written to support any level of XML configuration or to depend on
+          runtime reflection.  There are some benefits to using AspectJ;
+          e.g., the proceed() form within around advice simplifies a lot of 
+          the work that otherwise would go into writing a generalized 
+          interceptor, without introducing many of the runtime errors that can 
+          result from interceptors.  
+          For AspectJ examples of configurable or reflection-dependent programs,
+          see the sample code linked off the AspectJ documentation page
+          or the examples discussed on the mailing list, e.g.,
+          <a href="http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg02151.html" target="_top">
+			Incremental and runtime weaving support?</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:aopandxp"></a><b>5. </b>What is the relationship between AOP and 
+        XP (extreme programming AKA agile methods)?
+          </p></div><div class="answer"><p><a name="d0e579"></a><b></b>From a question on the user list:
+            <pre class="programlisting">
+&gt; Anyone know the connections between AOP and Extreme Programming?
+&gt; I am really confused. It seems AOP is a programming paradigm, which
+&gt; is the next level of abstraction of OOP. Extreme Programming, however,
+&gt; this is a lightweight software development process. One of the common
+&gt; motivations of AOP and XP is designed to adopt to the requirement
+&gt; changes, so that it can save the cost of software development.
+            </pre>
+          </p><p>
+            This is Raymond Lee's answer:
+          </p><p>
+        You're not really that confused.  AOP and XP are orthogonal concepts,
+        although AOP can be used to help accomplish XP goals.
+        One of the goals of XP is to respond to changing requirements.
+        Another is to reduce the overall cost of development.  These are
+        not necessarily the same thing.
+          </p><p>
+        One of the principles of XP that contribute to meeting those goals
+        is to maintain clean, simple designs.  One of the criteria for clean,
+        simple designs is to factor out duplication from the code.  Benefits
+        of removing duplication include the code being easier to understand,
+        better modularity of the design, lower costs of code changes, less
+        chance of conflicting changes when practicing collective code
+        ownership, etc.
+          </p><p>
+        Different types of duplication lend themselves to being addressed by
+        different design paradigms and language features.  Duplicate snippets
+        of code can be factored out into methods.  Duplicate methods can be
+        factored out to common classes, or pushed up to base classes.
+        Duplicate patterns of methods and their use can be factored out to
+        mechanisms of classes and methods (i.e. instantiations of design
+        patterns).
+          </p><p>
+        AOP addresses a type of duplication that is very difficult to handle
+        in the other common paradigms, namely cross-cutting concerns.  By
+        factoring out duplicate cross-cutting code into aspects, the target
+        code becomes simpler and cleaner, and the cross-cutting code becomes
+        more centralized and modular.
+          </p><p>
+        So, AOP as a paradigm, and the associated tools, gives an XPer, or
+        anyone wanting to remove duplication from the code base, a powerful
+        way to remove a form of duplication not easily addressed until now.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:aspectjandcsharp"></a><b>6. </b>Will you support C#?</p></div><div class="answer"><p><a name="d0e601"></a><b></b>Not at this time. Although the resemblances between C# and Java
+            means it would probably be a fairly straightforward matter to take
+            the AspectJ language design and produce AspectC#, our current focus
+            is only on supporting effective uses of AspectJ.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="adoption"></a>7 Deciding to adopt AspectJ</h3><div class="qandaentry"><div class="question"><p><a name="q:productplans"></a><b>1. </b>
+            Is it safe to use AspectJ in my product plans?
+          </p></div><div class="answer"><p><a name="d0e611"></a><b></b>You may use AspectJ in your product or project with little
+            risk. Several factors play a role in reducing the risk of adopting
+            this new technology:
+            <div class="itemizedlist"><ul><li><p><a name="d0e615"></a>AspectJ is an <span class="emphasis"><i>addition</i></span> to
+                  Java, and can be introduced into a project 
+                  in a way that limits risk. 
+                  See <a href="#q:startUsingAJ">Q: How should I start using AspectJ?</a> for
+                  some suggestions on how to do this.
+                </p></li><li><p><a name="d0e623"></a>The AspectJ compiler accepts standard Java as
+                  input and produces standard Java bytecode as output. 
+                  In 1.0, an optional mode produces standard Java source code 
+                  which may then be compiled with any compliant Java compiler
+                  (e.g. Sun's <tt>javac</tt> compiler 
+                  or IBM's <tt>jikes</tt> compiler).
+                  In 1.1, an optional mode accepts standard Java bytecode 
+                  from any compliant Java compiler 
+                  and weaves in the aspects to produce new bytecode.
+                </p></li><li><p><a name="d0e632"></a>AspectJ is available under a non-proprietary, open source license,
+                 either the 
+                  <a href="http://www.opensource.org/licenses/mozilla1.1" target="_top">
+                            Mozilla Public License 1.1</a>
+                  for 1.0 or the
+                  <a href="http://eclipse.org/legal/cpl-v10.html" target="_top">
+                   Common Public License 1.0</a> for 1.1.
+                  AspectJ will continue to evolve and be available, regardless
+                  of the fate of any particular organization involved with
+                  AspectJ.
+                </p></li><li><p><a name="d0e641"></a>Removing AspectJ from your program is not
+                  difficult, although you will lose the flexibility and
+                  economy that AspectJ provided.
+                </p></li></ul></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:effectonsize"></a><b>2. </b>What is the effect of using AspectJ on the source code
+            size of programs?
+          </p></div><div class="answer"><p><a name="d0e649"></a><b></b>Using aspects reduces, as a side effect, the number of source
+            lines in a program. However, the major benefit of using aspects
+            comes from <span class="emphasis"><i>improving</i></span> the modularity of a
+            program, not because the program is smaller. Aspects gather into a
+            module concerns that would otherwise be scattered across or
+            duplicated in multiple classes.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:effectonperformance"></a><b>3. </b>
+            Does AspectJ add any performance overhead?
+          </p></div><div class="answer"><p><a name="d0e659"></a><b></b>The issue of performance overhead is an important one. It is
+            also quite subtle, since knowing what to measure is at least as
+            important as knowing how to measure it, and neither is always
+            apparent.
+          </p><p>We aim for the performance of our implementation of AspectJ to 
+          be on par with the same functionality hand-coded in Java.  Anything
+          significantly less should be considered a bug.
+          </p><p>There is currently no benchmark suite for AOP languages in
+            general or for AspectJ in particular. It is probably too early to
+            develop such a suite because AspectJ needs more maturation of the
+            language and the coding styles first. Coding styles really drive
+            the development of the benchmark suites since they suggest what is
+            important to measure.
+          </p><p>Though we cannot show it without a benchmark suite, we believe
+          	that code generated by AspectJ has negligible performance overhead.
+            Inter-type member and parent introductions should have very little
+            overhead, and advice should only have some indirection which 
+            could be optimized away by modern VM's.
+          </p><p>The <tt>ajc</tt> compiler will use static typing information 
+            to only insert the advice and dynamic pointcut tests that are absolutely necessary.  
+            Unless you use 'thisJoinPoint' or 'if', the main dynamic checks will be 
+            'instanceof' checks which are generally quite fast.  
+            These checks will only be inserted when they can not be inferred from 
+            the static type information.
+          </p><p>When measuring performance, write AspectJ code
+            fragments and compare them to the performance of the
+            corresponding code written without AspectJ. For example, don't
+            compare a method with before/after advice that grabs a lock to just
+            the method. That would be comparing apples and oranges. Also be
+            sure to watch out for JIT effects that come from empty method
+            bodies and the like. Our experience is that they can be quite
+            misleading in understanding what you've measured.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:modularityviolations"></a><b>4. </b>
+            I've heard that AspectJ leads to modularity violations.  Does it?
+          </p></div><div class="answer"><p><a name="d0e679"></a><b></b>
+            Well I haven't yet seen a language in which you can't write bad code!
+          </p><p>
+        But seriously, most AspectJ users find that just like when they learned 
+        OO, it takes a while to really get the hang of it.  They tend to start 
+        in the usual way, by copying canonical examples and experimenting with 
+        variations on them.
+          </p><p>
+        But users also find that rather than being dangerous, AspectJ helps them 
+        write code that is more clear and has better encapsulation -- once they 
+        understand the kind of modularity AspectJ supports.  There are several 
+        good papers that talk about this (see below), but here's a basic point 
+        to keep in mind: when properly used, AspectJ makes it possible program 
+        in a modular way, something that would otherwise be spread throughout 
+        the code. Consider the following code, adapted from the AspectJ tutorial:
+          </p><pre class="programlisting">
+aspect PublicErrorLogging {
+    Log log = new Log();
+
+    pointcut publicInterface(Object o):
+        call(public * com.xerox.*.*(..)) &amp;&amp; target(o);
+
+    after(Object o) throwing (Error e): publicInterface(o) {
+        log.write(o, e);
+    }
+}
+          </pre><p>
+        The effect of this code is to ensure that whenever any public method of 
+        an interface or class in the <tt>com.xerox</tt> package 
+        throws an error, that error is logged before being thrown to its caller.
+          </p><p>
+        Of course in the alternative implementation a large number of methods 
+        have a try/catch around their body.
+          </p><p>
+        The AspectJ implementation of this crosscutting concern is clearly 
+        modular, whereas the other implementation is not.  As a result, if you 
+        want to change it, its easier in the AspectJ implementation.  For 
+        example, if you also want to pass the name of the method, or its 
+        arguments to <tt>log.write</tt>, you only have to edit 
+        one place in the AspectJ code.
+          </p><p>
+        This is just a short example, but I hope it shows how what happens 
+        with AOP and AspectJ is that the usual benefits of modularity are 
+        achieved for crosscutting concerns, and that leads to better code, 
+        not more dangerous code.
+          </p><p>
+        One paper someone else just reminded me of that talks some more 
+        about this is:
+            <a href="http://www.cs.ubc.ca/~kdvolder/Workshops/OOPSLA2001/submissions/12-nordberg.pdf" target="_top">
+              http://www.cs.ubc.ca/~kdvolder/Workshops/OOPSLA2001/submissions/12-nordberg.pdf
+            </a>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:encapsulation"></a><b>5. </b>
+            Why does AspectJ permit aspects to access and add members of another type?  
+            Isn't that violating OO encapsulation?
+          </p></div><div class="answer"><p><a name="d0e711"></a><b></b>In the spirit of Smalltalk, we have decided to give more power
+            to the language in order to let the user community experiment and
+            discover what is right. To date this has proven to be a successful
+            strategy because it has permitted the construction of many useful
+            aspects that crosscut the internal state of an object, and as such
+            need access the its private members. However, we are not
+            discounting that some sort of restrictions are useful, rather, we
+            are seeking input from the community in order to decide on what
+            these restrictions should be.
+          </p><p>
+            In that light, our position on encapsulation is :
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e717"></a>we respect Java's visibility rules</p></li><li><p><a name="d0e720"></a>we also provide open-classes, a mature OO technology</p></li><li><p><a name="d0e723"></a>we provide "privileged" access if you really need it.</p></li></ul></div><p>
+          Introducing parents or members to classes is a well-studied OO technique
+          known as open classes.
+          </p><p>
+          Open classes have been used in many languages prior to AspectJ, 
+          including CLOS, Python, Smalltalk, Objective-C, and others.  
+          Building from Java, introduction in AspectJ provides better 
+          name hygiene and access control than prior languages.  
+          Introduced code obeys all of Java's normal accessibility rules 
+          for its lexical location in the aspect that it is introduced from.  
+          Such code can not even see, much less access, private members of 
+          the class it is introduced into. Further, introductions can be
+          declared private to the aspect, so they are not visible to
+          other clients of the class.
+          </p><p>
+          Privileged aspects do permit access to private members of another
+          class.  They are a response to the very few cases where developers 
+          genuinely need such access (typically for testing purposes where it
+          access is necessary), but it would be more risky to open access by
+          putting the aspect in the same package, adding test code, or changing
+          access in the target class.  We recommend using privileged aspects 
+          only as necessary, and believe that marking them "privileged" makes 
+          any potential misuse apparent.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:aspectjandj2ee"></a><b>6. </b>Can I use AspectJ with J2EE?</p></div><div class="answer"><p><a name="d0e736"></a><b></b>
+            Consider the component types in J2EE:
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e740"></a>
+                Servlet: AspectJ works well within servlets
+              </p></li><li><p><a name="d0e743"></a>
+	JSP: It is possible to use AspectJ to affect code in JSPs by precompiling
+	them into Java sources and compiling these with ajc. This can be used, e.g., to 
+	customize displays by turning on and off custom JSP taglibs. The mapping from a
+	given jsp source to java package and class name is not standardized, which means
+	doing this imposes dependencies on specific container versions.
+              </p></li><li><p><a name="d0e746"></a>
+	EJB: AspectJ supports a wide variety of aspects for EJBs. It can be used for 
+	logging, tracing, debugging, error handling by layers, correlated method-level
+	interception (e.g., chargebacks), metering, fine-grained transactions, etc.
+	Indeed, it can be used to enforce adherence to coding restrictions within an
+	EJB (e.g., not using java.io, creating a class loader, or listening on 
+	sockets) using <tt>declare error</tt>.
+              </p></li></ul></div><p>
+	The basic limitations are that there is no built-in support for writing J2EE
+	analogs for AspectJ extensions to Java, like distributed aspects, distributed 
+	cflow, or managing state between invocations. These don't prevent one from using
+	AspectJ to do useful intra-container implementation, nor need they prevent one 
+	from building distributed support, state management, and inter-component 
+	implementations that leverage AspectJ. It just takes some work. In more detail:
+          </p><p>
+	All AspectJ implementations may define "code the implementation controls".
+        The AspectJ 1.0 implementation defines this as the files passed to the compiler
+        (AspectJ 1.1 will also support bytecode weaving).
+          </p><p>
+	Some advice on EJB operations will generate methods that confuse ejb compilers.
+	To avoid this problem, you can use the -XaddSafePrefix flag when compiling with ajc.
+          </p><p>
+	EJB components may be invoked remotely, and containers may passivate and 
+	pool EJB's.  Servlets have similar limitations, and in both cases the
+	lifespan of the defining class loader is implementation-dependent 
+	(though it must span the operation of a particular request).
+          </p><p>
+	Being limited by lifecycle and namespace, the AspectJ 1.0 implementation 
+        supports aspects that operate through non-remote invocations during the lifetime 
+        of the namespace for a particular 
+	deployment unit compiled in its entirety by the ajc compiler.
+	This means AspectJ supports common aspects only within a single local runtime
+	namespace (usually implemented as a class loader hierarchy).
+          </p><p>
+	Further, AspectJ recognizes language-level join points (object initialization, 
+	method calls, etc.), not their EJB analogs (ejb find or create methods...).
+	These lead to the following consequences:
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e765"></a>
+	Issingleton aspects (the default) are limited to the lifetime of
+	the defining class loader, which in some implementations may not span
+	multiple invocations of the same application or EJB component.
+              </p></li><li><p><a name="d0e768"></a>
+	EJB lifecycles are different from object lifecycles, so perthis
+	and pertarget aspects will make little sense.  They do not work
+        in the current implementation, which uses synchronized methods
+        to ensure a correct association in threaded environments 
+        (EJB's may not have synchronized methods).
+              </p></li><li><p><a name="d0e771"></a>
+	Percflow or percflowbelow aspects are restricted to a chain of
+	non-remote invocations.  While EJB 2.0 permits declaring an interface
+	local, this information is not available to the AspectJ compiler today.
+        For same reasons as stated above fore perthis, these will not work even 
+        in the EJB container.
+              </p></li><li><p><a name="d0e774"></a>
+	Evaluation of cflow or cflowbelow pointcuts will be valid only
+	with respect to a chain of non-remote invocations.
+              </p></li></ul></div><p>
+            In addition, any AspectJ code should respect EJB operations:
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e780"></a>
+	The EJB container accesses EJB component fields directly, i.e.,
+	in code outside the control of the compiler.  There is no join point for
+	these accesses, and hence no way to write a pointcut to advise that access.
+              </p></li><li><p><a name="d0e783"></a>
+	The EJB container may pool EJB components, so any initialization
+	join points may run once per component constructed, not once per
+	component initialized for purposes of a client call.
+              </p></li><li><p><a name="d0e786"></a>
+	The EJB container is permitted to change class loaders, even
+	between invocations of a particular EJB component (by passivating and
+	activating with a new class loader).  In this case, instances of singleton 
+	aspects will not operate over multiple invocations of the component, or that 
+	static initialization join point recur for a given class as it is re-loaded. 
+	This behavior depends on the container implementation.
+              </p></li></ul></div></div></div><div class="qandaentry"><div class="question"><p><a name="q:aspectjandgj"></a><b>7. </b>Can I use AspectJ with Generic Java?</p></div><div class="answer"><p><a name="d0e793"></a><b></b>We plan to support Generics when Java 1.5 is available.
+        	</p><p>But at this time, unfortunately not. The two compilers are just not
+            at all compatible. In an ideal world, there would be a wonderful
+            Open Source extensible compiler framework for Java that both GJ and
+            AspectJ would be built on top of, and they would seamlessly
+            interoperate along with all other extensions to Java that you might
+            be interested in, but that's not the case (yet?).
+          </p><p>However, on 09 October 2000, the Java Community Process
+            approved a proposal to add generic types to Java that is largely
+            based on GJ (JSR 14).  A draft specification was submitted for
+            public review, which closed on 01 August 2001, and a
+              prototype implementation has been released by Sun.
+          </p><p>We are committed to moving very rapidly to add support for
+            generic types in AspectJ when generic types become part of the Java
+            language specification.  Everyone on the AspectJ team is looking
+            forward to this, because we too would really like to be able to
+            write code that includes both aspects and generic types.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:aspectjandj2me"></a><b>8. </b>Can I use AspectJ with J2ME?</p></div><div class="answer"><p><a name="d0e806"></a><b></b>The J2ME platform has several different components.
+        	The diagram below shows how the different profiles
+        	build on top of the two configurations CDC (Connected Device
+        	Configuration) and CLDC (Connected Limited Device Configuration):
+        		<pre class="programlisting">
+    --------------
+    |  Personal  |
+    --------------      --------
+    | Foundation |      | MIDP |
+  ------------------  ------------------
+  |      CDC       |  |      CLDC      |
+------------------------------------------
+|                 Java                   |
+------------------------------------------  
+                </pre>
+            Which configuration you have dictates the restrictions when
+            running AspectJ compiled programs.    
+        	</p><p>
+        	If you're running with a profile which sits on top of CDC then
+        	there are not, as far as we are aware, any restrictions when 
+        	running AspectJ compiled code on this flavour of J2ME. 
+        	</p><p>
+        	If you're running with a profile sitting on top of CLDC 1.1
+        	you are currently unable to use the <tt>thisJoinPoint,
+        	thisJoinPointStaticPart</tt> and <tt>
+        	thisEnclosingJoinPointStaticPart</tt> variables, the 
+        	<tt>cflow</tt> and <tt>cflowbelow</tt> 
+        	pointcuts and the <tt>percflow</tt> and <tt>
+        	percflowbelow</tt> perClauses.
+        	</p><p>
+        	Finally, if you're running with a profile which sits on top
+        	of CLDC 1.0 you have all the restrictions of CLDC 1.1. There may
+        	be further restrictions due to the lack of types corresponding
+        	to the primitive types (e.g. Integer.TYPE), however, at the
+        	time of writing we have been unable to do any extensive testing
+        	on this.
+        </p><p>
+        Note that the aspectj runtime jar is now (as of AspectJ5) quite
+        large but only a small subset is required for executing code
+        in J2ME environments.  We plan to ship a second aspectjrt.jar
+        built for the J2ME environment at some point.
+        </p><p>
+        For more discussion and to raise any issues you have with
+        AspectJ and J2ME, refer to
+        	<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=92933" target="_top">
+               bugzilla entry 92933</a>.        	
+        	</p></div></div><div class="qandaentry"><div class="question"><p><a name="q:aopinjava"></a><b>9. </b> Are you working to put AOP into Java?  
+	   It seems that every AOP toolset currently uses proprietary mechanisms 
+	   to describe point-cuts, etc.
+          </p></div><div class="answer"><p><a name="d0e847"></a><b></b>
+	We are working on standardization, but it's 
+	a question of timing/ripeness (imagine going from thousands of users 
+	to millions).  (See <a href="#q:standardization">Q:What are your plans to make AspectJ a general feature of Java supported by Sun and the other key-players in the Java Industry?</a>.) We believe 
+	AspectJ addresses this question in the best way possible now:
+            <div class="itemizedlist"><ul><li><p><a name="d0e853"></a>
+	It's open-source.  Rather than being proprietary or controlled by a 
+	vendor, it's available for anybody to use and build upon, forever.
+                </p></li><li><p><a name="d0e856"></a>
+	AspectJ is not a set of mechanisms, it's a language.  It is currently 
+	implemented using certain techniques, but there's nothing that prevents 
+	it from being implemented with other techniques.  That means users can 
+	adopt the language with confidence that implementations will get better.
+                </p></li><li><p><a name="d0e859"></a>
+	There is no engineering need to change Java.  The AspectJ language uses 
+	the join point model already in Java, so there is no need to extend the 
+	programming model.  Our implementation produces valid Java bytecode, which 
+	runs in any compliant J2SE VM and supports standard debuggers for those VM's 
+	that support JSR-45 (debugging support for multi-language/multi-file sources).  
+	This is a huge benefit to Sun since Sun must be extremely cautious 
+	about extensions to the language or VM; before adopting AOP, Sun should 
+	demand the kind of actual-proof that AspectJ implementations offer.
+                </p></li><li><p><a name="d0e862"></a>
+	On the issue of "proprietary mechanisms to describe pointcuts, etc.":   Any AOP 
+	has to have some language to describe pointcuts and the like ("pointcuts" 
+	of course being the AspectJ term).  Users would like to have one language 
+	(to avoid having to learn or transform between many languages) and the 
+	choice of multiple implementations (tailored for a configuration, subject 
+	to competitive pressure, etc.).  That's what AspectJ offers.
+                </p></li><li><p><a name="d0e865"></a>
+	That said, we believe the AspectJ extensions to Java could form the basis 
+	for bringing AOP to Java; when that happens, there will be engineering 
+	opportunities to make the implementation and tool support better.
+                </p></li></ul></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:support"></a><b>10. </b>What kind of support is available?</p></div><div class="answer"><p><a name="d0e873"></a><b></b>
+          	The mailing lists provide the primary support for everyone
+          	in the community
+          	(See <a href="#q:mailingLists">Q: What mailing lists are there?</a>).
+            To request commercial support, tutorials, or presentations,
+            use the developer mailing list,
+            <tt>aspectj-dev@eclipse.org</tt>.
+          </p><p>
+          To find out about known issues, see the
+          <a href="progguide/implementation.html" target="_top">
+          AspectJ Programming Guide Appendix, "Implementation Notes"</a>
+          and the AspectJ bugs in the database at
+          <a href="http://bugs.eclipse.org/bugs" target="_top">http://bugs.eclipse.org/bugs</a>
+          (using the product <tt>AspectJ</tt>).  Here are direct links to
+              <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;component=Compiler&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED" target="_top">
+               view open compiler bugs</a>,
+              <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ" target="_top">
+               view all Aspectj bugs (open or closed)</a>, or
+              <a href="http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ" target="_top">
+               add new bugs</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:mailingLists"></a><b>11. </b>What mailing lists are there?</p></div><div class="answer"><p><a name="d0e905"></a><b></b>
+            The AspectJ users mailing list 
+            (<tt>aspectj-users@eclipse.org</tt>)
+            provides an informal network of AspectJ language users who
+            can answer usage questions about AspectJ programs
+            and the AspectJ tools.
+            This is the place to ask how to code something in AspectJ
+            or how to write Ant or shell scripts to invoke the tools.
+          </p><p>
+            The AspectJ developers mailing list 
+            (<tt>aspectj-dev@eclipse.org</tt>)
+            provides an informal network of AspectJ technology experts who
+            aim to understand the technology behind AspectJ.
+            The committers to the AspectJ project use this list
+            for open technical and planning discussions.
+            Developers can answer questions about what's possible and about
+            integrating AspectJ technology with other technologies.
+          </p><p>
+            For both mailing lists, only subscribed members may post messages.
+            To subscribe, visit the 
+            <a href="http://eclipse.org/aspectj" target="_top">AspectJ web site</a>.
+          </p><p>
+            There you can also subscribe to 
+            <tt>aspectj-announce@eclipse.org</tt>,
+            a low-traffic list containing only announcements
+            about significant AspectJ events and product releases.
+            To get on a similar list for aspect-oriented software 
+            development generally, see
+            <a href="http://aosd.net" target="_top">http://aosd.net</a>.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="compiler"></a>8 Using the AspectJ compiler</h3><div class="qandaentry"><div class="question"><p><a name="q:compilerRequired"></a><b>1. </b>
+            Do I have to use the AspectJ compiler?
+          </p></div><div class="answer"><p><a name="d0e936"></a><b></b> The AspectJ compiler or weaver is required at some point, but
+                many people can use AspectJ without changing their build or
+                deployment process significantly. For aspects that are not
+                required to compile, you can use the AspectJ binary weaver, run
+                at build-time or class-load-time. You can write aspects using
+                the original code style (which must be compiled with the AspectJ
+                compiler) or using the annotation style new in AspectJ 5 (which
+                may be compiled with Javac or the AspectJ compiler). </p><p>
+              For more information, see
+              <a href="#q:codeversusannotationstyles">Q:Should I use code- or annotation-style aspects?</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:requiredsources"></a><b>2. </b>
+            What files do I need to include when compiling AspectJ programs?
+          </p></div><div class="answer"><p><a name="d0e947"></a><b></b>You need to specify to the compiler the files that
+            contain your aspects and the files that contain the 
+            types affected by your aspects.
+	    See <a href="#q:knowWhenAspectsAffectClasses">Q: How do I know which aspects affect a class when looking at that class's source code?</a>.
+	    The AspectJ compiler will not search the source path for types
+	    that may be affected (unlike Javac and Jikes).
+	    In AspectJ 1.0, ajc requires all code to be in source form;
+	    in AspectJ 1.1, Java and AspectJ code may be in either source
+	    or binary form.  
+          </p><p>In some cases you should compile your entire system all at once.
+           If this is too slow, then you can try to make reasonable divisions
+           between sets of source files whose aspects do not interact to 
+           achieve a shorter compile cycle (particularly for development 
+	       aspects).  If you have aspects that apply to different modules,
+	       you can try compiling them into a binary form and using them
+	       to weave each module.  However, if you get any problems
+           or if you wish to run tests or do a release, you should recompile
+           the entire system.
+          </p><p>
+          For more information, see the 
+            <a href="devguide/index.html" target="_top">
+              Development Environment Guide</a>
+            <a href="devguide/ajc-ref.html" target="_top">
+              Reference for ajc</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:listingsources"></a><b>3. </b>I have to list many files in the command line to
+            compile with <tt>ajc</tt>. Is there any other way to
+            provide the file names to <tt>ajc</tt>?
+          </p></div><div class="answer"><p><a name="d0e972"></a><b></b>
+          Yes, use the argfile option to ajc. List source 
+          files in a line-delimited text file and direct ajc to that 
+          file using <tt>-argfile</tt> or <tt>@</tt>:
+          </p><pre class="programlisting">ajc @sources.lst
+ajc -argfile sources.lst
+          </pre><p>Another way in AspectJ 1.1 is to use the 
+          	<tt>-sourceroots</tt> options, which reads all
+          	source files in a given set of directories:
+          </p><pre class="programlisting">ajc -sourceroots "src;testsrc"
+          </pre><p>
+          For more information, see the 
+            <a href="devguide/index.html" target="_top">
+              Development Environment Guide</a>
+            <a href="devguide/ajc-ref.html" target="_top">
+              Reference for ajc</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:compilerVM"></a><b>4. </b>What Java virtual machine (JVM) do I use to run the
+            AspectJ compiler?
+          </p></div><div class="answer"><p><a name="d0e1002"></a><b></b>Use the latest, greatest, fastest JVM you can get your hands on
+            for your platform. The compiler's performance is dependent on the
+            performance of the JVM it is running on, so the faster a JVM you
+            can find to run it on, the shorter your compile times will be. At a
+            minimum you need to use a Java 2 or later JVM to run the compiler
+            (J2SE 1.3 for AspectJ 1.1).
+            We realize that this constraint can be a problem for users who 
+            don't currently have a Java 2 JVM available. We're sorry for the
+            inconvenience, but we had to make the hard decision that the
+            advantages of being able to rely on Java 2 were worth the cost of
+            losing a number of developers who are working on platforms without
+            Java 2 support. Here is a list of starting places where you might
+            find support for your system.
+            <div class="itemizedlist"><ul><li><p><a name="d0e1006"></a>
+                  <a href="http://java.sun.com/j2se/" target="_top">Java 2
+                    Platform, Standard Edition
+                  </a>
+                </p></li><li><p><a name="d0e1012"></a>
+                  <a href="http://www-106.ibm.com/developerworks/java/jdk/" target="_top">
+                    developerWorks : Java technology : Tools and products - Developer kits
+                  </a>
+                </p></li><li><p><a name="d0e1018"></a>
+                  <a href="http://www-124.ibm.com/developerworks/oss/jikes/" target="_top">
+                    developerWorks : Open Source - Jikes Project
+                  </a>
+                </p></li><li><p><a name="d0e1024"></a>
+                  <a href="http://java.sun.com/cgi-bin/java-ports.cgi" target="_top">Java
+                    Platform Ports
+                  </a>
+                </p></li></ul></div>
+          </p><p>The requirement of Java 2 support is only for
+            <span class="emphasis"><i>running</i></span> the AspectJ compiler. The AspectJ
+            compiler can be used to build programs that will run on Java 1.1
+            (or probably even on Java 1.0) systems. This means that it can
+            build programs that will run on Macintosh, FreeBSD, and applets
+            that will run in Internet Explorer and Netscape Navigator that are
+            still not yet Java 2 compliant.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:compilingForDifferentVMs"></a><b>5. </b>How can I use <tt>ajc</tt> to compile
+            programs for a JVM that is different from the one used to run it?
+          </p></div><div class="answer"><p><a name="d0e1043"></a><b></b>
+            <tt>ajc</tt> can be used to develop programs that are
+            targeted at the Java 1.1 platform, even though the
+            <tt>ajc</tt> compiler won't run on that platform. Here's
+            an example of using <tt>ajc</tt> in this sort of
+            cross-compilation mode (assuming a Windows platform with all the
+            default installation directories):
+          </p><pre class="programlisting">
+ajc -target 1.1 -bootclasspath c:\jdk1.1.7\lib\classes.zip \
+   -classpath c:\aspectj1.0\lib\aspectjrt.jar -extdirs "" \
+   -argfile jdk11system.lst
+          </pre><p>This same technique can be used if you want to run
+            <tt>ajc</tt> on a JDK 1.3 JVM (highly recommended) but
+            need to generate code for JDK 1.2. That would look something
+            like:
+          </p><pre class="programlisting">
+ajc -bootclasspath c:\jdk1.2\jre\lib\rt.jar \
+   -classpath c:\aspectj1.0\lib\aspectjrt.jar \
+    -extdirs c:\jdk1.2\jre\lib\ext
+            -argfile jdk12system.lst
+          </pre></div></div><div class="qandaentry"><div class="question"><p><a name="q:assert"></a><b>6. </b>Does the <tt>ajc</tt> compiler support 
+        the <tt>assert</tt> keyword in Java 1.4?
+          </p></div><div class="answer"><p><a name="d0e1074"></a><b></b>Yes. As with <tt>Javac</tt>,
+          use the <tt>-source 1.4</tt> option as described
+          in the
+            <a href="devguide/index.html" target="_top">
+              Development Environment Guide</a>
+            <a href="devguide/ajc-ref.html" target="_top">
+              Reference for ajc</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:generics"></a><b>7. </b>Does the <tt>ajc</tt> compiler support 
+        generics and the other new language features of Java 5?
+          </p></div><div class="answer"><p><a name="d0e1096"></a><b></b>Yes. As with <tt>Javac</tt>,
+          use the <tt>-1.5</tt> option as described
+          in the
+            <a href="devguide/index.html" target="_top">
+              Development Environment Guide</a>
+            <a href="devguide/ajc-ref.html" target="_top">
+              Reference for ajc</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:versionCompatibility"></a><b>8. </b>Will aspects work with different versions of the compiler/weaver and runtime?
+          </p></div><div class="answer"><p><a name="d0e1115"></a><b></b>Yes.  Both <tt>ajc</tt> and 
+			  <tt>aspectjrt.jar</tt> should work with versions
+			  of aspect code and libraries back to AspectJ 1.2.1. 
+			  Any aspects should be deployed
+			  with the same version of <tt>aspectjrt.jar</tt> 
+			  they were compiled with.  For more information, see the
+			 <a href="devguide/index.html" target="_top">
+              Development Environment Guide</a>
+            <a href="devguide/ajc-ref.html" target="_top">
+              Reference for ajc</a>
+			  and 
+            <a href="devguide/deployment.html" target="_top">
+              Deployment notes</a> section on 
+            <a href="devguide/versionCompatibility.html" target="_top">
+				Version compatibility</a>.
+			</p></div></div><div class="qandaentry"><div class="question"><p><a name="q:msjvm"></a><b>9. </b>Are there any issues using AspectJ with the Microsoft
+            JVM?
+          </p></div><div class="answer"><p><a name="d0e1143"></a><b></b>Since AspectJ requires Java 2 or later, it will not run on the
+            Microsoft JVM, which does not support Java 2.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:javacbytecode"></a><b>10. </b>Does <tt>ajc</tt> rely
+            on <tt>javac</tt> for generating Java bytecode
+            (<tt>.class</tt>) files?
+          </p></div><div class="answer"><p><a name="d0e1159"></a><b></b> No.  Some previous versions of AspectJ had this requirement.
+          In AspectJ 1.0, <tt>javac</tt> can still be used as
+          <tt>ajc</tt> back end by using the
+          <tt>-usejavac</tt> flag.  You can also run <tt>ajc</tt>
+          in preprocessor mode to generate Java source
+          (<tt>.java</tt>) files to be compiled using
+          <tt>javac</tt> or another java compiler.
+          Neither option is supported in AspectJ 1.1.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:parsergenerators"></a><b>11. </b>
+            I noticed the AspectJ compiler doesn't use a parser generator.  Why is that?
+          </p></div><div class="answer"><p><a name="d0e1184"></a><b></b>In AspectJ 1.0,
+          the PARSER for ajc is written by hand.  This choice was made with full 
+          awareness of the generator tools out there.  (Jim had for example used 
+          the excellent javacc tool for building the parser for JPython (now Jython)).  
+          One of the reasons that AspectJ uses a hand-written parser is that using 
+          javacc taught Jim about the LL-k design for parsers (pioneered by antlr).  
+          As opposed to the state-machine parsers produced by yacc, these parsers are 
+          very readable and writable by humans.
+          </p><p>
+            Antlr and javacc did not really suit the project:
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e1190"></a>
+            Antlr's support for unicode in the lexer is still immature and this makes 
+            using it with Java challenging.  This was an even bigger issue 3 years ago 
+            when we started on the Java implementation of ajc.
+              </p></li><li><p><a name="d0e1193"></a>
+            While javacc is freely available, it is not Open Source.  Depending on a 
+            closed-source tool to build an Open Source compiler would reduce some 
+            of the transparency and control of open-source.
+              </p></li></ul></div><p>
+          There were also several things that were easier to implement with 
+          a hand-written parser than with any of the exiting tools.
+          </p><div class="itemizedlist"><ul><li><p><a name="d0e1199"></a>
+            Semi-keywords -- it's important to us that 
+            "every legal Java program is also a legal AspectJ program."  
+            This wouldn't be true if we made 'before' and 'call' full keywords in 
+            AspectJ.  It is easier to support these sorts of semi-keywords with a 
+            hand-written parser.  (Note: ajc-1.0.x handles 'aspect' and 'pointcut' 
+            slightly specially which can break a few unusual pure Java programs.  
+            This is a compiler limitation that will be fixed in a future release.)
+              </p></li><li><p><a name="d0e1202"></a>
+            Deprecated syntax warnings -- the syntax of AspectJ 
+            changed many times from version 0.2 to the 1.0 release.  It was easier 
+            to provide helpful warning messages for these changes with our 
+            hand-written parser.
+              </p></li><li><p><a name="d0e1205"></a>
+            Grammar modularity -- We like being able to have 
+            AspectJParser extend JavaParser.
+              </p></li><li><p><a name="d0e1208"></a> 
+            Part of the grammar for AspectJ is extremely hard for existing tools to 
+            capture. This is the type pattern syntax, i.e. "com.xerox..*.*(..)".  
+            The sort of case that gives standard parser generators fits is something 
+            like "*1.f(..)" which no one would ever write, but which must be 
+            supported for a consistent language.
+              </p><p>
+              In AspectJ 1.1, the parser was written as it is for the underlying
+              Eclipse compiler,
+              with some hand-coding of the sort that avoids adding keywords to
+              the language.
+              </p></li></ul></div></div></div><div class="qandaentry"><div class="question"><p><a name="q:howIncrementalWorks"></a><b>12. </b>How does incremental mode work?
+          </p></div><div class="answer"><p><a name="d0e1217"></a><b></b>In incremental mode, ajc minimizes the files that need
+                  to be recompiled after another file has changed.  In Java,
+                  only the changed files need to be recompiled, but in AspectJ,
+                  other files might also need to be recompiled or re-woven.
+              </p><p> Depending on what is modified, we may need to re-weave
+                    code. &nbsp;If you change a pointcut and save it, we currently have
+                    to check everywhere in case a new match is occurring or an old
+                    match is no longer correct. &nbsp;However, if you simply change
+                    the body of an advice in an aspect, there is (usually) no need
+                    to reweave as the affected classes call the advice and the
+                    advice (by design) maintains its name in the recompiled
+                    aspect. </p><p> If you make a change to a class (as opposed to an aspect) and
+                    save it, we usually can get away with merely having to
+                    compile that class then weave the existing aspects with it -
+                    rather than doing a full recompile of the entire system.
+                    </p><p> There are a lot of possible optimizations to the
+                    algorithms we use, by performing more complete analysis of
+                    the change made to a file that will enable us to know more
+                    accurately whether we need to reweave and if we do then what
+                    we need to reweave - we just haven't gotten around to
+                    implementing them yet. </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="devtools"></a>9 Integrating AspectJ into your development environment</h3><div class="qandaentry"><div class="question"><p><a name="q:knowWhenAspectsAffectClasses"></a><b>1. </b>How do I know which aspects affect a class when looking
+            at that class's source code?
+          </p></div><div class="answer"><p><a name="d0e1233"></a><b></b>When you are working with the IDE support, you can get an
+            understanding of which aspects affect any class.
+            This enables AspectJ programmers to get the benefits of
+            modularizing crosscutting concerns while still having immediate
+            access to what aspects affect a class.
+          </p><p>For example, the
+            <a href="devguide/index.html" target="_top">
+              Development Environment Guide</a>
+            <a href="devguide/ajbrowser.html" target="_top">
+              ajbrowser section</a>.
+          shows that you can list or navigate
+          between method and advice affecting that method and between a type
+          and declarations in an aspect on that type.  (The IDE support may
+          have more features than <tt>ajbrowser</tt>, depending
+          on the IDE.
+          See <a href="#q:integrateWithDevTools">Q: How well does AspectJ integrate with existing Java development tools?</a> for more
+            information on which Java development environments are
+            supported.)
+          </p><p>
+            When you are looking at documentation for AspectJ 1.0 programs,
+            <tt>ajdoc</tt> will provide links from aspects and
+            advice to the affected code, but it provides less information
+            than the IDE support because it only parses declarations.
+          </p><p>
+            When you are compiling your program, pointcuts that are
+            statically-determinable can be used in declare statements
+            to identify the code picked out by the pointcut.
+            (A pointcut is statically determinable if it only uses
+             the pointcut designators
+             <tt>within</tt>,
+             <tt>withincode</tt>,
+             <tt>execution</tt>,
+             <tt>call</tt>,
+             <tt>get</tt>,
+             <tt>set</tt>,
+             <tt>initialiation</tt>, and
+             <tt>staticinitialiation</tt>.)
+             The compiler will list the static code points which will be 
+             affected by any advice specifying the same pointcut.
+             For example, the following will print a warning
+             whereever some code in class Bar gets a field value from Foo:
+             <pre class="programlisting">
+  declare warning: get(* Foo.*) &amp;&amp; within(Bar) 
+     : "reading Foo state from Bar";
+             </pre>
+          </p><p>
+            When you are running your program,
+            you can trace advice as it executes.  This
+            enables you to identify advice on join points picked out 
+            dynamically, which cannot be reflected precisely by IDE support.
+            For a related tracing question,
+               see <a href="#q:seeingjoinpoints">Q:I don't understand what join points exist.  How can I see them?</a>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:idesupport"></a><b>2. </b>What kind of IDE support is available for developing
+            AspectJ programs?
+          </p></div><div class="answer"><p><a name="d0e1291"></a><b></b>See <a href="#q:integrateWithDevTools">Q: How well does AspectJ integrate with existing Java development tools?</a></p></div></div><div class="qandaentry"><div class="question"><p><a name="q:idesupportplans"></a><b>3. </b>What plans are there to support my IDE?</p></div><div class="answer"><p><a name="d0e1299"></a><b></b>
+            The AspectJ team directly provided components for JBuilder, Forte,
+            and Emacs and supported the open-source AspectJ plugin project
+            at <a href="http://eclipse.org/ajdt" target="_top">http://eclipse.org/ajdt</a>
+            which uses the AJDE API support for IDE's.  
+            Supporting new IDE's is a matter of building on the AJDE API's,
+            mostly likely adopting one of the existing open-source IDE
+            extensions as a design template.
+            Here are the IDE's where we know people have expressed interest,
+            so interested developer may want to join with others in their
+            developer communities to build the integration.
+            <div class="itemizedlist"><p><b></b></p><ul><li><p><a name="d0e1307"></a>IDEA/IntelliJ has an enthusiastic community and 
+                the developers are working on an extensibility API
+                - <a href="http://intellij.com" target="_top">http://intellij.com</a>
+                </p></li><li><p><a name="d0e1313"></a>jEdit comes from a very active open-source community.</p></li><li><p><a name="d0e1316"></a>
+                  Oracle JDeveloper is supported at
+                  <a href="https://jdeveloperaop.dev.java.net/" target="_top">
+					https://jdeveloperaop.dev.java.net/</a>.
+                </p></li><li><p><a name="d0e1322"></a>Some have suggested Codeguide from Omnicore
+	         <a href="http://www.omnicore.com" target="_top">http://www.omnicore.com/</a>
+                </p></li></ul></div>
+          </p><p>
+            For questions on AJDE, join the developer's list
+            <tt>aspectj-dev@eclipse.org</tt>.
+            For questions on the current IDE integrations, contact those projects.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:portingajde"></a><b>4. </b>Can I port AJDE support to my development environment?</p></div><div class="answer"><p><a name="d0e1338"></a><b></b>Yes. The core AJDE API is extensible and the source code is
+            available for download. Start by studying the sources
+            for the existing IDE support linked off the AspectJ site
+            <a href="http://eclipse.org/aspectj" target="_top">http://eclipse.org/aspectj</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:hybridbuilds"></a><b>5. </b>I want the aspects for development builds but 
+        remove them for production builds.  How can I set up the build
+        system so they are unpluggable?  And so I use <tt>javac</tt>
+        in my production build?
+          </p></div><div class="answer"><p><a name="d0e1351"></a><b></b>
+          If you are using development-time-only aspects - aspects that only 
+          exist when you are developing the code, not when you ship it - 
+          you can use implement a hybrid build process by listing
+          the production source files into a javac-compliant argfile,
+          and the development source files in another ajc argfiles:
+          </p><pre class="programlisting">
+     -- file "production.lst":
+     One.java
+     two/Three.java
+     ...
+
+     -- file "tracing.lst":
+     trace/Library.java
+     Trace.java
+
+     -- file "development.lst":
+     @production.lst
+     @tracing.lst
+          </pre><p>
+            Then your development build can use <tt>ajc</tt>:
+          </p><pre class="programlisting">
+            ajc @development.lst
+          </pre><p>
+          And your development build can use 
+          <tt>ajc</tt> or <tt>javac</tt>
+           or <tt>jikes</tt>:
+          </p><pre class="programlisting">
+            jikes @production.lst
+          </pre></div></div><div class="qandaentry"><div class="question"><p><a name="q:stepwiseBuilds"></a><b>6. </b>
+            We compile module jars and then assemble them.  Can we continue this with AspectJ?
+          </p></div><div class="answer"><p><a name="d0e1380"></a><b></b>
+		Aspects apply to everything in a namespace, as if everything is 
+		compiled together.
+		Sometimes you can break the build down into separate steps without breaking 
+		this model, but we haven't stated exactly where it could break
+		because it depends on the interactions between all types.
+		You can try the approaches below, but remember to rebuild 
+		everything in one go if there are problems.
+		</p><p>
+		The simplest scenario is when the aspects apply to all modules
+		and the modules compile without the aspects.  In that case,
+		weaving in the aspects is just the final assembly step for
+		the build.
+		</p><p>
+		Next is the case where the aspects make changes to a common
+		library that are visible to other clients, which themselves
+		are otherwise unaffected by the aspects.  In this case, the
+		common library can be built using ajc, and used on the 
+		classpath for the module builds:
+		<pre class="programlisting">
+
+   ajc -outjar common.jar -sourceroots "aspectj-src:src" ...
+   cd ../otherProject
+   javac -classpath "../common/common.jar:${aspectjrt.jar}" {src}
+
+		</pre>
+		</p><p>
+		Combining these last two, 
+		there's the case where a common set of aspects should
+		affect two or more modules that are in a dependency relationship
+		to one another.  It should work to reuse the aspects 
+		in binary form for each compile, in dependency order:
+		
+		<pre class="programlisting">
+
+   ajc -outjar common-aspects.jar
+       -sourceroots "aspectj-src" ...
+
+   ajc -outjar common.jar
+       -sourceroots "src"
+       -aspectpath common-aspects.jar ...
+
+   cd ../module1
+   ajc -outjar module1.jar
+       -sourceroots "src"
+       -classpath common.jar
+       -aspectpath ../common-aspects.jar ...
+
+   cd ../module2
+   ajc -outjar module2.jar
+       -sourceroots "src"
+       -classpath "common.jar;../module1.jar"
+       -aspectpath ../common-aspects.jar ...
+
+		</pre>   
+		</p><p>
+		If two modules are visibly affected by aspects and
+		mutually-dependent, the only thing to do is compile
+		them together.
+		</p><p>
+		It's safest to assume that all aspects can affect all
+		types in a namespace; using build boundaries to effect
+		crosscutting limits causes a dangerous dependency on
+		the build process and might cause problems.
+		</p></div></div><div class="qandaentry"><div class="question"><p><a name="q:incrementalModuleCompiles"></a><b>7. </b>We use modules and would like to use incremental compilation.
+                Is that possible?
+          </p></div><div class="answer"><p><a name="d0e1403"></a><b></b>
+			Just incrementally-compile the whole system.
+			Specify to ajc the modules as multiple source roots  
+			(or input jars if you are weaving libraries).
+			</p><p>
+			In Eclipse's AJDT, you can create a top-level project with symbolic 
+			links out to the sources:
+			
+			<pre class="programlisting">
+
+   app-assembly/
+	 {link common/aspects}
+	 {link common/src}
+	 {link module1/src}
+	 ...
+
+			</pre>   
+			
+			Then everything is part of one huge incremental compile.  Also, you
+			can close this master project and work the others using the Java
+			compiler or AJDT.
+			</p><p>
+			The links make incremental development possible without affecting
+			the modularized Ant builds.  (Our practice runs along those lines.)
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="notes"></a>10 Programming notes and tips</h3><div class="qandaentry"><div class="question"><p><a name="q:methodsignatures"></a><b>1. </b>Is it possible to change methods by introducing keywords (like
+            <tt>synchronized</tt>), adding parameters, 
+                     or changing the "throws" clause?
+          </p></div><div class="answer"><p><a name="d0e1423"></a><b></b>AspectJ does not enable you to change the signature of a method,
+            but you can (by express declaration) work around some 
+            limits imposed by the signature.  You can convert a checked exception to
+            unchecked using <tt>declare soft</tt>, privileged aspects
+            have access to private methods, and you can use a percflow aspect to 
+            ferry additional state to a callee without changing intervening 
+            signatures.   For more details, see
+            <a href="progguide/index.html" target="_top">The AspectJ Programming Guide</a>.
+            In the case of <tt>synchronized</tt>,
+            we have what we consider a better solution that uses
+            around advice instead of introduction.  This solution is described
+            in
+            <a href="http://aspectj.org/pipermail/users/2000/000534.html" target="_top">
+              this thread (no longer available)
+            </a> on the AspectJ users list, with some
+            <a href="http://aspectj.org/pipermail/users/2000/000536.html" target="_top">
+              additional comments (no longer available)
+            </a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:seeingjoinpoints"></a><b>2. </b>
+            I don't understand what join points exist.  How can I see them?
+          </p></div><div class="answer"><p><a name="d0e1445"></a><b></b>
+          You can trace them using using an aspect.
+           For example, you can start logging at a particular method call and 
+	   see what join points occur after the call and before it returns.
+          </p><p>
+          Here's some code Jim Hugunin wrote to trace join points
+          and posted to the users list. To reuse the aspect, 
+          define a subaspect and implement the pointcuts, for example:
+          <pre class="programlisting">
+
+aspect JoinPointSampleAspect extends aj.TraceJoinPoints {
+    protected pointcut entry() : 
+        execution(static void JoinPointSample.main(String[]));
+    protected pointcut exit() : 
+        call(static void JoinPointSampleAspect.exit());
+
+    public static void main (String[] args) {
+        JoinPointSample.main(args);   
+        JoinPointSampleAspect.exit();   
+    } 
+    public static void exit() {}
+}
+
+class JoinPointSample {
+    public static void main(String[] args) {}
+}
+          </pre>
+          </p><p>Here's the aspect:
+          <pre class="programlisting">
+
+/* TraceJoinPoints.java */
+
+package aj;
+
+import org.aspectj.lang.*;
+import org.aspectj.lang.reflect.*;
+import java.io.*;
+
+public abstract aspect TraceJoinPoints {
+    protected abstract pointcut entry();
+    protected pointcut exit(): call(* java..*.*(..));
+    // this line is for AspectJ 1.1; for 1.0, use "dominates"
+    declare precedence : TraceJoinPoints, *;
+    final pointcut start(): entry() &amp;&amp; !cflowbelow(entry());
+
+    final pointcut trace():
+        cflow(entry()) &amp;&amp; !cflowbelow(exit()) &amp;&amp; !within(TraceJoinPoints+);
+
+    before(): start() { makeLogStream(); }
+
+    before(): trace() { logEnter(thisJoinPointStaticPart); }
+    after(): trace() { logExit(thisJoinPointStaticPart); }
+
+    after(): start() { closeLogStream(); }
+
+    //------------ added
+    /**
+     * Emit a message in the log, e.g.,
+     * &lt;pre&gt;TraceJoinPoints tjp = TraceJoinPoints.aspectOf();
+     * if (null != tjp) tjp.message("Hello, World!");&lt;/pre&gt;
+     */
+    public void message(String s) {
+        out.println("&lt;message&gt;" + prepareMessage(s) + "&lt;/message&gt;");
+    }
+    public void message(String sink, String s) {
+        if (null == sink) {
+            message(s);
+        } else {
+            out.println("&lt;message sink=" + quoteXml(sink)
+                        + " &gt;" + prepareMessage(s) + "&lt;/message&gt;");
+        }
+    }
+    protected String prepareMessage(String s) { return s; } // XXX implement
+
+    //--------- end of added
+
+    PrintStream out;
+    int logs = 0;
+    protected void makeLogStream() {
+        try {
+            out = new PrintStream(new FileOutputStream("log" + logs++ + ".xml"));
+        } catch (IOException ioe) {
+            out = System.err;
+        }
+    }
+
+    protected void closeLogStream() {
+        out.close();
+    }
+
+
+    int depth = 0;
+    boolean terminal = false;
+    protected void logEnter(JoinPoint.StaticPart jp) {
+        if (terminal) out.println("&gt;");
+        indent(depth);
+        out.print("&lt;" + jp.getKind());
+        writeSig(jp);
+        writePos(jp);
+
+        depth += 1;
+        terminal = true;
+    }
+
+    void writeSig(JoinPoint.StaticPart jp) {
+        out.print(" sig=");
+        out.print(quoteXml(jp.getSignature().toShortString()));
+    }
+
+    void writePos(JoinPoint.StaticPart jp) {
+        SourceLocation loc = jp.getSourceLocation();
+        if (loc == null) return;
+
+        out.print(" pos=");
+        out.print(quoteXml(loc.getFileName() +
+                           ":" + loc.getLine() +
+                           ":" + loc.getColumn()));
+    }
+
+    String quoteXml(String s) {
+        return "\"" + s.replace('&lt;', '_').replace('&gt;', '_') + "\"";
+    }
+
+    protected void logExit(JoinPoint.StaticPart jp) {
+        depth -= 1;
+        if (terminal) {
+            out.println("/&gt;");
+        } else {
+            indent(depth);
+            out.println("&lt;/" + jp.getKind() + "&gt;");
+        }
+        terminal = false;
+    }
+
+    void indent(int i) {
+        while (i-- &gt; 0) out.print("  ");
+    }
+}
+
+          </pre>
+          </p><p>Note that if you are using AspectJ 1.0,
+          	the line starting with <tt>declare precedence</tt>
+          	would be removed, and the aspect declaration would look like
+          	<tt>aspect TraceMyJoinPoints dominates *</tt>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:comparecallandexecution"></a><b>3. </b>
+            What is the difference between call and execution join points?
+          </p></div><div class="answer"><p><a name="d0e1470"></a><b></b>
+	    Briefly, there are two interesting times when a constructor or method is
+	    run.  Those times are when it is called, and when it actually
+	    executes.
+          </p><p>
+	    The main difference is that a call join point happens outside of
+	    the target object (for non-static methods) or class (for static methods
+	    and constructors), and that an execution join point happens inside
+	    the object or class.  This means that the <tt>within</tt>
+	    and <tt>withincode</tt> pointcuts pick them out
+	    differently: A call join point is picked out within the caller,
+	    while an execution join point is picked
+	    out where it is actually defined.
+          </p><p>
+	    A call join point is the ``outermost'' join point for a particular
+	    call.  Once a call join point proceeds, then a number of different
+	    things happen.  For non-static methods, for example, method
+	    dispatch happens, which will cause one method execution join point
+	    -- perhaps more, if there are super calls.  For constructors, the
+	    super constructor is called, and fields are initialized, and then
+	    various constructor execution join points will occur.
+          </p><p>
+	    A call join point matches only the ``external'' calls of a method
+	    or constructor, based on a signature, and it does not pick out
+	    calls made with <tt>super</tt>, or
+	    <tt>this</tt> constructor calls.
+          </p><p>Here's more detail:
+          </p><p>Consider method execution in Java as (1) the initial call from
+                this object to some method on the target object with a
+                particular signature; and (2) the execution of the actual code
+                in the particular method dispatched in the target object.
+                The call join point starts with the initial call and ends 
+                when control returns to the call (by return or perhaps 
+                thrown exception).  The execution join point starts with
+                the method body and ends when the body completes (again
+                by return or throwing an exception), so the execution join
+                point always happens within the bounds of the corresponding
+                call join point.  You can see this if you use the
+	        join-point tracing aspect in see <a href="#q:seeingjoinpoints">Q:I don't understand what join points exist.  How can I see them?</a>.
+          </p><p>As you would expect, the context differs 
+                in advice on pointcuts picking out execution and call join
+                points; for call, <tt>this</tt> refers to the caller, whereas 
+                for execution <tt>this</tt> refers to the called 
+                (executing) object.
+          </p><p>
+	There are some subtle interactions with other AspectJ semantics.
+	First, the meaning of the signature in the
+	<tt>execution()</tt> and <tt>call()</tt>
+	pointcut designators (PCD's) differ: the call type depends upon
+	the type of the reference making the call, while the execution
+	type depends on the enclosing class.
+        Second, you may choose one over another if you cannot bring all
+	your sources within the code the compiler controls
+	(described in the <a href="progguide/semantics.html" target="_top">appendix</a>
+     to the <tt>Programming Guide</tt>).
+	For example, to trace calls into a 
+	method from classes which are outside the code the compiler controls
+	at compile time, then using <tt>execution()</tt> will work
+	while using <tt>call()</tt>may not.  Finally, since 
+	<tt>super</tt> invocations are not considered method calls,
+	to trace <tt>super.foo()</tt> would require using
+	<tt>execution</tt>.
+          </p><p>
+          		Because of differences in the way AspectJ 1.0 and 1.1
+          		are implemented, in 1.0
+                you should use the <tt>call()</tt> 
+                pointcut designator unless you have a good reason to use
+	        <tt>execution()</tt>; in AspectJ 1.1, the 
+	        reverse is true.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:comparecflowandcflowbelow"></a><b>4. </b>
+            What is the difference between cflow and cflowbelow?
+          </p></div><div class="answer"><p><a name="d0e1546"></a><b></b>
+	    Both pick out all the join points in the control flow of
+	    the specified join points.
+            They differ only in that the <tt>cflowbelow()</tt>
+	    pointcut designator does not pick out the join points
+	    specified, while <tt>cflow()</tt> does.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:recursiveentrypoints"></a><b>5. </b>How do I say that I want the topmost entrypoint in a
+	        recursive call? How about the most-recent prior entrypoint?
+          </p></div><div class="answer"><p><a name="d0e1559"></a><b></b>This is best seen by way of example.
+	Given a recursive call to <tt>int factorial(int)</tt>
+	  you can print the arguments for 
+	(a) the current and most-recent recursive call
+	or (b) the current and original recursive call:
+          </p><pre class="programlisting">
+aspect LogFactorial {
+    pointcut f(int i) : call(int factorial(int)) &amp;&amp; args(i);
+
+    // most-recent
+    before(int i, final int j) : f(i) &amp;&amp; cflowbelow(f(j)) { 
+        System.err.println(i + "-" + j);
+    }
+
+    // original
+    before(int i, final int j) : f(i) 
+        &amp;&amp; cflowbelow(cflow(f(j)) &amp;&amp; !cflowbelow(f(int))) { 
+        System.err.println(i + "@" + j);
+    }
+}
+          </pre></div></div><div class="qandaentry"><div class="question"><p><a name="q:initializationjoinpoints"></a><b>6. </b>What is the difference between constructor call, 
+          constructor execution, initialization, and static 
+          initialization join points?
+          </p></div><div class="answer"><p><a name="d0e1571"></a><b></b>Static initialization pertains to initialization of
+          a class or interface type. Constructor call and execution
+          are akin to method call, and initialization generalizes this and
+          picks out the first constructor called.
+          </p><p>Their relations are best 
+          demonstrated by tracing the join points.  Below is the class
+          Test which implements an interface and extends a class
+          along with a trace of the join points below and including
+          the constructor call obtained using 
+          <tt>TraceJointPoints.java</tt>
+               from <a href="#q:seeingjoinpoints">Q:I don't understand what join points exist.  How can I see them?</a>.
+          </p><pre class="programlisting">
+            
+public class Init {
+    public static void main (String[] args) {
+        new Test(); 
+        end();
+    } 
+    static void end() {}
+}
+class Super {}
+interface I {}
+class Test extends Super implements I {
+    Test() {}
+}
+
+
+          </pre><p>For a program compiled with AspectJ 1.0, 
+          	the result is this:</p><pre class="programlisting">
+            
+  &lt;constructor-call sig="Test()" &gt;
+    &lt;staticinitialization sig="Super._init_" /&gt;
+    &lt;staticinitialization sig="Test._init_" /&gt;
+    &lt;initialization sig="Super()" &gt;
+      &lt;instanceinitializer-execution sig="Super._init_" /&gt;
+      &lt;constructor-execution sig="Super()" /&gt;
+    &lt;/initialization&gt;
+    &lt;initialization sig="I()" &gt;
+      &lt;instanceinitializer-execution sig="I._init_" /&gt;
+      &lt;constructor-execution sig="I()" /&gt;
+    &lt;/initialization&gt;
+    &lt;initialization sig="Test()" &gt;
+      &lt;instanceinitializer-execution sig="Test._init_" /&gt;
+      &lt;constructor-execution sig="Test()" /&gt;
+    &lt;/initialization&gt;
+  &lt;/constructor-call&gt;
+
+          </pre><p>
+        Ordinarily, using a <tt>call</tt> pointcut designator 
+        is best because the call join point surrounds the others, but in
+        the case of constructors there is no target object for
+        the call (because it has not been constructed yet), so you
+        might prefer to use the <tt>initialization</tt> 
+        pointcut designator.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:adviseconstructors"></a><b>7. </b>How do I work with an object right when it is created?
+          </p></div><div class="answer"><p><a name="d0e1599"></a><b></b>
+          You can advise some form of constructor join point.
+          Constructors are tricky in Java, and that's exposed in AspectJ.  
+          Here are some rules of thumb:
+          <div class="itemizedlist"><ul><li><p><a name="d0e1603"></a>If you want the join point on the "outside" of object creation, 
+              use after returning from call to the constructor:
+              </p><pre class="programlisting">
+    after() returning (Foo newlyCreatedObject): call(Foo.new(..)) { ... }
+              </pre><p>
+  You might be tempted to use "this" or "target" to expose the new object, but remember
+  that if you're on the "outside" of object creation, the object itself might not be
+  created yet... it only exists "on the way out", when you return the object.
+              </p></li><li><p><a name="d0e1610"></a>If you want the join point inside a particular constructor, use:
+              </p><pre class="programlisting">
+    after(Foo newlyCreatedObject) returning: this(newlyCreatedObject) &amp;&amp; execution(Foo.new(..)) { ... }
+              </pre><p>
+    Remember, though, that if you use "before" advice here, the body of the constructor
+    will not have run, and so the object may be somewhat uninitialized.
+              </p></li><li><p><a name="d0e1617"></a>
+    In the rare case that there are all sorts of constructors for the object that call 
+    each other with <tt>this(...)</tt> and you want exactly one join point 
+    for each initialization of <tt>Foo</tt>, regardless of the path of 
+    constructors it takes, then use:
+              </p><pre class="programlisting">
+    after(Foo f) returning: this(f) &amp;&amp; initialization(Foo.new(..)) { ... }
+              </pre></li></ul></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:andingpointcuts"></a><b>8. </b>
+            I want advice to run at two join points, but it doesn't run at all.  What gives?
+          </p></div><div class="answer"><p><a name="d0e1633"></a><b></b>
+	  This usually reflects both a conceptual error and a programming mistake.
+	  Most likely you want to do something like "run the advice for all 
+	public and private calls," and the code looks something like this:
+          </p><pre class="programlisting">
+            within(com.xerox.printing..*) &amp;&amp; call(public * *(..)) &amp;&amp; call(private * *(..))
+          </pre><p>
+	But a pointcut is evaluated at *each* join point.
+        The expression above would never pick out any call join point,
+	because no method signature has both public and private access.
+	In a pointcut, <tt>pc1() &amp;&amp; pc2()</tt> means both
+	must be true at a given join point for advice to run at that join point.
+	The correct pointcut would use <tt>||</tt> as follows:
+          </p><pre class="programlisting">
+            within(com.xerox.printing..*) &amp;&amp; (call(public * *(..)) || call(private * *(..)))
+          </pre><p>
+            Then the advice will run at the join point.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:staticfieldreferences"></a><b>9. </b>
+            How do I refer to a static field when my advice crosscuts multiple classes?
+          </p></div><div class="answer"><p><a name="d0e1654"></a><b></b>There is no way in advice to refer to the type of the
+	  code executing in a static context except by specification.
+	  This makes it impossible to refer to static members using 
+	  runtime information.
+          </p><p>However, AspectJ can determine the class for something
+          	in the join point context, which you can use as a per-class key. 
+          	Then you can actually declare an instance field to contain
+          	the per-class value (see the next question).  This comes at
+          	the cost of an extra reference, but the field can be final.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:interfacesastypepatterns"></a><b>10. </b>I would like to reuse a type pattern, e.g., to
+	write advice that is limited to a certain set of classes.
+	Do I have to retype it each time?
+          </p></div><div class="answer"><p><a name="d0e1663"></a><b></b>No.  You can declare that all the types implement
+	an interface you define, and then use the interface type in
+	your program.  For example:
+          </p><pre class="programlisting">
+/** 
+ * Example of using an interface to represent a type pattern.
+ * sub-aspects use declare parents to add to traced types, e.g.,
+ *    declare parents: com.mycompany.whatever..* implements Marked;
+ */
+abstract aspect MarkerExample {
+  /** marker interface for types that we want to trace */
+  interface Marked {}
+
+  /** calls to an instance of Marked not from an instance of Marked */
+  pointcut dynamicCallsIn(): call(* *(..)) &amp;&amp; target(Marked) &amp;&amp; !this(Marked);
+
+  /** calls to methods defined by a subtype of Marked
+   *  that don't come from the body of a subtype of Marked
+   */
+  pointcut staticCallsIn(): call(* Marked+.*(..)) &amp;&amp; !within(Marked+);
+
+  /** print dynamic calls */
+  before(): dynamicCallsIn() { System.out.println("before " + thisJoinPoint); }
+}
+
+aspect MyMarker extends MarkerExample {
+  declare parents: com.mycompany.whatever..* implements Marked;
+}
+          </pre></div></div><div class="qandaentry"><div class="question"><p><a name="q:exampleprograms"></a><b>11. </b>Where do I find example programs and how-to's?</p></div><div class="answer"><p><a name="d0e1672"></a><b></b>There are a number of places to find sample code
+           and instructions for using AspectJ with other programming tools.
+		  <div class="orderedlist"><ol type="1"><li><p><a name="d0e1676"></a>
+			The AspectJ release includes examples in its 
+          	<tt>doc</tt> directory.
+			</p></li><li><p><a name="d0e1682"></a>
+           There is a community repository of sample code and tutorials
+           in the AspectJ CVS tree  
+           <tt>docs</tt> module <tt>sandbox</tt> directory.
+           These are extracted and published (online only) 
+           <a href="http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/sample-code.html" target="_top">
+		   here
+           </a>.
+			</p></li><li><p><a name="d0e1694"></a>
+			The <tt>teaching</tt> directory of the 
+			<tt>docs</tt> module contains public materials 
+			the AspectJ committers use for presentations, some of 
+			which include example code.  To access CVS, see
+			<a href="#q:buildingsource">Q:How do I get and compile the source code for AspectJ?</a>.			
+			</p></li><li><p><a name="d0e1705"></a>
+			The archives for the user and developer mailing lists 
+			contain many good examples.  To search the archives, see
+			<a href="#q:searchingsite">Q:How can I search the email archives or the web site?</a>.
+			</p></li></ol></div>
+           This code can vary in quality.
+           Code that we publish or include with AspectJ is generally
+           correct.  However, code found in our CVS tree might not have 
+           been tested thoroughly, and code from the mailing lists might
+           be untested or use older versions of the language.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:aspectlibraries"></a><b>12. </b>Are aspect libraries available?</p></div><div class="answer"><p><a name="d0e1715"></a><b></b>Some libraries are distributed in the release under the
+            examples folder in the distribution.
+            These are "libraries" in the sense that they are reusable,
+            but they are delivered in source form. 
+            Similarly, some of the sample code is reusable; for that,
+            see <a href="#q:exampleprograms">Q:Where do I find example programs and how-to's?</a>.
+            If you develop such a library and want to make it available to 
+            other users, feel to send it to the users mailing list
+            <tt>aspectj-users@eclipse.org</tt>.
+          </p><p>In AspectJ 1.1, ajc supports binary aspects, so
+          	you can distribute aspect libraries without distributing the
+          	source.  For more information, see the 
+          		<tt>-aspectpath</tt>
+          	option in the 
+          		<a href="devguide/ajc-ref.html" target="_top">
+              				Reference for ajc</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:serialversionuid"></a><b>13. </b>How does <tt>ajc</tt> interact with the
+            <tt>serialVersionUID</tt>?
+          </p></div><div class="answer"><p><a name="d0e1741"></a><b></b>The current version of <tt>ajc</tt> can change the
+            <tt>serialVersionUID</tt> of generated
+            <tt>.class</tt> files as a result of weaving in advice.
+            This is an important fact that developers using both aspects and
+            serialization should be aware of.  It is likely that a future
+            version of the compiler will be better behaved regarding the
+            <tt>serialVersionUID</tt>.
+          </p><p>However, changes to the <tt>serialVersionUID</tt>
+            attribute are typically only important when using serialization for
+            the long-term persistence of  objects.  Using standard Java
+            serialization for long-term persistence has a number of drawbacks
+            and many developers already use alternative solutions.  For one
+            possibly standard solution, see
+            <a href="http://jcp.org/jsr/detail/057.jsp" target="_top">
+              Long-Term Persistence for JavaBeans Specification
+            </a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:applets"></a><b>14. </b>How can I use AspectJ with applets?</p></div><div class="answer"><p><a name="d0e1768"></a><b></b>
+            Just include the aspectjrt.jar as a required archive.  
+            For example, here is the HTML code for an HTML editor 
+            applet that contains some debugging aspects:
+          </p><pre class="programlisting">
+            
+&lt;APPLET
+   CODE='com.company.swing.applets.EditorApplet'
+  WIDTH='700'
+ HEIGHT='525'&gt;
+    &lt;PARAM NAME="CODE" VALUE="com.company.swing.applets.EditorApplet" &gt;
+    &lt;PARAM NAME="ARCHIVE" 
+         VALUE ="../company-applets.jar,../aspectjrt.jar,../xmlrpc-applet.jar" &gt;
+    &lt;PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"&gt;
+    &lt;PARAM NAME="scriptable" VALUE="false"&gt;
+&lt;/APPLET&gt;
+
+          </pre><p>
+          The above markup has worked reliably with the Java Plugin
+          (included in the JRE 1.4.x) in IE 6, Mozilla 1.1 (Win32), 
+          and Mozilla 1.0.1 (Red Hat Linux 8.0).  
+          The following link describes how to configure Mozilla/Netscape
+          6.x/7.x to use the Java Plugin from a JRE/SDK installation:
+          <a href="http://java.sun.com/j2se/1.4.1/manual_install_linux.html" target="_top">
+          http://java.sun.com/j2se/1.4.1/manual_install_linux.html</a>.
+          (Thanks to Chris Bartling for this answer.)
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:typeoblivious"></a><b>15. </b>How can I specify types for advice that captures primitives, void, etc.?</p></div><div class="answer"><p><a name="d0e1782"></a><b></b>
+	In some cases, AspectJ allows conversion from values of primitive types to Object, 
+	so that highly polymorphic advice may be written.  This works if an advice parameter 
+	or the return type for around is typed to Object.  So:
+          </p><pre class="programlisting">
+class Test {
+    static int i;
+    public static void main(String[] args) {
+        i = 37;
+    }
+}
+
+aspect TraceSet {
+    before(Object val): set(* Test.*) &amp;&amp; args(val) {
+        System.err.println(val);
+        System.err.println(val.class);
+    }
+}
+          </pre><p>
+            will print out
+          </p><pre class="programlisting">
+37
+java.lang.Integer
+          </pre><p>
+	For more information, see the Programming Guide
+            <a href="progguide/semantics-pointcuts.html" target="_top">
+              semantics section "Context Exposure"
+            </a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:versioninfo"></a><b>16. </b>How do I detect which version I am running?</p></div><div class="answer"><p><a name="d0e1800"></a><b></b>The <tt>ajc</tt>
+          compiler emits the version when passed the
+          <tt>-version</tt> flag as an argument.
+          </p><p>To programmatically
+          detect the version of the AspectJ runtime while running
+          under Java 1.4 or later, get the version from the package:
+          <pre class="programlisting">
+    Package lang = org.aspectj.lang.JoinPoint.class.getPackage();
+    String version = lang.getImplementationVersion();
+          </pre>
+          </p><p>When running under Java 1.3 or earlier, read the manifest
+          directly.  For example code, see the source for
+          <tt>AjBuildManager.checkRtJar(AjBuildConfig)</tt>
+          in the <tt>org.aspectj.ajdt.internal.core.builder</tt>
+          package of the <tt>org.aspectj.ajdt.core</tt> module,
+          available as described in
+          <a href="#q:buildingsource">Q:How do I get and compile the source code for AspectJ?</a>.
+          </p><p>Note that the version of AspectJ for the tools in
+          <tt>aspectjtools.jar</tt> is in
+          <tt>org.aspectj.bridge.Version</tt>.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="problems"></a>11 Common Problems</h3><div class="qandaentry"><div class="question"><p><a name="q:infiniterecursion"></a><b>1. </b>When I run, I get a <tt>StackOverflowError</tt>
+        (or a long stack trace or no output whatsoever)
+          </p></div><div class="answer"><p><a name="d0e1845"></a><b></b>Most likely this is a case of infinite recursion, 
+          where advice is advising itself. It presents as a 
+          <tt>StackOverflowError</tt>
+          or silence as the VM exhausts itself in the recursion.
+          </p><p>Of course, infinite recursion is possible in Java:</p><pre class="programlisting">
+public class Main {
+    public static void main(String[] args) {
+        try {
+           main(args);
+        } finally {
+           main(args);
+        }
+    }
+}
+          </pre><p>If you compile and run this program, and it will fail silently, trying
+            to process the finally clause even after throwing the StackOverflowError.
+          </p><p>Here's a similar AspectJ program where the recursion is 
+          not so obvious:
+          </p><pre class="programlisting">
+aspect A {
+    after():  call(* *(..)) { System.out.println("after " + thisJoinPoint); }
+}
+          </pre><p>This re-invokes itself because it advises any call.
+          It invokes itself even after an exception is thrown, since
+          <tt>after</tt> advice, like a finally clause, runs even 
+          after exceptions are thrown. You can fix this by following two practices:
+          </p><p>In AspectJ 1.1, the String concatenation operator (+) is
+          	advised in its StringBuffer form, so if your advise uses 
+          	String + in a way that is picked out by your pointcut,
+          	you will get infinite recursion.</p><p>
+          (1) Use <tt>after returning</tt> to advise normal completions
+              or <tt>after throwing</tt> to advise abrupt completions.
+              If you use <tt>after</tt> or <tt>after throwing</tt>, 
+              write the advice with the same care you would a finally clause, 
+              understanding that it may run after some failure.
+          </p><p>(2) Avoid writing advice that advises itself.  One simple way to
+          do so is to exclude the code within the current aspect:
+          </p><pre class="programlisting">
+aspect A {
+    after() returning:  !within(A) &amp;&amp; call(* *(..)) { 
+        System.out.println("after " + thisJoinPoint); 
+    }
+}
+          </pre><p>A better way is often to re-write the pointcut.  
+          If the advice is advising itself accidentally, that's a sign that 
+          the pointcut is not saying what you mean.
+          </p><pre class="programlisting">
+aspect A {
+    pointcut withinTargetClasses() : within(A+) || within(B+);
+    after() returning:  withinTargetClasses() &amp;&amp; call(* *(..)) { 
+        System.out.println("after " + thisJoinPoint); 
+    }
+}
+          </pre></div></div><div class="qandaentry"><div class="question"><p><a name="q:typelessdeclarations"></a><b>2. </b>I've declared a field on every class in
+            my package; how do I use it in advice?
+          </p><pre class="programlisting">
+aspect A {
+    boolean com.xerox..*.dirtyFlag;
+    after (Object target) returning 
+        : target(target) &amp;&amp; call(* com.xerox..*.set*(..)) {
+        target.dirtyFlag = true; // compile fails here
+    }
+}
+          </pre></div><div class="answer"><p><a name="d0e1896"></a><b></b>You need a type to refer to any member, field or method.
+          It's generally better to introduce onto an interface and
+          declare classes to implement the interface, which permits you
+          to use the interface type in advice formals.
+          </p><pre class="programlisting">
+aspect A {
+    interface TrackingSets {}
+    boolean TrackingSets.dirtyFlag;
+    declare parents : com.xerox..* implements TrackingSets;
+
+    after (TrackingSets target) returning 
+        : target(target) &amp;&amp; call(* com.xerox..*.set*(..)) {
+        target.dirtyFlag = true; 
+    }
+}
+          </pre></div></div><div class="qandaentry"><div class="question"><p><a name="q:ajcoom"></a><b>3. </b>The AspectJ compiler aborts with an OutOfMemoryError when
+          compiling many classes. How can I fix this?
+          </p></div><div class="answer"><p><a name="d0e1905"></a><b></b><tt>ajc</tt> can use more memory than a javac
+           compile of the corresponding pure-java sources when aspects
+           are added to the mix.  You'll need to increase the memory
+           available.
+          </p><p>The command <tt>ajc</tt> is actually a script that
+            launches a Java virtual machine with the correct classpath. You
+            should make a copy of this script, rename it, and then edit it.
+            Change the -Xmx option, size of memory allocation pool (heap). You
+            might try <tt>-Xmx128M</tt> or even
+            <tt>-Xmx256M</tt>.
+          </p><p>When running under Ant, give Ant more memory or
+          use the <tt>fork</tt> option together with
+          the <tt>Xmaxmem</tt> option.
+          </p><p>When running under an IDE, look to the documentation
+          for the IDE to determine how to increase available memory.
+          </p><p>In either case, doing incremental compilations can hold on to
+			  more memory than a one-shot compile process, as the compiler
+			  trades space for time in recompiles.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:duplicateclass"></a><b>4. </b>
+            Why do I get a message that my class is already defined?
+          </p></div><div class="answer"><p><a name="d0e1937"></a><b></b>
+            Most commonly, a source file was specified twice on the command line
+            (e.g., directly and by a *.java entry in a .lst file).
+            However, sometimes you have defined a class in two files in the
+            same package, and you need to rename the class or change its 
+            scope.  You should get this message from any Java compiler.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:ajcrecompile"></a><b>5. </b>
+            <tt>ajc</tt> recompiles all files every time. 
+          How can I make it recompile only the files that have changed?
+          </p></div><div class="answer"><p><a name="d0e1947"></a><b></b>
+            <tt>ajc</tt> 1.0 does not support incremental
+          compilation, but since 1.1 <tt>ajc</tt> does when passed the 
+          	<tt>-incremental</tt> option.  It may still recompile
+          files that have not changed, if they could be affected by aspects
+          in particular ways, but the files compiled should be fewer
+          and result in faster compiles.
+          Further, the 1.1 release supports binary weaving, so you
+          need not recompile if you already have .class files.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:ajcjvm"></a><b>6. </b>
+            <tt>ajc</tt> is using the wrong JVM. How do I
+            fix it?
+          </p></div><div class="answer"><p><a name="d0e1966"></a><b></b>The easiest way to fix this is to re-install
+            <tt>ajc</tt> (using the same <tt>.class</tt> or
+            <tt>.exe</tt> file that you originally downloaded) and
+            this time make sure to tell it to use the desired JDK (typically
+            the JDK versions 1.2 or 1.3 from Sun).
+          </p><p>If you are familiar with DOS batch files or shell programming,
+            you could also fix this by simply editing the
+            <tt>bin\ajc.bat</tt> or <tt>bin/ajc</tt>
+            script.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:idebalkingataspects"></a><b>7. </b>My IDE is trying to parse AspectJ files which makes my project unusable.
+                What can I do?
+          </p></div><div class="answer"><p><a name="d0e1990"></a><b></b>
+        When working with an unsupported IDE that objects to the syntax of 
+        AspectJ source files (and, e.g., automatically gathers them 
+        in a source tree as Java files based on the .java extension), 
+        you can use the .aj extension for your AspectJ files.  
+        The ajc compiler accepts both .java and .aj files, and you can 
+        set up your build scripts to include the correct list of 
+        source files.  (You will have to find another editor for
+        editing AspectJ files; you can use the ajbrowser to view
+        edit your AspectJ files and navigate the crosscutting structure.)
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:idememory"></a><b>8. </b>I used to be able to compile my program in my IDE, but when I
+                use AJDE, I run out of memory (or it goes really slow).
+          </p></div><div class="answer"><p><a name="d0e1997"></a><b></b>
+        The ajc compiler does more analysis than (e.g.,) javac,
+        and AJDE may in some IDE's hold a copy of the structure tree until the
+        next tree is available from the compile process.  Both mean that you may
+        need extra memory to compile the same program.  However, increasing
+        available memory to the point that you are swapping to disk can
+        slow the process considerably.
+          </p><p>
+        If you are having problems and would like to find the optimal memory 
+        allocation, iteratively decrease the amount of memory available until 
+        AJDE or ajc signals out-of-memory errors, and then increase that 
+        amount by 5-10%.
+          </p><p>
+        To increase memory for the ajc compiler, see <a href="#q:ajcoom">Q:The AspectJ compiler aborts with an OutOfMemoryError when compiling many classes. How can I fix this?</a>.
+        For your IDE, do something similar or follow the provider's instructions.
+        For example, to increase memory in JBuilder, edit the 
+        <tt>jbuilderX/bin/jbuilder.config</tt>
+        file to have an entry like:
+<pre class="programlisting">        
+vmparam -Xmx384m
+</pre>        
+          </p><p>
+        If it turns out that your project is too big to use with AJDE, your IDE 
+        may nonetheless support external commands or Ant build processes, which
+        run outside the IDE memory space.  For a JBuilder Ant plugin, some
+        people have directed us to <a href="http://antrunner.sourceforge.net" target="_top">http://antrunner.sourceforge.net</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:noaspectbound"></a><b>9. </b>
+            When I run, I get a <tt>NoAspectBoundException</tt> or a
+            ClassNotFound message for <tt>NoAspectBoundException</tt>.
+          </p></div><div class="answer"><p><a name="d0e2026"></a><b></b>This happens when an aspect is not associated with an object
+        		that is being advised.  We have seen this happen two ways:
+			  <div class="itemizedlist"><ul><li><p><a name="d0e2030"></a>You get a ClassNotFound message for 
+				  	<tt>NoAspectBoundException</tt> when loading a 
+				  	class affected by aspects if <tt>aspectjrt.jar</tt> 
+				  	classes are not on the runtime classpath.   
+        			To fix this, put the classes on the classpath.
+				  </p></li><li><p><a name="d0e2039"></a>
+				  	You can get a <tt>NoAspectBoundException</tt> when
+				  	there is a cycle in aspect initialization or static 
+				  	initialization, most commonly when an aspect advises
+				  	its own initializer.  To fix this, first find the class that
+				  	fails to load by running java in debug mode or looking 
+				  	at the <tt>NoAspectBoundException</tt> trace, 
+				  	and then fix the offending (probably unintended) dependency.
+				  	Most often, it comes from a pointcut like
+				  	<tt>staticinitialization(com.company..*)</tt>
+				  	or <tt>within(com.company..*)</tt>, which
+				  	can include any aspects in the same subpackages.
+				  	You can avoid advising most join points associated with
+				 	the aspect <tt>TheAspect</tt>
+				  	by adding <tt>&amp;&amp; !within(TheAspect)</tt>
+				  	to your pointcut.
+				  </p></li></ul></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:stacktraces"></a><b>10. </b>
+            My stack traces don't make sense.  What gives?
+          </p></div><div class="answer"><p><a name="d0e2065"></a><b></b>In 1.0, unless you are using the <tt>ajdb</tt> debugger, 
+          stack traces may
+          have synthetic methods in the stack, and the line numbers may
+          not track your source code.  The 
+            <a href="devguide/index.html" target="_top">
+              Development Environment Guide</a>
+          discusses how to interpret stack at the end of the
+            <a href="devguide/ajc-ref.html" target="_top">
+              Reference for ajc</a>.
+          </p><p>In 1.1, line numbers should work correctly.
+          The only difference from a normal stack might be the addition
+          of extra stack frames for call-backs.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:advicenotrunning"></a><b>11. </b>
+            My advice is not running (or running twice), and I don't know why.
+          </p></div><div class="answer"><p><a name="d0e2083"></a><b></b>
+          	When advice is not running,   
+          	there is probably a problem in the pointcut.
+          Sometimes users specify pointcuts that 
+          do not mean what they intend -
+	      most often when they misspell a type name. Run the compiler in
+	      <tt>-Xlint</tt> mode, which will flag some likely mistakes,
+	      like the type name.  
+          If that does not work, and your pointcut is staticly-determinable,
+          use a declare statement to identify affected code.  (For more 
+          information, see <a href="#q:knowWhenAspectsAffectClasses">Q: How do I know which aspects affect a class when looking at that class's source code?</a>.)
+          If that does not work and your pointcut is dynamically determined, 
+          see if your join points are executing at all by using
+              TraceJoinPoints.java from <a href="#q:seeingjoinpoints">Q:I don't understand what join points exist.  How can I see them?</a>.
+          </p><p>When advice is running more than it should, either
+          	(1) your advice is in an abstract aspect and the pointcut picks
+          	out the same join point for more than one concrete instantiation
+          	of the aspect, or
+          	(2) your pointcut picks out more join points than you intend.
+          </p><p>
+          In the case of advice in abstract aspects, the advice will run once
+          for each concrete instance of the aspect. 
+          If the pointcut for that advice picks out the same join point for two 
+          concrete aspects, then the correct behavior is for the advice to run 
+          the advice twice at that join point.
+          </p><p>
+          To see if your pointcut picks out the join points you intend, you
+          can use IDE support, logging, or declare-warnings.
+          If you are using IDE support, you should be able to trace back from
+          the pointcut or advice to the join points which can be statically
+          determined to be affected.  
+          Without IDE support, you can write
+          declare-warning statements to identify code affected by staticly-
+          determinable pointcuts.
+          To identify advised dynamic join points,
+          you can try using <tt>TraceJoinPoints.java</tt> as above, 
+          or update the advice to print the source location of the join point.  
+          Doing any of these should show if the advice applies to code that 
+          you did not expect.
+          </p><p>If you've done this and convinced yourself it's not working,
+          it may be a bug.  See <a href="#q:bugreports">Q:How do I submit a bug report?</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:adviceOnOveriddenMethods"></a><b>12. </b>
+            My advice runs for each overridden method!
+            </p></div><div class="answer"><p><a name="d0e2110"></a><b></b>Most likely you are advising the method execution join
+           	point and specifying the defining signature.
+           	Since all overriding methods share this signature,
+           	the advice runs for each method executed.
+           	(This happens, e.g., when one method invokes the same method  
+           	in the superclass using <tt>super.{method}(..)</tt>).
+           	This is the correct behavior.
+          </p><p>To avoid this, use the <tt>call(..)</tt> pointcut
+          	designator, or use <tt>!cflow(..)</tt> to pick
+          	out only the initial method-execution.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:tejpsp"></a><b>13. </b>
+            I don't understand when thisEnclosingJoinPointStaticPart is available.
+          </p></div><div class="answer"><p><a name="d0e2128"></a><b></b>
+          	<tt>thisEnclosingJoinPointStaticPart</tt> is a special 
+          	variable available in the context of advice to refer to the
+          	join point, if any, lexically enclosing the current join point:
+          	<div class="table"><p><a name="d0e2134"></a><b>Table 1. thisEnclosingJoinPointStaticPart</b></p><table summary="thisEnclosingJoinPointStaticPart" border="1"><colgroup><col><col></colgroup><tbody><tr><td>One of these...</td><td>will be tEJSP for each of these:</td></tr><tr><td>
+						constructor-execution, method-execution, 
+						advice execution, initialization,
+  						pre-initialization, static initialization
+          				</td><td>
+ 						constructor-call, method-call, handler, 
+ 						field-set, field-get
+       					</td></tr></tbody></table></div>
+			Expressions in the body of handlers have the same
+  			<tt>thisEnclosingJoinPointStaticPart</tt>
+  			as the handler itself.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:packagedeclares"></a><b>14. </b>
+            I declared a member on a class with package access, but other classes in the package cannot see it.
+          </p></div><div class="answer"><p><a name="d0e2157"></a><b></b>When declaring parents on other types from an aspect, package access only
+	applies to code the implementation controls.  For AspectJ 1.0, that is the set of files
+	passed to the compiler.  That means other classes not compiled with the aspect will not
+	be able to access the aspect-declared members even if they are in the same package.
+	The only way for classes outside the control of the implementation to access aspect-declared
+	members is to declare them public.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:interfaceDeclarations"></a><b>15. </b>I declared a member on a interface, but javac does not see it.
+          </p></div><div class="answer"><p><a name="d0e2164"></a><b></b>
+          	You have to compile all the top-level implementating
+          	classes of the interface using <tt>ajc</tt>.
+            From an email by Jim Hugunin on the requirements for AspectJ 1.1 to 
+            implement members declared by an aspect on an interface:
+          </p><p>
+            If you introduce non-static fields or non-abstract methods on an interface 
+            from an aspect, then all of the top-most implementors of that interface must 
+            be woven by that same aspect.  
+            (A class C is a top-most implementor of an interface I if C implements I 
+            and the superclass of C does not implement I.)
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:cantfindjavac"></a><b>16. </b>
+            <tt>ajc</tt> 1.0 complains that it can't find
+            <tt>javac</tt>. What's wrong?
+          </p></div><div class="answer"><p><a name="d0e2182"></a><b></b>
+            <tt>ajc</tt> 1.0 does not try to locate
+            <tt>javac</tt> in your path: it uses the
+            <tt>javac</tt> classes directly. In JDK 1.2 and 1.3 these
+            classes are found in <tt>tools.jar</tt> (in the
+            <tt>lib</tt> directory of the JDK distribution), which
+            must be on your classpath to make
+            <tt>ajc</tt> work with <tt>javac</tt>. 
+            Inspect the java command that launches ajc to make sure that 
+            <tt>tools.jar</tt> is on the classpath for ajc;
+            the -classpath option only applies to the sources compiled.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:ajdocneeds13"></a><b>17. </b>
+          I'm running under 1.4, but <tt>ajdoc</tt> asks for 1.3 
+          (or throws IllegalAccessError for HtmlWriter.configuration)
+          </p></div><div class="answer"><p><a name="d0e2216"></a><b></b>
+          The 1.0 implementation of <tt>ajdoc</tt> uses
+	      specific javadoc classes in the J2SE 1.3 tools.jar.
+	      We are working on addressing this limitation, but in the interim
+	      it is best to run ajdoc under 1.3.
+          </p><p>
+          When running from the command-line scripts, edit the scripts directly
+          to put the 1.3 tools.jar first on the classpath.  (The installer does
+          not know about this limitation of ajdoc.)
+          </p><p>
+          When running from Ant, users often have tools.jar in ${ant.classpath}
+          (to make javac, et al work).  That makes it impossible to run the ajdoc
+          taskdef (which does not currently support forking), so you'll need to
+          run a separate ant process, either from the command-line or via Ant's
+          exec task (the Ant task will propagate the classpath).  
+          If the wrong tools.jar is not on the ant classpath, then it should work
+          to put the 1.3 tools.jar in the taskdef classpath.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:compileunits"></a><b>18. </b>I set up different files to my compiles to change what
+                the aspects see, but now I don't
+	        understand how the aspects are working.
+          </p></div><div class="answer"><p><a name="d0e2230"></a><b></b>It is a bad practice to use the compilation unit
+	   to control crosscutting.  Aspects and pointcuts especially
+            should be written to specify crosscutting precisely.	
+            Aspects will behave the same when you add files if
+            you initially included all files affected by your aspects.
+            If you use the compilation unit, then your code will behave
+	    differently in AspectJ implementations that do not limit 
+	    themselves to specified files.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:readingpreprocessedcode"></a><b>19. </b>I'm reading the code generated by <tt>ajc</tt> 1.0
+        in <tt>-preprocess</tt> mode, and it seems like it would not
+        work (or "like it works this way").
+          </p></div><div class="answer"><p><a name="d0e2243"></a><b></b>The generated code can be difficult for a human to read and
+          understand.  The compiler uses implementation techniques which might
+          not be apparent.  To determine if the code is behaving correctly, you
+          should write and run a program that attempts to provoke the error you
+          suspect.  Similarly, you should not rely on invariants you infer from
+          the generated code (especially naming conventions for generated members).
+          Please rely only on the semantics stated in the appendix of the
+          AspectJ <a href="progguide/index.html" target="_top">Programming Guide</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:injection"></a><b>20. </b>I've heard AspectJ can generate or inject code into my code.  
+	        Is this true?
+          </p></div><div class="answer"><p><a name="d0e2253"></a><b></b>
+            This is a misconception spawned from the early implementation.
+          </p><p>
+	  AspectJ does not "inject" or "generate" code.  In AspectJ the
+	  pointcut constructs allow the programmer to identify join points,
+	  and the advice constructs define additional code to run at those
+	  join points.
+          </p><p>
+	  So the semantic model of advice is like the semantic model of a 
+	  method -- it says "when any of these things happen, do this".
+          </p><p>
+	  People who worked with earlier versions of AspectJ, in which ajc
+	  was very explicitly a pre-processor, sometimes thought of AspectJ
+	  as injecting code.  But that was an artifact of the implementation,
+	  not the underlying language semantics.
+          </p><p>
+	  This distinction is important for two reasons.  One is that thinking
+          about it this way will make more sense at the implementation continues
+          to evolve towards load-time or runtime weaving.  The other is that
+          it makes it much easier to understand the semantics of advice on
+          cflow pointcuts.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:newjoinpoints"></a><b>21. </b>Why can't AspectJ pick out local variables (or array elements or ...)?
+          </p></div><div class="answer"><p><a name="d0e2268"></a><b></b>Users have sometimes wanted AspectJ to pick out 
+          	many more join points, including
+          	<div class="itemizedlist"><ul><li><p><a name="d0e2272"></a>method-local field access</p></li><li><p><a name="d0e2275"></a>array-element access</p></li><li><p><a name="d0e2278"></a>loop iteration</p></li><li><p><a name="d0e2281"></a>method parameter evaluation</p></li></ul></div>
+          	Most of these have turned out not to make sense,
+          	for a variety of reasons:
+          	<div class="itemizedlist"><ul><li><p><a name="d0e2286"></a>it is not a commonly-understood unit for Java programmers</p></li><li><p><a name="d0e2289"></a>there are very few use-cases for advice on the join point</p></li><li><p><a name="d0e2292"></a>a seemingly-insignificant change to the underlying program
+          			      causes a change in the join point</p></li><li><p><a name="d0e2295"></a>pointcuts can't really distinguish the join point in question</p></li><li><p><a name="d0e2298"></a>the join point would differ too much for different 
+          			implementations of AspectJ, or would only be implementable
+          			in one way
+          			</p></li></ul></div>
+          	We prefer to be very conservative in the join point model for the language,
+          	so a new join point would have to be useful, sensible, and implementable.
+          	The most promising of the new join points proposed are for exception
+          	throws clauses and for synchronized blocks.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:reflectiveCalls"></a><b>22. </b>Why doesn't AspectJ pick out reflective calls?
+			  The pointcut <tt>call(void run())</tt> 
+			  won't pick out a call using reflection, like
+			  <tt>((Method)run).invoke(null, args)</tt>.
+          </p></div><div class="answer"><p><a name="d0e2312"></a><b></b>The pointcut 
+			  <tt>execution(void run())</tt> will
+			  work. The call pointcut doesn't work because 
+			  <tt>Method.invoke(..)</tt> is the Java method-call,
+			  and AspectJ cannot delve into the Java reflection library to
+			  implement call semantics.  To advise a reflective call
+			  (e.g., because the compiler does not control the code for the
+			  method execution), test the context for <tt>invoke(..)</tt>.
+			  Here's a pointcut that tests only if the method name is
+			  correct:
+          </p><pre class="programlisting">
+aspect A {
+    pointcut runReflectiveCall(Method run) : target(run) &amp;&amp;
+         call(Object Method.invoke(..)) &amp;&amp; if("run".equals(run.getName()));		  
+    before() : runReflectiveCall(Method) { 
+        System.out.println("before reflective call " + thisJoinPoint); 
+    }
+}
+          </pre></div></div><div class="qandaentry"><div class="question"><p><a name="q:currentbugs"></a><b>23. </b>What are the bugs now most affecting users?</p></div><div class="answer"><p><a name="d0e2330"></a><b></b>The bugs affecting the semantics of the language
+			  are marked with the "info" keyword.  Find them with
+			  the query
+			  <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;keywords=info" target="_top">
+						  http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;keywords=info
+						  </a>
+		  </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:runtimeMemory"></a><b>24. </b>What extra memory is required at runtime?
+          </p></div><div class="answer"><p><a name="d0e2340"></a><b></b>When running classes produced by the AspectJ weaver or compiler,
+              there are no significant hidden uses of memory.  As would be expected,
+              each aspect is instantiated.  The per-object aspects (like
+              <tt>pertarget</tt> or <tt>perthis</tt>)  
+			  in some implementations
+              use a map to link aspects and the associated object.  When using
+              <tt>cflow</tt>-related pointcuts, a <tt>ThreadLocal</tt>
+              is used to track control flow for each affected thread.
+		  </p><p>Of course, the size and code in an aspect can require memory.
+			  Aside from normal Java practices, take care with join point references.
+              When referencing the static part of a join point (e.g., 
+              <tt>thisJoinPointStaticPart</tt>), only one object is
+              created.  However, if you reference the join point itself
+              (e.g., <tt>thisJoinPoint</tt>), then one 
+              <tt>JoinPoint</tt> object will be created for each 
+              join point running advice.
+		  </p><p>Aspect instances will be garbage collected just like regular objects 
+			  after there are no more strong references to them.  For the default
+			  aspect instantiation model, <tt>issingleton</tt>, the aspect
+			  class retains a reference to the singleton instance, in order to 
+			  implement <tt>static {AspectClass} aspectOf()</tt>, so 
+			  singleton instances will not be garbage collected until the class is.
+			  For long-running or memory-critical programs, consider using weak 
+			  references in singleton aspects for state that should be garbage collected.
+		  </p><p>Finally, when using load-time weaving, the weaver can require
+              memory in its own right.  Because the class loader never can 
+              know when it is done loading classes, the weaver can hold on
+              to the aspects required to weave for some time.  There are 
+              strategies for minimizing this (with different trade-off's),
+              so the time and memory required for load-time weaving will
+              vary as load-time weaving evolves.
+		  </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="aj11"></a>12 AspectJ 1.1 and eclipse.org</h3><div class="qandaentry"><div class="question"><p><a name="q:whyeclipse"></a><b>1. </b>Why did the AspectJ project move to eclipse.org?
+          </p></div><div class="answer"><p><a name="d0e2383"></a><b></b>From the message sent to users:
+          </p><p>
+            AspectJ has come a long way -- the language has
+            stabilized; there are a rapidly growing number of
+            commercial users; the 1.1 release is imminent and will
+            include byte-code weaving and incremental compilation;
+            and the tool support is now well integrated with several
+            major IDEs. 
+          </p><p>
+            This growth of the community and the technology means
+            that the original research and prototype development of
+            AspectJ is complete. As such it is time for ongoing
+            development and support of AspectJ to move outside of
+            PARC. This has already started to happen; the Eclipse
+            AJDT plug-in and the several books in preparation are
+            examples. 
+          </p><p>
+            To encourage the growth of the AspectJ technology and
+            community, PARC is transferring AspectJ to an
+            openly-developed eclipse.org project. This project will
+            include documentation, web site, mailing lists, bug
+            database, and sources for the compiler. The
+            command-line AspectJ compiler is still the primary tool
+            produced by this project, in addition to APIs that support
+            integration with a variety of IDEs. The Eclipse plug-in will
+            remain at eclipse.org, while the NetBeans, JBuilder and
+            Emacs support will move to SourceForge.net projects.
+            We look forward to your involvement with and
+            contribution to those projects. 
+          </p><p>
+            We see Eclipse as an excellent new home for core
+            AspectJ technology development -- it is an active
+            community of Open Source development and innovation
+            in the Java space. Once development moves to
+            Eclipse.org, others will be able to contribute more easily.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:eclipserequired"></a><b>2. </b>Do I have to download Eclipse to use AspectJ?
+          </p></div><div class="answer"><p><a name="d0e2398"></a><b></b>No.  The AspectJ tools download is completely self-contained
+                and does not require that you work in Eclipse.
+                For information on IDE support, see
+                 <a href="#q:integrateWithDevTools">Q: How well does AspectJ integrate with existing Java development tools?</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:eclipseetc"></a><b>3. </b>What are the relationships between AspectJ, JDT, 
+                Eclipse, AJDT, and IDE support generally?
+          </p></div><div class="answer"><p><a name="d0e2407"></a><b></b>Eclipse is a software platform.
+          </p><p>JDT is an eclipse project to support Java development.  
+			JDT has a Java compiler.
+          </p><p>AspectJ 1.1 is built on Eclipse/JDT's Java compiler
+                but is distributed standalone and can run standalone.
+                With the AspectJ distribution, you can compile and run
+                AspectJ programs and use the AspectJ structure browser.
+          </p><p>AJDT is an eclipse project to integrate AspectJ 
+		  into Eclipse/JDT so you can use Eclipse to develop 
+		  AspectJ programs.  AJDT aims to support the full Eclipse
+		  experience - searching, compiler-error tasks, etc.
+		  AJDT will use the AspectJ Development Environment (AJDE)
+		  API's for creating IDE integrations, as well as hooking
+		  in to the model underlying the Java compiler.
+          </p><p>Similarly, Sourceforge has projects integrating 
+          AspectJ into other development environments
+          using the AJDE API's: 
+          <a href="http://aspectj4emacs.sourceforge.net" target="_top">
+              AspectJ for Emacs</a>, 
+          <a href="http://aspectj4jbuildr.sourceforge.net" target="_top">
+              AspectJ for JBuilder</a>, and 
+          <a href="http://aspectj4netbean.sourceforge.net" target="_top">
+              AspectJ for NetBeans</a>.
+          </p><p>This is the right level of separation/integration.  
+          AspectJ is available standalone, leverages an existing open-source
+          compliant Java compiler, and supports external projects 
+          doing IDE integrations in Eclipse, Emacs, JBuilder, and NetBeans
+          through a common API, AJDE.
+          </p></div></div></div><div class="qandadiv"><div class="qandaentry"><div class="question"><p><a name="q:aspectj5features"></a><b>1. </b>
+            What are the new features of AspectJ 5?
+          </p></div><div class="answer"><p><a name="d0e2434"></a><b></b>
+                All the new features are documented in the 
+                <a href="adk15notebook/index.html" target="_top">
+              AspectJ 5 Developer's Notebook</a>
+                and the 
+                <a href="devguide/index.html" target="_top">
+              AspectJ Development Environment Guide</a>.
+                To summarize:
+            </p><div class="itemizedlist"><ul><li><p><a name="d0e2444"></a>
+                    Java 5 support: as an extension to Java, AspectJ supports
+                    all the new language features of Java 5, including generics
+                    (parameterized types), autoboxing, covariant return types,
+                    enhanced for-loops, enums, varargs, and of course 
+                    annotations.
+				</p></li><li><p><a name="d0e2447"></a>
+                    Java 5 extensions: the AspectJ language has been extended
+                    to make use of Java 5 language features.
+                    <div class="itemizedlist"><ul><li><p><a name="d0e2451"></a>
+                            Generic aspects: an abstract aspect can be declared
+                            with a generic type parameter which can be used 
+                            in pointcuts and when declaring members on the aspect
+                            (but not when declaring members on other types).
+        				</p></li><li><p><a name="d0e2454"></a>
+                            Annotations: pointcuts can now pick out join points
+                            based on the associated annotations, annotation
+                            values can be bound in the same way that other
+                            context variables are bound at the join point,
+                            and annotations may be declared on other types in
+                            an aspect.
+        				</p></li></ul></div>                    
+				</p></li><li><p><a name="d0e2458"></a>
+                    Annotation-style aspects: AspectJ 5 integrates AspectWerkz-style
+                    aspects declared in annotations.  This permits aspects to 
+                    be written and compiled in pure-java code and woven using
+                    build-time or load-time weaving with the AspectJ weaver.
+                    (The original AspectJ language aspects are distinguished
+                    as "code-style" aspects.)
+				</p></li><li><p><a name="d0e2461"></a>
+                    AspectWerkz load-time weaving: Load-time weaving is
+                    greatly improved for all versions of Java, and now supports
+                    an XML configuration file which can declare concrete aspects.
+                    This means developers can deploy binary abstract aspects
+                    that deployers configure using only XML.
+				</p></li><li><p><a name="d0e2464"></a>
+                    pertypewithin instantiation model: aspects may now be instantiated
+                    on a per-class basis.
+				</p></li><li><p><a name="d0e2467"></a>
+                    Reflection and runtime support: AspectJ 5 supports reflection
+                    on aspects using the Aspect class, and also support runtime
+                    evaluation of pointcuts using a pointcut parser.
+				</p></li></ul></div><p>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:codeversusannotationstyles"></a><b>2. </b>
+            Should I use code- or annotation-style aspects?
+          </p></div><div class="answer"><p><a name="d0e2476"></a><b></b>
+            To use AspectJ, you can use the original code-style aspects
+            or the annotation-style aspects new in AspectJ 5.  
+          </p><p>
+            The original code-style is a small extension of the Java language
+            designed to express crosscutting as clearly as possible
+            in ways familiar to most Java programmers.
+            To use the original code-style aspects,
+            compile them with the AspectJ compiler or weave
+            pre-compiled binary aspects using the AspectJ binary (.class)
+            weaver, either at build-time or at class-load-time.
+            Code-style aspects have excellent IDE support, allowing
+            you to navigate to and from affected source code.
+          </p><p>
+            Annotation-style
+            aspects are written (not surprisingly) using annotations.
+            They use the subset of the AspectJ language that works
+            when aspects are woven after the code is compiled.
+            The source files are compiled with Javac, which simply saves the 
+            annotations in the .class files.  The resulting .class files
+              must be woven using
+            the AspectJ weaver, which reads the annotations from the
+            .class file and uses them to define aspects.
+            Annotation-style aspects have the benefit of being compilable
+              by Javac, but you can't use the full AspectJ language,
+              and you don't enjoy the same level of IDE support
+              for viewing crosscutting structure.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:aspectj5ltw"></a><b>3. </b>
+            What's new about the load-time weaving support in AspectJ 5?
+          </p></div><div class="answer"><p><a name="d0e2487"></a><b></b>
+              While the AspectJ weaver could be used at load-time in previous
+              releases, the AspectJ 5 release supports much better integration
+              with the Java 5 VM and the BEA JRocket JVM.  It also supports
+              an XML file for configuration that allows deployers to declare
+              concrete aspects using only XML.  This means aspect developers
+              can write abstract aspects, and deployers need only configure
+              <tt>aop.xml</tt> and run using the AspectJ weaver in Java 5.  
+              For example, to run Java 5 VM with load-time weaving,
+          </p><pre class="programlisting">
+            
+java -javaagent:aspectjweaver.jar -classpath "aspects.jar:${CLASSPATH}" ..
+
+          </pre><p>
+              To declare a concrete aspect, add a a 
+              concrete-aspect XML entity to <tt>META-INF/aop.xml</tt>.
+              This example extends a tracing aspect to apply to 
+              every type in the application:
+          </p><pre class="programlisting">
+            
+&lt;concrete-aspect 
+    name="com.company.tracing.ConcreteTracing"
+    extends="tracing.AbstractTracing"&gt;
+    &lt;pointcut 
+        name="tracingScope" 
+        expression="within(com.company.app..*)"/&gt;
+&lt;/concrete-aspect&gt;                
+
+          </pre><p>
+                For more information, see the
+                <a href="devguide/index.html" target="_top">
+              AspectJ Development Environment Guide</a>.
+            </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="Technology"></a>14 Understanding AspectJ Technology</h3><div class="qandaentry"><div class="question"><p><a name="q:implementation"></a><b>1. </b>Do I need to know how the compiler or weaver works?
+          </p></div><div class="answer"><p><a name="d0e2514"></a><b></b>Writing AspectJ programs only requires understanding the
+          <a href="progguide/index.html" target="_top">Programming Guide</a>.
+          However, current implementations do not control everything in
+          a system, so AspectJ program semantics may be limited to code
+          the implementation controls.  For our implementation, these 
+          limitations are stated in 
+          <a href="progguide/implementation.html" target="_top">
+             Programming Guide Appendix:  Implementation Notes</a>.
+		  Aside from understanding the use and limitations of the 
+		  implementation, there is no need to understand the underlying 
+		  technology when writing AspectJ programs.
+          </p><p>
+          The technology that implements AspectJ interests 
+          some academic researchers and some developers 
+          who want new features or new ways to weave.
+          These extensions are not discussed in the documentation.
+          Some are being developed already,
+          others are on the drawing board (or perhaps were left off
+          long ago), and still others haven't been considered.
+		  If you are interested in a certain extension, 
+          check the bug database for feature requests
+          and the mailing list archives for any past discussions.
+		  Then email the list to see if it's been considered. 
+		  For more information, see
+		      <a href="#Developers">AspectJ Project Development</a>.     
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:whitepapers"></a><b>2. </b>How does the compiler/weaver work? Are there any white papers?
+          </p></div><div class="answer"><p><a name="d0e2531"></a><b></b>
+          There are currently no documents describing this process in detail.  
+          You can compile programs and inspect the generated source or bytecode,
+          or view the source code (see <a href="#Developers">AspectJ Project Development</a>).
+          We hope to write papers on the bytecode weaving model used in 
+          AspectJ-1.1 if we can find the time.
+          Erik Hilsdale and Jim Hugunin did draft a paper for AOSD 2004,
+          now available on Jim's web site:
+          <a href="http://hugunin.net/papers.html" target="_top">
+          	http://hugunin.net/papers.html</a>
+          Jim summarized advice weaving in the AspectJ 1.1 implementation in the
+          <a href="http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg00519.html" target="_top">
+          	following mailing-list reply</a>:
+          </p><p>
+			Each piece of advice in an aspect is associated with a pointcut.  
+			This pointcut is stored in an attribute on the methods 
+			corresponding to each piece of advice.  
+			Before weaving, all of these pieces of advice are gathered 
+			into one large list.
+          </p><p>
+			Each .class file is woven independently.  
+			A .class file is woven by the following steps:
+			<div class="itemizedlist"><ul><li><p><a name="d0e2547"></a>
+					Collect all of the joinpoint shadows in the .class file.  
+					For every dynamic joinpoint in the AspectJ language model, 
+					there is a corresponding static shadow of that joinpoint 
+					in the bytecode.  
+					For example, every method call joinpoint has an INVOKE 
+					bytecode as its static shadow.  Some joinpoints 
+					(such as initialization) have much more 
+					complicated static shadows.
+				</p></li><li><p><a name="d0e2550"></a>
+					Each piece of advice is matched to each static shadow.  
+					There are three results possible from this match.
+					<div class="itemizedlist"><ul><li><p><a name="d0e2554"></a>
+							Never matches,
+							in which case nothing is done to the shadow
+						</p></li><li><p><a name="d0e2557"></a>
+							Always matches, 
+							in which case the advice is woven into this joinpoint shadow
+						</p></li><li><p><a name="d0e2560"></a>
+							Sometimes matches,
+							in which case the advice is woven into the shadow 
+							along with the minimal dynamic tests to determine 
+							if any particular joinpoint in the actual running 
+							program matches the advice. 
+							The simplest example of sometimes matches is 
+							when the pointcut uses if(test()).
+						</p></li></ul></div>
+				</p></li><li><p><a name="d0e2564"></a>
+					If any advice matched any static shadows in the .class file, 
+					then the transformed .class file is written out, 
+					otherwise it is left unchanged.
+				</p></li></ul></div>
+		See <tt>BcelClassWeaver</tt> and 
+		<tt>BcelShadow</tt> in the
+		<tt>org.aspectj.weaver.bcel</tt> package
+		for the two primary classes involved in this process.
+
+		</p><p>
+			Note: This explanation ignores the implementations of inter-type 
+			declarations completely.  
+			It also ignores performance optimizations such as fast-match 
+			that speed up the weaving process.
+		</p></div></div><div class="qandaentry"><div class="question"><p><a name="q:reflection"></a><b>3. </b>Does AspectJ use reflection at runtime?
+          </p></div><div class="answer"><p><a name="d0e2583"></a><b></b>
+          The only time that reflection is used during run-time is when the special 
+          thisJoinPoint object is used to discover reflective information about the 
+          join point.  If you don't use thisJoinPoint then no reflection will be used.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:loadtimeWeaving"></a><b>4. </b>What about load-time weaving? Can I weave aspects at runtime?
+          </p></div><div class="answer"><p><a name="d0e2590"></a><b></b>
+          Since the 1.1 release, AspectJ can weave binary aspects
+          into classes in bytecode form.  Hooked up to a class loader,
+          this can weave class bytecodes after they are read in,
+          before the
+          class is defined by the VM.  (This means load-time weaving
+          only works were aspects are not required to compile the pure-java
+          classes.  If the aspects are required, then the Java classes
+          have to be compiled with the aspects using the AspectJ compiler.)
+              The AspectJ 1.2 release had the
+              WeavingURLClassLoader, and the 1.2.1 release introduced
+              the aj.bat script for Java 1.4.
+              The AspectJ 5 release introduces much better support for
+              load-time weaving, including declaring concrete aspects
+              in XML files and integrating with Java 5 and BEA JRocket
+              JVM's.  See <a href="#q:aspectj5ltw">Q:What's new about the load-time weaving support in AspectJ 5?</a>.
+          </p><p>Some have asked about only weaving particular classes 
+          specified at run-time.
+		  Aspects should work across an entire namespace, and problems 
+		  will likely result from weaving
+          some classes but not others.  Also, it's confusing to 
+          specify crosscutting both in the aspect and in the
+          list of runtime classes; the crosscutting specification
+          should be in the aspect itself,
+          where it can be processed by tools.
+          </p><p>And just to state the obvious:
+          do not use bytecode weaving, at load-time or otherwise,
+          to modify .class files protected by license,
+          without permission from the licensor.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="Developers"></a>15 AspectJ Project Development</h3><div class="qandaentry"><div class="question"><p><a name="q:howitworks"></a><b>1. </b>I'm interested in the code implementing AspectJ.
+          </p></div><div class="answer"><p><a name="d0e2606"></a><b></b>Most people do not need to see the code for AspectJ;
+          they can download the binary distribution for documentation
+          and tools for writing AspectJ programs.
+          </p><p>For people who want to know how the AspectJ technology works,
+          the source code is the best resource, until we write some 
+          proper white papers
+          (see <a href="#q:implementation">Q:Do I need to know how the compiler works?</a>).
+		  To get and compile the Java source code for the AspectJ 
+          distribution, see
+                 <a href="#q:buildingsource">Q:How do I get and compile the source code for AspectJ?</a>.
+		  </p><p>Bear in mind when looking at the code that there are many
+		  ways to implement the AspectJ language, and the code inspected
+		  might be an initial version of a new architecture (e.g., bytecode
+		  weaving).
+		  </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:contributions"></a><b>2. </b>How can I get involved with developing the AspectJ project?
+          </p></div><div class="answer"><p><a name="d0e2621"></a><b></b>For those who want to contribute to the project,
+          here's a general list of ways to do so, in no particular order:
+          <div class="itemizedlist"><ul><li><p><a name="d0e2625"></a>Participate effectively in the mailing lists.
+                 The quality of the mailing lists makes a huge difference
+                 in the ability of new and experienced AspectJ users
+                 to write good code.  For guidance on effective
+                 participation, see
+                 <a href="#q:talktousers">Q:How do I communicate with other AspectJ users?</a> and
+                 <a href="#q:writingbugsandemails">Q:How should I write email queries?</a>.
+                 Also, the time that experienced users take in answering emails
+                 can directly translate to time developers can use (instead)
+                 for fixing bugs or adding features.
+              </p></li><li><p><a name="d0e2632"></a>Write bugs.  Good bugs, especially with test cases, 
+              	are always appreciated.  We especially like proposals for
+              	new <tt>XLint</tt> messages, since they are
+              	sometimes easy to implement and help users learn
+              	AspectJ, and for other implementable features
+              	grounded in a compelling use-case.  
+              </p></li><li><p><a name="d0e2638"></a>Write test cases for compiler bugs without test cases.
+              Compiler bugs without test cases are much less likely to be fixed;
+              until they are rendered in code, they might be user mistakes,
+              and they might duplicate another bug or actually cover many bugs.
+              </p><p>Find them by searching open compiler bugs and picking out
+              any which do not have test case attachments or a comment that
+              a test case has been written.  
+              Here is a query for open compiler bugs:
+              
+              <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;component=Compiler&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED" target="_top">
+              http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;component=Compiler&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED
+              </a>
+              </p><p>For how to write test cases, see
+                 <a href="#q:harnesstestcases">Q:How should I submit test cases for bugs?</a>.
+              </p></li><li><p><a name="d0e2652"></a>Write patches to fix bugs.
+              If you particularly need a bug to be fixed, or if you're interested in 
+              learning about the system, then get the source code and try to fix the
+              bug.  Most likely you'll want to email aspectj-dev@eclipse.org to 
+              declare your intentions and the approach you propose (based on having
+              looked at the code).
+              Mailing the list gives those experienced with the code a chance to
+              guide you away from pitfalls.  To submit the patch, attach it to
+              the bug.  (When creating patches, do so on a per-module basis; that 
+              means if fixing the bug involves changes to three modules, submit
+              three patches.)
+              </p></li><li><p><a name="d0e2655"></a>Write patches for other reasons.
+              Often documentation needs to be fixed, or there may be a small new 
+              feature you'd like to see.  You can just do it and then submit it
+              as a patch to a bug you create.  As with bugs, in some cases you
+              might want to declare your intentions on the mailing list to avoid
+              wasting time on something that's been fixed but not committed or
+              on an approach that will be fruitless.
+              </p></li></ul></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:buildingsource"></a><b>3. </b>How do I get and compile the source code for AspectJ?
+          </p></div><div class="answer"><p><a name="d0e2663"></a><b></b>AspectJ 1.0 source code is available in an archive available 
+           with the 1.0 downloads.  It contains instructions for building
+           from sources.
+          </p><p>AspectJ 1.1+ source code is available through CVS using the 
+				CVS Root <tt>dev.eclipse.org:/cvsroot/tools</tt>. 
+				For more information on accessing the CVS tree at eclipse.org, 
+				see the documentation from <a href="http://eclipse.org" target="_top">http://eclipse.org</a>. Find 
+				specific instructions in the AspectJ tree at <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/org.aspectj/modules/build/readme-build-and-test-aspectj.html?rev=HEAD&amp;content-type=text/html&amp;cvsroot=Technology_Project" target="_top"> 
+				org.aspectj/modules/build/readme-build-and-test-aspectj.html</a>. 
+				If you would like to use Ant to checkout the sources, build the 
+				distribution, and test everything, see <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/org.aspectj/modules/build/release/build.xml?rev=HEAD&amp;content-type=text/xml&amp;cvsroot=Technology_Project" target="_top"> 
+				org.aspectj/modules/build/release/build.xml</a>. </p><p>
+          To check out the source code in Eclipse go to (<tt>File &gt; new &gt; Other &gt; CVS &gt; Checkout Projects from CVS</tt>). You'll need about 125 MB of space for the source and build.
+          	Host: <tt>dev.eclipse.org</tt>,
+          	Repository Path: <tt>/cvsroot/tools</tt>,
+          	user name: <tt>anonymous</tt>,
+          	password: (your email address),
+          	connection type: <tt>pserver</tt>,
+          	default port.
+			Then select the individual modules you want to check out (you probably want all of them bar aspectj-attic and java5) and click Next and choose to check out the modules you selected as Java projects.
+			Once thats done each module you checked out should show up as a project in the package explorer.
+			If you have problems after this point you can view the build instructions that come with AspectJ by going in the package explorer to: <tt>build &gt; readme-build-and-test-aspectj.html</tt>.
+          </p><p>
+            To get the modules to build you have to set some classpath variables (<tt>Window &gt; Preferences &gt; Java &gt; Build Path &gt; Classpath Variables</tt>):
+          </p><p>
+		  <div class="itemizedlist"><ul><li><p><a name="d0e2708"></a>
+			Name: <tt>JAVA_HOME</tt>, Value: (wherever your Java JDK is installed)
+			</p></li><li><p><a name="d0e2714"></a>
+			Name: <tt>JRE14_LIB</tt>, Value: (wherever your Java 4 Runtime is installed)<tt>\jre\lib\rt.jar</tt>
+			</p></li><li><p><a name="d0e2723"></a>
+			Name: <tt>JRE15_LIB</tt>, Value: (wherever your Java 5 Runtime is installed)<tt>\jre\lib\rt.jar</tt>
+			</p></li><li><p><a name="d0e2732"></a>
+			Name: <tt>ASPECTJRT_LIB</tt>, Value: (wherever your workspace is)<tt>\lib\aspectj\lib\aspectjrt.jar</tt>. To find out where your workspace is go to <tt>File &gt; Switch Workspace</tt>.
+			</p></li></ul></div>
+		  </p><p>
+		  The <tt>org.aspectj.lib</tt> project is an AspectJ project so 
+          you also have to have AJDT installed. For the latest AJDT release and
+          download instructions visit the
+		  <a href="http://www.eclipse.org/ajdt/downloads/" target="_top">AJDT Downloads</a> page.
+		  </p><p>
+			When you've added the variables click OK to do a full rebuild, then run the tests by going in the Package Explorer to:
+			<tt>run-all-junit-tests &gt; testsrc &gt; (default package) &gt; RunTheseBeforeYouCommitTests.java</tt>
+			and running this as a JUnit test (right click and select <tt>Run As &gt; JUnit Test</tt>).
+			Don't worry about any errors that appear in the console output,
+			just check that there are no failures in the JUnit view (<tt>Window &gt; Show View &gt; Other &gt; Java &gt; JUnit</tt>).
+			If that finishes with no Failures and a full green bar you have the AspectJ compiler source and it's building and testing properly.
+			</p><p>
+          Further details:
+			</p><p>                             
+          You can check out the entire modules directory and build using the
+          Ant build script <tt>modules/build/build.xml</tt>.
+          All required libraries are included in <tt>modules/lib/</tt>,
+          (including Ant 1.5.1 in <tt>modules/lib/ant</tt>).
+          If you are using Eclipse, you can check out any <tt>modules/</tt> 
+          subdirectory as an eclipse Java project.  
+          Depending on what you are trying to build, you need not check out
+          all modules; as of this writing, here are the modules to get 
+          for building the specific parts of AspectJ:
+          </p><p>
+          <div class="itemizedlist"><ul><li><p><a name="d0e2783"></a>For any builds: build, lib
+            </p></li><li><p><a name="d0e2786"></a>For the documentation: docs
+            </p></li><li><p><a name="d0e2789"></a>For the compiler: bridge, util, testing-util,
+            weaver, asm, org.eclipse.jdt.core, org.aspectj.ajdt.core,
+            and runtime.
+            </p></li><li><p><a name="d0e2792"></a>For ajbrowser: the compiler modules, plus
+            ajbrowser, ajdoc, taskdefs, and ajde.
+            </p></li><li><p><a name="d0e2795"></a>For the AspectJ distribution, the ajbrowser modules, 
+				plus aspectj5rt and org.aspectj.lib.
+            </p></li><li><p><a name="d0e2798"></a>For the test harness (or to run the release build
+				scripts and tests): the ajbrowser modules, plus
+            testing, testing-client, and testing-drivers.
+            </p></li><li><p><a name="d0e2801"></a>To run the test suite: the test harness modules, plus
+            tests.
+            </p></li></ul></div>
+          </p><p>
+          Note that module interdependencies are recorded only in the eclipse 
+          <tt>modules/{module}/.classpath
+          </tt>
+           files and may
+          change, so the list above may not be correct when you read it.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:buildingAspectJAndAJDT"></a><b>4. </b>How do I build AspectJ and integrate it into AJDT?
+          </p></div><div class="answer"><p><a name="d0e2814"></a><b></b>To build AspectJ, first get the source tree as
+          described in <a href="#q:buildingsource">Q:How do I get and compile the source code for AspectJ?</a>. Once you have
+          a development environment set up, copy the 
+          <tt>build/sample-local.properties</tt> file
+          to <tt>build/local.properties</tt> and within this file point the 
+          <tt>java14.home</tt> and <tt>java15.home</tt>
+          to the corresponding places on your machine.
+          </p><p>
+             To build AspectJ on the command line:
+          </p><p>
+		  <div class="itemizedlist"><ul><li><p><a name="d0e2836"></a>
+			Open a command prompt
+			</p></li><li><p><a name="d0e2839"></a>
+			Navigate to the <tt>build</tt> directory within your AspectJ workspace 
+			(to find out where your workspace is go to <tt>File &gt; 
+			Switch Workspace</tt> within Eclipse).
+			</p></li><li><p><a name="d0e2848"></a>
+			Run <tt>ant clean</tt> to remove the files from 
+			previously built AspectJ versions. 
+			</p></li><li><p><a name="d0e2854"></a>
+			Run <tt>ant</tt> to build AspectJ. The built files are created in 
+			<tt>your_eclipse_installation_directory/aspectj_development_workspace/aj-build</tt>.
+			</p></li></ul></div>
+		  </p><p>
+			To import a locally built AspectJ into AJDT first follow the
+			instructions on <a href="http://www.eclipse.org/ajdt/faq.php#q:develop" target="_top">
+			How do I setup an AJDT development environment in Eclipse?</a>
+			for setting up an AJDT development environment and running the 
+			correctness tests. Then:
+			</p><p>
+		  <div class="itemizedlist"><ul><li><p><a name="d0e2872"></a>
+			Create a file <tt>aspectjlib.properties</tt> within 
+			the <tt>org.aspectj.ajde</tt> project and add the following two lines
+			<pre class="programlisting">
+aspectj.lib.dir=C:/eclipse/aspectj-workspace/aj-build/dist/tools/lib
+aspectj.doc.dir=C:/eclipse/aspectj-workspace/aj-build/dist/ide/eclipse/org.aspectj.ajde.doc/doc
+			</pre>
+  			making sure to change the path to correspond to your set up.
+			</p></li><li><p><a name="d0e2884"></a>
+			Run the <tt>build.xml</tt> file in <tt>org.aspectj.ajde</tt> 
+			with the <tt>plugin jars</tt> target:
+			<div class="itemizedlist"><ul><li><p><a name="d0e2897"></a>
+	 			Right click on the <tt>build.xml</tt> file in the 
+	 			<tt>org.aspectj.ajde</tt> plugin
+	 			</p></li><li><p><a name="d0e2906"></a>
+				Select <tt>Run As &gt; Ant build...</tt>
+				</p></li><li><p><a name="d0e2912"></a>
+				In the resultant dialog navigate to the <tt>Targets</tt> tab
+				</p></li><li><p><a name="d0e2918"></a>
+				Ensure <tt>plugin jars</tt> is the only selected target
+				</p></li><li><p><a name="d0e2924"></a>
+				Click <tt>Run</tt>
+				</p></li></ul></div>	
+			</p></li><li><p><a name="d0e2931"></a>
+			Refresh the <tt>org.aspectj.ajde, org.aspectj.runtime</tt> 
+			and <tt>org.aspectj.weaver</tt> plugins.
+			</p></li></ul></div>
+		  </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:devDocs"></a><b>5. </b>Where do I find developer documentation on building and testing AspectJ source code?
+          </p></div><div class="answer"><p><a name="d0e2945"></a><b></b>Find the developer documentation in HTML files in the CVS tree,
+          inside the <tt>build</tt> and <tt>testing</tt> modules 
+          (i.e., in <tt>org.aspectj/modules/build/...</tt>).
+          Most pertinant:          
+            <div class="itemizedlist"><ul><li><p><a name="d0e2958"></a>
+              	<tt>../build/readme-build-and-test-aspectj.html</tt>
+                  describes how to build the AspectJ distribution in Eclipse
+                  and in Ant.
+              </p></li><li><p><a name="d0e2964"></a><tt>../build/readme-docs-module.html</tt>
+                  describes the AspectJ documentation sources and
+                  how to build the documentation using Ant.
+              </p></li><li><p><a name="d0e2969"></a><tt>../build/readme-tests-module.html</tt>
+                  describes the all the tests 
+                  in the <tt>tests</tt> module.
+              </p></li><li><p><a name="d0e2977"></a><tt>../build/readme-writing-compiler-tests.html</tt>
+                  describes how to write compiler tests that can be run by
+                  the AspectJ test harness.
+              </p></li><li><p><a name="d0e2982"></a><tt>../build/readme-testing-drivers-module.html</tt>
+                  describes the test harness used to run the compiler tests
+                  in the <tt>tests</tt> module.
+              </p></li><li><p><a name="d0e2990"></a><tt>../build/readme-testing-drivers-module.html</tt>
+                  describes the test harness used to run the compiler tests
+                  in the <tt>testing</tt> module.
+              </p></li></ul></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:harnesstestcases"></a><b>6. </b>How should I submit test cases for bugs?
+          </p></div><div class="answer"><p><a name="d0e3003"></a><b></b>You can attach files to a bug after it has been created.
+          The code of course should replicate the actual behavior
+          described in the bug when run on the target version.
+          If you have a single source file, you can attach it directly,
+          describing in the comments the expected result
+          (e.g., error on line 14, or successful compile/run).
+          The most helpful form for describing the test scenario
+          and the expected results are the test definitions
+          described next.
+          </p><p>For more complex bugs requiring many files, 
+          create a zip file of a directory containing all the files
+          and an XML test definition file.  
+          The XML test definition file contains specifications
+          for how to compile, recompile, or run the test sources.
+          Complete documentation is available in the CVS tree
+          at <tt>tests/readme-writing-compiler-tests.html</tt>
+          but here is a sample file with some example definitions,
+          preceded by comments showing the directory layout
+          of the files referred to in the test definitions.
+          </p><p>
+          <pre class="programlisting">
+
+&lt;!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"&gt;
+&lt;suite&gt;
+
+&lt;!-- Compile and run
+     using the following files:
+
+       {testDefinitions}.xml
+       one/
+         pack1/
+           Main.java
+         p2/
+           BeforeConstructor.java
+
+    Note the bug number goes in the pr attribute.
+    ("pr" stands for "problem report")
+ --&gt;
+&lt;ajc-test dir="one" pr="234" title="before constructor call"&gt;
+    &lt;compile files="pack1/Main.java,p2/BeforeConstructor.java"/&gt;
+    &lt;run class="pack1.Main"/&gt;
+&lt;/ajc-test&gt;
+
+&lt;!-- Check that compiler warning was emitted 
+     using the following files:
+
+       {testDefinitions}.xml
+       two/
+         UsesDeprecated.java
+ --&gt;
+&lt;ajc-test dir="two" pr="244" title="deprecated, noImportError"&gt;
+    &lt;compile options="-warn:deprecated,-noImportError" 
+          files="UsesDeprecated.java"&gt;
+        &lt;message kind="warning" line="20"/&gt;
+    &lt;/compile&gt;
+&lt;/ajc-test&gt;
+
+&lt;!-- Cooked example that uses all compiler attributes 
+     and the following files:
+       {testDefinitions}.xml
+       testCaseDir/
+         jars/
+           injar.jar
+           required.jar
+           requiredAspects.jar
+         pack/
+           Main.java
+         providedClassesDir/
+           ClassInDefaultPackage.class
+           org/
+             foo/
+               AnotherRequired.class
+  --&gt;
+&lt;ajc-test dir="testCaseDir" title="attributes test"&gt;
+    &lt;compile files="pack/Main.java,jars/injar.jar" 
+           staging="true"
+           options="-Xlint,-g:none"
+          argfiles="debug.lst,aspects/test.lst"
+        aspectpath="jars/requiredAspects.jar"
+         classpath="providedClassesDir,jars/required.jar"/&gt;
+    &lt;run class="Main"/&gt;
+&lt;/ajc-test&gt;
+
+&lt;!-- Compiler errors, recompile after changing files, and run
+     using the following files:
+
+       {testDefinitions}.xml
+       three/
+         pack/
+           IncCompileFix.java
+           IncCompileFix.20.java
+
+     Before compiling, IncCompileFix.java is copied to a staging
+     directory.  Before recompiling, IncCompileFix.20.java 
+     replaces it, so the compiler treats file as updated.
+  --&gt;
+&lt;ajc-test dir="three" pr="622" title="incremental fix"&gt;
+    &lt;compile staging="true" files="pack/IncCompileFix.java"&gt;
+        &lt;message kind="error" line="20"/&gt;
+        &lt;message kind="error" line="42"/&gt;
+    &lt;/compile&gt;
+    &lt;inc-compile tag="20"/&gt;
+    &lt;run class="pack.IncCompileFix"/&gt;
+&lt;/ajc-test&gt;
+
+&lt;/suite&gt;
+
+          </pre>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:testharness"></a><b>7. </b>I'd like to run my test case.  How do I get the test harness?
+          </p></div><div class="answer"><p><a name="d0e3020"></a><b></b>The test harness is not distributed.
+          To build it, get the source tree as
+          described in <a href="#q:buildingsource">Q:How do I get and compile the source code for AspectJ?</a> and then
+          build the <tt>build-testing-drivers</tt> target:
+          <pre class="programlisting">
+  cd build
+  ../lib/ant/bin/ant -f build.xml build-testing-drivers
+          </pre>
+          This produces 
+          <tt>../aj-build/jars/testing-drivers-all.jar</tt>
+          which you can run as described in
+          <tt>tests/readme-tests-module.html</tt>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:bcel"></a><b>8. </b>BCEL is used by AspectJ but it's not actively developed.  Will you change?
+          </p></div><div class="answer"><p><a name="d0e3041"></a><b></b>The AspectJ bytecode weaver has used BCEL for bytecode manipulation
+			  since its first release.  We have upgraded it extensively, to improve 
+			  performance, support Java 5, etc.  The BCEL developers have not
+			  incorporated our patches, so we continue to maintain our own version.
+			  Ours has been optimized for the AspectJ weaver and battle-hardened 
+			  over years of development and use.  At some point in the future,
+			  the AspectJ weaver might be restructured to make it easy to see 
+			  whether another bytecode package offers the same stability, 
+			  functionality, and performance, but for now we prefer using something
+			  that we know works well.
+          </p><p>
+			  In the AspectJ 5 release, the weaver has been restructured to
+			  use reflection where possible.  Otherwise, it
+			  continues to use BCEL, but does not hold BCEL structures in
+			  memory after our evaluation completes.
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="help"></a>16 Getting Help</h3><div class="qandaentry"><div class="question"><p><a name="q:moreaboutaj"></a><b>1. </b>
+            How do I find out more about AspectJ?
+          </p></div><div class="answer"><p><a name="d0e3053"></a><b></b>Visit the AspectJ project web site:
+            <a href="http://eclipse.org/aspectj" target="_top">http://eclipse.org/aspectj</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:bugreports"></a><b>2. </b>How do I submit a bug report?</p></div><div class="answer"><p><a name="d0e3063"></a><b></b>You can submit a bug from 
+              <a href="http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ" target="_top">
+                          http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
+              </a>.
+            If it seems to be a bug in the compiler,
+            please attach a small test case (source code) 
+            to reproduce the problem.
+            For more information on writing compiler test cases, see
+            <a href="#q:ajcbugs">Q:How do I write bugs for the AspectJ compiler?</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:talktousers"></a><b>3. </b>
+            How do I communicate with other AspectJ users?
+          </p></div><div class="answer"><p><a name="d0e3075"></a><b></b>You can reach other AspectJ users by using the
+            aspectj-users mailing list.  You can subscribe to the list or view the
+            list archives from the AspectJ home page
+            <a href="http://eclipse.org/aspectj" target="_top">
+              http://eclipse.org/aspectj
+            </a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:searchingsite"></a><b>4. </b>
+            How can I search the email archives or the web site?
+          </p></div><div class="answer"><p><a name="d0e3085"></a><b></b>
+			It is very effective to do a google search of the form,
+            <a href="http://www.google.com/search?q=site:eclipse.org+cflowbelow" target="_top">
+              http://www.google.com/search?q=site:eclipse.org+cflowbelow
+            </a>,
+    		and you can use the eclipse.org search at
+            <a href="http://www.eclipse.org/search/search.cgi" target="_top">
+              http://www.eclipse.org/search/search.cgi
+            </a>.
+		    You can also check the old archives available for download from
+    		the AspectJ home page
+    		<a href="http://eclipse.org/aspectj" target="_top">
+              http://eclipse.org/aspectj
+            </a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:writingbugsandemails"></a><b>5. </b>
+            How should I write email queries?
+          </p></div><div class="answer"><p><a name="d0e3101"></a><b></b>Here's the general form of a good email:
+              </p><div class="orderedlist"><ol type="1"><li><p><a name="d0e3105"></a>
+                Describe the big picture of what you are trying to do...
+              </p></li><li><p><a name="d0e3108"></a>
+  	Describe what you think it takes, in AspectJ terms
+  	(concepts, syntax, and semantics) from the 
+            <a href="progguide/index.html" target="_top">Programming Guide</a>...
+              </p></li><li><p><a name="d0e3114"></a>
+	Show the AspectJ code you are using, what output it
+  	produces when run, and what output you expect...
+              </p></li></ol></div><p>
+	The big picture helps others redirect you to other approaches.
+	Using AspectJ terms helps others correct mistakes in thinking
+	about the problem (the most common being to confuse join points
+	and pointcuts).
+           The code is key to clarifying your question and getting a good
+           response.  On the mail list, someone can reply by fixing your 
+           code.  In bugs, the developers can reproduce the problem immediately
+           and start analyzing the fix.
+           The code should not be incomplete; it should run (or fail) as-is,
+           without additional libraries or source files.
+          </p><p>
+             For the mail lists, we try to follow the conventions for open-source
+             discussions that help avoid "the tragedy of the commons." 
+             For example conventions, see
+            <a href="http://jakarta.apache.org/site/mail.html" target="_top">
+              http://jakarta.apache.org/site/mail.html
+            </a> and
+            <a href="http://www.tuxedo.org/%7Eesr/faqs/smart-questions.html" target="_top">
+              http://www.tuxedo.org/%7Eesr/faqs/smart-questions.html
+            </a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:idebugs"></a><b>6. </b>
+            How do I write bugs for IDE support?
+          </p></div><div class="answer"><p><a name="d0e3131"></a><b></b>
+          Bugs appearing in the IDE's may apply to the affected IDE
+          or to the compiler.  Compiler stack traces in IDE message windows
+          are prefixed "Internal Compiler Error" and should be written up
+          as compiler bugs.  If you are unsure, try redoing the compile
+          from the command line.
+          </p><p>
+          Bug report for the IDE extensions go to their respective projects,
+          listed in
+             <a href="#q:integrateWithDevTools">Q: How well does AspectJ integrate with existing Java development tools?</a>
+          (including bug reports for the AJDE Eclipse support,
+          which you can submit at
+            <a href="http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AJDT" target="_top">
+                        http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AJDT
+            </a>).
+          </p><p>
+        Bug reports on ajbrowser should have version
+	information for both Java and AspectJ, and
+	(most importantly) clear steps for reproducing the bug.  
+        You may submit ajbrowser bugs against the IDE component of AspectJ 
+        via the web form 
+            <a href="http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ" target="_top">
+                        http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
+            </a>.
+          </p><p>
+	One of the benefits of open-source is that you can
+	find and fix the bug for yourself; when you submit
+	the fix back to us, we can validate the fix for you
+	and incorporate it into the next release.  
+    You can submit a patch by attaching it to the bug.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:ajcbugs"></a><b>7. </b>
+            How do I write bugs for the AspectJ compiler?
+          </p></div><div class="answer"><p><a name="d0e3152"></a><b></b>
+	The best compiler bug report is a reproducible test case, 
+	standalone code that demonstrates the problem.
+	Sometimes with aspects, a test case requires several 
+	files, if not some way to capture the behavior.
+	Here's how we recommend submitting test cases:
+            <div class="orderedlist"><ol type="1"><li><p><a name="d0e3156"></a>
+	Write the test case so that when the compiler bug 
+  	is fixed, the test completes normally without output
+  	(e.g., expected compiler errors are issued,
+   	or classes produced run correctly).  This usually
+    means writing one or more source files.
+                </p></li><li><p><a name="d0e3159"></a>
+	In the bug report, briefly summarize the bug.
+	If it is not obvious, be sure to specify 
+	the expected output/behavior (e.g., compiler error on line 32)
+	and, if the compile should complete, the main class to run.
+                </p></li><li><p><a name="d0e3162"></a>
+	Submit the bugs via the web form 
+            <a href="http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ" target="_top">
+                        http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
+            </a>.
+                </p></li><li><p><a name="d0e3168"></a>Attach the test case to the bug.
+                The test case may be a single file
+                or it may be multiple files in a single zip archive,
+                of the form discussed in
+                <a href="#q:harnesstestcases">Q:How should I submit test cases for bugs?</a>.
+                </p></li></ol></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:teachingmaterials"></a><b>8. </b>
+            Can you recommend reading or teaching material for AspectJ?
+          </p></div><div class="answer"><p><a name="d0e3178"></a><b></b>The documentation available in the distribution is the 
+          best source for language and usage questions.  You can also find
+          selected AspectJ papers and presentations on the 
+          <a href="http://www.parc.com/groups/csl/projects/aspectj/index.html" target="_top">
+                            PARC AspectJ page</a>.
+          For links to Aspect-oriented programming materials in general, see
+          <a href="http://aosd.net" target="_top">http://aosd.net</a>.</p>
+          <p>See also a <a href="/aspectj/teaching.php">list of AOSD courses.</a>
+          
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:consulting"></a><b>9. </b>
+            Where can our group get consulting and support?
+          </p></div><div class="answer"><p><a name="d0e3191"></a><b></b>The best thing to to is join and email the
+           <tt>aspectj-dev@eclipse.org</tt> mailing list.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:faqchanges"></a><b>10. </b>
+            What has changed since the last FAQ version?
+          </p></div><div class="answer"><p><a name="d0e3201"></a><b></b>
+          Entries changed recently:
+            <div class="itemizedlist"><ul><li><p><a name="d0e3205"></a><a href="#q:runtimeMemory">Q:What extra memory is required at runtime?</a></p></li><li><p><a name="d0e3208"></a><a href="#q:ajcoom">Q:The AspectJ compiler aborts with an OutOfMemoryError when compiling many classes. How can I fix this?</a></p></li><li><p><a name="d0e3211"></a><a href="#q:howIncrementalWorks">Q: How does incremental mode work?</a></p></li><li><p><a name="d0e3214"></a><a href="#q:compilerRequired">Q:Do I have to use the AspectJ compiler?</a></p></li><li><p><a name="d0e3217"></a><a href="#q:aspectj5features">Q:What are the new features of AspectJ 5?</a></p></li><li><p><a name="d0e3220"></a><a href="#q:codeversusannotationstyles">Q:Should I use code- or annotation-style aspects?</a></p></li><li><p><a name="d0e3223"></a><a href="#q:aspectj5ltw">Q:What's new about the load-time weaving support in AspectJ 5?</a></p></li><li><p><a name="d0e3226"></a><a href="#q:versionCompatibility">Q:Will AspectJ aspects work with different versions of the compiler/weaver and runtime?</a></p></li><li><p><a name="d0e3229"></a><a href="#q:bcel">Q:BCEL is used by AspectJ but it's not actively developed.  Will you change?</a></p></li><li><p><a name="d0e3232"></a><a href="#q:reflectiveCalls">Q:Why doesn't AspectJ pick out reflective calls?</a></p></li><li><p><a name="d0e3235"></a><a href="#q:java5">Q:Will AspectJ support Java 5?</a></p></li><li><p><a name="d0e3238"></a><a href="#q:dynamicaop">Q:How does AspectJ compare with more dynamic AOP?</a></p></li><li><p><a name="d0e3241"></a><a href="#q:buildingsource">Q:How do I get and compile the source code for AspectJ?</a></p></li><li><p><a name="d0e3244"></a><a href="#q:buildingAspectJAndAJDT">Q:How do I build AspectJ and integrate it into AJDT?</a></p></li></ul></div>
+          </p></div></div></div><div class="qandadiv"><h3 class="title"><a name="project"></a>17 About the AspectJ Project</h3><div class="qandaentry"><div class="question"><p><a name="q:opensource"></a><b>1. </b>What does the fact that AspectJ is an Open Source
+            Project mean to me?
+          </p></div><div class="answer"><p><a name="d0e3255"></a><b></b>Open source protects your interest in a correct, long-lived,
+		up-to-date, and widely-accepted implementation of AspectJ.
+            <div class="itemizedlist"><ul><li><p><a name="d0e3259"></a>With the source code, you control your own destiny
+                in perpetuity.  You can continue to use the implementation
+		and update it as necessary to fix bugs and add things you need.
+                </p></li><li><p><a name="d0e3262"></a>Because the code is available to all, anyone can find
+		and fix bugs.  There is no need to hope for it to be fixed
+		in the next product release.  Those who encounter the bugs
+		are motivated to fix them, and there are more eyeballs on 
+		the code than in closed-source, so the quality tends to be high.
+		This can be particularly true for the AspectJ community,
+		which tends to be highly skilled.
+                </p></li><li><p><a name="d0e3265"></a>The same is true of new features or behavior, so the
+		implementation should be up-to-date.  This is important as
+		the field of AOP develops, to capture the latest solutions.
+                </p></li><li><p><a name="d0e3268"></a>For a programming language which forms the basis of 
+		an entire solution stack, open source facilitates the kind
+		of adoption -- tool integrations and significant projects --
+		that develop and prove the technology for wider adoption.  This 
+		limits delays caused by waiting for the completion of standards 
+		process or promulgation by industry leaders, and also provides
+	        the proofs necessary for such adoption.
+                </p></li></ul></div>
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:standardization"></a><b>2. </b>What are your plans to make AspectJ a general feature
+            of Java supported by Sun and the other key players in the Java
+            Industry?
+          </p></div><div class="answer"><p><a name="d0e3276"></a><b></b>Although we are committed to making AspectJ available to a wide
+            range of users, it is too early to decide on a strategy. Some
+            options include continuing AspectJ as a stand-alone product,
+            integrating it into IDEs, or possibly incorporating it into
+            standard Java with Sun's blessing.
+          </p><p>We currently focus on developing for the 1.1 implementation 
+            which improves AspectJ in key areas: rapid
+            incremental compilation, bytecode weaving, and IDE integration.
+          </p><p>Through all of this our goal is to make AspectJ integrate as
+            seamlessly as possible with the Java programming language. The
+            AspectJ language design is becoming more integrated, the compiler
+            is becoming faster and more integrated, the IDE extensions are
+            becoming more integrated. All of this is designed to help users
+            really use AspectJ and give us feedback on it.
+          </p><p>As the system is improved and we work more closely
+            with users, we will be in good position to explore the best path
+            for AspectJ in the long term.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:bytecodeweaving"></a><b>3. </b>When will AspectJ work from class files?
+	        When will it work at class-loading time?
+          </p></div><div class="answer"><p><a name="d0e3289"></a><b></b>Bytecode weaving is in AspectJ 1.1.  We believe it
+	   works as described in an email to the users list by Jim Hugugin:
+          </p><p>
+              The AspectJ language was designed to support weaving at many different times: 
+              compile, load, or even run-time in the JVM.  Weaving into bytecodes at both 
+              compile and load-time will definitely be provided in a future release.  This 
+              will allow weaving at compile-time into libraries for which source code is 
+              not available.  It will also support aspect-aware class loaders that can 
+              perform weaving at load time on arbitrary classes.  One advantage of a 
+              language like AspectJ, rather than an explicit meta-tool like jiapi, is 
+              that it separates the specification of a crosscutting concern from any 
+              particular implementation strategy for weaving.
+          </p><p>
+              ...AspectJ provides a language that can cleanly 
+              capture crosscutting concerns while preserving the static type checking, 
+              modularity, and composability of Java.
+          </p><p>If you have an application for using aspects and bytecode, 
+              please let the AspectJ team know of your requirements.
+              We expect to have a demonstration classloader available in
+              the 1.1 release or soon thereafter.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:differences"></a><b>4. </b>What are the differences between the current and
+            previously released versions of AspectJ?
+          </p></div><div class="answer"><p><a name="d0e3302"></a><b></b>The AspectJ team aims to keep the implementation bug-free and 
+	  	up-to-date with the Java language, 
+	 	to limit AspectJ language changes to those that 
+		are carefully considered, compelling, and backwards-compatible,
+		and to deliver those language changes only in significant releases (1.0, 1.1).
+	  </p><div class="table"><p><a name="d0e3305"></a><b>Table 2. </b></p><table summary="" border="1"><colgroup><col><col></colgroup><tbody><tr><td align="left">Version</td><td align="left">Description</td></tr><tr><td>AspectJ 1.5</td><td>Upgrade to support Java 5 language and much better
+                      load-time weaving.
+                  	See <a href="README-150.html" target="_top">README-150.html</a>
+                  	for more details.
+                  </td></tr><tr><td>AspectJ 1.1</td><td>A few language changes and clarifications;
+                  	bytecode weaving and incremental compilation.
+                  	See <a href="README-11.html" target="_top">README-11.html</a>
+                  	for more detail.
+                  </td></tr><tr><td>AspectJ 1.0</td><td>Many language changes, fixes, cleanup and
+                    clarifications, some significant.
+                  </td></tr><tr><td>AspectJ 0.8</td><td>More cleanup of the syntax and semantics.</td></tr><tr><td>AspectJ 0.7</td><td>Clean up of the semantics, 0.7 beta 4 is the first
+                    open source release.
+                  </td></tr><tr><td>AspectJ 0.6</td><td>Advice and crosscuts get explicit type signatures
+                    which describe the values that are available to advice at a
+                    crosscut.
+                  </td></tr><tr><td>AspectJ 0.5</td><td>Improved tool support: better Emacs environment
+                    support and <tt>ajdoc</tt> to parallel
+                    <tt>javadoc</tt>. around advice is added, and the
+                    <tt>aspect</tt> keyword is removed and replaced
+                    by the Java keyword class.
+                  </td></tr><tr><td>AspectJ 0.4</td><td>Clear separation of crosscuts and crosscut actions
+                    makes it possible to define extensible library
+                    aspects.
+                  </td></tr><tr><td>AspectJ 0.3</td><td>First all Java implementation, also includes many
+                    small language improvements.
+                  </td></tr><tr><td>AspectJ 0.2</td><td>General-purpose support for crosscutting. Users could
+                    program any kind of aspects, not just coordination. This
+                    release dropped COOL.
+                  </td></tr><tr><td>AspectJ 0.1</td><td>A single domain-specific aspect language, called COOL,
+                    for programming coordination in multi-threaded
+                    programs.
+                  </td></tr></tbody></table></div><p> More details for 1.0 and earlier releases are available in 
+            <a href="changes.html" target="_top">changes.html</a>.
+          </p></div></div><div class="qandaentry"><div class="question"><p><a name="q:schedule"></a><b>5. </b>
+            What is the AspectJ development schedule?
+          </p></div><div class="answer"><p><a name="d0e3393"></a><b></b>
+            Below is a table describing the goals for the major releases.
+            For information about specific features, search the bug database
+            for <tt>RFE</tt>'s ("requests for enhancement") by
+            <a href="http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&amp;bug_severity=enhancement" target="_top">
+            	selecting severity of "enhancement"</a>.
+     
+            Like many open-source projects, we don't make or promise
+            schedules, but we do follow a pattern of issuing preview releases 
+            which can give observers an idea of when
+            a particular release might be available.
+          </p><div class="table"><p><a name="d0e3402"></a><b>Table 3. The AspectJ Development Schedule</b></p><table summary="The AspectJ Development Schedule" border="1"><colgroup><col><col></colgroup><tbody><tr><td align="left">Version</td><td align="left">Description</td></tr><tr><td align="center" valign="top">1.0</td><td>Final syntax and semantic changes. Standalone structure
+                    browser. Complete documentation.
+                  </td></tr><tr><td align="center" valign="top">1.1</td><td>Faster incremental compilation, bytecode weaving,
+	                 and a small number of language changes.</td></tr><tr><td align="center" valign="top">1.2</td><td>Faster weaving, -inpath option, better error messages,
+                  better handling of binary input and resources
+                  during incremental compilation, faster runtime
+                  </td></tr><tr><td align="center" valign="top">1.5 (AspectJ 5)</td><td>Support for Java 1.5, generic aspects,
+                      annotations, etc.  Integrates AspectWerkz-style
+                      load-time weaving.
+                  </td></tr></tbody></table></div></div></div><div class="qandaentry"><div class="question"><p><a name="q:java5"></a><b>6. </b>
+            Will AspectJ support Java 5?
+          </p></div><div class="answer"><p><a name="d0e3436"></a><b></b>
+          Yes.  Java 5 is supported in AspectJ 5.
+          </p></div></div></div></div><p>AspectJ is a registered trademark of Palo Alto Research Center, Incorporated (PARC),
+  	used with permission.
+	Java and all Java-based marks are trademarks or registered trademarks of
+    Sun Microsystems, Inc. in the United States and other countries. All other
+    trademarks are the property of their respective owners.
+  </p>
+
+	</div>
+
+</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/docs.php b/docs.php
index 703d88d..cf51a4f 100644
--- a/docs.php
+++ b/docs.php
@@ -1,41 +1,55 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>The AspectJ project at Eclipse.org: Documentation</title>
-  <link rel="stylesheet" href="aspectj_style.css" type="text/css" />
-</head>
-<body>
-<div id="container">
-<?php require("banner.html"); ?>
-  <!-- ================ Page specific content starts here ================ -->
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
 
-<!-- sub-banner for docs page -->
-<table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" >
-  <!-- header row -->
-  <tr> 
-    <td ALIGN=LEFT width="60%" valign="top">
-      <h1>aspectj documentation</h1>
-    </td>
-    <td WIDTH="40%" align="right">
-      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-      <img src="http://eclipse.org/images/howto_banner.jpg" align="center" width="183" height="71">
-    </td>
-  </tr>
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "AspectJ Documentation";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
+	$pageAuthor		= "Type your name here";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
 
+	# End: page-specific settings	
+		
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn" style="width: 80%">
+
+	  <h1>Documentation</h1>
+
+	  <div id="container">
+ <table>
   <!-- links row -->
   <tr>
     <td ALIGN=LEFT width="100%" colspan="2">
       <table cellSpacing="0" cellPadding="0" align="left" border="0">
 	<tr>
 	  <td class="smallParagraph" height="26"><b>
-	    <a href="http://www.eclipse.org/aspectj/docs.php">[doc index]</a>
+	    <a href="/aspectj/docs.php">[doc index]</a>
 	    &nbsp;<a href="doc/released/adk15notebook/index.html">
 	    [AspectJ 5 language changes]</a>
 	    &nbsp;<a href="doc/released/progguide/index.html">
 	    [language]</a>
 	    &nbsp;<a href="doc/released/devguide/index.html">
 	    [tools]</a>
-	    &nbsp;<a href="doc/released/faq.html">
+	    &nbsp;<a href="doc/released/faq.php">
 	    [faq]</a>
 	    &nbsp;<a href="http://www.eclipse.org/aspectj/publications.php">[publications]</a> 
 	    &nbsp;<a href="http://www.eclipse.org/aspectj/sample-code.html">
@@ -60,13 +74,21 @@
 follow the trail proposed in the 
 <a href="doc/released/index.html#paths">released documentation</a>.
 </p>
-<h2>AspectJ 5 Developer's Notebook</h2>
+
+
+<div class="homeitem" style="width: 97%">
+<h3>AspectJ 5 Developer's Notebook</h3>
+<ul>
 <p>The <a href="doc/released/adk15notebook/index.html">AspectJ 5 Developer's Notebook</a>
 summarises changes made to the AspectJ language in AspectJ 5. These changes are
 <emphasis>not</emphasis> yet reflected in the programming guide.
 </p>
-	
-<h2>AspectJ Documentation packages</h2>
+</ul>
+</div>
+
+<div class="homeitem" style="width: 97%">
+<h3>AspectJ Documentation packages</h3>
+<ul>
 <p>The AspectJ documentation package is included in the AspectJ download
 	and linked below (both the most-recent released version and the
 	next work-in-progress, as 
@@ -78,7 +100,11 @@
       <a href="doc/next/index.html">
 		<img border="0" height="13" width="13" src="images/next.gif" alt="next"/></a>.
 </p>
-<h3>AspectJ Language</h3>
+</ul>
+
+<ul>
+<li>
+<h4>AspectJ Language</h4>
       The <a href="doc/released/progguide/index.html">Programming Guide</a> 
       <a href="doc/next/progguide/index.html">
 		<img border="0" height="13" width="13" src="images/next.gif" alt="next"/></a> 
@@ -121,7 +147,10 @@
       <a href="doc/next/progguide/semantics.html">
 		<img border="0" border="0" height="13" width="13" src="images/next.gif" alt="next"/></a> 
 		is the best reference for AspectJ usage.
-<h3>Runtime and tools APIs</h3>
+	</li>
+	
+	<li>	
+<h4>Runtime and tools APIs</h4>
 <ul>
 <li>
 <a href="doc/released/runtime-api/index.html">Javadocs for the AspectJ runtime API</a> 
@@ -140,7 +169,11 @@
 <img border="0" border="0" height="13" width="13" src="images/next.gif" alt="next"/></a>.
 </li>
 </ul>
-<h3>AspectJ Tools</h3>
+
+</li>
+
+<li>
+<h4>AspectJ Tools</h4>
 <p>
 	
 The 
@@ -173,11 +206,13 @@
 <img border="0" border="0" height="13" width="13" src="images/next.gif" alt="next"/></a>.
 
 </p>	
-	
-<h3>Other stuff</h3>
+</li>
+
+<li>
+<h4>Other stuff</h4>
  <p>
  For answers to frequently-asked questions, see the 
-  <a href="doc/released/faq.html">FAQ</a> 
+  <a href="doc/released/faq.php">FAQ</a> 
   <a href="doc/next/faq.html">
 	 <img border="0" height="13" width="13" src="images/next.gif" alt="next"/></a> 
  </p>
@@ -193,32 +228,18 @@
 	<a href="doc/released/changes.html">
 	 <img border="0" height="13" width="13" src="images/next.gif" alt="next"/></a>.
 </p>
-
+</li>
+</ul>
 </div>
 
-<div id="docs-inset">
-<!-- Eclipse AspectJ book -->
-  
-   <p align="center">
-    <a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">
-  	   <img src="images/eclipseaspectj.jpg" width="180" alt="Eclipse AspectJ Book Cover"/>
-    </a>
-   </p>
 
-  <p align="center"><a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">
-   	    Eclipse AspectJ</a> the book, by some of the leading AspectJ committers
-  </p>	
-  
-  <p/>
-   
 </div>
 
-<div id="main">
-
 <br/>
 
-<h2>Online and external resources</h2>
-
+<div class="homeitem">
+<h3>Online and external resources</h3>
+<ul>
 <p>
 Books and articles we know of are listed on the
 <a href="publications.php">Publications page</a>.
@@ -229,7 +250,7 @@
 <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.aspectj/modules/docs/teaching/exercises/?cvsroot=Technology_Project">
 <code>aspectj.org/modules/docs/teaching</code></a>. 
 (To get stuff from the CVS repository, see 
-<a href="doc/released/faq.html#q:buildingsource">building source</a>.)
+<a href="doc/released/faq.php#q:buildingsource">building source</a>.)
 Spanish speakers might also be interested in "Programemos en AspectJ" at
 <a href="http://www.programemos.com">http://www.programemos.com</a>.
 Find earlier project history, papers, and articles on the
@@ -239,7 +260,7 @@
 
 <p>
   For a list of places to get example AspectJ code,
-  see the <a href="doc/released/faq.html#q:exampleprograms">FAQ entry on example programs</a>.
+  see the <a href="doc/released/faq.php#q:exampleprograms">FAQ entry on example programs</a>.
   We collect and publish 
   <a href="sample-code.html">sample code contributions from community</a>, 
   including AspectJ programs and user-level trails for things like
@@ -252,11 +273,34 @@
   and 
   <a href="sample-code.html#pubs-papers-aodesignpatterns">design pattern implementations</a>.
  </p>
+</ul>
+</div>
+
+<div class="homeitem">
+<h3>Eclipse AspectJ book</h3>
+  
+   <p align="center">
+    <a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">
+  	   <img src="images/eclipseaspectj.jpg" width="180" alt="Eclipse AspectJ Book Cover"/>
+    </a>
+   </p>
+
+  <p align="center"><a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">
+   	    Eclipse AspectJ</a> the book, by some of the leading AspectJ committers
+  </p>	
+  
 
 </div>
 
 
+	</div>
 
-  <!-- ================ End of page specific content ===================== -->
-</body>
-</html>
\ No newline at end of file
+</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/downloads.php b/downloads.php
index 290c020..1b96bf5 100644
--- a/downloads.php
+++ b/downloads.php
@@ -1,16 +1,98 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>The AspectJ project at Eclipse.org: Downloads</title>
-  <link rel="stylesheet" href="aspectj_style.css" type="text/css" />
-</head>
-<body>
-<div id="container">
-<?php require("banner.html"); ?>
-<div id="main">
-  <!-- ================ Page specific content starts here ================ -->
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
 
-<h1>aspectj downloads</h1>
+// Sorts by newest first
+function date_cmp($f1, $f2) {
+   $f1stats=stat($f1);
+   $f2stats=stat($f2);
+   return $f2stats[9]-$f1stats[9];
+}
+// return entries in the directory that represent dev builds
+function GetDevBuildsIn($dir){
+   ini_set("max_execution_time",10);
+   $devtag="aspectj-DEVELOPMENT-2";
+   $root=opendir($dir) or die("Check $dir !");
+   while (false!== ($file=readdir($root))) {
+     if($file=="." || $file=="..") {continue;}
+     // echo "$file<br>";
+     if (substr($file,0,21) == $devtag) {
+       $files[]="$dir/$file";
+     }
+   }
+   @closedir($dir);
+   usort($files, "date_cmp");
+   return $files;
+}
+
+function GetChangesFilesIn($dir){
+   ini_set("max_execution_time",10);
+   $devtag="changes-";
+   $root=opendir($dir) or die("Check $dir !");
+   while (false!== ($file=readdir($root))) {
+     if($file=="." || $file=="..") {continue;}
+     // echo "$file<br>";
+     if (substr($file,0,8) == $devtag) {
+       $files[]="$dir/$file";
+     }
+   }
+   @closedir($dir);
+   usort($files, "date_cmp");
+   return $files;
+}
+
+function ListDevBuilds($dir){
+	$str = "";
+	
+	$devbuilds=GetDevBuildsIn($dir);
+    $justthefirstfile=basename($devbuilds[0]);
+    $stats=stat($devbuilds[0]);
+    $str = $str . "<a href=\"http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/dev/$justthefirstfile\">$justthefirstfile</a><br>(size: $stats[7] bytes)";
+    $str = $str . "<br><br>";
+    $changesFiles=GetChangesFilesIn($dir);
+    $justthefirstchangesfile=basename($changesFiles[0]);
+    $stats2=stat($changesFiles[0]);
+    $str = $str .  "<a href=\"http://download.eclipse.org/tools/aspectj/dev/$justthefirstchangesfile\">Changes in this build</a><br>";          
+	
+	return $str;
+}
+
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "AspectJ Downloads";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
+	$pageAuthor		= "Type your name here";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+	# End: page-specific settings	
+		
+	$builds = ListDevBuilds('/home/data/httpd/download.eclipse.org/tools/aspectj/dev');
+	#$builds = ListDevBuilds('c:/temp');
+		
+		
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn" style="width: 80%">
+
+	  <h1>Downloads</h1>
+
 
 <p>The AspectJ compiler produces programs for any version of the Java platform 
       (jdk1.1 and later). The compiler itself requires Java2 (1.3 or later) to run. 
@@ -33,136 +115,112 @@
 		<a href="#ides">IDE support</a> can be found at the bottom of this page.
 	</p>
 	    
-
+<div class="homeitem3col">
 	<h3 id="most_recent">Most Recent Build</h3>
- 
+ 	<ul>
+ 	<li>
+ 	  <b>Last Known Good developer build</b>
  	<table border="0" cellspacing="0" cellpadding="0" width="100%">
  		<tbody>
  			<tr>
  				<td>
-				 	<dl>
-				 		<dt>Last Known Good developer build</dt>
-						<dd>
+				 	<ul>
 						AspectJ Compiler, Browser, Ant tasks, and Documentation. Only download this version if you are prepared to work with a pre-release compiler. 
 					    The most recent stable build below is the currently supported release version. 
-					  </dd>
-					</dl>
+					</ul>
 				</td>
-				<td width="30%" align="right">
+				<td rowspan="2" width="30%" align="right">
 					    <!-- stick out reference to most recent dev build -->
-							<?php
-							  #$devbuilds=GetDevBuildsIn('k:/tmp');
-							  $devbuilds=GetDevBuildsIn('/home/data/httpd/download.eclipse.org/tools/aspectj/dev');
-                              $justthefirstfile=basename($devbuilds[0]);
-                              $stats=stat($devbuilds[0]);
-                              echo "<a href=\"http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/dev/$justthefirstfile\">$justthefirstfile</a><br><br>(size: $stats[7] bytes)";
-                              echo "<br><br>";
-                              $changesFiles=GetChangesFilesIn('/home/data/httpd/download.eclipse.org/tools/aspectj/dev');
-                              $justthefirstchangesfile=basename($changesFiles[0]);
-                              $stats2=stat($changesFiles[0]);
-                              echo "<a href=\"http://download.eclipse.org/tools/aspectj/dev/$justthefirstchangesfile\">(Changes in this build)</a><br>";          
-                            ?>
+
+					    	$builds
+					    
                             <br><a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=AspectJ&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2006-06-30&chfieldto=Now&chfieldvalue=&field0-0-0=noop&type0-0-0=noop&value0-0-0=">
                             Bugs resolved since last release</a>
 				</td>
 			</tr>
 			<tr>
-			    <td colSpan="3"><br>
+			    <td><br>
 			      <i>This download is updated after every successful build and test cycle.</i>
 			    </td>
 			</tr>
 		</tbody>
 	</table>
+	</li>
+	</ul>
+</div>
 
   <!-- ============ LATEST STABLE RELEASE ======================= -->
 
+<div class="homeitem3col">
   <h3 id="stable_release">Latest Stable Release</h3>
-
-      <table border="0" cellspacing="0" cellpadding="0" width="100%">
- 		<tbody>
- 		    <tr>
- 				<td>
-				 	<dl>
-				 		<dt>AspectJ 1.5.2a, Released 21st August, 2006</dt>
-						<dd>AspectJ compiler, browser, documentation tool,
-                            Ant tasks, and documentation. 
-	  					</dd>
-	  				</dl>
-	  			</td>
-				<td width="30%" align="right">
-					<a href="http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.5.2a.jar">aspectj-1.5.2a.jar</a> (~10M)
-	  			</td>
-			</tr>
-		</tbody>
-      </table> 
-      
-
-  <!-- ============ ASPECTJ 5 ======================= -->
-
-  <h3 id="milestones">AspectJ 5</h3>
-
+  <ul>
+    <li>
+    <b>AspectJ 1.5.2a, Released 21st August, 2006</b>
  	<table border="0" cellspacing="0" cellpadding="0" width="100%">
- 		<tbody>
-
+    <tr>
+      <td><ul>AspectJ compiler, browser, documentation tool, Ant tasks, and documentation.</ul></td>
+      <td width="30%" align="right">
+          <a href="http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.5.2a.jar">aspectj-1.5.2a.jar</a> (~10M)
+      </td>
+    </tr>
+    </table>
+  </li>
+  </ul>
+</div>
+      
+  <!-- ============ ASPECTJ 5 ======================= -->
+<div class="homeitem3col"> 
+  <h3 id="milestones">AspectJ 5</h3>
+  <ul>
+    <li>
+      <b>AspectJ 1.5.2a, Released 21st August, 2006</b>
+ 	<table border="0" cellspacing="0" cellpadding="0" width="100%">
  		    <tr>
- 				<td>
-				 	<dl>
-				 		<dt>AspectJ 1.5.2a, Released 21st August, 2006</dt>
-						<dd>AspectJ compiler, browser, documentation tool,
-                            Ant tasks, and documentation. 
-	  					</dd>
-	  				</dl>
-	  			</td>
+      			<td><ul>AspectJ compiler, browser, documentation tool, Ant tasks, and documentation.</ul></td>
 				<td width="30%" align="right">
 					<a href="http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.5.2a.jar">aspectj-1.5.2a.jar</a> (~10M)
 	  			</td>
 			</tr>
+ 	</table>
+ 	</li>
  		
+ 	<li>
+ 	<b>AspectJ 1.5.2, Released 30th June, 2006</b>
+ 	<table border="0" cellspacing="0" cellpadding="0" width="100%">
  		     <tr>
- 				<td>
-				 	<dl>
-				 		<dt>AspectJ 1.5.2, Released 30th June, 2006</dt>
-						<dd>AspectJ compiler, browser, documentation tool,
-                            Ant tasks, and documentation. 
-	  					</dd>
-	  				</dl>
-	  			</td>
+      			<td><ul>AspectJ compiler, browser, documentation tool, Ant tasks, and documentation.</ul></td>
 				<td width="30%" align="right">
 					<a href="http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.5.2.jar">aspectj-1.5.2.jar</a> (~10M)
 	  			</td>
 			</tr>
-			
-			
+	</table>
+	</li>
+	
+	<li>
+	<b>AspectJ 1.5.1a, Released 10th April, 2006</b>
+ 	<table border="0" cellspacing="0" cellpadding="0" width="100%">
  		     <tr>
- 				<td>
-				 	<dl>
-				 		<dt>AspectJ 1.5.1a, Released 10th April, 2006</dt>
-						<dd>AspectJ compiler, browser, documentation tool,
-                            Ant tasks, and documentation. 
-	  					</dd>
-	  				</dl>
-	  			</td>
+      			<td><ul>AspectJ compiler, browser, documentation tool, Ant tasks, and documentation.</ul></td>
 				<td width="30%" align="right">
 					<a href="http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.5.1_a.jar">aspectj-1.5.1_a.jar</a> (~10M)
 	  			</td>
 			</tr>
-			
+	</table>
+	</li>
+	
+	<li>
+	<b>AspectJ 1.5.0, Released 20th December, 2005</b>
+ 	<table border="0" cellspacing="0" cellpadding="0" width="100%">
  		 	<tr>
- 				<td>
-				 	<dl>
-				 		<dt>AspectJ 1.5.0, Released 20th December, 2005</dt>
-						<dd>AspectJ compiler, browser, documentation tool,
-                            Ant tasks, and documentation. 
-	  					</dd>
-	  				</dl>
-	  			</td>
+      			<td><ul>AspectJ compiler, browser, documentation tool, Ant tasks, and documentation.</ul></td>
 				<td width="30%" align="right">
 					<a href="http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.5.0.jar">aspectj-1.5.0.jar</a> (~10M)
 	  			</td>
 			</tr>
-
-		</tbody>
 	</table>
+	</li>
+	</ul>
+</div>
 
 <!--
     Commenting out all pre-release AspectJ 5.
@@ -277,23 +335,28 @@
   
   <!-- ============ ASPECTJ 1.2 ======================= -->
   
+<div class="homeitem3col"> 
   <h3>AspectJ 1.2</h3>
-
+  <ul>
+  
+  <li>
+    <b>Version 1.2.1, Released November 5th, 2004</b>
  	<table border="0" cellspacing="0" cellpadding="0" width="100%">
  		<tbody>
  			<tr>
  				<td>
-				 	<dl>
-				 		<dt>Version 1.2.1, Released November 5th, 2004</dt>
-						<dd>AspectJ Compiler, Browser, Ant tasks, and Documentation</dd>
-					</dl>
+				 	<ul>
+						AspectJ Compiler, Browser, Ant tasks, and Documentation
+					</ul>
 	 			 </td>
 				<td width="30%" align="right">
 				    <a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-1.2.1.jar">
 	    			aspectj-1.2.1.jar</a> (7,382,062 bytes)
 	  			</td>
 			</tr>
-
+	</table>
+	</li>
+	
 <!--    		
     		<tr>
     			<td>
@@ -307,19 +370,25 @@
 	    			aspectj-1.2.1rc1.jar</a> (7,393,774 bytes)
 	  			</td>
 			</tr>
+			
 -->
+
+  <li>
+    <b>Version 1.2.0, Released May 25, 2004</b>
+ 	<table border="0" cellspacing="0" cellpadding="0" width="100%">
 			<tr>
     			<td>
- 					<dl>
-	  					<dt>Version 1.2.0, Released May 25, 2004</dt>
-	  					<dd>AspectJ Compiler, Browser, Ant tasks, and Documentation</dd>
-	  				</dl>
+ 					<ul>
+	  					AspectJ Compiler, Browser, Ant tasks, and Documentation
+	  				</ul>
 	  			</td>
 				<td width="30%" align="right">
 				    <a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-1.2.jar">
 	    			aspectj-1.2.jar</a> (5,859,690 bytes)
 	  			</td>
-			</tr>			
+			</tr>	
+		</table>
+	</li>		
 <!--
 			<tr>
     			<td>
@@ -346,41 +415,47 @@
 				    aspectj-1.2rc1.jar</a> (5,860,538 bytes)	  			
 				 </td>
 			</tr>			
--->
-		</tbody>
 	</table>
+-->
+</div>
 
   <!-- ============ ASPECTJ 1.1 ======================= -->
-
+<div class="homeitem3col"> 
   <h3>AspectJ 1.1</h3>
-
+  <ul>
+  <li>
+    <b>Version 1.1.1, Released September 22nd, 2003</b>
  	<table border="0" cellspacing="0" cellpadding="0" width="100%">
- 		<tbody>
  			<tr>
  				<td>
-				 	<dl>
-				 		<dt>Version 1.1.1, Released September 22nd, 2003</dt>
-						<dd>AspectJ Compiler, Browser, Ant tasks, and Documentation</dd>
-					</dl>
+				 	<ul>
+						AspectJ Compiler, Browser, Ant tasks, and Documentation
+					</ul>
 	 			 </td>
 				<td width="30%" align="right">
 					<a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-1.1.1.jar">
 				    aspectj-1.1.1.jar</a> (6,352,092 bytes)	  			
 				</td>
 			</tr>
-
+		</table>
+	</li>
+	
+	<li>
+    <b>Version 1.1.0, Released June 6, 2003</b>
+ 	<table border="0" cellspacing="0" cellpadding="0" width="100%">
 			<tr>
  				<td>
-				 	<dl>
-				 		<dt>Version 1.1.0, Released June 6, 2003</dt>
-						<dd>AspectJ Compiler, Browser, Ant tasks, and Documentation</dd>
-					</dl>
+				 	<ul>
+						AspectJ Compiler, Browser, Ant tasks, and Documentation
+					</ul>
 	 			 </td>
 				<td width="30%" align="right">
 	    			<a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-1.1.0.jar">
 	    			aspectj-1.1.0.jar</a> (6,297,885 bytes)	
 				</td>
 			</tr>
+		</table>
+	</li>
 <!--
 			<tr>
  				<td>
@@ -436,69 +511,63 @@
 	  </td>
 	</tr>
 	
--->
       </table>
     </td>
   </tr>
+-->
+  </ul>
+</div>
 
   <!-- ============ ASPECTJ 1.0 ======================= -->
-
+<div class="homeitem3col"> 
  <h3>AspectJ 1.0</h3>
+  <ul>
+  <li>
+    <b>Version 1.0.6</b>
 
- 	<table border="0" cellspacing="0" cellpadding="0" width="100%">
- 		<tbody>
- 			<tr>
- 				<td colspan="2">
-				 	<dl>
-				 		<dt>Version 1.0.6</dt>
-						<dd>
-						 	<table border="0" cellspacing="0" cellpadding="5" width="100%">
- 								<tbody>
+						 	<table border="0" cellspacing="0" cellpadding="2" width="100%">
  									<tr>
-										<td>AspectJ Compiler and Browser (<i>binary distribution</i>)</td>
-										<td width="30%" align="right">
+										<td><ul>AspectJ Compiler and Browser (<i>binary distribution</i>)</ul></td>
+										<td width="40%" align="right">
 										    <a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-tools-1.0.6.jar">
 										    aspectj-tools-1.0.6.jar</a> <i>(1,580,450 bytes)</i>
 										</td>
 									</tr>
 									<tr>
-										<td>AspectJ Compiler and Browser (<i>source</i>)</td>
-										<td width="30%" align="right">
+										<td><ul>AspectJ Compiler and Browser (<i>source</i>)</ul></td>
+										<td width="40%" align="right">
 										    <a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-tools-src-1.0.6.tgz">
 										    aspectj-tools-src-1.0.6.tgz</a> <i>(795,633 bytes)</i>										    
 										</td>
 									</tr>
 																		
  									<tr>
-										<td>Documentation and Examples</td>
-										<td width="30%" align="right">
+										<td><ul>Documentation and Examples</ul></td>
+										<td width="40%" align="right">
 										    <a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-docs-1.0.6.tgz">
 										    aspectj-docs-1.0.6.tgz</a> <i>(1,715,824 bytes) </i>
 										</td>
 									</tr>
  									<tr>
-										<td>Ant Tasks (released under the <a target="_top" href="http://apache.org/LICENSE.txt">
-		    							Apache License</a>)</td>
-		    							<td width="30%" align="right">
+										<td><ul>Ant Tasks (released under the <a target="_top" href="http://apache.org/LICENSE.txt">
+		    							Apache License</a>)</ul></td>
+		    							<td width="40%" align="right">
 										    <a href="http://www.eclipse.org/downloads/download.php?file=/tools/ajdt/aspectj-antTasks-1.0.6.tgz">
 										    aspectj-antTasks-1.0.6.tgz</a> <i>(83,124 bytes) </i>
 		    							</td>
 									</tr>
-								</tbody>
-							</table>
-						</dd>
-					</dl>
-	 			 </td>
-			</tr>
-		</tbody>
-	</table>
-	
+							</table>	
   
-    <p align="left">Note: All code, documentation and other files in the 1.0.6 release 
+    <p align="left"><i>Note: All code, documentation and other files in the 1.0.6 release 
     are made available under the terms and conditions of the
     <a target="_top" href="http://www.mozilla.org/MPL/MPL-1.1.html">
-    Mozilla Public License version 1.1</a>.</p>
-			
+    Mozilla Public License version 1.1</a>.</i></p>
+		
+		
+	</li>
+	</ul>	
+</div>
+
   <!-- ============ INSTALLATION ======================= -->
 
   <h2 id="install">Installation</h2>
@@ -551,49 +620,15 @@
         -->
 	</dl>
 	
-  <!-- ================ End of page specific content ===================== -->
-</div>
-</div>
-</body>
-</html>
-<?php 
-// Sorts by newest first
-function date_cmp($f1, $f2) {
-   $f1stats=stat($f1);
-   $f2stats=stat($f2);
-   return $f2stats[9]-$f1stats[9];
-}
-// return entries in the directory that represent dev builds
-function GetDevBuildsIn($dir){
-   ini_set("max_execution_time",10);
-   $devtag="aspectj-DEVELOPMENT-2";
-   $root=opendir($dir) or die("Check $dir !");
-   while (false!== ($file=readdir($root))) {
-     if($file=="." || $file=="..") {continue;}
-     // echo "$file<br>";
-     if (substr($file,0,21) == $devtag) {
-       $files[]="$dir/$file";
-     }
-   }
-   @closedir($dir);
-   usort($files, "date_cmp");
-   return $files;
-}
 
-function GetChangesFilesIn($dir){
-   ini_set("max_execution_time",10);
-   $devtag="changes-";
-   $root=opendir($dir) or die("Check $dir !");
-   while (false!== ($file=readdir($root))) {
-     if($file=="." || $file=="..") {continue;}
-     // echo "$file<br>";
-     if (substr($file,0,8) == $devtag) {
-       $files[]="$dir/$file";
-     }
-   }
-   @closedir($dir);
-   usort($files, "date_cmp");
-   return $files;
-}
+	</div>
 
-?>
\ No newline at end of file
+</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/index.php b/index.php
index 40c4d71..deee8ae 100644
--- a/index.php
+++ b/index.php
@@ -1 +1,276 @@
-<?php require('aspectj.php'); ?>
\ No newline at end of file
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "The AspectJ Project";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
+	$pageAuthor		= "Type your name here";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+	# End: page-specific settings	
+		
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn" style="width: 80%">
+
+<!--
+<p align="center" style="margin-top: 0">
+<img src="aspectjbanner.png" width="340" height="58" alt="AspectJ">
+</p>
+-->
+
+<!-- style="position: absolute; top: 0; left: 250px" -->
+
+
+  <!-- ========== "aspectj is... "  ============= -->
+    <table id="aspectj-is" borderColor="#111111"
+           cellSpacing="10" cellPadding="0" width="100%" border="0" valign="top">
+      <tr>
+        <td colSpan="2" width="50%">
+          <img alt="AspectJ[TM] is" src="http://www.eclipse.org/aspectj/aspectjIs.gif "
+	       border="0" width="241" height="25">
+	</td>
+
+        <td colSpan="2" width="50%">
+          <img alt="aspectj enables" src="http://www.eclipse.org/aspectj/aspectjEnables.gif "
+	       border="0" width="241" height="25">
+	</td>
+      </tr>
+      <tr>
+        <td width="10">&nbsp;</td>
+        <td valign="top">
+         <ul>
+          <li> a seamless aspect-oriented extension
+        to the Java<sup><small>tm</small></sup> programming language</li>
+
+          <li>Java platform compatible</li>
+          <li>easy to learn and use</li>
+         </ul>
+        </td>
+        <td width="10">&nbsp;</td>
+        <td valign="top">
+	<ul>
+	  <li>clean modularization of crosscutting concerns, such as error 
+	    checking and handling, synchronization, context-sensitive behavior, 
+	    performance optimizations, monitoring and logging, debugging support, 
+	    and multi-object protocols
+	  </li>
+
+	</ul>
+      </td>
+      </tr>
+    </table>
+
+<div class="homeitem" style="width: 97%">
+  <h3>Quick Links</h3>
+	<ul>
+<li>For Eclipse development: <a href="/ajdt">AJDT: The AspectJ Development Tools</a></li>
+<li>Popular AspectJ downloads: <a href="/aspectj/downloads.php#most_recent">Latest development build</a> | <a href="/aspectj/downloads.php#stable_release">Latest stable release</a> | <a href="/aspectj/downloads.php">More downloads...</a></li>
+	<li>Popular AspectJ docs: <a href="/aspectj/doc/released/adk15notebook/index.html">AspectJ 5 Developer's Notebook</a> | <a href="/aspectj/doc/released/progguide/index.html">Programming Guide</a> | <a href="/aspectj/docs.php">More docs...</a></li>
+        <li><a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">Eclipse AspectJ: </a> the book, by some of the leading AspectJ committers</li>
+        <li><a href="http://aosd.net/">AOSD.net</a></li>
+        <li><a href="http://www.parc.com/research/csl/projects/aspectj/default.html">AspectJ PARC Page</a></li>
+</ul>
+</div>
+		
+		<div class="homeitem">
+			<h3>News and Events</h3>
+	                <ul>
+
+	<li>
+   AspectJ 1.5.2 is now <a href="downloads.php">available for download</a>.
+   It includes approximately 60 fixes and enhancements that have been incorporated since the 1.5.1a 
+   release.  For full details see the 
+   <a href="doc/released/README-152.html">1.5.2 README</a>.
+   <br><div align="right"><span class="dates"><i>posted 30-06-06</i></span></div>
+   </li>
+   
+   <li>
+   AspectJ 1.5.2 release candidate 1 is now <a href="downloads.php">available for download</a>.
+   It includes approximately 60 fixes and enhancements that have been incorporated since the 1.5.1 
+   release.  For full details see the 
+   <a href="doc/released/README-152.html">1.5.2 README</a>.
+   <br><div align="right"><span class="dates"><i>posted 26-06-06</i></span></div>
+	</li>
+   
+	<li>
+A podcast <a href="http://www.se-radio.net/index.php?post_id=78154">
+   interview with Gregor Kiczales</a> recorded at this year's AOSD conference
+   is now available at <a href="http://www.se-radio.net">Software Engineering Radio</a>.
+   The interview covers a number of topics including the history of AOP, the
+   relationship of AOP to interceptors, industry acceptance of AOP, early aspects,
+   and adoption strategies.
+
+<br><div align="right"><span class="dates"><i>posted 09-04-06</i></span></div>
+	</li>
+
+<li>
+AspectJ 1.5.1 is now <a href="downloads.php">available for download</a>. This
+   release contains a number of bug fixes and minor enhancements from 1.5.0, together
+   with performance and memory usage improvements resulting in greatly reduced
+   memory usage when building from within AJDT (and noticeable improvements outside
+   of AJDT too). For full details see the 
+   <a href="doc/released/README-151.html">1.5.1 README</a>.
+
+<br><div align="right"><span class="dates"><i>posted 04-04-06</i></span></div>
+</li>
+
+	                </ul>
+	       </div>
+
+	<div class="homeitem">
+			<h3>Recent Books and Articles</h3>
+	          <ul>
+<li>
+<a target="_top" href="http://www-128.ibm.com/developerworks/java/library/j-aopwork17.html">	
+               &quot;AOP@Work: Component Design with Contract4J&quot;</a>
+         by n Wampler
+</li>
+
+<li>
+<a target="_top" href="http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=AOP@work">	
+               &quot;AOP@Work series on IBM developerWorks&quot;</a>
+         Series lead: Nicholas Lesiecki
+</li>
+
+<li>
+<a target="_top" href="http://www.ratio.co.uk/objectiveview.html">	
+               &quot;Introduction to AOP&quot;</a> in ObjectiveView Issue 9
+         by Alex Ruiz
+</li>
+
+<li>
+      	<a target="_top" href="http://www.ibm.com/developerworks/java/library/j-aopwork15/">	
+               &quot;AOP@Work: AOP myths and realities&quot;</a>
+         by Ramnivas Laddad
+</li>
+
+<li>
+      	<a target="_top" href="http://www.ibm.com/developerworks/java/library/j-aopwork14/">	
+               &quot;AOP@Work: Check out library aspects with AspectJ 5&quot;</a>
+         by Wes Isberg
+</li>
+
+<li>
+      	<a target="_top" href="http://www.ibm.com/developerworks/java/library/j-aopwork13.html">	
+               &quot;AOP@Work: Dependency Injection with AspectJ and Spring&quot;</a>
+         by Adrian Colyer
+</li>
+
+</ul>
+</div>
+
+	<hr class="clearer" />
+		
+
+</div>
+
+<!--
+	<div id="rightcolumn" style="width: 170px">
+		<div class="sideitem">
+			<h6>Related links</h6>
+			<ul>
+				<li><a href="http://eclipse.org/ajdt">AJDT</a></li>
+				<li><a href="http://aosd.net">AOSD.net</li>
+				<li><a href="http://www.parc.com/research/csl/projects/aspectj/default.html">AspectJ PARC Page</li>
+				<li><a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">Eclipse AspectJ Book</li>
+
+			</ul>
+		</div>
+		<div class="sideitem">
+			<h6>The Aspects Blog</h6>
+			<ul>
+	   <li><a href="http://www.aspectprogrammer.org/blogs/adrian/2006/03/graham_hamilton.html" title="Graham Hamilton on AOP" target="external">Graham Hamilton on AOP</a></li>
+<li><a href="http://www.aspectprogrammer.org/blogs/adrian/2006/02/tips_for_using.html" title="Tips for using Eclipse effectively" target="external">Tips for using Eclipse effectively</a></li>
+
+<li><a href="http://www.aspectprogrammer.org/blogs/adrian/2006/02/a_practical_gui_2.html" title="A Practical Guide to Using an Aspect Library (part I)" target="external">A Practical Guide to Using an Aspect Library (part I)</a></li>
+
+			</ul>
+		</div>
+
+		<div class="sideitem">
+			<h6>Alex Vasseur's blog</h6>
+			<ul>
+	   <li><a href="http://blogs.codehaus.org/people/avasseur/archives/001308_free_as_open_source_they_said.html" title="Free as Open Source they said?" target="external">Free as Open Source they said?</a></li>
+<li><a href="http://blogs.codehaus.org/people/avasseur/archives/001290_microsoft_goes_aop.html" title="Microsoft goes AOP?" target="external">Microsoft goes AOP?</a></li>
+
+<li><a href="http://blogs.codehaus.org/people/avasseur/archives/001281_spring_2x_innovation_or_maturity.html" title="Spring 2.x -  innovation or maturity?" target="external">Spring 2.x -  innovation or maturity?</a></li>
+			</ul>
+		</div>
+
+		<div class="sideitem">
+			<h6>Aspectivity</h6>
+			<ul>
+	    <li><a href="http://ramnivas.com/blog/index.php?p=23" title="AOP Madness and Sanity: A Response" target="external">AOP Madness and Sanity: A Response</a></li>
+<li><a href="http://ramnivas.com/blog/index.php?p=22" title="AOP: Myths and realities" target="external">AOP: Myths and realities</a></li>
+
+<li><a href="http://ramnivas.com/blog/index.php?p=21" title="Javapolis Experience" target="external">Javapolis Experience</a></li>
+			</ul>
+		</div>
+
+		<div class="sideitem">
+			<h6>Ron Bodkin on AOP</h6>
+			<ul>
+	  <li><a href="http://rbodkin.blogs.com/ron_bodkins_blog/2006/03/industry_case_s.html" title="Industry Case Studies at AOSD 2006" target="external">Industry Case Studies at AOSD 2006</a></li>
+<li><a href="http://rbodkin.blogs.com/ron_bodkins_blog/2006/03/demos_at_aosd_2.html" title="Demos at AOSD 2006" target="external">Demos at AOSD 2006</a></li>
+
+<li><a href="http://rbodkin.blogs.com/ron_bodkins_blog/2006/03/enterprise_aop_.html" title="Enterprise AOP Tutorial at AOSD" target="external">Enterprise AOP Tutorial at AOSD</a></li>
+
+			</ul>
+		</div>
+
+		<div class="sideitem">
+			<h6>Jonas Bonér's blog</h6>
+			<ul>
+	   <li><a href="http://feeds.feedburner.com/grubbel?m=44" title="The Optimized Null Check Pattern" target="external">The Optimized Null Check Pattern</a></li>
+<li><a href="http://feeds.feedburner.com/grubbel?m=43" title="Interview" target="external">Interview</a></li>
+
+<li><a href="http://feeds.feedburner.com/grubbel?m=42" title="Want To Work At Terracotta?" target="external">Want To Work At Terracotta?</a></li>
+
+			</ul>
+		</div>
+
+		<div class="sideitem">
+			<h6>Dion Almaer on AOP</h6>
+			<ul>
+	  <li><a href="http://www.almaer.com/blog/archives/001056.html" title="Application Monitoring with AspectJ, JMX, and GlassBox" target="external">Application Monitoring with AspectJ, JMX, and GlassBox</a></li>
+<li><a href="http://www.almaer.com/blog/archives/001046.html" title="Future of AOP 2005: Jonas Boner and Adrian Colyer move on!" target="external">Future of AOP 2005: Jonas Boner and Adrian Colyer move on!</a></li>
+
+<li><a href="http://www.almaer.com/blog/archives/000961.html" title="JVM support for AOP in JRockit" target="external">JVM support for AOP in JRockit</a></li>
+
+			</ul>
+		</div>
+
+
+	</div>
+
+-->
+
+</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/index_new.php b/index_new.php
deleted file mode 100644
index fcd1e4a..0000000
--- a/index_new.php
+++ /dev/null
@@ -1,290 +0,0 @@
-<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
-
-	#*****************************************************************************
-	#
-	# template.php
-	#
-	# Author: 		Denis Roy
-	# Date:			2005-06-16
-	#
-	# Description: Type your page comments here - these are not sent to the browser
-	#
-	#
-	#****************************************************************************
-	
-	#
-	# Begin: page-specific settings.  Change these. 
-	$pageTitle 		= "The AspectJ Project";
-	$pageKeywords	= "Type, page, keywords, here";
-	$pageAuthor		= "Type your name here";
-	
-	# Add page-specific Nav bars here
-	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
-	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
-	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
-	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
-
-	# End: page-specific settings
-	#
-	$theme = "Lazarus";
-	
-	$branding = <<<EOBRANDING
-<STYLE TYPE="text/css">
-  #midcolumn { margin-top: 5px; }
-  body { font-size: small; }
-</STYLE>	
-<div id="branding">
-<img src="aspectjbanner2.png" width="502" height="42" alt="AspectJ">
-</div>
-EOBRANDING;
-$Menu->setProjectBranding($branding);
-	
-		
-	# Paste your HTML content between the EOHTML markers!	
-	$html = <<<EOHTML
-
-<div id="maincontent">
-	<div id="midcolumn" style="width: 80%">
-
-<!--
-<p align="center" style="margin-top: 0">
-<img src="aspectjbanner.png" width="340" height="58" alt="AspectJ">
-</p>
--->
-
-<!-- style="position: absolute; top: 0; left: 250px" -->
-
-
-  <!-- ========== "aspectj is... "  ============= -->
-    <table id="aspectj-is" borderColor="#111111"
-           cellSpacing="10" cellPadding="0" width="100%" border="0" valign="top">
-      <tr>
-        <td colSpan="2" width="50%">
-          <img alt="AspectJ[TM] is" src="http://www.eclipse.org/aspectj/aspectjIs.gif "
-	       border="0" width="241" height="25">
-	</td>
-
-        <td colSpan="2" width="50%">
-          <img alt="aspectj enables" src="http://www.eclipse.org/aspectj/aspectjEnables.gif "
-	       border="0" width="241" height="25">
-	</td>
-      </tr>
-      <tr>
-        <td width="10">&nbsp;</td>
-        <td valign="top">
-         <ul>
-          <li> a seamless aspect-oriented extension
-        to the Java<sup><small>tm</small></sup> programming language</li>
-
-          <li>Java platform compatible</li>
-          <li>easy to learn and use</li>
-         </ul>
-        </td>
-        <td width="10">&nbsp;</td>
-        <td valign="top">
-	<ul>
-	  <li>clean modularization of crosscutting concerns, such as error 
-	    checking and handling, synchronization, context-sensitive behavior, 
-	    performance optimizations, monitoring and logging, debugging support, 
-	    and multi-object protocols
-	  </li>
-
-	</ul>
-      </td>
-      </tr>
-    </table>
-
-<div class="homeitem" style="width: 97%">
-  <h3>Quick Links</h3>
-	<ul>
-<li>For Eclipse development: <a href="http://www.eclipse.org/ajdt">AJDT: The AspectJ Development Tools</a></li>
-<li>Popular AspectJ downloads: <a href="http://www.eclipse.org/aspectj/downloads.php#most_recent">Latest development build</a> | <a href="http://www.eclipse.org/aspectj/downloads.php#stable_release">Latest stable release</a> | <a href="http://www.eclipse.org/aspectj/downloads.php">More downloads...</a></li>
-	<li>Popular AspectJ docs: <a href="http://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html">AspectJ 5 Developer's Notebook</a> | <a href="http://www.eclipse.org/aspectj/doc/released/progguide/index.html">Programming Guide</a> | <a href="http://www.eclipse.org/aspectj/docs.php">More docs...</a></li>
-        <li><a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">Eclipse AspectJ: </a> the book, by some of the leading AspectJ committers</li>
-        <li><a href="http://aosd.net/">AOSD.net</a></li>
-        <li><a href="http://www.parc.com/research/csl/projects/aspectj/default.html">AspectJ PARC Page</a></li>
-</ul>
-</div>
-		
-		<div class="homeitem">
-			<h3>News and Events</h3>
-	                <ul>
-
-	<li>
-   AspectJ 1.5.2 is now <a href="downloads.php">available for download</a>.
-   It includes approximately 60 fixes and enhancements that have been incorporated since the 1.5.1a 
-   release.  For full details see the 
-   <a href="doc/released/README-152.html">1.5.2 README</a>.
-   <br><div align="right"><span class="dates"><i>posted 30-06-06</i></span></div>
-   </li>
-   
-   <li>
-   AspectJ 1.5.2 release candidate 1 is now <a href="downloads.php">available for download</a>.
-   It includes approximately 60 fixes and enhancements that have been incorporated since the 1.5.1 
-   release.  For full details see the 
-   <a href="doc/released/README-152.html">1.5.2 README</a>.
-   <br><div align="right"><span class="dates"><i>posted 26-06-06</i></span></div>
-	</li>
-   
-	<li>
-A podcast <a href="http://www.se-radio.net/index.php?post_id=78154">
-   interview with Gregor Kiczales</a> recorded at this year's AOSD conference
-   is now available at <a href="http://www.se-radio.net">Software Engineering Radio</a>.
-   The interview covers a number of topics including the history of AOP, the
-   relationship of AOP to interceptors, industry acceptance of AOP, early aspects,
-   and adoption strategies.
-
-<br><div align="right"><span class="dates"><i>posted 09-04-06</i></span></div>
-	</li>
-
-<li>
-AspectJ 1.5.1 is now <a href="downloads.php">available for download</a>. This
-   release contains a number of bug fixes and minor enhancements from 1.5.0, together
-   with performance and memory usage improvements resulting in greatly reduced
-   memory usage when building from within AJDT (and noticeable improvements outside
-   of AJDT too). For full details see the 
-   <a href="doc/released/README-151.html">1.5.1 README</a>.
-
-<br><div align="right"><span class="dates"><i>posted 04-04-06</i></span></div>
-</li>
-
-	                </ul>
-	       </div>
-
-	<div class="homeitem">
-			<h3>Recent Books and Articles</h3>
-	          <ul>
-<li>
-<a target="_top" href="http://www-128.ibm.com/developerworks/java/library/j-aopwork17.html">	
-               &quot;AOP@Work: Component Design with Contract4J&quot;</a>
-         by n Wampler
-</li>
-
-<li>
-<a target="_top" href="http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=AOP@work">	
-               &quot;AOP@Work series on IBM developerWorks&quot;</a>
-         Series lead: Nicholas Lesiecki
-</li>
-
-<li>
-<a target="_top" href="http://www.ratio.co.uk/objectiveview.html">	
-               &quot;Introduction to AOP&quot;</a> in ObjectiveView Issue 9
-         by Alex Ruiz
-</li>
-
-<li>
-      	<a target="_top" href="http://www.ibm.com/developerworks/java/library/j-aopwork15/">	
-               &quot;AOP@Work: AOP myths and realities&quot;</a>
-         by Ramnivas Laddad
-</li>
-
-<li>
-      	<a target="_top" href="http://www.ibm.com/developerworks/java/library/j-aopwork14/">	
-               &quot;AOP@Work: Check out library aspects with AspectJ 5&quot;</a>
-         by Wes Isberg
-</li>
-
-<li>
-      	<a target="_top" href="http://www.ibm.com/developerworks/java/library/j-aopwork13.html">	
-               &quot;AOP@Work: Dependency Injection with AspectJ and Spring&quot;</a>
-         by Adrian Colyer
-</li>
-
-</ul>
-</div>
-
-	<hr class="clearer" />
-		
-
-</div>
-
-<!--
-	<div id="rightcolumn" style="width: 170px">
-		<div class="sideitem">
-			<h6>Related links</h6>
-			<ul>
-				<li><a href="http://eclipse.org/ajdt">AJDT</a></li>
-				<li><a href="http://aosd.net">AOSD.net</li>
-				<li><a href="http://www.parc.com/research/csl/projects/aspectj/default.html">AspectJ PARC Page</li>
-				<li><a href="http://www.amazon.com/exec/obidos/ASIN/0321245873/qid=1112868888/sr=2-3/ref=pd_bbs_b_2_3/103-5274059-2049410">Eclipse AspectJ Book</li>
-
-			</ul>
-		</div>
-		<div class="sideitem">
-			<h6>The Aspects Blog</h6>
-			<ul>
-	   <li><a href="http://www.aspectprogrammer.org/blogs/adrian/2006/03/graham_hamilton.html" title="Graham Hamilton on AOP" target="external">Graham Hamilton on AOP</a></li>
-<li><a href="http://www.aspectprogrammer.org/blogs/adrian/2006/02/tips_for_using.html" title="Tips for using Eclipse effectively" target="external">Tips for using Eclipse effectively</a></li>
-
-<li><a href="http://www.aspectprogrammer.org/blogs/adrian/2006/02/a_practical_gui_2.html" title="A Practical Guide to Using an Aspect Library (part I)" target="external">A Practical Guide to Using an Aspect Library (part I)</a></li>
-
-			</ul>
-		</div>
-
-		<div class="sideitem">
-			<h6>Alex Vasseur's blog</h6>
-			<ul>
-	   <li><a href="http://blogs.codehaus.org/people/avasseur/archives/001308_free_as_open_source_they_said.html" title="Free as Open Source they said?" target="external">Free as Open Source they said?</a></li>
-<li><a href="http://blogs.codehaus.org/people/avasseur/archives/001290_microsoft_goes_aop.html" title="Microsoft goes AOP?" target="external">Microsoft goes AOP?</a></li>
-
-<li><a href="http://blogs.codehaus.org/people/avasseur/archives/001281_spring_2x_innovation_or_maturity.html" title="Spring 2.x -  innovation or maturity?" target="external">Spring 2.x -  innovation or maturity?</a></li>
-			</ul>
-		</div>
-
-		<div class="sideitem">
-			<h6>Aspectivity</h6>
-			<ul>
-	    <li><a href="http://ramnivas.com/blog/index.php?p=23" title="AOP Madness and Sanity: A Response" target="external">AOP Madness and Sanity: A Response</a></li>
-<li><a href="http://ramnivas.com/blog/index.php?p=22" title="AOP: Myths and realities" target="external">AOP: Myths and realities</a></li>
-
-<li><a href="http://ramnivas.com/blog/index.php?p=21" title="Javapolis Experience" target="external">Javapolis Experience</a></li>
-			</ul>
-		</div>
-
-		<div class="sideitem">
-			<h6>Ron Bodkin on AOP</h6>
-			<ul>
-	  <li><a href="http://rbodkin.blogs.com/ron_bodkins_blog/2006/03/industry_case_s.html" title="Industry Case Studies at AOSD 2006" target="external">Industry Case Studies at AOSD 2006</a></li>
-<li><a href="http://rbodkin.blogs.com/ron_bodkins_blog/2006/03/demos_at_aosd_2.html" title="Demos at AOSD 2006" target="external">Demos at AOSD 2006</a></li>
-
-<li><a href="http://rbodkin.blogs.com/ron_bodkins_blog/2006/03/enterprise_aop_.html" title="Enterprise AOP Tutorial at AOSD" target="external">Enterprise AOP Tutorial at AOSD</a></li>
-
-			</ul>
-		</div>
-
-		<div class="sideitem">
-			<h6>Jonas Bonér's blog</h6>
-			<ul>
-	   <li><a href="http://feeds.feedburner.com/grubbel?m=44" title="The Optimized Null Check Pattern" target="external">The Optimized Null Check Pattern</a></li>
-<li><a href="http://feeds.feedburner.com/grubbel?m=43" title="Interview" target="external">Interview</a></li>
-
-<li><a href="http://feeds.feedburner.com/grubbel?m=42" title="Want To Work At Terracotta?" target="external">Want To Work At Terracotta?</a></li>
-
-			</ul>
-		</div>
-
-		<div class="sideitem">
-			<h6>Dion Almaer on AOP</h6>
-			<ul>
-	  <li><a href="http://www.almaer.com/blog/archives/001056.html" title="Application Monitoring with AspectJ, JMX, and GlassBox" target="external">Application Monitoring with AspectJ, JMX, and GlassBox</a></li>
-<li><a href="http://www.almaer.com/blog/archives/001046.html" title="Future of AOP 2005: Jonas Boner and Adrian Colyer move on!" target="external">Future of AOP 2005: Jonas Boner and Adrian Colyer move on!</a></li>
-
-<li><a href="http://www.almaer.com/blog/archives/000961.html" title="JVM support for AOP in JRockit" target="external">JVM support for AOP in JRockit</a></li>
-
-			</ul>
-		</div>
-
-
-	</div>
-
--->
-
-</div>
-
-
-EOHTML;
-
-
-	# Generate the web page
-	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
diff --git a/index_old.php b/index_old.php
new file mode 100644
index 0000000..40c4d71
--- /dev/null
+++ b/index_old.php
@@ -0,0 +1 @@
+<?php require('aspectj.php'); ?>
\ No newline at end of file
diff --git a/plans_new.php b/plans_new.php
index 39725b9..6988d86 100644
--- a/plans_new.php
+++ b/plans_new.php
@@ -14,7 +14,7 @@
 	
 	#
 	# Begin: page-specific settings.  Change these. 
-	$pageTitle 		= "AspectJ";
+	$pageTitle 		= "AspectJ Plans";
 	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
 	$pageAuthor		= "Andy Clement";
 	
@@ -26,19 +26,17 @@
 
 	# End: page-specific settings
 	#
-		
-	$rightcolumn = file_get_contents("rightcolumn.html");
-		
+				
 	# Paste your HTML content between the EOHTML markers!	
 	$html = <<<EOHTML
 
 <div id="maincontent">
 	<div id="midcolumn">
 	
-	<div align="center"><h1>$pageTitle</h1></div>
+	<h1>Plans</h1>
 
 <p>
-<i>Last updated: 19 May 2006</i>
+<i>Last updated: 20 October 2006</i>
 </p>
 
 <p>
@@ -52,9 +50,25 @@
 </p>
 
 <div class="homeitem3col">
+	<h3>AspectJ 1.5.3</h3>
+	<p>
+	Status: Planned for October 2006
+	</p>
+	 <p>
+      Release themes:
+    </p>
+
+    <ul>
+       <li>Improved memory usage</li>        
+       <li>Improved LTW</li>
+       <li>Improved serviceability</li>
+    </ul>
+</div>
+
+<div class="homeitem3col">
 	<h3>AspectJ 1.5.2</h3>
 	<p>
-	Status: Planned for June/July 2006 <br>
+	Released: 30th June 2006
 	</p>
 	 <p>
       Release themes:
@@ -83,27 +97,9 @@
         </ul>
 </div>
 
-<div class="homeitem3col">
-	<h3>AspectJ 1.5.0</h3>
-		<p>
-		Released: 20th December 2005
-		</p>
-		
-        <p>
-          Release themes:
-        </p>
-
-        <ul>
-           <li>Integrate Java5 with AspectJ</li>
-        </ul>
-
-</div>
-
-
 		<hr class="clearer" />
 	</div>
 
-	$rightcolumn
 </div>
 
 
diff --git a/teaching.php b/teaching.php
index 60c9451..c20c001 100644
--- a/teaching.php
+++ b/teaching.php
@@ -1,16 +1,39 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>The AspectJ project at Eclipse.org: Teaching</title>
-  <link rel="stylesheet" href="aspectj_style.css" type="text/css" />
-</head>
-<body>
-<div id="container">
-<?php require("banner.html"); ?>
-<div id="main">
-  <!-- ================ Page specific content starts here ================ -->
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
 
-<h1>who's teaching aosd</h1>
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "The AspectJ Project: Teaching";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
+	$pageAuthor		= "Type your name here";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+	# End: page-specific settings	
+		
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn" style="width: 80%">
+
+	  <h1>Who's teaching AOSD</h1>
+
 <p> This list is a compilation of responses to a query sent out in November 2004 to find out
 which establishments and individuals were teaching courses on the topic of
 aspect-oriented software development, or courses that included some AOSD content. The
@@ -20,12 +43,12 @@
 this list then please let us know.</p>
 
 <h2>Courses with online materials</h2>
-<table border="1" width="100%">
+<table border="1" cellspacing="0" cellpadding="5" width="100%">
   <thead>
     <tr>
-      <td>Lecturer(s)</td>
-      <td>Organisation</td>
-      <td>Details</td>
+      <th>Lecturer(s)</th>
+      <th>Organisation</th>
+      <th>Details</th>
     </tr>
   </thead>
   <tbody>
@@ -178,12 +201,12 @@
 </table>
 
 <h2>Other academic courses</h2>
-<table border="1" width="100%">
+<table border="1" cellspacing="0" cellpadding="5" width="100%">
   <thead>
     <tr>
-      <td>Lecturer(s)</td>
-      <td>Organisation</td>
-      <td>Details</td>
+      <th>Lecturer(s)</th>
+      <th>Organisation</th>
+      <th>Details</th>
     </tr>
   </thead>
   <tbody>
@@ -235,12 +258,12 @@
 </table>
 
 <h2>Open source offerings</h2>
-<table border="1" width="100%">
+<table border="1" cellspacing="0" cellpadding="5" width="100%">
   <thead>
     <tr>
-      <td>Instructor</td>
-      <td>Organisation</td>
-      <td>Details</td>
+      <th>Instructor</th>
+      <th>Organisation</th>
+      <th>Details</th>
     </tr>
   </thead>
   <tbody>
@@ -257,12 +280,12 @@
 </table>
 
 <h2>Commercial offerings</h2>
-<table border="1" width="100%">
+<table border="1" cellspacing="0" cellpadding="5" width="100%">
   <thead>
     <tr>
-      <td>Instructor</td>
-      <td>Organisation</td>
-      <td>Details</td>
+      <th>Instructor</th>
+      <th>Organisation</th>
+      <th>Details</th>
     </tr>
   </thead>
   <tbody>
@@ -303,8 +326,16 @@
   </tbody>
 </table>
 
-  <!-- ================ End of page specific content ===================== -->
+<br clear="all">
+
+	</div>
+
 </div>
-</div>
-</body>
-</html>
\ No newline at end of file
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/team.php b/team.php
new file mode 100644
index 0000000..2240d21
--- /dev/null
+++ b/team.php
@@ -0,0 +1,97 @@
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "AspectJ Committers and Contributors";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse, Contributors";
+	$pageAuthor		= "Andy Clement";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+	# End: page-specific settings
+	#
+				
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn">
+	
+	<h1>Team</h1>
+	
+	<p>We are grateful to the following for their contributions to the AspectJ project:</p>
+
+	<div class="homeitem">
+		<h3>Committers</h3>
+			<table cellpadding="2">
+	  <tr>
+        <td><a href="http://aspectprogrammer.org"/>Adrian Colyer</a></td>
+        <td>Interface 21</td>
+      </tr>
+	  <tr>
+        <td>Andy Clement</td>
+        <td>IBM UK Ltd</td>
+      </tr>
+	  <tr>
+        <td>Wes Isberg</td>
+        <td></td>
+      </tr>
+	  <tr>
+        <td><a href="http://kerstens.org/mik">Mik Kersten</a></td>
+        <td>University of British Columbia</td>
+      </tr>
+      <tr>
+        <td>Alex Vasseur</td>
+        <td>BEA</td>
+      </tr> 
+      <tr>
+        <td>Matthew Webster</td>
+        <td>IBM UK Ltd</td>
+      </tr>
+      <tr></tr>
+
+			</table>
+	</div>
+	
+			<div class="homeitem">
+		<h3>Contributors</h3>
+			<table cellpadding="2">
+       <tr>
+          <td>Helen Hawkins</td>
+          <td>IBM UK Ltd</td>
+        </tr>
+        <tr>
+          <td>Ron Bodkin</td>
+          <td></td>
+        </tr>    		
+			</table>
+	</div>	
+	
+		<hr class="clearer" />
+	</div>
+
+</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/userlists.php b/userlists.php
new file mode 100644
index 0000000..1c010e9
--- /dev/null
+++ b/userlists.php
@@ -0,0 +1,96 @@
+<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+
+	#*****************************************************************************
+	#
+	# template.php
+	#
+	# Author: 		Denis Roy
+	# Date:			2005-06-16
+	#
+	# Description: Type your page comments here - these are not sent to the browser
+	#
+	#
+	#****************************************************************************
+	
+	#
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle 		= "AspectJ User Mailing lists";
+	$pageKeywords	= "AspectJ, AJDT, Aspect Oriented Software Development, Eclipse";
+	$pageAuthor		= "Type your name here";
+	
+	# Add page-specific Nav bars here
+	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
+	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
+	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);
+
+	# End: page-specific settings	
+		
+	# Paste your HTML content between the EOHTML markers!	
+	$html = <<<EOHTML
+
+<div id="maincontent">
+	<div id="midcolumn" style="width: 80%">
+
+	  <h1>Mailing lists</h1>
+
+		<div class="homeitem3col">
+			<h3>aspectj-users@eclipse.org</h3>
+			<ul>
+				<li><a href="https://dev.eclipse.org/mailman/listinfo/aspectj-users">
+	    	aspectj-users at eclipse.org</a><br>
+	    	Supports discussion among AspectJ users and developers on topics such 
+	    	as language design, new features, and best usage practices.</li>
+	    	
+	    		<li><a href="http://dev.eclipse.org/mhonarc/lists/aspectj-users/maillist.html">
+	    	Mailing list archive</a></li>
+	    	
+	    		<li><a href="http://www.eclipse.org/search/search.cgi?cmd=Search%21&form=extended&ps=10&m=all&t=5&ul=%2Fmhonarc%2Flists%2Faspectj-users&wm=wrd&t=News&t=Mail">Search list</a></li>
+			
+			</ul>
+		</div>
+
+		<div class="homeitem3col">
+			<h3>aspectj-announce@eclipse.org</h3>
+			<ul>
+				<li><a href="https://dev.eclipse.org/mailman/listinfo/aspectj-announce">
+	    	aspectj-announce at eclipse.org</a><br>
+	    	Used only to announce new releases and other important events. This is 
+	    	a low traffic list.</li>
+	    	
+	    		<li><a href="http://dev.eclipse.org/mhonarc/lists/aspectj-announce/maillist.html">
+	    	Mailing list archive</a></li>
+	    	
+	    		<li><a href="http://www.eclipse.org/search/search.cgi?cmd=Search%21&form=extended&ps=10&m=all&t=5&ul=%2Fmhonarc%2Flists%2Faspectj-announce&wm=wrd&t=News&t=Mail">Search list</a></li>
+			
+			</ul>
+		</div>
+
+		<div class="homeitem3col">
+			<h3>Archives</h3>
+			<ul>
+				<li><a href="http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/archives/users.zip">
+	    	users at aspectj.org  ZIP archive (deprecated mailing list)</a>
+	    	<br>These archives contain user discussion from August 1999 - December 2002.
+ 				</li>
+	    	
+	    		<li><a href="http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/archives/announce.zip">
+		    announce at aspectj.org ZIP archive (deprecated mailing list)</a>		
+			<br>These archives contain announcement messages from August 1999 - 
+		    December 2002.
+	    		</li>
+			
+			</ul>
+		</div>
+
+	</div>
+
+</div>
+
+
+EOHTML;
+
+
+	# Generate the web page
+	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>