add read complex functionality