TODO: use provider patterns so that the user can use snapshots or current directories as wanted and save some CPU cycles