added writable/readable subtyping