moved datasource into separate, block-based object