Uses WeakReference for callback instead of strong reference
:qMerge branch 'complete_callbacks'