added SourceFactory