         unless to.component.isReady()
             fromPort = from.component.outPorts[edge.from.port]
             fromPort.downstreamIsGettingReady = true
+            buffer = @setupPortBuffer(from.id)
 
             to.component.once "ready", =>
                 @addEdge edge
-                fromPort.emit("ready")
+
+                # When the "to" component isn't ready, it's an incoming port
+                fromPort = from.component.outPorts[edge.from.port]
+                buffer.ins.push(fromPort)
+
+                # Decrement the count and flush the buffer on empty stack ON NEXT CYCLE
+                next = () =>
+                  buffer.count--
+                  if buffer.count is 0
+                    @flushPortBuffer(from.id)
+
+                setTimeout(next, 0)
+
             return
 
         @connectPort socket, to, edge.to.port, true

        unless from.component
            throw new Error "No component defined for outbound node #{edge.from.node}"
        unless from.component.isReady()
            from.component.once "ready", =>
                @addEdge edge
            return
        to = @getNode edge.to.node
        unless to
            throw new Error "No process defined for inbound node #{edge.to.node}"

    connections: []
    graph: null
    startupDate: null
    portBuffer: {}

    constructor: (graph) ->
        @processes = {}
