add read-only function