abstracted some code into member methods (to allow modification)
externalized datasource and columns