Added rendering abstraction, default renderer which uses lists as optimisation (not very efficient in fact)