I think this source/target pattern works well.