         @_addChain data
 
     _addChain: (text) =>
-        lineObjects = processChain(text)
+        lineObjects = @processChain(text)
             .map (line, index) =>
                 lineObject = @getLineObject(line.line, index)
                 height = lineObject._layout.height

        chainObject = new THREE.Object3D()
        chainObject.add.apply(chainObject, lineObjects)
        chainObject.scale.multiplyScalar(@scaleText)
        @scene.add(chainObject)

        ########################
        # ANIMATE POETRY CHAIN
        #
        reducer = (prev, curr) =>
            prev.then =>
                @fadeToArray(1, 1000) curr.children
            .then => @panCameraToBBox curr, 1000

        lineObjects.reduce reducer, Promise.resolve()

    positionLines = (line, index, array) =>
        return line if index is 0

        line.position.x -= line.children[my_prev_connector_idx].position.x
        line

    processChain: (chain) ->
        chain.map (obj, i, array) =>
            obj.connector_index = obj.line.indexOf obj.connector
            if i > 0
                prev = array[i-1]
                prev_con = prev.connector
                # my_prev_idx = obj.line.indexOf prev_con
                my_prev_idx = @getWordIndex obj.line, prev_con
                prev_idx = prev.connector_index
                obj.prev_connector = prev_con
                obj.my_prev_connector_index = my_prev_idx
