Feature/chart abstraction

It's a little more than just the chart abstraction, I'll start proper feature branching now.