new source abstraction