This is a strange pattern.  Is there a use case for passing in a surface_source that is not self that can't be handled by just creating another instance?