diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java
index 4134783..5637ced 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java
@@ -22,6 +22,8 @@
 import java.util.HashSet;
 import java.util.Map;
 
+import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.core.DataLink;
 import org.apache.taverna.scufl2.api.core.Workflow;
 import org.apache.taverna.scufl2.api.core.Processor;
 import org.apache.taverna.scufl2.api.container.WorkflowBundle;
@@ -36,6 +38,8 @@
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 
+import org.apache.taverna.scufl2.api.port.ReceiverPort;
+import org.apache.taverna.scufl2.api.port.SenderPort;
 import org.apache.taverna.scufl2.cwl.components.Process;
 import org.apache.taverna.scufl2.cwl.components.*;
 
@@ -179,23 +183,44 @@
         Set<OutputWorkflowPort> outputs = new HashSet<>(workflowProcess.getWorkflowOutputs().values());
         workflow.setInputPorts(inputs);
         workflow.setOutputPorts(outputs);
-        Set<InputPort> inputPorts = workflowProcess.getInputPorts();
-        Set<OutputPort> outputPorts = workflowProcess.getOutputPorts();
+        Set<InputPort> inputPorts = workflowProcess.getInsideInputPorts();
+        Set<OutputPort> outputPorts = workflowProcess.getInsideOutputPorts();
+
+        NamedSet<InputProcessorPort> inputProcessorPorts = new NamedSet<>();
+        NamedSet<OutputProcessorPort> outputProcessorPorts = new NamedSet<>();
 
         for(Process process: workflowProcess.getProcesses()) {
+            Processor processor;
             if(process instanceof WorkflowProcess) {
                 Workflow childWorkflow = convertWorkflowProcess((WorkflowProcess) process, bundle); // TODO: Add nested relationship
-                Processor processor = new Processor(workflow, childWorkflow.getName()); // TODO: Check if we want the processor to have the same name as the childworkflow
+                processor = new Processor(workflow, childWorkflow.getName()); // TODO: Check if we want the processor to have the same name as the childworkflow
                 createProcessPortsFromWorkflow(processor, childWorkflow);
                 bundle.getWorkflows().add(childWorkflow);
             } else if(process instanceof CommandLineTool) {
-                Processor processor = convertCommandLineTool((CommandLineTool) process);
+                processor = convertCommandLineTool((CommandLineTool) process);
                 workflow.getProcessors().add(processor);
             } else {
                 assert(process instanceof Reference);
-                Processor processor = convertReference((Reference) process);
+                processor = convertReference((Reference) process);
                 workflow.getProcessors().add(processor);
             }
+            inputProcessorPorts.addAll(processor.getInputPorts());
+            outputProcessorPorts.addAll(processor.getOutputPorts());
+        }
+
+        // DataLinks
+        for(InputPort port: inputPorts) {
+            String senderName = port.getSource();
+            String destName = port.getName();
+            SenderPort senderPort = outputProcessorPorts.getByName(senderName);
+            if(senderPort == null) { // Source is one of the Workflow inputs
+                senderPort = workflow.getInputPorts().getByName(senderName);
+            }
+            ReceiverPort receiverPort = inputProcessorPorts.getByName(destName);
+            if(receiverPort == null) { // Destination is one of the Workflow outputs
+                receiverPort = workflow.getOutputPorts().getByName(destName);
+            }
+            new DataLink(workflow, senderPort, receiverPort);
         }
 
         return workflow;
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
index 5447e8c..6276278 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
@@ -27,6 +27,10 @@
     protected Set<InputPort> inputPorts = new HashSet<>();
     protected Set<OutputPort> outputPorts = new HashSet<>();
 
+    protected Set<InputPort> insideInputPorts = new HashSet<>();
+
+    protected Set<OutputPort> insideOutputPorts = new HashSet<>();
+
 
     public abstract void parse();
 
@@ -46,4 +50,20 @@
         this.outputPorts = outputs;
     }
 
+    public Set<InputPort> getInsideInputPorts() {
+      return insideInputPorts;
+    }
+
+    public void setInsideInputPorts(Set<InputPort> insideInputPorts) {
+      this.insideInputPorts = insideInputPorts;
+    }
+
+    public Set<OutputPort> getInsideOutputPorts() {
+      return insideOutputPorts;
+    }
+
+    public void setInsideOutputPorts(Set<OutputPort> insideOutputPorts) {
+      this.insideOutputPorts = insideOutputPorts;
+    }
+
 }
\ No newline at end of file
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
index 3a19d3a..263455d 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
@@ -104,6 +104,8 @@
             Process process = step.getRun();
             process.setInputPorts(step.getInputs());
             process.setOutputPorts(step.getOutputs());
+            insideInputPorts.addAll(step.getInputs());
+            insideOutputPorts.addAll(step.getOutputs());
             result.add(process);
         }
 
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
index 56885b2..a6a803f 100644
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
@@ -19,6 +19,7 @@
 package org.apache.taverna.scufl2.cwl;
 
 
+import org.apache.taverna.scufl2.api.core.DataLink;
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 
@@ -86,5 +87,10 @@
         Processor processor = workflow.getProcessors().iterator().next();
         assertEquals(1, processor.getInputPorts().size());
         assertEquals(0, processor.getOutputPorts().size());
+
+        assertEquals(1, workflow.getDataLinks().size());
+        DataLink dataLink = workflow.getDataLinks().iterator().next();
+        assertEquals("name", dataLink.getReceivesFrom().getName());
+        assertEquals("text", dataLink.getSendsTo().getName());
     }
 }
diff --git a/taverna-scufl2-cwl/src/test/resources/hello_world.cwl b/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
index 4207afa..eee01dd 100644
--- a/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
+++ b/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
@@ -32,6 +32,6 @@
 
     inputs:
       - id: text
-        source: "#x/name"
+        source: "name"
 
     outputs: []
