diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/api/progress/APIProgressScanner.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/api/progress/APIProgressScanner.java
index e6edb05cd60e59de0c28d9c0fd61d1ddfde4b431..82d3d7cfc03a732df6ff719c987c5e9817c77a61 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/api/progress/APIProgressScanner.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/api/progress/APIProgressScanner.java
@@ -19,8 +19,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -111,6 +111,8 @@ public class APIProgressScanner extends AbstractEmitter
     final StringBuffer apiProgress = new StringBuffer();
     apiProgress.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
     apiProgress.append("<root>");
+    if (src != null && api != null)
+      apiProgress.append(validatePlugins());
     ILocation loc = Location.createLocation(new File(outputDir));
     loc.accept(
     new ILocationVisitor()
@@ -121,13 +123,35 @@ public class APIProgressScanner extends AbstractEmitter
         {
           apiProgress.append("<api-info file=\"./");
           apiProgress.append(location.getAbsolutePath().substring(outputDir.length()));
+          try
+          {
+            ComponentAPI compAPI = new ComponentAPI();
+            compAPI.setLocation(location);
+            compAPI.load();
+            String id = compAPI.getName();
+            if (id != null)
+            {
+              String compName = (String)pluginId2CompName.get(id);
+              if (compName != null)
+              {
+                OverviewDocLoader loader = new OverviewDocLoader(compName);
+                String url = loader.getOverviewDocURL();
+                if (url != null)
+                {
+                  apiProgress.append("\" overviewDoc=\"");
+                  apiProgress.append(url);
+                }
+              }
+            }
+          }
+          catch (Throwable t)
+          {
+          }
           apiProgress.append("\"/>");
         }
         return true;
       }
     });
-    if (src != null && api != null)
-      apiProgress.append(validatePlugins());
     apiProgress.append("</root>");
     try
     {
@@ -173,6 +197,8 @@ public class APIProgressScanner extends AbstractEmitter
     }
   }
 
+  private Map pluginId2CompName = new HashMap();
+
   private String validatePlugins()
   {
     StringBuffer sb = new StringBuffer();
@@ -190,9 +216,11 @@ public class APIProgressScanner extends AbstractEmitter
       for (Iterator it = compXMLVisitor.getCompXMLs().iterator(); it.hasNext();)
       {
         ComponentXML compXML = (ComponentXML)it.next();
+        String compName = compXML.getName();
         for (Iterator it2 = compXML.getPlugins().iterator(); it2.hasNext();)
         {
           String id = ((Plugin)it2.next()).getId();
+          pluginId2CompName.put(id, compName);
           if (pluginIds.contains(id))
             pluginsInMoreThan1Comp.add(id);
           else
@@ -371,61 +399,43 @@ public class APIProgressScanner extends AbstractEmitter
     System.out.println("\t-progressDir\t<progressDir>\tdirectory containing API progress documents");
   }
 
-  private class OverviewDocLoader extends Thread
+  private class OverviewDocLoader
   {
-    private APIProgressEntry entry;
-    private boolean done;
+    private String componentName;
 
-    public OverviewDocLoader(APIProgressEntry entry)
+    public OverviewDocLoader(String componentName)
     {
-      this.entry = entry;
-      this.done = false;
+      this.componentName = componentName;
     }
 
-    public void run()
+    public String getOverviewDocURL()
     {
+      InputStream is = null;
       try
       {
-        String compName = entry.getCompName();
-        String subproject = null;
-        String component = null;
-        if (compName.startsWith("org.eclipse."))
-        {
-          compName = compName.substring(12);
-          int index = compName.indexOf('.');
-          if (index != -1)
-          {
-            subproject = compName.substring(0, index);
-            component = compName.substring(index + 1);
-          }
-        }
-        if (subproject != null && component != null)
-        {
-          StringBuffer url = new StringBuffer("http://eclipse.org/webtools/");
-          url.append(subproject);
-          url.append("/components/");
-          url.append(component);
-          url.append("/overview.html");
-          URL overviewDoc = new URL(url.toString());
-          InputStream is = overviewDoc.openStream();
-          is.close();
-          entry.setOverviewDoc(url.toString());
-        }
+        StringBuffer url = new StringBuffer("http://www.eclipse.org/webtools/components/");
+        url.append(componentName);
+        url.append("/");
+        URL overviewDoc = new URL(url.toString());
+        is = overviewDoc.openStream();
+        return url.toString();
       }
       catch (Throwable t)
       {
       }
       finally
       {
-        done = true;
+        try
+        {
+          if (is != null)
+            is.close();
+        }
+        catch (Throwable t)
+        {
+          t.printStackTrace();
+        }
       }
-    }
-
-    public void waitFor()
-    {
-      long start = Calendar.getInstance().getTimeInMillis();
-      while (!done && (Calendar.getInstance().getTimeInMillis() - start) < 60000)
-        Thread.yield();
+      return null;
     }
   }
 }
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/xsl/api-progress.xsl b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/xsl/api-progress.xsl
index 47d218006fd2ff63fcfd2380c103973d3f6da625..bc77f6eaabd5d9dc7fbef6054f83e233852bc19b 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/xsl/api-progress.xsl
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/xsl/api-progress.xsl
@@ -345,7 +345,7 @@
 			<td align="center" valign="top">
 				<xsl:choose>
 					<xsl:when test="$overviewDoc">
-						<a href="{$overviewDoc}">Yes</a>
+						<a href="{$overviewDoc}" target="_blank">Yes</a>
 					</xsl:when>
 					<xsl:otherwise>
 						No