revise type to use Source and Target