                 .attr("stroke", (d,i) -> segcolor[i % mean.length])
                 .attr("stroke-width", segstrokewidth)
                 .attr("shape-rendering", "crispEdges")
-                .on("mouseover.paneltip", tip.show)
-                .on("mouseout.paneltip", tip.hide)
+
+        direction = if horizontal then "north" else "east"
+        tipfunc = (d,i) ->
+                      index = i % mean.length
+                      f = d3panels.formatAxis([low[index],mean[index]], 1)
+                      "#{f(mean[index])} (#{f(low[index])} - #{f(high[index])})"
+        tip = d3panels.tooltip_create(d3.select("body"), segments, {direction:direction,tipclass:tipclass}, tipfunc)
 
         # move box to front
         myframe.box().raise()

        xscale = myframe.xscale()
        yscale = myframe.yscale()

        tip = d3.tip()
                .attr('class', "d3-tip #{tipclass}")
                .html((d,i) ->
                      index = i % mean.length
                      f = d3panels.formatAxis([low[index],mean[index]], 1)
                      "#{f(mean[index])} (#{f(low[index])} - #{f(high[index])})")
                .direction(() ->
                    return 'n' if horizontal
                    'e')
                .offset(() ->
                    return [-10,0] if horizontal
                    [0,10])
        svg.call(tip)

        segmentGroup = svg.append("g").attr("id", "segments")

        # lines from low to high

                .attr("stroke", (d,i) -> vertsegcolor[i])
                .attr("stroke-width", segstrokewidth)
                .attr("shape-rendering", "crispEdges")

        # lines at low, mean, and high
        yval = mean.concat(low,high)
