use 'weak' is safer than 'assign'