performance optimization: switched to d3js for a dramatic boost