Underneath there is a list of things that are calculated using double hashing (with the same hash function):
- generating the checksum in a Bitcoin address
- hashing the block in a merkle tree
- linking transaction outputs and inputs
- hash of the block header (and thus the proof of work and the link to the previous block)
Why does it use double hashing and is it really needed?