change to retain to prevent weak refs causing EXC_BAD_ACCESS