--- a/src/main/java/net/timbusproject/extractors/modules/tavernaextractor/TavernaExtractor.java
+++ b/src/main/java/net/timbusproject/extractors/modules/tavernaextractor/TavernaExtractor.java
@@ -171,7 +171,7 @@
     //private static Logger LOGGER = LogManager.getLogger("TavernaExtractor");
     private LicenseCheck licenseCheck = new LicenseCheck();
     private IArtifact workflowFile;
-    private IArtifact taverna;
+    private ISystemSoftware taverna;
     private IApplicationComponent workflowApplicationComponent = null;
     private IApplicationFunction callScriptApplicationFunction = null;
     private IApplicationFunction callWebServiceApplicationFunction = null;
@@ -376,17 +376,22 @@
 
         // // BEGIN PATTERN v2.0 UPDATE
         // --- BEGIN Taverna ---
-        taverna = (IArtifact) ArchiUtils.initElement(factory.createArtifact(), "Taverna 2.4", infrastructureFolder,
+        taverna = (ISystemSoftware) ArchiUtils.initElement(factory.createSystemSoftware(), "Taverna 2.4", infrastructureFolder,
                 nodeElements);
         IConstraint GNULicense = ArchiUtils.initElement(factory.createConstraint(),
                 "GNU Lesser General Public License (LGPL) 2.1", motivationFolder, infrastructure);
         ArchiUtils.initRelation(factory.createRealisationRelationship(), taverna, GNULicense, relationsFolder,
                 relations);
+        ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, taverna, relationsFolder,
+                relations);
 
         // Workflow file
         workflowFile = (IArtifact) ArchiUtils.initElement(factory.createArtifact(), "Worfklow File",
                 infrastructureFolder, nodeElements);
-        ArchiUtils.initRelation(factory.createAssociationRelationship(), workflowFile, taverna, relationsFolder,
+        ArchiUtils.initAccessRelation(factory.createAccessRelationship(), taverna,
+                workflowFile, applicationFolder, relations, IAccessRelationship.READ_ACCESS);
+
+        ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, workflowFile, relationsFolder,
                 relations);
 
         workflowFile.getProperties().add(createDepProperties(TavernaExtractor.getInputFileName().toString()));
@@ -408,6 +413,9 @@
         // link relevant dependencies from taverna home to context model
         IArtifact repoBundle = (IArtifact) ArchiUtils.initElement(factory.createArtifact(), "Repo Bundle", infrastructureFolder, nodeElements);
         ArchiUtils.initRelation(factory.createAssociationRelationship(), taverna, repoBundle,
+                relationsFolder, relations);
+
+        ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, repoBundle,
                 relationsFolder, relations);
 
         if(TavernaExtractor.getTavernaHomeRepo().toFile().isDirectory()){
@@ -464,18 +472,21 @@
         // --- BEGIN Java Runtime Environment ---
         ISystemSoftware java = (ISystemSoftware) ArchiUtils.initElement(factory.createSystemSoftware(), "JRE "
                 + JAVA_VERSION + " (" + JAVA_VENDOR + ")", infrastructureFolder, nodeElements);
+
         // FIXME: this must not always be an ORACLE license
         IConstraint oracleLicense = ArchiUtils.initElement(factory.createConstraint(), "Oracle Binary Code License",
                 motivationFolder, infrastructure);
         ArchiUtils.initRelation(factory.createRealisationRelationship(), java, oracleLicense, relationsFolder,
                 relations);
         ArchiUtils.initRelation(factory.createUsedByRelationship(), java, taverna, relationsFolder, relations);
+        ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, java, relationsFolder, relations);
 
         // --- BEGIN OS ---
         ISystemSoftware operatingSystem = (ISystemSoftware) ArchiUtils.initElement(factory.createSystemSoftware(),
                 OS_SYSTEM_INFO, infrastructureFolder, nodeElements);
         ArchiUtils.initRelationNodeElement(factory.createUsedByRelationship(), operatingSystem, java, relationsFolder,
                 nodeElements);
+        ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, operatingSystem, relationsFolder, relations);
         // --- END CREATING DEFAULT ELEMENTS ---
 
         LOGGER.debug("Process Input ports");
@@ -493,6 +504,9 @@
                     relations);
             ArchiUtils.initRelation(factory.createRealisationRelationship(), port_infrastructure, port_data,
                     relationsFolder, relations);
+
+            ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, port_infrastructure,
+                    relationsFolder, relations);
         }
         LOGGER.debug("Process Output ports");
         for (DataflowOutputPort outputPort : dataflow.getOutputPorts()) {
@@ -509,6 +523,9 @@
                     relations);
             ArchiUtils.initRelation(factory.createRealisationRelationship(), port_infrastructure, port_data,
                     relationsFolder, relations);
+
+            ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, port_infrastructure,
+                    relationsFolder, relations);
         }
 
         processorProcessMap = new HashMap<Processor, IBusinessProcess>();
@@ -890,6 +907,9 @@
             ArchiUtils.initRelation(factory.createRealisationRelationship(), toolAsArtifact, appService,
                     relationsFolder, relations);
 
+            ArchiUtils.initRelation(factory.createCompositionRelationship(), desktop, toolAsArtifact,
+                    relationsFolder, relations);
+
             IProperty commandProperty = factory.createProperty();
             commandProperty.setKey("Command");
             commandProperty.setValue(externalInvocation.getConfiguration().getUseCaseDescription().getCommand());
@@ -995,6 +1015,9 @@
                         infrastructureFolder, nodeElements);
 
                 ArchiUtils.initRelationNodeElement(factory.createAssociationRelationship(), script, beanshellScriptDep,
+                        relationsFolder, nodeElements);
+
+                ArchiUtils.initRelationNodeElement(factory.createCompositionRelationship(), beanshellScriptDep,desktop,
                         relationsFolder, nodeElements);
 
                 // Do the license checking
@@ -1644,6 +1667,8 @@
 
     private List<Processor> findStartingProcessors(Dataflow dataflow) {
 
+        LOGGER.debug("find starting processors");
+
         List<OutputPort> outputPorts = new ArrayList<OutputPort>();
         for (Processor processor : dataflow.getProcessors()) {
             for (OutputPort outputPort : processor.getOutputPorts()) {
@@ -1665,6 +1690,9 @@
                 startingProcessors.add(processor);
             }
         }
+
+        LOGGER.debug(startingProcessors.size()+" starting processors found");
+
         return startingProcessors;
     }