Likely we just want to let the user supply their own functions that implement something like a transfer function