fully implement IReference