diff --git a/features/org.eclipse.oomph.setup-feature/feature.xml b/features/org.eclipse.oomph.setup-feature/feature.xml
index f0fe24f..4e775c0 100644
--- a/features/org.eclipse.oomph.setup-feature/feature.xml
+++ b/features/org.eclipse.oomph.setup-feature/feature.xml
@@ -12,7 +12,7 @@
 <feature
       id="org.eclipse.oomph.setup"
       label="%featureName"
-      version="1.18.0.qualifier"
+      version="1.19.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.oomph.license"
       license-feature-version="0.0.0">
diff --git a/features/org.eclipse.oomph.setup-feature/pom.xml b/features/org.eclipse.oomph.setup-feature/pom.xml
index 42d25cc..9e11e36 100644
--- a/features/org.eclipse.oomph.setup-feature/pom.xml
+++ b/features/org.eclipse.oomph.setup-feature/pom.xml
@@ -20,6 +20,6 @@
   </parent>
   <groupId>org.eclipse.oomph.features</groupId>
   <artifactId>org.eclipse.oomph.setup</artifactId>
-  <version>1.18.0-SNAPSHOT</version>
+  <version>1.19.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF
index bb0a565..eb8ecc9 100644
--- a/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.installer/META-INF/MANIFEST.MF
@@ -12,7 +12,7 @@
  org.eclipse.emf.edit.ui;bundle-version="[2.10.0,3.0.0)",
  org.eclipse.oomph.setup;bundle-version="[1.18.0,2.0.0)",
  org.eclipse.oomph.setup.edit;bundle-version="[1.15.0,2.0.0)",
- org.eclipse.oomph.setup.ui;bundle-version="[1.18.0,2.0.0)",
+ org.eclipse.oomph.setup.ui;bundle-version="[1.19.0,2.0.0)",
  org.eclipse.equinox.p2.operations;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.metadata;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.core;bundle-version="[2.0.0,3.0.0)",
diff --git a/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/ProductCatalogGenerator.java b/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/ProductCatalogGenerator.java
index 0800cb5..952d826 100644
--- a/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/ProductCatalogGenerator.java
+++ b/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/ProductCatalogGenerator.java
@@ -150,6 +150,8 @@
 
   private static final String EPP_INSTALL_ROOTS_FILTER = "(org.eclipse.epp.install.roots=true)";
 
+  private static final Pattern ARCH_OS_FILTER_PATTERN = Pattern.compile("\\(\\&\\(osgi\\.arch=([^)]+)\\)\\(osgi\\.os=([^)]+)\\)\\)");
+
   private static final boolean IS_RANGE_NARROW = Boolean.FALSE;
 
   private static final String JUSTJ_JRES = "http://download.eclipse.org/justj/jres";
@@ -2097,7 +2099,7 @@
     }
 
     // Boil them down by versions, excluding minor versions.
-    // Because they are sorted this will grab the version with the larget micro version.
+    // Because they are sorted this will grab the version with the largest micro version.
     Map<Version, IInstallableUnit> jreVersions = new TreeMap<Version, IInstallableUnit>();
     for (IInstallableUnit iu : ius)
     {
@@ -2120,6 +2122,35 @@
       System.out.println("jre=" + iu + " -> " + childRepository.getLocation());
 
       Requirement jreRequirement = P2Factory.eINSTANCE.createRequirement(iu.getId());
+      StringBuilder compositeFilter = new StringBuilder();
+      for (IRequirement requirement : iu.getRequirements())
+      {
+        if (requirement instanceof IRequiredCapability)
+        {
+          IRequiredCapability capability = (IRequiredCapability)requirement;
+          IMatchExpression<IInstallableUnit> filter = capability.getFilter();
+          if (filter != null)
+          {
+            String value = RequirementImpl.formatMatchExpression(filter);
+            Matcher matcher = ARCH_OS_FILTER_PATTERN.matcher(value);
+            if (matcher.matches())
+            {
+              if (compositeFilter.length() == 0)
+              {
+                compositeFilter.append("(|");
+              }
+
+              compositeFilter.append(value);
+            }
+          }
+        }
+      }
+
+      if (compositeFilter.length() != 0)
+      {
+        jreRequirement.setFilter(compositeFilter.append(')').toString());
+      }
+
       Repository jreChildRepository = P2Factory.eINSTANCE.createRepository(childRepository.getLocation().toString());
 
       P2Task p2Task = SetupP2Factory.eINSTANCE.createP2Task();
diff --git a/plugins/org.eclipse.oomph.setup.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.ui/META-INF/MANIFEST.MF
index 03fcd79..93b067d 100644
--- a/plugins/org.eclipse.oomph.setup.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.ui/META-INF/MANIFEST.MF
@@ -2,17 +2,17 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.oomph.setup.ui;singleton:=true
-Bundle-Version: 1.18.0.qualifier
+Bundle-Version: 1.19.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.oomph.setup.ui.SetupUIPlugin$Implementation
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.oomph.setup.ui;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup.ui.actions;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup.ui.recorder;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup.ui.synchronizer;version="1.18.0";x-internal:=true,
- org.eclipse.oomph.setup.ui.wizards;version="1.18.0";x-internal:=true
+Export-Package: org.eclipse.oomph.setup.ui;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup.ui.actions;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup.ui.recorder;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup.ui.synchronizer;version="1.19.0";x-internal:=true,
+ org.eclipse.oomph.setup.ui.wizards;version="1.19.0";x-internal:=true
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.0.0,2.0.0)",
diff --git a/plugins/org.eclipse.oomph.setup.ui/pom.xml b/plugins/org.eclipse.oomph.setup.ui/pom.xml
index 92c0b95..295136a 100644
--- a/plugins/org.eclipse.oomph.setup.ui/pom.xml
+++ b/plugins/org.eclipse.oomph.setup.ui/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.oomph</groupId>
   <artifactId>org.eclipse.oomph.setup.ui</artifactId>
-  <version>1.18.0-SNAPSHOT</version>
+  <version>1.19.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/SetupWizard.java b/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/SetupWizard.java
index 5dc3ee2..96bf797 100644
--- a/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/SetupWizard.java
+++ b/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/SetupWizard.java
@@ -17,6 +17,7 @@
 import org.eclipse.oomph.jreinfo.JRE;
 import org.eclipse.oomph.jreinfo.JREManager;
 import org.eclipse.oomph.p2.Repository;
+import org.eclipse.oomph.p2.Requirement;
 import org.eclipse.oomph.p2.internal.core.CacheUsageConfirmer;
 import org.eclipse.oomph.p2.internal.ui.CacheUsageConfirmerUI;
 import org.eclipse.oomph.setup.AnnotationConstants;
@@ -50,6 +51,7 @@
 import org.eclipse.oomph.util.CollectionUtil;
 import org.eclipse.oomph.util.OS;
 import org.eclipse.oomph.util.PropertiesUtil;
+import org.eclipse.oomph.util.StringUtil;
 
 import org.eclipse.emf.common.ui.ImageURIRegistry;
 import org.eclipse.emf.common.util.EList;
@@ -69,6 +71,8 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.IPageChangeProvider;
 import org.eclipse.jface.dialogs.IPageChangedListener;
@@ -1374,6 +1378,7 @@
           {
             Macro jresMacro = (Macro)eObject;
             EList<SetupTask> setupTasks = jresMacro.getSetupTasks();
+            LOOP: //
             for (SetupTask setupTask : setupTasks)
             {
               if (setupTask instanceof P2Task)
@@ -1384,6 +1389,17 @@
                 if (matcher.find())
                 {
                   EList<Repository> repositories = jreP2Task.getRepositories();
+                  for (Requirement requirement : jreP2Task.getRequirements())
+                  {
+                    // The requirements capture filter information about arch/os combinations for which JREs are available.
+                    // We should not offer a JRE feature for which there isn't really an actual JRE fragment for the current arch/os available.
+                    String filter = requirement.getFilter();
+                    if (!matchesFilterContext(filter))
+                    {
+                      continue LOOP;
+                    }
+                  }
+
                   Repository repository = repositories.get(0);
                   JRE.Descriptor descriptor = new JRE.Descriptor(label + " - " + repository.getURL(), //$NON-NLS-1$
                       Integer.parseInt(matcher.group(1)), //
@@ -1403,6 +1419,35 @@
       JREManager.INSTANCE.setJREs(jreDescriptors);
     }
 
+    @SuppressWarnings("restriction")
+    private boolean matchesFilterContext(String filter)
+    {
+      if (StringUtil.isEmpty(filter))
+      {
+        return true;
+      }
+
+      OS os = wizard.getOS();
+      Map<String, String> filterContext = new LinkedHashMap<String, String>();
+      filterContext.put("osgi.ws", os.getOsgiWS()); //$NON-NLS-1$
+      filterContext.put("osgi.os", os.getOsgiOS()); //$NON-NLS-1$
+      filterContext.put("osgi.arch", os.getOsgiArch()); //$NON-NLS-1$
+
+      org.eclipse.equinox.internal.p2.metadata.InstallableUnit filterContextIU = (org.eclipse.equinox.internal.p2.metadata.InstallableUnit)org.eclipse.equinox.internal.p2.metadata.InstallableUnit
+          .contextIU(filterContext);
+
+      try
+      {
+        IMatchExpression<IInstallableUnit> matchExpression = org.eclipse.equinox.internal.p2.metadata.InstallableUnit.parseFilter(filter);
+        return matchExpression.isMatch(filterContextIU);
+      }
+      catch (RuntimeException ex)
+      {
+        // If the filter can't be parsed, assume it matches nothing.
+        return false;
+      }
+    }
+
     protected boolean shouldReload(EClass eClass)
     {
       return true;
