Add optimized transfer()