refactor to use relay-reads