i wanted to destroy the objects in the same order as the original code  while looking back at the code  i think my first patchset destroy them too early which could introduce other issues  so instead in patchset i have used scopedclosurerunner to ensure objects are destroyed in reverse order of the declaration and get the same ordering as before your change 