 
         root = linesToTree lines
 
+        @addObjects(lines_object)(root)
+
         traverse = (parent) =>
-            parent._text_object ?= @getLineObject(parent.line)
-            # parent._text_object.children.forEach (mesh) ->
-            #     mesh.material.uniforms.opacity.value = 0.5
-            lines_object.add parent._text_object
-
             return if ! parent.children?
-
-            parent.children.forEach (child) =>
-                child._text_object ?= @getLineObject(child.line)
-                child._text_object.children.forEach (mesh) ->
-                    mesh.material.uniforms.opacity.value = 0.5
-                lines_object.add child._text_object
 
             positions_array = d3.shuffle parent.children.concat parent
             parent_index = positions_array.indexOf parent
+            parent_y = parent._text_object.position.y
 
             positions_array.forEach (node, index) =>
                 offset_from_parent = index - parent_index
                 obj = node._text_object
-                height = obj._layout.height
-                obj.position.y = offset_from_parent * (height + LINE_SPACING)
+                line_height = obj._layout.height + LINE_SPACING
+                obj.position.y = parent_y + offset_from_parent * line_height
 
             parent.children.forEach alignToNode(parent)
 

                    idx = _.line.search regex
                    _._text_object.children[idx].position.x
                .reduce (a, b) -> a - b
            child._text_object.position.x += offset

    addLines: (lines) =>
        lines_object = new THREE.Object3D()

                        @camera.position.y = y(t)
                .each "end", resolve

    getTransitionPromise = (interpolator, duration) ->
        (text_object) ->
            new Promise (resolve) ->
                d3.select(text_object).transition()
                    .duration duration or FADE_DURATION
                    .ease "poly", 5
                    .tween "fadeOpacity", ->
                        i = interpolator
                        (t) -> this.children.forEach (mesh) ->
                            mesh.material.uniforms.opacity.value = i(t)
                    .each "end", resolve

    fade = (from, to, duration) ->
        (text_object) ->
            i = d3.interpolate from, to
            getTransitionPromise(i, duration)(text_object)

    fadeOut = (text_object) ->
        i = d3.interpolate(0.5, 0)
