add close capability, deal with retain cycle.