         .domain([0, 360])
         .range([0, Math.PI * 2])
 
-    zoomToBoundingBoxWidth: (box, duration) ->
+    getZoomDistanceFromBox: (box, distance_scale) ->
+        # See: github.com/mrdoob/three.js/issues/1239
+        v_fov = _radianScale @camera.fov
+        h_fov = Math.atan( Math.tan(v_fov/2) * @camera.aspect )
+
+        # See: stackoverflow.com/questions/2866350/move-camera-to-fit-3d-scene
         width = Math.abs(box.min.x - box.max.x)
-
-        distance_scale = 1.2
-
-        v_fov = _radianScale @camera.fov
-
-        # See: github.com/mrdoob/three.js/issues/1239
-        h_fov = Math.atan( Math.tan(v_fov/2) * @camera.aspect )
-
-        # See: stackoverflow.com/questions/2866350/move-camera-to-fit-3d-scene
-        distance = (width / 2) / Math.tan(h_fov) * distance_scale
-
-        target = new THREE.Vector3(0, 0, - distance)
-
-        @zoomCameraToPosition target, duration
+        return -(width / 2) / Math.tan(h_fov) * distance_scale
+
+    # zoomToBoundingBoxWidth: (box, duration) ->
+    #     width = Math.abs(box.min.x - box.max.x)
+    #
+    #     distance_scale = 1.2
+    #
+    #     v_fov = _radianScale @camera.fov
+    #
+    #     # See: github.com/mrdoob/three.js/issues/1239
+    #     h_fov = Math.atan( Math.tan(v_fov/2) * @camera.aspect )
+    #
+    #     # See: stackoverflow.com/questions/2866350/move-camera-to-fit-3d-scene
+    #     distance = (width / 2) / Math.tan(h_fov) * distance_scale
+    #
+    #     target = new THREE.Vector3(0, 0, - distance)
+    #
+    #     @zoomCameraToPosition target, duration
 
     getWordIndex = (line, word) ->
         expression = if word is "—" then word else "\\b#{word}\\b"

        lineObject._layout = line_layout
        lineObject

    panCameraToPosition3: (target, duration) =>
        new Promise (resolve) =>
            d3.transition()
                .duration duration || 1000


        ########################
        # ANIMATE POETRY CHAIN
        reducer = (prev, curr, index, array) =>
            prev.then =>
                chainObject.add curr
                word = curr._line.prev_connector
                return if ! word? # word.length is 0
                accessor = (obj) -> obj._line.line
                one_word_array = @getLetterObjectsForWord curr, word, accessor
                bbox = @getBBoxFromSubset curr, one_word_array
                return @fadeToArray(1, 1000) one_word_array
                # return @panCameraToBBox bbox, 1000
            .then =>
                bbox = @getBBox chainObject
                x = bbox.center().x
                y = bbox.center().y
                z = bbox.center().z + @getZoomDistanceFromBox bbox, 1.3
                @panCameraToPosition3 new THREE.Vector3(x,y,z), 1000, true
                @fadeToArray(1, 1000) curr.children
            # .then =>
            #     @fadeToArray(1, 1000) curr.children

        first = Promise.resolve()
        lineObjects.reduce reducer, first
