diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Generator.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Generator.java
index ddff2ff..dfb4da1 100644
--- a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Generator.java
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/model/util/Generator.java
@@ -28,6 +28,7 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -55,6 +56,7 @@
 import org.eclipse.justj.codegen.model.Touchpoint;
 import org.eclipse.justj.codegen.model.Variant;
 import org.eclipse.justj.codegen.model.util.Generator.Description.Descriptor;
+import org.osgi.framework.Constants;
 
 
 public class Generator
@@ -608,6 +610,28 @@
     return result;
   }
 
+  public static Set<String> getSystemPackages(Variant variant)
+  {
+    String systemPackages = ModelUtil.getAnnotation(variant, ModelUtil.MODEL_PROPERTIES_ANNOTATION_URI, Constants.FRAMEWORK_SYSTEMPACKAGES);
+    if (systemPackages == null)
+    {
+      systemPackages = ModelUtil.getAnnotation(variant.getJVM(), ModelUtil.MODEL_PROPERTIES_ANNOTATION_URI, Constants.FRAMEWORK_SYSTEMPACKAGES);
+    }
+
+    Set<String> result = new TreeSet<>();
+    if (systemPackages != null)
+    {
+      for (String systemPackage : systemPackages.split("\\s*,\\s*"))
+      {
+        if (!systemPackage.isEmpty())
+        {
+          result.add(systemPackage);
+        }
+      }
+    }
+    return result;
+  }
+
   public static String getModelXMLAsPropertyValue(EObject eObject, String nl)
   {
     try (StringWriter stringWriter = new StringWriter(); WriteableOutputStream writeableOutputStream = new URIConverter.WriteableOutputStream(stringWriter, "UTF-8"))
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/Manifest.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/Manifest.java
index 49a0e89..99afef8 100644
--- a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/Manifest.java
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/Manifest.java
@@ -1,8 +1,5 @@
 package org.eclipse.justj.codegen.templates.fragment;
 
-import java.util.Iterator;
-import java.util.Map.Entry;
-import java.util.Set;
 import org.eclipse.justj.codegen.model.*;
 import org.eclipse.justj.codegen.model.util.Generator;
 
@@ -20,33 +17,26 @@
   public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
   protected static final String _1 = ") (osgi.arch=";
   protected static final String _2 = "))";
-  protected static final String _3 = ",";
-  protected static final String _4 = ".qualifier";
-  protected static final String _5 = ";bundle-version=\"";
-  protected static final String _6 = ";singleton:=true";
-  protected static final String _7 = "Automatic-Module-Name: ";
-  protected static final String _8 = "Bundle-Localization: fragment";
-  protected static final String _9 = "Bundle-ManifestVersion: 2";
-  protected static final String _10 = "Bundle-Name: %pluginName";
-  protected static final String _11 = "Bundle-SymbolicName: ";
-  protected static final String _12 = "Bundle-Vendor: %providerName";
-  protected static final String _13 = "Bundle-Version: ";
-  protected static final String _14 = "Eclipse-BundleShape: dir";
-  protected static final String _15 = "Eclipse-PlatformFilter: (& (osgi.os=";
-  protected static final String _16 = "Fragment-Host: ";
-  protected static final String _17 = "Manifest-Version: 1.0";
-  protected static final String _18 = "Provide-Capability: ";
-  protected static final String _19 = "\"";
-  protected static final String _20 = "\";version:Version=\"";
-  protected static final String _21 = "osgi.ee;osgi.ee=\"";
-  protected final String NL_1 = NL + " ";
-  protected final String _22 = _17 + NL + _9 + NL + _11;
-  protected final String _23 = _6 + NL + _13;
-  protected final String _24 = _4 + NL + _8 + NL + _10 + NL + _12 + NL + _16;
-  protected final String _25 = _19 + NL + _14 + NL + _15;
-  protected final String _26 = _2 + NL + _7;
-  protected final String _27 = NL + _18;
-  protected final String _28 = NL_1 + _21;
+  protected static final String _3 = ".qualifier";
+  protected static final String _4 = ";bundle-version=\"";
+  protected static final String _5 = ";singleton:=true";
+  protected static final String _6 = "Automatic-Module-Name: ";
+  protected static final String _7 = "Bundle-Localization: fragment";
+  protected static final String _8 = "Bundle-ManifestVersion: 2";
+  protected static final String _9 = "Bundle-Name: %pluginName";
+  protected static final String _10 = "Bundle-SymbolicName: ";
+  protected static final String _11 = "Bundle-Vendor: %providerName";
+  protected static final String _12 = "Bundle-Version: ";
+  protected static final String _13 = "Eclipse-BundleShape: dir";
+  protected static final String _14 = "Eclipse-PlatformFilter: (& (osgi.os=";
+  protected static final String _15 = "Fragment-Host: ";
+  protected static final String _16 = "Manifest-Version: 1.0";
+  protected static final String _17 = "\"";
+  protected final String _18 = _16 + NL + _8 + NL + _10;
+  protected final String _19 = _5 + NL + _12;
+  protected final String _20 = _3 + NL + _7 + NL + _9 + NL + _11 + NL + _15;
+  protected final String _21 = _17 + NL + _13 + NL + _14;
+  protected final String _22 = _2 + NL + _6;
 
   public String generate(Object argument)
   {
@@ -61,36 +51,20 @@
   String hostName = modelName + '.' + jvmName;
   String fullName = hostName + '.' + os + '.' + arch;
   String version = jvm.getVersion();
-    builder.append(_22);
+    builder.append(_18);
     builder.append(fullName);
-    builder.append(_23);
+    builder.append(_19);
     builder.append(version);
-    builder.append(_24);
+    builder.append(_20);
     builder.append(hostName);
-    builder.append(_5);
+    builder.append(_4);
     builder.append(Generator.getVersionRange(version));
-    builder.append(_25);
+    builder.append(_21);
     builder.append(os);
     builder.append(_1);
     builder.append(arch);
-    builder.append(_26);
+    builder.append(_22);
     builder.append(fullName);
-    builder.append(_27);
-    
-    for (Iterator<Entry<String, Set<String>>> it = Generator.getEECapabilities(version).entrySet().iterator(); it.hasNext();) {
-    Entry<String, Set<String>> entry = it.next();
-    for (Iterator<String> it2 = entry.getValue().iterator(); it2.hasNext();) {
-      String eeVersion = it2.next();
-    builder.append(_28);
-    builder.append(entry.getKey());
-    builder.append(_20);
-    builder.append(eeVersion);
-    builder.append(_19);
-    if (it.hasNext() || it2.hasNext()) {
-    builder.append(_3);
-    }
-    }
-    }
     builder.append(NL);
     return builder.toString();
   }
diff --git a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/P2Inf.java b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/P2Inf.java
index 136f923..7fd77ac 100644
--- a/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/P2Inf.java
+++ b/plugins/org.eclipse.justj.codegen/src/org/eclipse/justj/codegen/templates/fragment/P2Inf.java
@@ -29,42 +29,86 @@
   public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
   protected static final String _1 = " = \\";
   protected static final String _2 = "#";
-  protected static final String _3 = ";";
-  protected static final String _4 = "\\";
-  protected static final String _5 = "instructions.";
-  protected static final String _6 = "properties.0.name = org.eclipse.justj.model";
-  protected static final String _7 = "properties.0.value = ";
+  protected static final String _3 = ".name = ";
+  protected static final String _4 = ".namespace = java.package";
+  protected static final String _5 = ".namespace = osgi.ee";
+  protected static final String _6 = ".version = ";
+  protected static final String _7 = ".version = 0.0.0";
+  protected static final String _8 = ";";
+  protected static final String _9 = "\\";
+  protected static final String _10 = "instructions.";
+  protected static final String _11 = "properties.0.name = org.eclipse.justj.model";
+  protected static final String _12 = "properties.0.value = ";
+  protected static final String _13 = "provides.";
   protected final String NL_1 = NL + "  ";
-  protected final String _8 = "";
-  protected final String _9 = NL + _2 + NL;
-  protected final String _10 = NL + _5;
-  protected final String _11 = NL + _6 + NL + _7;
+  protected final String _14 = "";
+  protected final String _15 = NL + _2 + NL;
+  protected final String _16 = NL + _10;
+  protected final String _17 = NL + _13;
+  protected final String _18 = _5 + NL + _13;
+  protected final String _19 = _4 + NL + _13;
+  protected final String _20 = _7 + NL;
+  protected final String _21 = NL + _11 + NL + _12;
 
   public String generate(Object argument)
   {
     final StringBuilder builder = new StringBuilder();
     Variant variant = (Variant)argument;
-    builder.append(_8);
+  JVM jvm = variant.getJVM();
+  String version = jvm.getVersion();
+    builder.append(_14);
     builder.append(org.eclipse.justj.codegen.model.util.Generator.getCopyright(argument, "# ", NL));
-    builder.append(_9);
+    builder.append(_15);
     Map<String, Set<String>> touchpoints = Generator.getTouchpoints(variant);
   for (Map.Entry<String, Set<String>> entry : touchpoints.entrySet()) {
     String phase = entry.getKey();
-    builder.append(_10);
+    builder.append(_16);
     builder.append(phase);
     builder.append(_1);
     for (Iterator<String> it = entry.getValue().iterator(); it.hasNext();) {
       String instruction = it.next();
     builder.append(NL_1);
     builder.append(instruction);
-    builder.append(_3);
+    builder.append(_8);
     if (it.hasNext()) {
-    builder.append(_4);
+    builder.append(_9);
     }
     }
     builder.append(NL);
     }
-    builder.append(_11);
+    int propertyCount = 0;
+  for (Map.Entry<String, Set<String>> entry : Generator.getEECapabilities(version).entrySet()) {
+    String eeName = entry.getKey();
+    Set<String> versions = entry.getValue();
+    for (String eeVersion : versions) {
+      int capabilityNumber = propertyCount++;
+    builder.append(_17);
+    builder.append(capabilityNumber);
+    builder.append(_18);
+    builder.append(capabilityNumber);
+    builder.append(_3);
+    builder.append(eeName);
+    builder.append(_17);
+    builder.append(capabilityNumber);
+    builder.append(_6);
+    builder.append(eeVersion);
+    builder.append(NL);
+    }
+    }
+    Set<String> systemPackages = Generator.getSystemPackages(variant);
+  for (String systemPackage : systemPackages) {
+    int capabilityNumber = propertyCount++;
+    builder.append(_17);
+    builder.append(capabilityNumber);
+    builder.append(_19);
+    builder.append(capabilityNumber);
+    builder.append(_3);
+    builder.append(systemPackage);
+    builder.append(_17);
+    builder.append(capabilityNumber);
+    builder.append(_20);
+    }
+    builder.append(_21);
     builder.append(Generator.getModelXMLAsPropertyValue(variant, NL));
     return builder.toString();
   }
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/MANIFEST.MF.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/MANIFEST.MF.jet
index 1052edc..253c72b 100644
--- a/plugins/org.eclipse.justj.codegen/templates/fragment/MANIFEST.MF.jet
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/MANIFEST.MF.jet
@@ -1,4 +1,9 @@
-<%@jet package="org.eclipse.justj.codegen.templates.fragment" class="Manifest" imports="java.util.Iterator java.util.Map.Entry java.util.Set org.eclipse.justj.codegen.model.* org.eclipse.justj.codegen.model.util.Generator" builder="StringBuilder builder = new StringBuilder()" minimize="true"%>
+<%@jet
+  package="org.eclipse.justj.codegen.templates.fragment"
+  class="Manifest"
+  imports="org.eclipse.justj.codegen.model.* org.eclipse.justj.codegen.model.util.Generator"
+  builder="StringBuilder builder = new StringBuilder()"
+  minimize="true"%>
 <%Variant variant = (Variant)argument;
   String os = variant.getOs();
   String arch = variant.getArch();
@@ -20,11 +25,3 @@
 Eclipse-BundleShape: dir
 Eclipse-PlatformFilter: (& (osgi.os=<%=os%>) (osgi.arch=<%=arch%>))
 Automatic-Module-Name: <%=fullName%>
-Provide-Capability: <%%>
-<%for (Iterator<Entry<String, Set<String>>> it = Generator.getEECapabilities(version).entrySet().iterator(); it.hasNext();) {
-    Entry<String, Set<String>> entry = it.next();%>
-  <%for (Iterator<String> it2 = entry.getValue().iterator(); it2.hasNext();) {
-      String eeVersion = it2.next();%>
- osgi.ee;osgi.ee="<%=entry.getKey()%>";version:Version="<%=eeVersion%>"<%if (it.hasNext() || it2.hasNext()) {%>,<%}%>
-  <%}%>
-<%}%>
diff --git a/plugins/org.eclipse.justj.codegen/templates/fragment/p2.inf.jet b/plugins/org.eclipse.justj.codegen/templates/fragment/p2.inf.jet
index 61c4bb2..d79b26a 100644
--- a/plugins/org.eclipse.justj.codegen/templates/fragment/p2.inf.jet
+++ b/plugins/org.eclipse.justj.codegen/templates/fragment/p2.inf.jet
@@ -14,7 +14,9 @@
   imports="java.util.* java.util.Iterator org.eclipse.justj.codegen.model.* org.eclipse.justj.codegen.model.util.Generator"
   builder="StringBuilder builder = new StringBuilder()"
   minimize="true"%>
-<%Variant variant = (Variant)argument;%>
+<%Variant variant = (Variant)argument;
+  JVM jvm = variant.getJVM();
+  String version = jvm.getVersion();%>
 <%@include file="../copyright.properties.jetinc"%>
 
 <%Map<String, Set<String>> touchpoints = Generator.getTouchpoints(variant);
@@ -27,5 +29,25 @@
   <%}%>
 
 <%}%>
+<%int propertyCount = 0;
+  for (Map.Entry<String, Set<String>> entry : Generator.getEECapabilities(version).entrySet()) {
+    String eeName = entry.getKey();
+    Set<String> versions = entry.getValue();
+    for (String eeVersion : versions) {
+      int capabilityNumber = propertyCount++;%>
+provides.<%=capabilityNumber%>.namespace = osgi.ee
+provides.<%=capabilityNumber%>.name = <%=eeName%>
+provides.<%=capabilityNumber%>.version = <%=eeVersion%>
+
+  <%}%>
+<%}%>
+<%Set<String> systemPackages = Generator.getSystemPackages(variant);
+  for (String systemPackage : systemPackages) {
+    int capabilityNumber = propertyCount++;%>
+provides.<%=capabilityNumber%>.namespace = java.package
+provides.<%=capabilityNumber%>.name = <%=systemPackage%>
+provides.<%=capabilityNumber%>.version = 0.0.0
+
+<%}%>
 properties.0.name = org.eclipse.justj.model
 properties.0.value = <%=Generator.getModelXMLAsPropertyValue(variant, NL)%>
\ No newline at end of file
