Please return a function instead of an instance so that we can always have clean instances while unit testing.