made location immutable, used nullable values
used hashes as primary keys