use weak ref for object