fixed a retain cycle