read from buffer final hopefully