Generalize; implement sink and source