Fix for multiple copies of the same descriptor in list

I've modified the descriptor read functionality so that it does not add a new descriptor if one with the same descriptor_id is present in the list. Instead it will update the existing entry to prevent multiple entries with the same id.

For good measure, the list is now sorted by descriptor_id in case the descriptors are read out of order.