diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
index a5cf964..b9ed2cb 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
@@ -28,7 +28,6 @@
 	private String fName;
 	private boolean fOptional;
 	private int fSearchLocation = ROOT;
-	private int fMatch = NONE;
 	private String fOs;
 	private String fWs;
 	private String fArch;
@@ -42,7 +41,6 @@
 		fOptional = false;
 		fName = null;
 		fSearchLocation = ROOT;
-		fMatch = NONE;
 		fOs = null;
 		fWs = null;
 		fArch = null;
@@ -61,15 +59,6 @@
 		fArch = getNodeAttribute(node, "arch"); //$NON-NLS-1$
 		fNl = getNodeAttribute(node, "nl"); //$NON-NLS-1$
 		fFilter = getNodeAttribute(node, "filter"); //$NON-NLS-1$
-		String matchName = getNodeAttribute(node, "match"); //$NON-NLS-1$
-		if (matchName != null) {
-			for (int i = 0; i < RULE_NAME_TABLE.length; i++) {
-				if (matchName.equals(RULE_NAME_TABLE[i])) {
-					fMatch = i;
-					break;
-				}
-			}
-		}
 		String searchLocationName = getNodeAttribute(node, "search_location"); //$NON-NLS-1$
 		if (searchLocationName == null) {
 			searchLocationName = getNodeAttribute(node, "search-location"); //$NON-NLS-1$
@@ -123,11 +112,6 @@
 	}
 
 	@Override
-	public int getMatch() {
-		return fMatch;
-	}
-
-	@Override
 	public String getOS() {
 		return fOs;
 	}
@@ -180,14 +164,6 @@
 	}
 
 	@Override
-	public void setMatch(int match) throws CoreException {
-		ensureModelEditable();
-		Integer oldValue = Integer.valueOf(this.fMatch);
-		this.fMatch = match;
-		firePropertyChanged(P_MATCH, oldValue, Integer.valueOf(match));
-	}
-
-	@Override
 	public void setSearchLocation(int searchLocation) throws CoreException {
 		ensureModelEditable();
 		Integer oldValue = Integer.valueOf(this.fSearchLocation);
@@ -255,9 +231,6 @@
 		case P_NAME:
 			setName((String) newValue);
 			break;
-		case P_MATCH:
-			setMatch(newValue != null ? ((Integer) newValue).intValue() : NONE);
-			break;
 		case P_OS:
 			setOS((String) newValue);
 			break;
@@ -307,10 +280,6 @@
 			writer.println();
 			writer.print(indent2 + "optional=\"true\""); //$NON-NLS-1$
 		}
-		if (fMatch != NONE) {
-			writer.println();
-			writer.print(indent2 + "match=\"" + RULE_NAME_TABLE[fMatch] + "\""); //$NON-NLS-1$ //$NON-NLS-2$
-		}
 		if (getOS() != null) {
 			writer.println();
 			writer.print(indent2 + "os=\"" + getOS() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java
index bd19a3f..bbbd421 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java
@@ -15,16 +15,14 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.pde.core.IIdentifiable;
-import org.eclipse.pde.core.plugin.IMatchRules;
 
 /**
  * The reference to a plug-in that is part of this feature.
  */
-public interface IFeatureChild extends IFeatureObject, IIdentifiable, IMatchRules, IEnvironment {
+public interface IFeatureChild extends IFeatureObject, IIdentifiable, IEnvironment {
 	String P_VERSION = "version"; //$NON-NLS-1$
 	String P_OPTIONAL = "optional"; //$NON-NLS-1$
 	String P_NAME = "name"; //$NON-NLS-1$
-	String P_MATCH = "match"; //$NON-NLS-1$
 	String P_FILTER = "filter"; //$NON-NLS-1$
 	String P_SEARCH_LOCATION = "search-location"; //$NON-NLS-1$
 
@@ -48,10 +46,6 @@
 
 	void setSearchLocation(int location) throws CoreException;
 
-	int getMatch();
-
-	void setMatch(int match) throws CoreException;
-
 	String getFilter();
 
 	void setFilter(String filter) throws CoreException;
