added direct buffer-buffer copy