     args = ['in'] unless args.length
     res = []
     for port in args
+      if @nodeInstance.isForwardingInport port
+        ip = @__getForForwarding port
+        res.push ip
+        continue
       ip = @ports[port].get @scope
       res.push ip
 
     if args.length is 1 then res[0] else res
+
+  __getForForwarding: (port) ->
+    # Ensure we have a bracket context for the current scope
+    @nodeInstance.bracketContext[@scope] = [] unless @nodeInstance.bracketContext[@scope]
+    prefix = []
+    dataIp = null
+    # Read IPs until we hit data
+    loop
+      # Read next packet
+      ip = @ports[port].get @scope
+      # Stop at the end of the buffer
+      break unless ip
+      if ip.type is 'data'
+        # Hit the data IP, stop here
+        dataIp = ip
+        break
+      # Keep track of bracket closings and openings before
+      prefix.push ip
+
+    # Forwarding brackets that came before data packet need to manipulate context
+    # and be added to result so they can be forwarded correctly to ports that
+    # need them
+    for ip in prefix
+      if ip.type is 'closeBracket'
+        # Bracket closings before data should remove bracket context
+        @result.__bracketClosingBefore = [] unless @result.__bracketClosingBefore
+        context = @nodeInstance.bracketContext[@scope].pop()
+        context.closeIp = ip
+        @result.__bracketClosingBefore.push context
+        continue
+      if ip.type is 'openBracket'
+        # Bracket openings need to go to bracket context
+        @nodeInstance.bracketContext[@scope].push
+          ip: ip
+          ports: []
+          source: port
+        continue
+
+    # Add current bracket context to the result so that when we send
+    # to ports we can also add the surrounding brackets
+    @result.__bracketContext = @nodeInstance.bracketContext[@scope].slice 0
+    # Bracket closings that were in buffer after the data packet need to
+    # be added to result for done() to read them from
+    return dataIp
 
   # Fetches `data` property of IP object(s) for given port(s)
   getData: (args...) ->


    unless input.activated
      debug "#{@nodeId} #{ip.type} packet on #{port.name} didn't match preconditions"
      bracketContext[bracketContext.length - 1].pending = true if @isForwardingInport port
      return

    # Component fired

    ip.scope = @scope if @scope isnt null and ip.scope is null

    if @nodeInstance.isOrdered()
      @result[port] = [] unless port of @result
      @result[port].push ip
      return
    @nodeInstance.outPorts[port].sendIP ip

  # Sends packets for each port as a key in the map
