diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/CombineClass2Reference.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/CombineClass2Reference.java
index f3b28b534957fb3109d77052207cfdab9ffe8af0..a3672e37ae4b81d75f981b30218d8fd1ab2875e4 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/CombineClass2Reference.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/CombineClass2Reference.java
@@ -12,14 +12,21 @@ package org.eclipse.wtp.releng.tools.component.adopters;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import org.eclipse.wtp.releng.tools.component.ILocation;
+import org.eclipse.wtp.releng.tools.component.api.ComponentXMLVisitor;
+import org.eclipse.wtp.releng.tools.component.internal.Location;
+import org.eclipse.wtp.releng.tools.component.model.ComponentXML;
+import org.eclipse.wtp.releng.tools.component.model.Package;
+import org.eclipse.wtp.releng.tools.component.model.Plugin;
+import org.eclipse.wtp.releng.tools.component.model.Type;
 import org.eclipse.wtp.releng.tools.component.util.CommandOptionParser;
 import org.eclipse.wtp.releng.tools.component.xsl.XSLUtil;
 
@@ -35,6 +42,7 @@ public class CombineClass2Reference
   ComponentLead unknown;
   private Collection src;
   private String output;
+  private Collection api;
 
   private class ComponentLead
   {
@@ -102,8 +110,37 @@ public class CombineClass2Reference
     this.output = output;
   }
 
+  public Collection getApi()
+  {
+    return api;
+  }
+
+  public void setApi(Collection api)
+  {
+    this.api = api;
+  }
+
   public void execute()
   {
+    // Collect component.xml files
+    Map pluginId2CompXML = new HashMap();
+    if (api != null)
+    {
+      for (Iterator i = api.iterator(); i.hasNext();)
+      {
+        ILocation apiLocation = Location.createLocation(new File((String)i.next()));
+        ComponentXMLVisitor compXMLVisitor = new ComponentXMLVisitor();
+        apiLocation.accept(compXMLVisitor);
+        for (Iterator it = compXMLVisitor.getCompXMLs().iterator(); it.hasNext();)
+        {
+          ComponentXML compXML = (ComponentXML)it.next();
+          for (Iterator it2 = compXML.getPlugins().iterator(); it2.hasNext();)
+          {
+            pluginId2CompXML.put(((Plugin)it2.next()).getId(), compXML);
+          }
+        }
+      }
+    }
     for (Iterator it = src.iterator(); it.hasNext();)
     {
       FileInputStream fis = null;
@@ -117,6 +154,7 @@ public class CombineClass2Reference
           int pluginRefTotal = 0;
           PluginRef pluginRef = (PluginRef)it2.next();
           String pluginId = pluginRef.getId();
+          ComponentXML compXML = (ComponentXML)pluginId2CompXML.get(pluginId);
           ComponentLead compLead = unknown;
           for (Iterator it3 = plugin2complead.keySet().iterator(); it3.hasNext();)
           {
@@ -131,6 +169,9 @@ public class CombineClass2Reference
           {
             ClassRef classRef = (ClassRef)it3.next();
             String name = classRef.getName();
+            String pkgName = getPackageName(name);
+            if (isAPI(compXML, pkgName, name.substring(pkgName.length() + 1), classRef.getRefCount(), classRef.getSubclassCount(), classRef.getImplementCount(), classRef.getInstantiateCount()))
+              continue;
             int refCount = classRef.getRefCount();
             pluginRefTotal += refCount;
             Integer refTotal = (Integer)compLead.class2refCount.get(name);
@@ -140,7 +181,6 @@ public class CombineClass2Reference
             }
             refTotal = new Integer(refCount + refTotal.intValue());
             compLead.class2refCount.put(name, refTotal);
-            String pkgName = getPackageName(name);
             Integer pkgRefTotal = (Integer)compLead.pkg2refCount.get(pkgName);
             if (pkgRefTotal == null)
             {
@@ -173,6 +213,34 @@ public class CombineClass2Reference
     genHTML();
   }
 
+  private boolean isAPI(ComponentXML compXML, String pkgName, String localName, int refCount, int subclassCount, int impleCount, int instantiateCount)
+  {
+    if (compXML == null)
+      return false;
+    Package pkg = compXML.getPackage(pkgName);
+    if (pkg == null)
+      return false;
+    else
+    {
+      Type type = pkg.getType(localName);
+      if (type == null)
+        return pkg.isApi();
+      else
+      {
+        if (refCount > 0 && !type.isReference())
+          return false;
+        else if (subclassCount > 0 && !type.isSubclass())
+          return false;
+        else if (impleCount > 0 && !type.isImplement())
+          return false;
+        else if (instantiateCount > 0 && !type.isInstantiate())
+          return false;
+        else
+          return true;
+      }
+    }
+  }
+
   private String getPackageName(String className)
   {
     int i = className.lastIndexOf('.');
@@ -305,6 +373,7 @@ public class CombineClass2Reference
     Map options = optionParser.getOptions();
     Collection src = (Collection)options.get("src");
     Collection output = (Collection)options.get("output");
+    Collection api = (Collection)options.get("api");
     if (src == null || output == null || src.isEmpty() || output.isEmpty())
     {
       printUsage();
@@ -314,6 +383,7 @@ public class CombineClass2Reference
     CombineClass2Reference class2Ref = new CombineClass2Reference();
     class2Ref.setSrc(src);
     class2Ref.setOutput((String)output.iterator().next());
+    class2Ref.setApi(api);
     class2Ref.execute();
   }
 
@@ -323,5 +393,6 @@ public class CombineClass2Reference
     System.out.println("");
     System.out.println("\t-src\t\t<src>\t\tlocation of your usage reports");
     System.out.println("\t-output\t<output>\t\tlocation of the output file");
+    System.out.println("\t-api\t\t<api>\t\tlocation of your component.xml");
   }
 }
\ No newline at end of file