added implementations for init, cleanup, read