source implementation

will now take a "source" function when initializing the dataset