bug fix: open() now uses block method read()