First of all I don't even understand the reasoning about needing to call Addressables.Release() as I feel C# memory management should deal with that once nothing is referencing? Why was it decided this way? And wouldn't it been better to use IDisposable if you want release of resource to be explicit? You probably have some good reasoning behind it but it feels very unclear (especially when it's need and when it's not) to me and don't seem very C# and different from how everything else in Unity works. Now for a question related to Addressables.Release() it's a bit unclear (for me) what operations demand that I call Addressables.Release() and it's also unclear what happens to the object once I've called release on it. In my case it's about AsyncOperationHandle. I've got a function calling Addressables.LoadResourceLocationsAsync() to find all addressables mathching some labels. Once that's done I want to return the result - a list of IResourceLocation - back to the caller. According to the documentation I need to Addressables.Release() the AsyncOperationHandle returned from Addressables.LoadResourceLocationsAsync(). What happens to the list of IResourceLocation I got from the AsyncOperationHandle result? Will they be invalid after I release the handle? First I tried just copying the PrimaryKey but realised pretty quickly that wouldn't work as Addressable allow for multiple addresses to share the same PrimaryKey... so I was forced to use IResourceLocation. Now for my next problem, if IResourceLocation is the closest thing to unique identifier for a resource inside Addressable, what's the best way of serialising this in my save file? Would JsonUtility's ToJson()/FromJson() be able to handle IResourceLocation?