I have done weak pointer logic, it is not pretty.